JavaEE & GlassFish勉強会に行ってきました
Java EE 7 & GlassFish について語ろう - DevLOVE関西 | Doorkeeperに行ってきました。
- 最初に@yoshioteradaさんのGlassFishのお話
GlassFish v1からの歴史のお話、v4が2013年6月12日にリリース、ブログに詳細が書かれていましたJava EE 7 ローンチ (US 時間: 06/12 午前9時) | 寺田 佳央 - Yoshio Terada
GlassFish v3では、開発者が以前のバーションよりさらにレベルの高い技術者に入れ替わったことにより内部実装が刷新されたそうです。
特にOSGI対応でより柔軟になったことや、OSGIカスタムモジュール作成が可能になったそうです!OSGi | 寺田 佳央 - Yoshio Terada
OSGIはちょっと興味があるので試してみます。
後は、WebSocket、JavaEE7ではJMS送信が簡単に、JavaEE8ではcloud対応、JavaEE7では並列処理が可能に(ダイナミックプロキシ)など盛りだくさんでとても楽しかったです。
そうそう、GlassFishの画面はJSFで作成されているそうです。
GlassFish関連情報が寺田さんのブログGlassFish 関連 | 寺田 佳央 - Yoshio Teradaにありました、とても参考になります!
- 次に@backpaper0さんのTomcatをやめてGlassFishを使い始めたお話
JAX-RS、Doma Doma - Domaプロジェクトへようこそ、Viewはjersey-mvc Chapter 20. MVC Templates
GlassFishではasadminコマンドでdeploy時にバージョンを指定できるなど、実際に開発で使用した経験によるお話ですごく納得できるお話でした。
ブログJAX-RSとかの話 — 裏紙にも書かれています。以前に写経して勉強させていただきました!
- 最後は、質疑応答
@kisさんも参加、JSF、PrimeFacesなどのお話で盛り上がりました。
実際にJavaEEで開発するには各コンポーネントごとに一人は熟練した人が必要とか開発現場でのお話もありました。
きしださんのブログJava8 Lambdaの文法拡張まとめ - きしだのはてななどもよく写経して勉強させていただいてます。
折角勉強会に参加したのでこれを機にちょっとGlassFishでOSGIを触ってみました。もちろん寺田さんのブログを参考にさせていただきました。
そもそもOSGIがまずよくわかっていないので、、、いつも通り時間が掛かって、手順をメモメモ、
まずGlassFishで使われているApache Felixを試してみました。ドキュメントはここですApache Felix - Apache Felix Framework Usage Documentation
1. Download
2. カスタムモジュール作成(Activator.java)
import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceEvent; import org.osgi.framework.ServiceListener; public class Activator implements BundleActivator, ServiceListener { @Override public void start(BundleContext bc) throws Exception { System.out.println("Started the OSGI example Bundle"); // ***このメッセージが後で表示される bc.addServiceListener(this); } @Override public void stop(BundleContext bc) throws Exception { bc.removeServiceListener(this); System.out.println("Stopped the OSGI example Bundle"); // ***このメッセージが後で表示される } @Override public void serviceChanged(ServiceEvent event) { String[] objCls = (String[]) event.getServiceReference().getProperty("objectClass"); if (event.getType() == ServiceEvent.REGISTERED) { System.out.println("Ex1:Service of type" + objCls[0] + " registered."); } else if (event.getType() == ServiceEvent.UNREGISTERING) { System.out.println("Ex1:Servce of type " + objCls[0] + " nnregistered."); } else if (event.getType() == ServiceEvent.MODIFIED) { System.out.println("Ex1:Service of type " + objCls[0] + " modified."); } } }
3. manifest.mf
Bundle-Activatorで上記にある作成したActivator.javaを指定
Bundle-nameにService listener exampleを指定
Main-Class: Activator Class-Path: Users/tomo/Download/felix-framework-4.2.1/bin/felix.jar Bundle-Name: Service listner example Bundle-Description: A bundle that displays message Bundle-Vendor: Apache Felix Bundle-Version: 1.0.0 Bundle-Activator: Activator Import-Package: org.osgi.framework
4. コンパイル、jar作成(example.jar)
上記1のActivator.javaをコンパイルして、2のmanifest.mfを使ってjar作成
5. Felix起動
downloadしたdirectoryに移動して以下のコマンド実行
java -jar bin/felix.jar
6. 4で作成したexampleモジュールの開始、停止
felix:install file:/Users/tomo/BundleSample/example.jar
でBundle ID が表示されるのでこのID[13]を使って開始
felix:start 13
同様に停止も[13]を指定
felix:stop 13
こんな感じで、Activator.javaで実装したメッセージが表示されるの確認
7. 最後にFelix自体を停止、ID[0]を指定
felix:stop 0
8. 上記でテストしたexampleモジュール(example.jar)をGlassFishの「modules」配下にコピー
cp BundleSample/example.jar ~/Downloads/glassfish4/glassfish/modules/
9. GlassFishの起動
まずPATHを設定してから
(NetBeansでWebApplicationを作成して起動していたのでパスが未設定のため、asadminコマンドがエラーになりました)
asadminコマンドでGlassFishを起動
asadmin start-domain domain1
10. 6666ボートにアクセス
telnet localhost 6666
ここでエラー発生、GlassFish v4では製品版の初期設定として接続できないようになっているようです。
でOSGIのドキュメントを読んでみるとv4からは6666に接続しなくても、OSGIコマンドがasadminに追加されていました。
で「asadmin osgi lb」でバンドルモジュール一覧が表示されます。ますます使いやすくなっているんですね。
詳細はここOSGI-Featuresにあります。
asadmin osgi lb | grep example
作成したモジュール(example.jar)のbundle-nameである「Service listner example」が表示
11.上記でテストしたexampleモジュール(example.jar)を開始、停止
表示されたID[295]を指定してモジュールを開始、停止
asadmin osgi start 295 asadmin osgi stop 295
ここでもexampleモジュール(Activator.java)で実装したメッセージが表示されることが確認できました。
何とか、モジュールを作成してGlassFish上で動作することが確認できました。汗、、、
最後に
毎回本当に勉強になります!
スタッフ、スピーカー、参加者の方々に感謝です!