ライセンスフリーのアプリケーションサーバJBossを利用したJ2EE開発の手順です。
ここで使う開発環境には、おなじみのEclipse(ver3.0.0)を採用しています。
※このコラムはJ2EEの基本的な部分を理解している方を対象にしています!
以下をそれぞれダウンロードしておきます。 ・JBoss本体 jboss-3.0.0.zip ・Eclipse3.0.0用Lombozプラグイン Lomboz.3.zip (eclipse3.0.0用) ・Eclipse3.0.0用Lomboz補助プラグイン emf-sdo-runtime-2.0.0.zip (eclipse3.0.0用) それぞれを解凍し以下の場所へコピーする JBoss本体: C:/jboss-3.0.0 Eclipse3.0.0用Lombozプラグイン: Eclipseのインストールフォルダ/plugins/* Eclipse3.0.0用Lomboz補助プラグイン: Eclipseのインストールフォルダ/plugins/* Eclipseのインストールフォルダ/features/*
メニュー>ウィンドウ>設定>Lomboz>Server Definitions コンボボックスServer Types: JBOSS 3.0 を選択します。 タブ中の設定は以下のように設定しOKボタンを押します。 Application Server Directory: C:/jboss-3.0.0 Address: 127.0.0.1 (とりあえず自分のマシンのIP) Port: 8080 Classpath Variable Name: JBOSS300 Classpath Variable: C:/jboss-3.0.0 以上でEclipse上でJBoss開発が可能になりました。
メニューの「新規」>「その他」>「Lomboz J2EE Project」>次へ> プロジェクト名:hoge と入力し>次へ> フォルダーの追加>src と入力し>OK> ビルド・パス上のソースフォルダ: hoge/src デフォルト出力フォルダ: hoge/bin 上記のようになっていることを確認し>次へ> Ejb ModulesタブのAddボタンをクリックし Module Name: hogeEJB と入力し>OK> Targeted Serversタブのコンボボックス「Type:」で JBOSS 3.0 を選択しAddボタンをクリック>終了
先ほどのプロジェクト「hoge」を右クリックの「新規」>「その他」>「Lomboz EJB Creation Wizard」>次へ> 以下のように設定し終了をクリック。 ソース・フォルダ: hoge/src パッケージ: hoge 名前: Hello Select EJB Type: Stateless Session EJB ↓このようにhoge.HelloBean.javaが生成されます。
先ほどのHelloBean.javaを右クリック>Lomboz J2EE...>Add EJB methods... を選択 以下のように設定し終了ボタンをクリック。 Method Signature: public String sayHello() Method Type: Business Method Interface Type: Remote Interface ↓このようにhoge.HelloBean.sayHello()が生成されます。生成されたメソッドsayHello()は中身が空ですので ここは自分で実装する必要があります。 ■実装前
/** * @ejb.interface-method * view-type="remote" **/ public String sayHello(){ return null; }
■実装後/** * @ejb.interface-method * view-type="remote" **/ public String sayHello(){ return "Hello!"; }
sayHello()が実行されると"Hello!"という文字列を返すように実装しました。
HelloBean.javaを右クリック>Lomboz J2EE...>Add EJB Modules... を選択すると 「EJB[hogeEJB]」というチェックボックスを含んだダイアログが開きますのでチェックを入れてOKボタンを押してください。※この操作によりbean.xmlとejbs.xmlにHelloBeanが追加されます。
hogeEJBフォルダを右クリック>Lomboz J2EE...>Generate EJB Classes を選択すると EJBクラスの生成が始まります。※この操作は処理に少し時間がかかるかもしれません。
hogeEJBフォルダを右クリック>Lomboz J2EE...>Deploy Module を選択すると JBossへモジュールのデプロイが始まります。 C:/jboss-3.0.0/server/default/deploy/hogeEJB.jar が生成されていれば成功です。※この操作は処理に少し時間がかかるかもしれません。
以上でデプロイは完了です。
メニュー>新規>プロジェクト>Javaプロジェクト>次へ> プロジェクト名: hogeClient と入力し >次へ> ソースフォルダ: hogeClient/src デフォルト出力フォルダ: hogeClient/bin 上記のように入力し、「プロジェクト」タブをクリック> サーバアプリhogeプロジェクトのチェックボックスにチェックを入れて終了ボタンをクリック。 これでhogeClientというプロジェクトができました。
hogeClientプロジェクトを右クリック>新規>その他>Lomboz EJB Test Client Wizard> 「Create an Ejb Test Client」というダイアログで以下のように設定し終了ボタンを押します。 ソースフォルダ: hogeClient/src パッケージ: hogeClient 名前: HogeClient スーパークラス: java.lang.Object Ejb Home: hoge.HelloHome Ejb Interface: hoge.Hello Target Server: JBOSS 3.0 以下のようにテスト用クライアントアプリの雛形が自動生成されます。
先ほど生成されたテスト用クライアントアプリのHogeClient.testBean()メソッドに ビジネスロジックを実装していきます。 ■実装前public void testBean() { try { hoge.Hello myBean = getHome().create(); //-------------------------------------- //This is the place you make your calls. //System.out.println(myBean.callYourMethod()); } catch (RemoteException e) { e.printStackTrace(); } catch (CreateException e) { e.printStackTrace(); } catch (NamingException e) { e.printStackTrace(); } }
■実装後public void testBean() { try { hoge.Hello myBean = getHome().create(); //-------------------------------------- //This is the place you make your calls. //System.out.println(myBean.callYourMethod()); System.out.println(myBean.sayHello()); //←ここに実装しています。 } catch (RemoteException e) { e.printStackTrace(); } catch (CreateException e) { e.printStackTrace(); } catch (NamingException e) { e.printStackTrace(); } }
■サーバを実行 サーバhogeプロジェクトを右クリック>実行 をクリックし、以下のように設定し実行をクリック プロジェクト: hoge メイン・クラス: org.jboss.Main ■クライアントを実行 クライアントhogeClientプロジェクトを右クリック>実行 をクリックし、以下のように設定し実行をクリック プロジェクト: hogeClient メイン・クラス: hogeClient.HogeClient
上図の通り出力されれば成功です!
J2EEのEJB開発の大まかな流れはこれで理解できたと思います。多分。。。
この次はDBとの連携部分EntityBean(CMP中心)についてまとめる予定です。 暇があったらBMPまで突っ込みたいところです。 っていうかCMP2.0になってからBMPの存在意義はなくなったという人もいるようですが、どうなんですかねぇ? 詳しく調べて見ましょう。。。暇があればw
私の個人的意見ですが分散オブジェクト開発ならJ2EE+EJBよりもHORBの方が楽な気がしました。 なぜEJBが使われているのか私には謎です。いわゆるデファクトスタンダードってやつなんですかねぇ。。。