ステートレスセッション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!」の文字が表示されます。