Payara Microがなんだか存在だけ知っていて気になっていたので、
勢いつけてブログ書きつつ導入してみる。
と思ったのだけど、Payara MicroProfileというものがあったのでそっちの方を選んで導入してみる。
今後Paraya MicroProfileを使いつつ、Java EEで遊びたいものがあれば試してみようかという目的もある。
Payara Micro
Payara Micro
http://www.payara.fish/payara_micro
Payara Microはwarファイルがアプリケーションサーバのインストールなしに実行出来る。ふむ。単純に使うだけなら70MBぐらいでちょー簡単に動くよ、とのこと。
プロビジョニングツールとも組み合わせ合わせられるらしい。(Chef,Puppet,Ansible)
ということで、使いやすそう。
Payara MicroProfile
さらにParaya Microをカットしたのもがあるよ、MicroProfileというorganization(https://microprofile.io/)が最近出来たのだが、その方針に合わせてPayara Microをスリム化したものらしい。
具体的にはJSON-P, CDI, JAX-RSをベースとしてPayara Microが使えるエディションといった感じだろうか。
“Paraya MicroProfile Download here”って書いてあるので
素直にそこから進んで見る。なんかmaven リポジトリにつながった。コレを落とせということか。
やること
- Javaプロジェクトを作る
- dependencyにPayara MicroProfileを追加
- なんかコード書く
- アプリ起動してハローワールドまで
このぐらいのことが初見で30分ぐらいで出来ればまぁ
「Java EEも簡単じゃん」みたいな話になりそう。
なので、この流れをやってみる。
僕はこんな感じで
開発端末:Mac
IDE:IntelliJ IDEA CE
JDK:1.8.0_92(新しいの入れないとな)
ビルドツール:Gradle
Javaプロジェクトを作る
とりあえずGradle使いたい年頃なのでGradleプロジェクトを作る。
IDE任せで。EclipseでもNetBeansでも適当につくる。
所要時間1分。
dependencyにPayara MicroProfileを追加
コピペする。
build.gradleを開いてdependencyを追加。
compile ‘fish.payara.extras:payara-microprofile:1.0’
所要時間1分。
後から考えると、こっちからjar落とすほうがラクかも。
http://repo1.maven.org/maven2/fish/payara/extras/payara-microprofile/1.0/
2016年11月現在、payara-microprofile-1.0.jarをダウンロード。
java -jar payara-microprofile-1.0.jar –deploy アプリ名.war
とかするだけで済む。
でも僕がやりたいのはSpringBootApplication実行的なアレなので今回はちょっとこの方法はとらない。
なんかコード書く
“Payara Micro getting started”とかでググる。
コレが出てくる
http://blog.payara.fish/introducing-payara-micro
とりあえずこれをコピペする。
public class EmbeddedPayara { public static void main(String[] args) throws BootstrapException { PayaraMicro.getInstance() .addDeployment("test.war") .bootStrap(); } } }
パッケージは適当に
com.github.yyyank.payara.microprofile.sandbox.launchとかにした。
(自分のドメイン欲しいな)
所要時間10分ぐらい(うち5分ぐらい貧弱なwifi環境のdependencyの同期)
アプリ起動してハローワールドまで
えーっと、どうやって起動するんだっけ。
きっとはすぬまさんのサイトに書いてあるだろう。あった。
http://www.coppermine.jp/docs/programming/2015/04/payara-micro.html
そうか、普通にmainクラス実行で良いですね。何を今更ですが。
実行。コンソールにログが正常に出るのを神に祈りながら待つのがポイントです。
(ログが出ないもんかと思いmain実行しまくったらプロセスが立ち上がりまくってちょっとハマった)
あとはうらがみさんのJAX-RSのとてもわかり易いありがたいやつがあったので拝借
http://backpaper0.github.io/memo/jaxrs/getting_started.html
JaxrsActivator.java
HelloResouce.java
を追加。
providedCompile ‘javax.ws.rs:javax.ws.rs-api:2.0.1’
を追加。←コレは不要でした
http://localhost:8080/test/rest/hello?name=world にアクセス。
でうまくいきました!!!と行きたいところなんだが
404。つまりアプリケーション・サーバ(Payara)は起動しているということではある。
所要時間5分ぐらい。
ハマったところの解決
ログを見るとWARNINGが出ていた。
warがvalidじゃない的なことが書いてあった。
つまりどういことだってばよ?
ということで考えた結果、warがないわーってことらしい。
したがってbuild.gradleにapply plugin warを追加してwarを作る。
test.warになっていた部分を実際にwarが存在するpathにする。
public class EmbeddedPayara { public static void main(String[] args) throws BootstrapException { PayaraMicro.getInstance().addDeployment("build/libs/payara-microprofile-sandbox-1.0-SNAPSHOT.war").bootStrap(); } }
gradle buildしてwarが出来たのを確認してから、EmbeddedPayaraを実行。
コレでうまくいくはず。お、warを認識してくれた。
けどClassNotFoundException多発。
以下を追加した。
compile 'fish.payara.extras:payara-microprofile:1.0' compile files("/Library/Java/JavaVirtualMachines/ jdk1.8.0_92.jdk/Contents/Home"+'/lib/tools.jar') compile group: 'org.osgi', name: 'org.osgi.core', version: '1.8' compile group: 'org.osgi', name: 'org.osgi.enterprise', version: '4.2.0' compile group: 'org.glassfish.gmbal', name: 'gmbal-api-only', version: '3.2.0-b003' compile group: 'org.apache.felix', name: 'org.apache.felix.bundlerepository', version: '2.0.8'
何かをとても間違えている気がしないでもない。
が、解決せず。数時間。
・・・方向性があやしい。
わかったコレ。EmbeddedPayaraの情報が実行するwar内にも入ってるからおかしなことになっていたんだ。
追記:11/6
じゃなく、payara-microprofileがprovidedCompileになっていれば良い、が正解でした。
deployされるwarとPayaraへのdeployするメインクラスが別に存在するはずという考えは近からず遠からずでしたが。
具体的に言うとこういうことをすれば良い。
providedCompile 'fish.payara.extras:payara-microprofile:1.0'
追記:11/6
war {
rootSpec.exclude('com/github/yyyank/payara/microprofile/sandbox/launch/*')
}
って書いてましたが、これは不要でした。
まとめ
ハマらなければ多めに見ても30分あれば初見でも
Payara MicroProfileを動かすことが出来る。
ハマると数時間かかったけどね。うーん、悲しい。
僕がハマった後はもうハマらないだろうから大丈夫っちゃ大丈夫だけど。30分で出来るはず。
最終系をGitHubにアップしたので、これのソースとかbuild.gradleいじればみんなハマらないはず。
https://github.com/yyYank/payara-microprofile-sandbox
JDKとかIDEとかすでに入ってる状態なので若干ずるい感じもあるかもしれないけどまぁこんだけスムーズにアプリ起動まで行ければ良いんじゃないですかね(ハマらなければ)。
気になるのはmainクラス実行語Payaraが起動し始めるのがちょっと遅いこと。マシンスペックにもよるとは思いますが2分経ってからアプリケーションサーバのログが流れはじめてやっと動いたかという感じ。
追記:11/6
今日改めて試すと、全然8秒ぐらいで動くようになってた。emagさんからのpull requestをマージしてこっちの環境で動かしただけなんだけどなぁ。なぞ。
それだけの差分でこんなに改善されるとは思えないしなんだかスッキリしないが理想的な早さでデプロイして起動するとこまで出来るようになりました!
https://github.com/yyYank/payara-microprofile-sandbox/pull/1
kazuhiraさんに教えていただいたけど、hazelcastのクラスタリングにどうやら時間がかかっているらしいので、実行時に–noClusterをしてやれば多少改善されるよう。
http://d.hatena.ne.jp/Kazuhira/20161022/1477129560
あと、多分Gradleのoptimization次第というところもありそう。単純なjava -jar payara-micro.jar --deploy hogehoge.jarの方が早い。
SpringInitializrがあるのと、ネット上に結構情報が出回っている分、
Spring Bootの方がラクかなぁ。
なんだけど、コレでハマるところは超えたからJava EEで気軽に遊ぶ環境を手に入れたのでやった~という感じです。
なんだかんだーふつうにーJava EEがすき~
0 件のコメント:
コメントを投稿