NetBeansでJavaEE6開発する時にHotDeploy可能なプロジェクトタイプ
これはJavaEE Advent Calendar 2012の11日目のエントリです。
昨日は@mike_neckさんの「CDIについて書こうとしたら、JSRを読み始めて、結果JSR330を実装してみようとしてみた件について」でした。
弊社ではNetBeans&GlassFishを使っています。
今回のエントリーでは、JavaEE6初心者な僕が最初に困った点について書こうと思います。
これから始める方の、何かのお役に立てれば!
業務で使う標準フレームワークを最近JavaEE6に切り替えたばかりです。
ちなみに、その前はSeasar2(S2Dao + Teeda)&Eclipse&Tomcatでした。
NetBeansでJavaEE6なWebアプリを開発する場合、プロジェクトのタイプは以下の4つが選べます。
- NetBeans独自形式プロジェクト + warパッケージング
- NetBeans独自形式プロジェクト + earパッケージング
- Maven形式プロジェクト + warパッケージング
- Maven形式プロジェクト + earパッケージング
JavaEE6になってから、ejbもwarファイルにパッケージングが出来るようになったのは
皆さん既にご存じかと思います。
各プロジェクト作成ウィザードのスクリーンショットはこちら。
-
NetBeans独自形式プロジェクト + warパッケージング
-
NetBeans独自形式プロジェクト + earパッケージング
-
Maven形式プロジェクト + warパッケージング
-
Maven形式プロジェクト + earパッケージング
弊社ではMaven形式プロジェクト + earパッケージングで開発を始めました。
理由としては、開発するサービスが非常に大きいからです。
クラス数が多いとAPサーバの起動に時間が掛かるし、メモリも消費するので、
ある程度の機能単位でejb(jar)に分けて、導入するお客様の環境で必要な分だけパッケージングしようと考えました。
こんな感じです。
- A社様向け → 機能1 + 機能2 + 機能3
- B社様向け → 機能2
- C社様向け → 機能1 + 機能3
ですが、earでパッケージングしてしまうと、開発が始まって非常に困った問題が発覚。
ソースの変更を行った場合、変更を反映するために再ビルド&GlassFish再起動が必要という状況(ToT)
これでは開発の効率が非常に悪くなってしまいます。
そこで、warファイルにパッケージングしてみたところ、ソースを変更して保存したタイミングで、
アプリのHotDeploy(と呼んでいいのかな?)が行われました。
プロジェクトタイプごとのHotDeployの挙動をまとめるとこんな感じです。
- NetBeans独自形式プロジェクト + warパッケージング → HotDeploy可能
- NetBeans独自形式プロジェクト + earパッケージング → HotDeploy不可能
- Maven形式プロジェクト + warパッケージング → HotDeploy可能
- Maven形式プロジェクト + earパッケージング → HotDeploy不可能
GlassFishの管理コンソールでアプリケーションがデプロイされたパスを確認して、
そのディレクトリの中身を見てみると、
HotDeploy可能な場合はclassファイルがフラットな状態で配置されていて、
不可能なプロジェクトタイプではjarとかwarにパッケージングされて配置されてました。
-
NetBeans独自形式プロジェクト + warパッケージング
-
NetBeans独自形式プロジェクト + earパッケージング
-
Maven形式プロジェクト + warパッケージング
-
Maven形式プロジェクト + earパッケージング
NetBeans独自形式プロジェクトのビルドツールはAntみたいですね。
せっかく新しく始めるんだし、もうAntは使いたくないので、
Maven形式プロジェクト + warパッケージングでやる事にしました。
(今時はGradleなのでしょうか?)
サーバのメモリ消費問題は、warにパッケージングする時に不要な分は除外する方法で対応するつもりです。
規模が大きい開発の場合、みなさんどうされているのでしょうか。。。(ERPとか)
「earパッケージングでもHotDeploy出来るよ!」というツッコミ等あれば是非お願いします。
明日(2012/12/12)は@kikutaro_さんです。 よろしくお願いします!!