JBossで、、、
作成 2003/5/5
ここでは、JBossでHelloWorldレベルのEJBを作成します。 簡単、シンプルをポリシーとして、 さくさくいきたいと思います。
パッケージングにはAntを使っています。 EJB自体についての説明は行っていません。 EJBとANTを少しは知ってる人が、ちょっとJBossを使ってみよう というときに参考になる程度のメモです。
実験環境
JBossはオープンソースのEJBコンテナです。
公式サイト
http://www.jboss.org/
日本語情報サイト(解説、ML、Wiki)
http://neverbird.sourceforge.jp/
上の公式サイトからJBossをダウンロードします。 Downloadsを選択し、最新版のJBossをダウンロードします。 ここでは、JBoss3.2.0.zipをダウンロードしました。
ダウンロードしたアーカイブを解凍し、任意のディレクトリに配置します。 ここでは、C:\app\jboss-3.2.0に配置しました (以降、インストールしたディレクトリを%JBOSS_HOME%と記述します)。
図、JBossのディレクトリ構造
binにバッチファイルがあれこれ。clientはクライアント用のjarとか。 serverはall、default、minimalの3種類があります。 serverの中のdeployがデプロイするディレクトリです。
起動、停止用のバッチファイルが、%JBOSS_HOME%/binディレクトリにあります。
run.bat
設定オプション-c=minimalなど指定すれば、サーバを変更できます。 ここでは、何も指定せずdefaultを使います。
shutdown.bat
-Sオプションで停止します。
ここで、作成するアプリケーションは簡単なステートレスセッションビーン (と実行用のJavaアプリケーション)です。 まず、全体の流れを説明し、その後、各手順について、説明してきます。
ここではAntタスクを利用して、以下の3手順で、作成、実行を行っています。
ejbjar | EJBJARのコンパイルとパッケージング |
deploy | EJBJARのデプロイ |
client | クライアントから実行 |
簡単に動かしてみるには、以下のZIPファイルを解凍して使えます。
hello.zip
解凍したjboss01のbuild.xmlのjboss.homeのパスをインストールしたJBossのパスに書き換えます。
<property name="jboss.home" value="C:/app/jboss-3.2.0"/>
コマンドプロンプトで、
ant ejbjar
ant deploy
ant client
と実行すれば、なんとなく動きます。
画面、ejbjar、deploy、clientターゲットの実行
上記ZIPファイルは、Eclipse上で作成しているので、Eclipseの人は、インポートして、クラスパスを変更して使うと見易いでしょう。
各ターゲットで行っていることを簡単に説明していきます。
リソースの構成は以下のようになっています。
+- src/ | +- java/ | | +- hello/ | | | +- Client.java | | | +- Hello.java | | | +- HelloBean.java | | | +- HelloHome.java | | +- jndi.properties | +- res/ | +- ejb-jar.xml | +- jboss.xml +- build.xml
build.xmlはAntのビルドファイルです。 Client.java、jndi.propertiesはクライアント用のリソースなので、 ejbjarには必要ありませんが、簡単のために一緒に作っています。
コンパイル、クライアントからの実行時に、%JBOSS_HOME%/client/jbossall-client.jarをクラスパスに通しています。
jboss.xmlはJBoss依存の設定ファイルです。EJB名とJNDI名をマッピングしています。
上記リソースをコンパイル、パッケージングして、以下の構成のhello.jarを作成しています。
+- hello/ | +- Hello.class | +- HelloBean.class | +- HelloHome.class +- META-INF | +- ejb-jar.xml | +- jboss.xml
Antからは以下のターゲットで実行できます。
ant ejbjar
jarはbuild/hello.jarに作成されます。
JBossでのEJBのデプロイは%JBOSS_HOME%/server/default/deployに 作成したejbjarをコピーするだけです。 JBossを起動したウィンドウでは、デプロイされたことが表示されます。
画面、デプロイ時のサーバ側(ここでエラーがあると例外が表示されます)
アンデプロイするのは、hello.jarファイルをdeployディレクトリから削除すればよいです。
jmx-consoleを使ってデプロイしたEJBのJNDIを確認できます。
以下のURLにアクセスします。
http://localhost:8080/jmx-console/
jbossのservice=JNDIViewを選択します。
ページ一番下のlist()メソッドの「invoke」ボタンをクリックします。
クライアントの実行クラスは Client.java です。
InitialContextの設定はクラスパス上のjndi.propertiesから読み込みます。 また、lookupする名前はJ2EEコンテキストの中からのlookupではないので、 "java:comp/env/ejb/HelloEJB"でなく、単に"HelloEJB"でlookupしています。
JBossの起動しているウィンドウでもcall sayHelloが表示されていることがわかります。
画面、実行結果
なお、JBossではクライアント側にEJBのスタブは必要ありません (最近は他のEJBコンテナでもスタブいらないの多い?)。
なるべくシンプルにしたかったんですが、 ビルドファイルが必要なほどに複雑ですね。。。 設定ファイルは書き間違いが多いので、検証ツールが必要だと思われます。 ビルドファイル中のvalidateタスクでDTDレベルの検証は行えますが、 statefulとか間違っちゃうとなかなか見つからないし (deployer.batというのが、それっぽが、調査不足)。 あと、ハローEntityBeanとXDocletの利用ぐらいは、 そのうち試したいと思います。