ASH | サーバ | セキュリティ | Linux | FreeBSD | DB | Web | CGI | Perl | Java | XML | プログラム | ネットワーク | 標準 | Tips集

J2EEプログラミング(HelloEJB)

機能概要

 ステートレスセッション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では、実行する前にデプロイする必要があります。 そのため、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!」の文字が表示されます。



Copyright (C)1995-2002 ASH multimedia lab.
mail : info@ash.jp