Challenge Engineer Life !

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

Payara-Examplesで始めるJava EE 環境準備編

この記事はJava EE Advent Calendar 2017の 18 日目です。

今日と明日のエントリでは、PayaraがGitHubで公開している「Payara-Examples」でJava EEを体験する方法について書きたいと思います。今日はまず初めに環境構築についてNetBeansを例に紹介します。

github.com

Payaraとは?

「Payara」はGlassFish から派生した新しい Java EE アプリケーションサーバーです。イギリスに本社があるPayara Services Ltdが提供しています。

今年Payaraメンバーが来日してPayara Meetupのイベントを開催したり、GlassFishユーザグループの会長である蓮沼さん(@khasunuma)がPayaraにジョインされたり、日本語のパンフレットブログを提供したり、と徐々に盛り上がりをみせています。

kikutaro777.hatenablog.com

Payara x IDE

Payaraを使った開発環境の構築手順は「Beginner's Guides」にまとまってます。メジャーなIDE記事について以下にピックアップします。

IntelliJ IDEA

blog.payara.fish

NetBeans

blog.payara.fish

上記NetBeansの例ではPayaraプラグインを入れてますが、プラグインなしでも設定可能です。Java EEもPayaraもNetBeansも初めて、という方を対象にプラグインを使わずに設定する手順を次に紹介します。

Payara x NetBeans

※確認環境はWindows 10 Pro, JDK 1.8.0 u112, NetBeans 8.2です。

Payaraプラグインを使わない場合

1. Payaraサーバをダウンロードします。
f:id:kikutaro777:20171217132531p:plain

2. メニューの「ツール」から「サーバー」を選択します。
f:id:kikutaro777:20171217132155p:plain

3. 「サーバーの追加」を押します。
f:id:kikutaro777:20171217132241p:plain

4. サーバーの「GlassFish Server」を選択して、名前を付けます。ここでは「Payara」としました。
f:id:kikutaro777:20171217132318p:plain

5. 最初にダウンロードしたPayaraサーバの解凍先の中にあるPayaraフォルダを指定します。NetBeansが認識すると「次」ボタンが押せるようになります。
f:id:kikutaro777:20171217132348p:plain

6. ドメインはデフォルトで作成されているdomain1のまま「終了」します。別名を付けた新しいドメインを作成しても構いません。
f:id:kikutaro777:20171217132604p:plain

7. サーバの追加完了です。
f:id:kikutaro777:20171217132644p:plain

アイコンがGlassFishですが、これで設定完了です。

Payaraプラグインを使う場合

Payaraプラグインをインストールすると、サーバーの選択画面でPayara Serverが選択できるようになります。
f:id:kikutaro777:20171217134746p:plain

追加後のアイコンもPayaraです。
f:id:kikutaro777:20171217134812p:plain

プラグインのインストールは手間がかからないので、お試しではなく、がっつり使う予定の方は最初からこちらをインストールしておくのが良いと思います。

"Payara Meetup" in Japan, Report Blog !

Yesterday, "Payara Meetup" was hold by GlassFish Users Group Japan at Microsoft! It was great event ! I'm glad to support the event as one of the staffs.
glassfish.doorkeeper.jp

This event came from the communication between Hasunuma-san and Payara members (Steve-san & Dominika-san). Hasunuma-san is leader of GlassFish Users Group Japan, also he has focused on Payara from the beginning.

The members of GlassFish Users Group Japan prepared this event from early March. This is the first time Payara comes to Japan, so Hasunuma-san leads us to make this event better.

There were four sessions.

  • 'From Raspberry PI to Cloud Scale Data Grid. Payara Micro is simple but powerful.' Steve Millidge (Founder and Director of Payara)
  • 'Enterprise Payara on Azure' (Demonstration) Yoshio Terada (Java Champion/Microsoft Japan)
  • 'Interviews of Payara Users in Japan' Kenji Hasunuma (GlassFish Users Group Japan)
  • "Payara Q&A" -- Questions from participants, Moderator: Yoichi Kikuta (GlassFish Users Group Japan)

Payara also prepared great gift for all participants. Everyone can get Payara T-shirt!! Awesome!

f:id:kikutaro777:20170607233432j:plain

Also get special stickers! Why special ? Check the Japanese sentence "Payara ワールドツアー". Yeah! These are only for this event!
One of stickers illustrated Japanese Mount Fuji ! Dominika-san told me her husband designed these!

f:id:kikutaro777:20170606192518j:plain

There were many participants at the event, very excited!

Steve-san showed us how powerful and scalable Payara Micro is. It was very interesting that EJB works on Raspberry PI :) After his presentation, I wanted to buy Raspberry PI and try Payara Micro on it.

Terada-san also had great presentation. I think all Japanese Java developers know him as Java Evangelist / Java Champion. I really appreciate Terada-san, because he provided us the room of Microsoft and helped us very much in spite of he is really busy.

Agetsuma-san, member of GlassFish Users Group Japan, tweeted following. It's totally agree.

Third session, "Interviews of Payara Users in Japan", was very interested, too. I was amazed that Uragami-san participated from Osaka for this interview!! Thank you for coming!! I'll go to Osaka in two weeks later for participating KANJAVA PARTY 2017.

kanjava.connpass.com

Unfortunately, one of interviewees Kazuhira-san couldn't participate because of work. He is Hazelcast Hero and Payara use Hazelcast as cache feature, so it looks good if they meet. Hope to next time.

Tada-san, he also a member of GlassFish User Group Japan, was interviewee too. He is famous trainer of Java, recently Spring. I heard he have great seminar with Pivotal, check it out!

The final session "Payara Q&A", I moderated. I've collected the questions in advance and send to Payara. But, you know, they are very busy because of they had world tour at another country (previously Korea), so I got the answers previous day. It was pretty tough for me, but 頑張った(*´Д`) The following is my slide.

All of tweets in Payara Meetup have already collected in the togetter below.

togetter.com

Thank you for working this, Yamada-san!! Not only this one, Yamada-san strongly helped many things for this event, thank you so much!!

After finishing all session, there is small party at the room. About 20 people joined, nice!

I enjoyed talking with Steve-san and Dominika-san and felt glad because they look like satisfy this event!

I wish Paraya come to Japan again!!! Thanks,

GlassFish Users Group Japan勉強会で発表させて頂きました #glassfish_jp

6月に@khasunumaさんから「GlassFish勉強会で発表しませんか?」とお声かけを頂いてから早3カ月あまり。

昨日、青山の日本オラクルさんで行われた

glassfish.doorkeeper.jp

にて発表させて頂きました!m(_ _)m

イベントレポは既に@mike_neckさんがまとめられています!ありがとうございます。

mike-neck.hatenadiary.com

というわけで、私は感想だけ(^^;ちなみにスライドは以下にアップしています。

堀北真希さん結婚後、はじめての社外発表だったため、自己紹介が長めでしたm(_ _)m無事アイスブレイクになったかどうか。

PaaSと絡めてJava EEも結構カジュアルに使えるんですよー、という気持ちも込めた発表を目指した感じでした。

Payara含め、色々遊ぶ方が増えれば幸いです。

……

今回のイベントで初めて、会場準備や受付を少しお手伝いさせて頂きました。わかってはいたものの、あらためてJJUGさんとかその他勉強会での運営の方々の大変さや手際の良さとかを感じました…。

そしてOracle Aceな山田さんにメッチャ色々手伝ってもらってしまって(^^;;感謝感謝です。
手伝ってもらいながらもTogetterまとめされてて、ホントすごい(>_<;

togetter.com


受け付けやってて@suke_masaさんや@n_agetsuさんの発表が聞けず残念(^^;連休でスライド拝見せねば!

www.slideshare.net

www.slideshare.net

www.slideshare.net

懇親会では、以前JJUGイベントで知り合った方々含めて、色んな方とお話できて良かったです。

今日は特にTwitter上でよくお世話になっていた@shimashima35さんとお会いできて良かったなーと(^^)

ファーストコンタクトは受付でしたw

あと帰り道、てんてんさん(@tenten0213)やしょぼちむさん(@syobochim)とお話できて良かった(>_<;;

うらがみさんも大阪からわざわざいらしていたり、GlassFishすげー。

またGlassFishイベントで色々お手伝いできたらいいなーと思います!

PayaraMicro on Heroku !

I'm newbie both Payara and Heroku. Though I tried to play with these for preparing my presentation in Japanese GlassFish User Group event.

glassfish.doorkeeper.jp

About one month ago, I participated Japanese Salesforce event. It was called "Salesforce Summer".eventjp.salesforce.com

At the event, I saw Heroku demonstration. This is the reason why I started to use Heroku.After the event, I checked Heroku site and found good Java tutorial. In the tutorial, the sample Java web application used Spark.

I thought that ... if I use Payara Micro, is it possible to deploy Java EE application to Heroku ?

Finally, it could. Here is procedures.

Getting Started with Java on Heroku

Firstly, I started "Getting Started with Java on Heroku". The tutorial is very polite, so it's easy to do.
f:id:kikutaro777:20150914011127j:plain

  • Installing Toolbelt (for Windows on my environment)
  • heroku login

After that, I cloned "java-getting-started" from github.

git clone https://github.com/heroku/java-getting-started.git

And changed directory.

cd java-getting-started

Next

heroku create
git push heroku master
heroku ps:scale web=1
heroku open

Finally I confirmed the deployed page.

f:id:kikutaro777:20150915233153j:plain

These procedures are same as the tutorial.

PayaraMicro on Heroku

I used the same project, it means I used "java-getting-started" project cloned from GitHub.
It's kind of cheat I think. Normally, it had better create as new project.

Firstly, I changed pom.xml.

<dependency>
    <groupId>fish.payara.extras</groupId>
    <artifactId>payara-micro</artifactId>
    <version>4.1.153</version>
    <type>jar</type>
</dependency>

Also, I edited the code like this.

import fish.payara.micro.BootstrapException;
import fish.payara.micro.PayaraMicro;

public class Main {
  public static void main(String[] args) throws BootstrapException {
      PayaraMicro.getInstance()
                .setHttpPort(Integer.parseInt(System.getenv("PORT")))
                .addDeployment("DeployTarget.war")
                .bootStrap();
  }
}

It's very important to call "setHttpPort(Integer.parseInt(System.getenv("PORT")))", because the port of HTTP on Heroku is binded random.

If that helps, I used NetBeans IDE.

f:id:kikutaro777:20150914012105j:plain

After changing code, I copied from WAR file which is target of deploy to this project.
The War was created by Java EE 7, but I used only JSF and CDI.

Finally, I committed the code and "git push heroku master". Everything was done.

Here is my deployed Java EE app with PayaraMicro on Heroku :)
f:id:kikutaro777:20150915233036j:plain

Enjoy!

JPAのCDI Entity Listenersを試してみた

久しぶりにJPAネタです。

Java EE 7のJPA 2.1からEntity ListenerでCDIが利用できるようになりました。

EclipseLinkの例だと@EJBで書かれてます。
EclipseLink/Release/2.5/JPA21 - Eclipsepedia

この例だと、うーんロガーをわざわざEJBでかぁ…(^^;という感じが個人的にしたので、前にきしださんが書いていたプロデューサー使う方法でやってみました。d.hatena.ne.jp

LoggerProducerはそのまんまお借りして

@Named
@Dependent
public class LoggerPoducer {

    @Produces
    public Logger getLogger(InjectionPoint ip){
        return Logger.getLogger(ip.getMember().getDeclaringClass().getName());
    }
}

EclipseLinkの例にあったLoggerEntityLisetenerの@EJBを@Injectへ

public class LoggerEntityListener {
   @Inject //ProducerでInjectされる
   private Logger logger;
    
   @PrePersist
   public void prePersist(Object object) {
       logger.info("prePersist");
   }
   
   @PostPersist
   public void postPersist(Object object){
       logger.info("postPersist");
   }
   
   @PreDestroy
   public void preDestroy(){
       logger.info("preDestroy");
   }
   
   @PostConstruct
   public void postConstruct(){
       logger.info("postConstruct");
   }
}

そして、対象のEntityクラスに@EntityListenersでLoggerEntityListenerを指定しました。

@Entity
@EntityListeners({LoggerEntityListener.class})

EclipseLinkは2.5.2、APサーバはGlassFish 4.1で試したのですが…なぜかloggerがnullで上手くインジェクトされませんでした。

色々調べていたら以下に辿り着き

github.com

上記に以下リンクがありますが、GF4.1の問題っぽい?現象としてはこれと全く同じでした。
[GLASSFISH-21195] CDI Injection in Entity Listener - NullPointerException - Java.net JIRA

さらに読むとEclipseLink2.5.2の問題じゃないかみたいな。
Bug 438105 – Logic bug in EntityListenerInjectionManagerImpl

で、最終的には、最新のPayaraにはEclipseLink2.6が入って、それで動くよとのこと。

ということで、初めてPayaraをダウンロードしました。中はホント完全にGlassFishなんですね(^^;
Pre-Release Builds

利用したのは「Payara-web 4.1.153 (Web Profile)」です。

そして実行すると…動きました!

f:id:kikutaro777:20150618225652j:plain

GlassFishをPayaraに変えるのは全く手間がなさそうです。普通に動くし、今回のようにPayaraのほうが対応が早いケースがあるのを知ると、ちょっと真面目にPayara追っていかないとなーと。

前から既に追っているはすぬまさんのブログで勉強していかねば!

www.coppermine.jp

既にめっちゃPayaraについて書かれている(*´Д`)さすがすぎる

はすぬまさんのブログで「Payara」のタグがついている記事の検索結果
Programming Studio - 検索結果

CDI Entity Listenersについての日本語参考情報は以下。

etc9.hatenablog.com

qiita.com

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