特集
2004/02/13 16:02:00 更新


特集:第2回 インタフェースとBeanクラス作成でEJBの核を知る (3/3)


リモートインタフェースを用意する

 次に、EJBオブジェクトの元となるリモートインタフェースを用意しよう。

 リモートインタフェースは、EJBObjectインタフェースから継承したもので、ビジネスロジックのメソッドと同名のメソッドを実装する。そのプログラムは、List 2のようになる。

List 2■Sample.java

package example.ejb;
import java.rmi.*;
import javax.ejb.*;
public interface Sample extends EJBObject
{
        public int addData(int a, int b) throws RemoteException;
}

 List 1では、addDataというメソッドを実装したので、リモートインタフェースでもList 2に示したようにaddDataメソッドを実装している。

public int addData(int a, int b) throws RemoteException;

 これにより、クライアントがEJBオブジェクトを経由してaddDataメソッドを呼び出せるようになるわけだ。すでに説明したように、各メソッドはRemoteException例外をthrowするように記述する必要があるので、List 2では、addDataメソッドの定義で、「throws RemoteException」としてある。

ホームインタフェースを用意する

 そしてホームインタフェースを用意する。ホームインタフェースは、EJBHomeインタフェースから継承したもので、createメソッドを実装する。そのプログラムは、List 3のようになる。

List 3■SampleHome.java

package example.ejb;
import java.rmi.*;
import javax.ejb.*;
public interface SampleHome extends EJBHome
{
        Sample create() throws RemoteException, CreateException;
}

 createメソッドは、List 3に示したように、リモートインタフェースを返すように実装する。ここではリモートインタフェースはList 2に示したようにSampleという名前になっているので、createメソッドの戻り値は、Sampleインタフェースとする。

Sample create() throws RemoteException, CreateException;

 またcreateメソッドは、RemoteException例外とCreateException例外をthrowするように実装する。

 RemoteException例外は、RMI-IIOPにおいて発生する可能性がある例外、CreateException例外は、List 2に示したejbCreateメソッドの呼び出しにおいて発生する可能性がある例外だ(Fig.7に示したように、createメソッドを呼び出したときにはBeanのejbCreateメソッドが呼び出されるためだ)。

配備記述子を用意する

 最後に配備記述子を用意する。配備記述子は、ejb-jar.xmlというファイル名として用意する。配備記述子は、List 4のようになる。

List 4■配備記述子(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>SampleBean</ejb-name>
                        <home>example.ejb.SampleHome</home>
                        <remote>example.ejb.Sample</remote>
                        <ejb-class>example.ejb.SampleBean</ejb-class>
                        <session-type>Stateless</session-type>
                        <transaction-type>Container</transaction-type>
                </session>
        </enterprise-beans>
</ejb-jar>

 配備記述子では、<enterprise-beans>要素内で、Enterprise Beanを定義する。セッションBeanの場合には、<session>要素を用いる。<session>要素内の項目の意味は、次の通りだ。

  • <ejb-name>

 Enterprise Beanの名前を定義する。任意の名前でよい。

  • <home>

 ホームインタフェースの名前を記述する。ここでは、List 3に示したようにインタフェース名を記述する。

  • <remote>

 リモートインタフェースの名前を記述する。ここでは、List 2に示したインタフェース名を記述する。

  • <ejb-class>

 Beanのクラス名を記述する。ここでは、List 1に示したクラス名を記述する。

  • <session-type>

 ステートレスかステートフルかの区別を設定する。ステートレスの場合には「stateless」、ステートフルの場合には「statefull」と記述する。ここではステートレスを指定している。

  • <transaction-type>

 トランザクションの種類を記述する。トランザクション処理をBean自身が行なう場合には「Beans」、EJBコンテナが行なう場合には「Container」を指定する。トランザクション処理を使わない場合には、Containerを指定しておけば問題ない。


トランザクションとは、データベースにおいて、「すべての処理をしたか」「すべての処理をしなかったか」のどちらかの状態に保ち、「処理のうち一部だけが実行された」という状態にしないことで一貫性を保つ機構のことだ。

 次回、第3回目では、これまで解説してきたコードをまとめ、実行環境となるJBossのインストール、そして実際の稼働方法までを挙げていこう。

関連記事
▼第1回 EJBの仕組みを知ろう
▼MySQLとJBossが協業
▼SunとJBossのJava論争が決着
▼JBoss、顧客に免責保証提供
▼JBoss、顧客保護の方針を明らかに
▼オープンソース分野での勢力拡大を目指すJBoss

関連リンク
▼Java チャンネル

前のページ | 1 2 3 |      

[大澤文孝,ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.