ステートレスセッションEJBのメソッドを使って、HelloWorldを表示します。 HelloEJBでは、WebLogicServer6.1を使った例を紹介しています。
クライアントJSPを実行すると、以下のような画面が表示されます。
△ | HelloEJB | □ | × |
Hello World! EJBのサンプル(helloejb.jsp) |
ソースファイルは、以下のディレクトリに格納します。
c:\home\jp\ash\hello\helloejb |
サンプルプログラムの主なファイル構成です。
Hello.java HelloEJBリモートインターフェイス HelloHome.java HelloEJBホームインターフェイス HelloBean.java HelloEJB実装クラス build.xml 生成方法を定義した、Ant用ビルドファイル ejb-jar.xml EJBのデプロイメント設定ファイル weblogic-ejb-jar.xml WebLogic用EJBのデプロイメント設定ファイル helloejb.jsp HelloEJBクライアントJSPファイル |
EJBに関する名前は、以下のようにします。
パッケージ名: jp.ash.helloejb JNDI名: HelloEJB EJB名: HelloEJB jarファイル名: helloejb.jar |
EJBでは、リモートインターフェイス、ホームインターフェイスと、実装クラスのJavaソースを作成します。 リモートインターフェイス(Hello.java)は、実装クラスで定義したクラスの宣言を記述します。
Hello.java |
---|
package jp.ash.helloejb; import javax.ejb.EJBObject; import java.rmi.RemoteException; public interface Hello extends EJBObject { public String getMsg() throws RemoteException; } |
ホームインターフェイス(HelloHome.java)は、EJBで定められているクラスの宣言を記述します。
HelloHome.java |
---|
package jp.ash.helloejb; import javax.ejb.EJBHome; import javax.ejb.CreateException; import java.rmi.RemoteException; public interface HelloHome extends EJBHome { public Hello create() throws CreateException, RemoteException; } |
実装クラス(HelloBean.java)では、処理の実体を記述します。 利用しないメソッドも、ダミーの宣言だけは必要です。 HelloBean.javaでは、"Hello World!"という文字を返却する、getMsgというメソッドを追加しています。
HelloBean.java |
---|
package jp.ash.helloejb; import javax.ejb.SessionBean; import javax.ejb.SessionContext; public class HelloBean implements SessionBean { public void ejbCreate() {} public void setSessionContext(SessionContext ctx) {} public void ejbRemove() {} public void ejbActivate() {} public void ejbPassivate() {} public String getMsg() { return "Hello World!"; } } |
EJBでは、実行する前にデプロイする必要があります。 そのため、ejb-jar.xmlというデプロイメント記述子を作成する必要があります。 デプロイメント記述子は、XML形式のファイルです。
ejb-jar.xml |
---|
<?xml version="1.0" ?> <!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'> <ejb-jar> <enterprise-beans> <session> <ejb-name>HelloEJB</ejb-name> <home>jp.ash.helloejb.HelloHome</home> <remote>jp.ash.helloejb.Hello</remote> <ejb-class>jp.ash.helloejb.HelloBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Bean</transaction-type> </session> </enterprise-beans> </ejb-jar> |
WebLogicServerでは、独自拡張したweblogic-ejb-jar.xmlというデプロイメント記述子も必要です。
weblogic-ejb-jar.xml |
---|
<?xml version="1.0" ?> <!DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 6.0.0 EJB//EN' 'http://www.bea.com/servers/wls600/dtd/weblogic-ejb-jar.dtd'> <weblogic-ejb-jar> <weblogic-enterprise-bean> <ejb-name>HelloEJB</ejb-name> <jndi-name>HelloEJB</jndi-name> </weblogic-enterprise-bean> </weblogic-ejb-jar> |
ビルドは、Java版のメイクツールであるAntを使って行います。
生成方法は、build.xmlに記述します。
以下のbuild.xmlでは、ターゲットの指定ができます。
build.xml |
---|
<project name="Build HelloEJB" default="all" basedir="."> <!-- set property --> <property name="WL_HOME" value="c:/bea/wlserver6.1" /> <property name="SERVER" value="${WL_HOME}/config/mydomain" /> <property name="APNAME" value="DefaultWebApp" /> <property name="APPLICATION" value="${SERVER}/applications/${APNAME}" /> <property name="WEBAPP_CLASSES" value="${APPLICATION}/WEB-INF/classes" /> <property name="source" value="." /> <property name="build" value="${source}/build" /> <property name="dist" value="${source}/dist" /> <property name="javadoc" value="${source}/javadoc" /> <!-- set target --> <target name="all" depends="init,compile,jar,ejbc,webapp,jspc" /> <target name="init"> <!-- make directory and copy --> <mkdir dir="${build}" /> <mkdir dir="${build}/META-INF" /> <mkdir dir="${dist}" /> <copy todir="${build}/META-INF"> <fileset dir="${source}"> <include name="*.xml" /> <exclude name="build.xml" /> </fileset> </copy> </target> <!-- compile java sources --> <target name="compile" depends="init"> <javac srcdir="${source}" destdir="${build}" includes="Hello.java, HelloHome.java, HelloBean.java" /> </target> <!-- make standard jar file --> <target name="jar" depends="compile"> <jar jarfile="${dist}/std_helloejb.jar" basedir="${build}"></jar> </target> <!-- compile ejb --> <target name="ejbc" depends="jar"> <java classname="weblogic.ejbc" fork="yes"> <sysproperty key="weblogic.home" value="${WL_HOME}" /> <arg line="-compiler javac ${dist}/std_helloejb.jar ${SERVER}/applications/helloejb.jar" /> <classpath> <pathelement path="${WL_HOME}/lib/weblogic_sp.jar;${WL_HOME}/lib/weblogic.jar" /> </classpath> </java> </target> <!-- compile webapp --> <target name="webapp" depends="ejbc"> <javac srcdir="${source}" destdir="${WEBAPP_CLASSES}" includes="Hello.java, HelloHome.java" /> </target> <!-- compile jsp sources --> <target name="jspc"> <java classname="weblogic.jspc" fork="yes"> <arg line="-d ${WEBAPP_CLASSES} ${source}/*.jsp" /> </java> <copy todir="${APPLICATION}"> <fileset dir="${source}"> <include name="*.jsp" /> </fileset> </copy> </target> <!-- make javadoc --> <target name="javadoc"> <delete dir="${javadoc}" /> <mkdir dir="${javadoc}" /> <javadoc sourcepath="../../../" packagenames="jp.ash.helloejb" destdir="${javadoc}" /> </target> <!-- clean work file --> <target name="clean"> <delete dir="${build}" /> <delete dir="${dist}" /> <delete dir="${javadoc}" /> <delete dir="ejbcgen" /> </target> </project> |
以下のコマンドを実行すると、ビルドできます。
DOS# c:\bea\wlserver6.1\config\mydomain\setEnv.cmd DOS# cd c:\home\jp\ash\hello\helloejb DOS# Ant |
EJBにアクセスするためには、クライアントプログラムを作成する必要があります。
ここでは、JSPファイルを使ってEJBを呼び出し、結果を表示してみます。
EJBの処理の流れは、以下のようになります。
helloejb.jsp |
---|
<%@ page contentType="text/html; charset=Shift_JIS" %> <%@ page import="java.util.Properties" %> <%@ page import="javax.naming.Context" %> <%@ page import="javax.naming.InitialContext" %> <%@ page import="jp.ash.helloejb.*" %> <%! String icf = "weblogic.jndi.WLInitialContextFactory"; String url = "t3://localhost:7001"; Properties p; Context ctx; HelloHome home; Hello hello; String msg; %> <% // get InitialContext p = new Properties(); p.put(Context.INITIAL_CONTEXT_FACTORY, icf); p.put(Context.PROVIDER_URL, url); ctx = new InitialContext(p); // lookup JNDI name try { home = (HelloHome)ctx.lookup("HelloEJB"); } catch (Exception ex) { ex.printStackTrace(); } // create EJB object try { hello = home.create(); } catch (Exception ex) { ex.printStackTrace(); } // print message try { msg = hello.getMsg(); } catch (Exception ex) { ex.printStackTrace(); } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>HelloEJB</title> </head> <body> <h1><%= msg %></h1> <p>EJBのサンプル(helloejb.jsp)</p> </body> </html> |
以下のURLで実行できます。 実行する場合は、WebLogicサーバを起動しておく必要があります。
http://localhost:7001/helloejb.jsp |
EJBのgetMsgで取得した「Hello World!」の文字が表示されます。