セッション Bean
EJBには、セッション Bean、エンティティ Bean、メッセージ・ドリブン Bean などがありますが、まずはセッションBeanを使ってみましょう。
このEJBサンプル(src\main 以下の HelloEJBBean.java - XDoclet を使っています。XDoclet は後ほど説明)のメソッドsayHelloは、引数文字列の後ろに"さんこんにちは。"を付けて返します。
早速サンプルを動かしてみましょう。
ch1 のアーカイブを適当なディレクトリーに展開してch1 ディレクトリーにcdしてください。
環境変数にJBOSS_HOMEとXDOCLET_HOMEが既に設定されていれば不要ですが、設定されてなければ setenv.bat (ch1 ディレクトリーの直下にあり) を実行。
C:\java\helloejb\ch1>setenv.bat C:\java\helloejb\ch1>set JBOSS_HOME=C:\jboss\jboss-3.0.5 C:\java\helloejb\ch1>set XDOCLET_HOME=C:\java-tools\xdoclet-1.2
次は antでxdocletとcompileを実行します。
C:\java\helloejb\ch1>ant
Buildfile: build.xml
clean:
init:
prepare:
    [mkdir] Created dir: C:\java\helloejb\ch1\build\src
    [mkdir] Created dir: C:\java\helloejb\ch1\build\gen-src
    [mkdir] Created dir: C:\java\helloejb\ch1\build\classes
    [mkdir] Created dir: C:\java\helloejb\ch1\build\classes\META-INF
    [mkdir] Created dir: C:\java\helloejb\ch1\build\deploy
    [mkdir] Created dir: C:\java\helloejb\ch1\build\client
     [copy] Copying 2 files to C:\java\helloejb\ch1\build\src
ejbdoclet:
[ejbdoclet] Deploy TEMPLATE URL:  jar:file:C:\java-tools\xdoclet-1.2\lib\xdoclet
-apache-module-1.2.jar!/xdoclet/modules/apache/axis/ejb/resources/axis-deploy_ws
dd.xdt
[ejbdoclet] Undeploy TEMPLATE URL:  jar:file:C:\java-tools\xdoclet-1.2\lib\xdocl
et-apache-module-1.2.jar!/xdoclet/modules/apache/axis/ejb/resources/axis-undeplo
y_wsdd.xdt
[ejbdoclet] (XDocletMain.start                   47  ) Running 
[ejbdoclet] Generating Remote interface for 'helloejb.session.HelloEJBBean'.
[ejbdoclet] (XDocletMain.start                   47  ) Running  
[ejbdoclet] (XDocletMain.start                   47  ) Running  
[ejbdoclet] Generating Home interface for 'helloejb.session.HelloEJBBean'.
[ejbdoclet] (XDocletMain.start                   47  ) Running  
[ejbdoclet] (XDocletMain.start                   47  ) Running  
[ejbdoclet] (XDocletMain.start                   47  ) Running  
[ejbdoclet] Generating EJB deployment descriptor (ejb-jar.xml).
[ejbdoclet] (XDocletMain.start                   47  ) Running  
[ejbdoclet] Generating jboss.xml.
compile:
    [javac] Compiling 4 source files to C:\java\helloejb\ch1\build\classes
main:
BUILD SUCCESSFUL
Total time: 6 seconds
 
最後に ant dep で、jarと先ほど設定した%JBOSS_HOME%\server\default\deploy に作成されたjar ファイル (helloejb.jar) がコピーされます。
JBossのよいところは、ホットディプロイ機能があり、deploy ディレクトリーに jar、war、ear ファイル等をコピーするだけで、ディプロイが完了です。
ch0 で起動したJBossのコンソールを見てみましょう。
21:13:33,887 INFO [MainDeployer] Starting deployment of package: file:/C:/jboss /jboss-3.0.5/server/default/deploy/helloejb.jar 21:13:34,257 INFO [EjbModule] Creating 21:13:34,277 INFO [EjbModule] Deploying HelloEJBEJB 21:13:34,297 INFO [EjbModule] Created 21:13:34,297 INFO [EjbModule] Starting 21:13:34,357 INFO [EjbModule] Started 21:13:34,357 INFO [MainDeployer] Deployed package: file:/C:/jboss/jboss-3.0.5/s erver/default/deploy/helloejb.jar
このように表示されていればディプロイ成功です。
それでは ch1 のコンソールに戻ってクライアント・プログラムを動かして EJB の動作を確認しましょう。
ant rc でクライアントが起動します。
C:\java\helloejb\ch1>ant rc
Buildfile: build.xml
init:
rc:
     [test] EJBさんこんにちは。
BUILD SUCCESSFUL
Total time: 5 seconds
このように表示されれば、EJB の動作が確認できました。
あとかたずけとして、アンディプロイをしましょう。
ant undep で %JBOSS_HOME%\server\default\deploy からhelloejb.jar が削除されます。
サーバのコンソールは
21:13:59,513 INFO [MainDeployer] Undeploying file:/C:/jboss/jboss-3.0.5/server/ default/deploy/helloejb.jar 21:13:59,513 INFO [EjbModule] Stopping 21:13:59,513 INFO [EjbModule] Stopped 21:13:59,513 INFO [EjbModule] Destroying 21:13:59,523 INFO [EjbModule] Remove JSR-77 EJB Module: jboss.management.single :J2EEApplication= ,J2EEServer=Single,j2eeType=EJBModule,name=helloejb.jar 21:13:59,533 INFO [EjbModule] Destroyed 21:13:59,533 WARN [DeploymentInfo] Could not delete directory file:/C:/jboss/jb oss-3.0.5/server/default/tmp/deploy/server/default/deploy/helloejb.jar/24.helloe jb.jar restart will delete it 21:13:59,533 INFO [MainDeployer] Undeployed file:/C:/jboss/jboss-3.0.5/server/d efault/deploy/helloejb.jar
となっているはずです。これでアンディプロイ完了です。
EJB の構成要素の話
EJB には3つのJava定義ファイル
コンテナへのインターフェース
EJB 実装クラスの外部へのインターフェース
があります。
helloejb.jar 中を見てみましょう。
C:\java\helloejb\ch1>jar tf build\deploy\helloejb.jar META-INF/ META-INF/MANIFEST.MF helloejb/ helloejb/session/ helloejb/session/HelloEJBBean.class helloejb/session/HelloEJBHomeRemote.class helloejb/session/HelloEJBRemote.class META-INF/ejb-jar.xml META-INF/jboss.xml
それぞれ
- HelloEJBHomeRemote.class - Home インターフェース
 - HelloEJBRemote.class - Remote インターフェース
 - HelloEJBBean.class - EJB Beanクラス
 
またMETA-INF/は
- ejb-jar.xml - デフォルトのディプロイメント記述子
 - jboss.xml - AS依存のディプロイメント記述子です。
 
#TOBECONTINUED 040310