Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

AWS Elastic BeanstalkでJava 8 & GlassFish 4.1!

この記事は 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を選択します。
f:id:kikutaro777:20141219172544j:plain

私の場合、初めてElastic Beansktalkを利用したので以下の画面となりました(2回目以降は少し違う画面に)
f:id:kikutaro777:20141219172604j:plain

Launch Nowボタンの上にあるプルダウンをみてみると…GlassFishがあります!
しかもDockerなのか。
f:id:kikutaro777:20141219172611j:plain

GlassFishを選んで、Launch Nowボタンを押す。それだけです(^^;
(ちなみに2回目以降は、メニューが色々出てきました。Load balancingにするか、など。もちろん、ここでも以下画面にあるChange Defaultsを選べば変えられます。)
f:id:kikutaro777:20141219172623j:plain

あとはグルグルLaunching処理を待って
f:id:kikutaro777:20141219172635j:plain

グリーンになったら環境構築完了です。Upload and Deployボタンを押します。
f:id:kikutaro777:20141219172642j:plain

あとはデプロイするwarファイルを選ぶだけです。簡単!
f:id:kikutaro777:20141219172705j:plain

今回、アプリケーションは次のような非常に簡易なものを用意しました。
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 kikuta
 */
@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」を含む選択肢だけが表示されて、ちゃんとフィルタされてますね。
f:id:kikutaro777:20141219172843j:plain

先のAWS Beanstalkにデプロイしたものは…全く同じです。ちゃんとJava 8で動いてる!
f:id:kikutaro777:20141219172854j:plain

ということで、ちょっとしたサンプルを公開したい場合でも非常に簡単に利用できそうです。
個人的にはCloudBeesで同様のことが出来ていたのが、今はPaaS提供がなくなってしまったので、AWSのBeanstalkいいなぁという感じです。

明日からはYumi Hiraokaさん(@yumix_h)です!!

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村