なんてかんたんなJavaEE
#nds52 @civic
@civic
• twitter: @civic
今日つたえたいこと
• JavaEEのレールに乗るのも迷いがなくて良いも
のではないでしょうか?
• 薄いタイプのJavaEEもあります
(その選択が正しいとは言ってない)
JavaEEとは
JavaEEとは
• Java Enterprise Edition
• ギョーミーなJava
• Webを入り口に、いろんな機能がてんこ盛りされ
た環境
たとえば
例
「Webアプリ作りたいなー」
「ServletでHTTP処理できるよ」
「JSPをテンプレートとして
HTMLレンダリングできるよ」
例
「DBも使いたいのだけど」
「DB接続は用意してあげるね!」
「JPAというORマッパーが
あるよ!」
「JTAというトランザクション管理
が使えるよ!」
例
「タスクをジョブキューで非同期に
処理したいのだけど」
「JMSというメッセージキューが使
えるよ!」
などなど…
• JSON返すREST
→JAX-RS
• emailを送りたい
→Java Mail
• バッチ処理を……
→JBatch
• cron的に……
→Timer Service
JavaEE提供機能
参考: http://blog.arungupta.me/defaults-javaee7-platform-techtip37/)
これらが全部乗っかった
JavaEEサーバー
JavaEEサーバ
• JavaEEは仕様
• インターフェースで提供
• 各アプリからはインターフェース経由で使用
• 各種ベンダーが実装したサーバ
• Glassfish (リファレンス実装)
• WebLogic
• WildFly
• Payara
...
JavaEEコンテナでアプリが動く
いろんな使いたい機能
機能を使いたいア
プリ
デプロイ
JavaEE
サーバ
利点
• 「ORMを使いたい時はX製品」「MQを使いたい
ときはY製品」という選択を考えるときに、標準
で提供されるという第一歩がある
• 標準機能を検討
• 外部ライブラリを検討
• 自前実装を検討
(その選択が正しいとは言ってない)
とはいっても重厚すぎる
機能盛りすぎ?
• 分散処理の機能とか要らないからWebだけでよい
というニーズ
• → Web Profile
Full Profile / Web Profile
参考: https://jaxenter.com/introducing-the-java-ee-web-profile-103275.html
Web Profileでも多い!
レールに全乗っかり
しない薄いJavaEE
Micro Profile
• JSONでREST返すだけでいい!
• Micro Profile (コミュニティベース)
• JAX-RS (REST, SinatraとかFlask的な)
• CDI (DIコンテナ)
• JSON-P(JSON API)
MicroProfile デモ
(Payara MicroProfile)
JAX-RS
@Path("hello")
public class HelloResource {
@GET
public String hello(@QueryParam("name")String name){
return "Hello " + name;
}
}
$ curl http://localhost:8080/api/hello?name=civic
Hello civic
MicroService向けの起動(Payara)
• java -jarで起動してwarファイルを渡す
• プロセスの起動=サービスの起動
java -jar payara-xxx.jar --deploy my.war
MicroService向けの起動(Payara)
• 実行可能なjarファイルの生成
• war内蔵の1ファイルで起動するサービス
$ java -jar payara-xxx.jar --deploy my.war
--outputuberjar myapp.jar
# myapp.jarのみで起動
$ java -jar myapp.jar
このぐらい薄いのならば
手軽にJavaEEを使える!
そもそも言語としてのJavaが...
JVM系言語でJavaEE
JVM系言語
@Path("hello")
class HelloResource {
@GET
fun hello(): String{
return "Hello World"
}
}
@Path("hello")
class HelloResource {
@GET
def String hello(){
return "Hello World"
}
}
@Path("hello")
class HelloResource {
@GET
def hello(): String = {
return "Hello World"
}
}
まとめ
• 標準で提供される機能に乗っかるもよし
• 薄いのがよければMicroProfileもある
• 言語はJVM系言語を使うもよし
参考
• Payara Server
http://www.payara.fish
• JavaEEの概要
http://www.oracle.com/technetwork/jp/java/javaee/overview/index.html
• ソースコード
https://github.com/civic/payara-examples

第52回なんてかんたんなJavaEE

Editor's Notes

  • #17 TomcatやJettyはJavaEEではない。EJBやCDIなどで不足がある。