この記事は GlassFish Advent Calendar 2014 の 22 日目です。
昨日はhasunumaさん(@btnrouge)による「HK2 の使い方(後編) - Programming Studio」でした。
昨今GlassFishの勢いがなくなった、といった噂を一部国内で耳にしますが、果たして本当にそうなんでしょうか?海外での状況など色々と幅広く調べた上でそういった認識を持たれるならばいいのですが、、、
今年のJavaDay Tokyoで、US OracleのJava EE EvangelistであるRezaさんがGlassFishの開発は継続していくよ、というお話をされていました。そして、その時に宣言されていた通り、JavaOne前にGlassFish 4.1も出ました。
また、先月11月に、AWSのElastic BeanstalkでJava 8 + GlassFish 4.1をサポートしたよ、というニュースがありました。
AWS Elastic Beanstalk Supports Python 3.4, Java 7 GlassFish 4.0, and Java 8 GlassFish 4.1
勢いがないなら、本当にAWSがサポートしたりするんでしょうか…?
Tomcatだけのまま、あるいはWildFlyなどのサポートを先にしてもいいのでは、とも。
そんなわけで、個人的にはWildFlyも当然ウォッチしつつ、GlassFishは普通に使っていく予定です。
ということで、今日はAWSのElastic BeanstalkにJava 8 + Java EE 7のアプリをデプロイしてみました。
Elastic BeanstalkはAmazon Web Services(AWS)が提供するPaaSのサービスです。英語のWikipediaがシンプルでわかりやすい説明でした。
AWS Elastic Beanstalk - Wikipedia, the free encyclopedia
では早速開始。まずはAWSのメニューで真ん中らへんにあるElastic Beanstalkを選択します。
私の場合、初めてElastic Beansktalkを利用したので以下の画面となりました(2回目以降は少し違う画面に)
Launch Nowボタンの上にあるプルダウンをみてみると…GlassFishがあります!
しかもDockerなのか。
GlassFishを選んで、Launch Nowボタンを押す。それだけです(^^;
(ちなみに2回目以降は、メニューが色々出てきました。Load balancingにするか、など。もちろん、ここでも以下画面にあるChange Defaultsを選べば変えられます。)
あとはグルグルLaunching処理を待って
グリーンになったら環境構築完了です。Upload and Deployボタンを押します。
あとはデプロイするwarファイルを選ぶだけです。簡単!
今回、アプリケーションは次のような非常に簡易なものを用意しました。
Java EE 7(JSF + CDI)で、JSFのリッチUIサードパーティ「PrimeFaces」のAutoCompleteを使ったサンプルです。
Java 8のstreamを利用して、あらかじめ用意したリストの中から、テキストに入力された文字を含む選択肢のみをフィルタして表示するものです。
CDIの管理Beanは次のコード。
package jp.co.kke.autocomp;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import javax.inject.Named;
import javax.faces.view.ViewScoped;
import lombok.Getter;
import lombok.Setter;
@author
@Named(value = "autoCompBean")
@ViewScoped
public class AutoCompBean implements Serializable{
@Getter
private List<String> listActress;
@Getter @Setter
private String selectedActress;
@PostConstruct
public void init(){
listActress = Arrays.asList("MakiHorikita", "MaiShiraishi", "KannaHashimoto","TsubasaHonda");
}
public List<String> filter(String word){
return listActress.stream()
.filter(a -> a.contains(word))
.collect(Collectors.toList());
}
}
ビューのfaceletsのbodyはこんな感じです。
<h:body>
<h:form>
<p:autoComplete value="#{autoCompBean.selectedActress}"
completeMethod="#{autoCompBean.filter}" />
</h:form>
</h:body>
ローカルで動かすと…「ma」を含む選択肢だけが表示されて、ちゃんとフィルタされてますね。
先のAWS Beanstalkにデプロイしたものは…全く同じです。ちゃんとJava 8で動いてる!
ということで、ちょっとしたサンプルを公開したい場合でも非常に簡単に利用できそうです。
個人的にはCloudBeesで同様のことが出来ていたのが、今はPaaS提供がなくなってしまったので、AWSのBeanstalkいいなぁという感じです。
明日からはYumi Hiraokaさん(@yumix_h)です!!