2010年1月1日金曜日

GlassFish v3tools Bundle/Application Client

今月初めにGlassFish v3 が出て、さらにその後、GlassFish と Eclipse が一体になった GlassFish tools Bundle がダウンロード可能になった。
GlassFish Tools Bundle for Eclipse v1.2 (December 17, 2009)
これをちょっと試用してみた(OS は Windows XP SP3)。


やってみたいのは最小の Application Client の作成してリモートデバッガの引っ掛け方を確認する事だけど、その前に簡単な WAR と EJB(SessionBean) を含む EAR をデプロイして動作確認。

まずインストールして起動したら、すでに Server Runtime と Server が GlassFish v3 で構成済み。デプロイもすごく軽快だし、Servlet や EJB への変更も瞬時に反映される。

WASCE を使っていたときには、EAR のデプロイや変更反映の度に、頭をかきむしる様な思いをしつつハチャメチャに長い長い長い時間を待たされたものだけど、GlassFish だと実行した事すら気づかないくらい瞬時に完了する。ちょっと感動。

この GlassFish v3 と専用 Eclipse 環境を使って、以下、個人的にちょっと懸案だった、Application Client を試してみる。

■ ゴール
以下のようなコードを動かして、ちゃんと helloBean がインジェクトされ、正しくメソッドが呼ばれる事を確認したい。
public class Main {
   @EJB static HelloBeanRemote helloBean;
   public static void main(String[] args) {
      System.out.println(helloBean.sayHello());
   }
}
■ EJB と EAR プロジェクトの作成
まず EJB プロジェクトを作る
  • [New]/[EJB Project] で "project name"に hello-ejb と指定
  • "EAR membership"/ "Add project to EAR"にチェック
  • EJB Module のページまで[Next]押下
  • EJB Client JAR で"Create an EJB Client JAR~"にチェックされている事を確認
  • Finish 押下で、以下のプロジェクトができているのを確認
    • hello-ejb
    • hello-ejbClient
    • hello-ejbEAR
次に Session Bean を作る
  • hello-ejb から[New]/[Session Bean(Java EE 6)]
  • 以下の諸元入力
    Java Packagetest.ejb
    Class NameHelloBean
  • "Create business interface"/Remote にチェック
  • [Finish]押下
HelloBean に以下のメソッドを追加
@Override
public String sayHello() {
   return "Hello, Bean!";
}
赤いアンダーラインのところで、Ctl+1 で「Create "sayHello" in super ~」を選択。HelloBeanRemote に メソッド宣言が追加される。

★ ここで一旦、hello-ejbEARをデプロイしてみて、エラー無くデプロイされることを確認。

■ Application Client の作成
  • Package Explorer から[New]/[Application Client Projet]
    • Project Name:hello-client
    • "EAR membership" でhello-ejbEAR を指定
    • Finish
  • Property を開いて以下の操作
    • Java Build Path:hello-ejbClient を追加
    • "Java EE Module Dependencies"/Use EJB client JARs を選択、hello-ejbClient.jar にチェック
  • Mainクラスを冒頭のコードに書き換える
■ 実行する
まず jar を作る。
  • hello-ejbClient から[Export...]でJAR file選択
  • "export destination"に hello-client\appClientModule\META-INF\hello-ejbClient.jar を指定
  • "JAR Manifest Specification"まで遷移して、"Use existing~"にチェックがあることを確認して、[Finish]
  • hello-client から[Export]/[App Client JAR file]実行
  • Destination に、c:\tmp\hello-client.jar のような適当なパスを指定して[Finish]
jar ができたら、コマンドプロンプトから動かす。
  • コマンドプロンプトで GlassFish のホームディレクトリに移動。(こんな感じのパス。 ~\GlassFish-Tools-Bundle-For-Eclipse-1.2\glassfishv3\glassfish )
  • 以下のように入力し、Hello, Bean! が出力されることを確認
    bin\appclient.bat -jar c:\tmp\hello-client2.jar
■ デバッグ実行する
  • 環境変数 VMARGS を設定
    set VMARGS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8118
  • 再度実行すると、以下のようなメッセージを出してとまる。ここでEclipse に移動
    Listening for transport dt_socket at address: 8118
  • Main.main()のSystem.out~の行にブレークポイントを設定。
  • Eclipse から[Run]/[Debug Configurations...],
    • Remote Java Applicationから[New]
    • Connection Properties の Port で8118を指定
    • Connection Type が Socket への Attachになっているのを確認して、[Debug] 押下
  • デバッグパースペクティブになり、ブレークポイントで止まるのを確認。
  • [F8]で継続。
  • コンソールにHello, Bean!が表示されることを確認

以上、Java EE Application Client のGetting Started からデバッグまで

■ 補足
  • 実装コードとインターフェイスを同じ JAR にするやり方もあるが、上記作業では ejbClient を 別JAR に分ける方式にした。後者の分ける方式では 通常の Eclipse と GlassFish の連携では上手く機能しないという理由もあって、Eclipse Tools Bundle を使う事にした
  • 上記の不具合は、最新(12月上旬)の GlassFish と Server Adapter では解消されているらしいが、どうしても GlassFish Adapter が最新のものに更新できなかった。共存できないバージョンのプラグインがあるためインストールが無理といったエラーメッセージが出るが、どうしても干渉を解決できず、断念。

    GlassFish とEclipse で作業する場合、通常の Eclipse に Server Runtime を設定してやるより、最初から素直に Tools Bundle を使った方が、やはり無駄な労力が省けるかも。

0 件のコメント:

コメントを投稿