セッション 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