3. EJBアプリケーションの開発

3.1. チュートリアル

本節ではEJB3.1 アプリケーションについて以下の内容を記述しています。

本手順を行う前に、 [ アプリケーション開発ガイド(概要) > 1. Developer(with Developer's Studio) > 1.2. 環境設定 ] の設定を行ってください。

Memo
ステートレスセッションBean と ステートフルセッションBean と SingletonセッションBean は、手順が類似しているので、 ステートレスセッションBean の場合の説明を詳細に記載しています。 ステートフルセッションBean と SingletonセッションBean の手順については、適宜、該当箇所の読み替えでご理解ください。

3.1.1. ステートレスセッションBeanの作成

ここでは、文字列のやり取りを行うステートレスセッションBeanを作成します。

3.1.1.1. EJB プロジェクトの作成

EJB プロジェクト生成ウィザードを利用して、EJB プロジェクトを作成します。

メニュー ファイル>新規  > プロジェクト を選択して、新規プロジェクト 画面を開きます。

EJB > EJB プロジェクト を選択して、次へ をクリックします。


図3.1.1.1-1

新規 EJB プロジェクト 画面が表示されます。

プロジェクト名 に新規プロジェクト名StatelessBeanSampleを入力して、

ターゲット・ランタイム でWebOTX Application Server v9(Local Default)を選択します。

EJB モジュール バージョン が自動的に3.1となるのを確認した後、次へ をクリックします。

ターゲット・ランタイム にWebOTXサーバーランタイムがない場合、WebOTXマニュアル 1.2.4.1. WebOTXランタイムの設定 を参照の上、設定を行ってください。


図3.1.1.1-2

Java画面が表示されます。

次へ をクリックします。


図3.1.1.1-3

EJB モジュール 画面が表示されます。

完了 をクリックします。


図3.1.1.1-4

プロジェクトStatelessBeanSampleが作成されます。


図3.1.1.1-5

ejbModule/META-INFフォルダ配下にMANIFEST.MFファイルが生成されています。
EJB モジュール画面で、ejb-jar.xmlデプロイメント記述子の生成ON を指定した場合、META-INFフォルダ配下に ejb-jar.xml ファイルも存在することを確認してください。

3.1.1.2. EJB の生成

EJB 生成ウィザード を使用して、EJB アプリケーションをプロジェクトに追加します。

メニュー の ファイル > 新規 > その他 を選択して、新規 画面を開きます。

EJBセッション Bean(EJB 3.x) を選択して、次へ をクリックします。


図3.1.1.2-1

EJB 3.x セッション Beanの作成 画面が表示されます。

Java パッケージにsampleを入力して、

クラス名にTestStatelessSessionBeanを入力して、

ビジネス・インターフェースの作成リモートONにして、ローカルOFF にして、次へ をクリックします。


図3.1.1.2-2

次のEJB 3.x セッション Beanの作成画面が表示されます。 

完了をクリックします。 


図3.1.1.2-3

EJB アプリケーションのソースが追加されます。


図3.1.1.2-4

3.1.1.3. EJBメソッドの作成

Memo
本節での手順は、ステートレスセッションBean の場合と、後述のステートフルセッションBean、SingletonセッションBean の場合とで、 ほとんど違いがありません。
そのため、本節では、ステートフルセッションBeanとSingletonセッションBean の場合の説明も兼ねて、
    (※ステートフルの場合:・・・)
との記載をしていますが、ステートレスセッションBean の場合は、この記載は無視して頂いて結構です。
また、ステートフルセッションBeanやSingletonセッションBean の場合、図中の表記は上記の記載内容で読み替えてご理解ください。

EJBのメソッド追加を行います。
ビジネスメソッドの定義
TestStatelessSessionBeanRemote (※ステートフルの場合:TestStatefulSessionBeanRemote、 Singletonの場合:TestSingletonSessionBeanRemote)クラスに 次のメソッドを定義します。
public String testString( String param );


図3.1.1.3-1

ビジネスメソッドの実装

TestStatelessSessionBean.java (※ステートフルの場合:TestStatefulSessionBean.java、 Singletonの場合:TestSingletonSessionBean.java) に 次のビジネスメソッドを実装します。

public String testString(String param) {
  return param + " come from StatelessBeanSample";";
}
(※ステートフルの場合:return param + " come from StatefulBeanSample"; 、Singletonの場合:return param + " come from SingletonBeanSample";)


図3.1.1.3-2

ビジネスメソッド追加後の再ビルド

最後に、メニュー プロジェクト > クリーンでビルドしてください。


図3.1.1.3-3

3.1.1.4. nec-ejb-jar.xmlデプロイメント記述子の作成

WebOTX専用デプロイメント記述子 nec-ejb-jar.xmlを追加します。

StatelessBeanSample (※ステートフルの場合:StatefulBeanSample、Singletonの場合:SingletonBeanSample) プロジェクトの右クリックメニュー新規 > ファイルを選択します。


図3.1.1.4-1

新規ファイル 画面が表示されます。

親フォルダーを入力または選択 の内容を「StatelessBeanSample/ejbModule/META-INF」とします。 (※ステートフルの場合:「StatefulBeanSample/ejbModule/META-INF」 Singletonの場合:「SingletonBeanSample/ejbModule/META-INF」)

ファイル名 にnec-ejb-jar.xmlを入力します。

完了 をクリックします。


図3.1.1.4-2

StatelessBeanSample(※ステートフルの場合:StatefulBeanSample、Singletonの場合:SingletonBeanSample) プロジェクトのnec-ejb-jar.xmlが作成されます。


図3.1.1.4-3

nec-ejb-jar.xmlのSourceタブをクリックして、下記の内容を追加します。

<?xml version="1.0" encoding="UTF-8"?>
<nec-ejb-jar>
  <enterprise-beans>
    <ejb>
     <ejb-name>TestStatelessSessionBean</ejb-name>
    </ejb>
  </enterprise-beans>
</nec-ejb-jar>
(※ステートフルの場合: <ejb-name>TestStatefulSessionBean</ejb-name>
Singletonの場合: <ejb-name>TestSingletonSessionBean</ejb-name>)

作成されたnec-ejb-jar.xmlファイルは以下のようになります。


図3.1.1.4-4

3.1.2. ステートレスセッションBeanのデプロイ

このチュートリアルでは、ステートレスセッションBean (※ステートフルの場合:ステートフルセッションBean 、Singletonの場合: SingletonセッションBean)を、呼び出し元である 動的 Web プロジェクト とまとめた、 Java EE モジュールとしてデプロイするため、 単独でのデプロイは行いません。

Memo
単独でのデプロイに関しては、3.2.7. EJBコンポーネントのデプロイ をご覧下さい。

3.1.3. ステートレスセッションBeanにアクセスするWebアプリケーションの作成

EJBの使用例として、動的Web プロジェクトから EJB へのアクセスを行います。 

3.1.3.1. Webプロジェクトの作成

ここでは、文字列のやり取りを行う動的 Web プロジェクトを作成します。 

Webプロジェクト生成ウィザードを利用して、動的Webプロジェクトを作成します。

メニュー ファイル > 新規  > プロジェクト を選択して、新規プロジェクト 画面を開きます。

Web > 動的 Web プロジェクト を選択して、次へ をクリックします。


図3.1.3.1-1

動的 Web プロジェクト 画面が表示されます。

プロジェクト名 にDynWebTestを入力して、

ターゲット・ランタイム でWebOTX Application Server v9(Local Default)を選択します。

動的 Web モジュール バージョン が3.0であることを確認し、次へ をクリックします。

ターゲット・ランタイム にWebOTXサーバーランタイムがない場合、WebOTXマニュアル 1.2.4.1. WebOTXランタイムの設定 を参照の上、設定を行ってください。

Memo
ステートフルやSingletonセッションBeanのチュートリアル実施時に、既にステートレスセッションBean のチュートリアルで作成した 動的 Web プロジェクト DynWebTest が存在する場合には、DynWebTest 以外のプロジェクト名で作成し、以降の記載では、 作成した名前での読み替えをお願いします。


図3.1.3.1-2

表示されたJava 画面に 次へ をクリックします。


図3.1.3.1-3

表示されたWeb モジュール 画面に 完了 をクリックすると、プロジェクトDynWebTestが作成されます。


図3.1.3.1-4

3.1.3.2. 入力画面用JSPファイルの作成

Web プロジェクトからEJB プロジェクトへアクセスする、index.jspを作成します。

DynWebTestプロジェクトの右クリックメニュー新規 > JSP Fileを選択します。


図3.1.3.2-1

新規ファイル 画面の、親フォルダーを入力または選択 に 「DynWebTest/WebContent」を指定し、ファイル名 に「index」を入力して 次へ をクリックします。


図3.1.3.2-2

表示されたJSP テンプレートの選択 画面で 完了 をクリックします。


図3.1.3.2-3

DynWebTestプロジェクトのindex.jspが作成されます。


図3.1.3.2-4

EJBプロジェクトへのアクセスを可能するために、DynWebTestにStatelessBeanSample (※ステートフルの場合:StatefulBeanSample、 Singletonの場合:SingletonBeanSample)との依存関係を設定します。

DynWebTestの右クリックメニューの プロパティーを選択してください。 ツリーから、Deployment Assembly を選択すると、Web Deployment Assembly 画面が表示されます。

追加 ボタンをクリックし、New Assembly Directive 画面で、「プロジェクト」 を選択後、次へ ボタンをクリックします。


図3.1.3.2-5

StatelessBeanSample (※ステートフルの場合:StatefulBeanSample、Singletonの場合:SingletonBeanSample) を選択して、完了 ボタンをクリックします。


図3.1.3.2-6

「StatelessBeanSample」(※ステートフルの場合:「StatefulBeanSample」、Singletonの場合:「SingletonBeanSample」) が追加されたのを確認し、OK をクリックします。


図3.1.3.2-7

index.jspのファイルに、EJBプロジェクトへのアクセス処理を追加します。追加後の内容を入力します。

<%@ page language="java" contentType="text/html; charset=windows-31j"
  pageEncoding="windows-31j"%>
<%@ page import = "sample.TestStatelessSessionBeanRemote" %>
<%@ page import = "javax.naming.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Insert title here</title>
</head>
<body>
<%
  try {
      InitialContext ic  = new InitialContext();
      TestStatelessSessionBeanRemote  StatelessSessionBean =
        (TestStatelessSessionBeanRemote)ic.lookup(TestStatelessSessionBeanRemote.class.getName());
   String result =  StatelessSessionBean.testString("DynWebTest");

   out.println("<p>");
   out.println("Result from EJB: " +  result);
   out.println("<p>");
  } catch (Exception ex) {
   out.println(ex.getMessage());
  }
%>
</body>
</html>

Memo
ステートフルセッションBean の場合、上記のソース中の、"Stateless" は、"Stateful" に変更してください。 SingletonセッションBean の場合、上記のソース中の、"Stateless" は、"Singleton" に変更してください。 また、動的Webプロジェクト名 "DynWebTest" も、実際のプロジェクト名に合わせて変更してください。

入力後のindex.jspファイルです。(ステートレスの場合)


図3.1.3.2-8


3.1.3.3. Webアプリケーションのデプロイ

デプロイは、Webアプリケーションと、EJB アプリケーションを含む、Java EE アプリケーションとして行います。
Java EEアプリケーションの作成および、デプロイについては、Java EEアプリケーションのチュートリアルの 5.1.1. Java EEアプリケーションの作成 をご覧ください。

Memo
5.1.1. Java EEアプリケーションの作成 は、ここまでに説明した、 ステートレスセッションBean の場合を例に記載されています。
そのため、ステートレスセッションBean の場合は、そのままの手順に従って進める事が可能です。
一方、ステートフルやSingletonセッションBean の場合には、
    ・Java EE プロジェクト名(SampleApplication)
    ・Java EEモジュール依存関係での選択項目(DynWebTest, StatelessBeanSample)
を、ここまでに作成したステートフルやSingletonセッションBean の場合に合わせて、変更しながら進める必要があります。

3.1.4. ステートレスセッションBeanの実行(Webアプリケーションからの呼び出し)

配備した Java EE アプリケーションプロジェクトで動作確認を行います。

ツールバーメニューの Web ブラウザーを開く をクリックしてください。

開いたWeb ブラウザーのアドレスに「http://localhost/DynWebTest」を入力して、選択した URL へジャンプ をクリックしてください。(※ステートフルやSingletonの場合:"DynWebTest" は実際に作成した動的Webプロジェクト名に変更してください。) 


図3.1.4-1

EJBで処理が行われ、Web ブラウザーに、以下の結果が表示されます。


図3.1.4-2

3.1.5. ステートレスセッションBeanにアクセスするEJBテストクライアントの作成

Webブラウザーからのアクセス以外にも、EJBテストクライアントからEJBにアクセスすることもできます。 その方法について説明します。

3.1.5.1. EJBテストクライアントの作成

3.1.1. ステートレスセッションBeanの作成 で作成した EJB ステートレスセッションBeanを呼び出すテストクライアントアプリケーションを作成します。 

EJB プロジェクト ウィザードを使用して、プロジェクトを作成します。 

メニュー のファイル > 新規 > プロジェクト を選択して、新規プロジェクト画面を開きます。

EJB > EJB プロジェクト を選択して、次へをクリックします。


図3.1.5.1-1

新規 EJB プロジェクト 画面が表示されます。

プロジェクト名に作成するプロジェクト名、EJBTestを入力して、ターゲット・ランタイム で、 WebOTX Application Server v9(Local Default)を選択します。

EARにプロジェクトを追加ON にします。

EAR プロジェクト名 にEJBTestEARを入力します。

次へをクリックします。

ターゲット・ランタイム にWebOTXサーバーランタイムがない場合、WebOTXマニュアル1.2.4.1. WebOTXランタイムの設定 を参照の上、設定を行ってください。


図3.1.5.1-2

Java 画面が表示されます。

Java アプリケーションをビルドするためのプロジェクトを構成します。次へ をクリックします。


図3.1.5.1-3

EJB モジュール 画面が表示されます。

クライアントのインターフェースとクラスを持つ EJB クライアント JAR モジュールを作成する。ON にし、完了 をクリックすると、プロジェクトEJBTestが作成されます。


図3.1.5.1-4

WebOTXクライアントランタイムをクラスパスに追加します。EJBTestClientの右クリックメニュープロパティを選択します。
プロパティー画面で、Java のビルド・パス > ライブラリーをクリックして、外部JARの追加... をクリックします。


図3.1.5.1-5

JAR の選択ダイアログで、クラスパスを次のように設定します。

表3.1.5.1-1
JARファイル名
${INSTALL_ROOT}/lib/wo-client.jar


${INSTALL_ROOT}は、WebOTXのインストールディレクトリです。

EJBTestClientプロジェクトにEJBクライアント用クラスを作成します。

メニューの ファイル > 新規 > その他... を選択して、 新規 ウィザード画面を表示します。

クラス を選択して、次へをクリックします。


図3.1.5.1-6

新規Javaクラス 画面が表示されます。

名前 に「EJBTestClient」を入力します。

パッケージ に、EJBのクラスと同じ「sample」を入力します。

public static void main(String[] args) をONにします。

完了をクリックします。


図3.1.5.1-7

EJBTestClient プロジェクトのプロパティーを開き、左側ツリー画面で Javaのビルド・パス を選択し、 右画面で プロジェクト タブを選択してから、追加をクリックします。


図3.1.5.1-8

3.1.1. ステートレスセッションBeanの作成 で作成したプロジェクトStatelessBeanSample(※ステートフルの場合:StatefulBeanSample Singletonの場合:SingletonBeanSample)をONにして、OKをクリックします。


図3.1.5.1-9

EJBTestClientのプロパティー画面で、OKをクリックします。


図3.1.5.1-10

EJBを呼び出す記述を行います。以下の例は、 3.1.1. ステートレスセッションBeanの作成 で作成したステートレスセッションBeanを呼び出します。 EJBを呼び出すには、InitialContextクラスのインスタンスを使います。このインスタンスのlookup メソッドを、 EJBインターフェイスの完全限定名を引数に渡して呼び出します。 これで、EJBインターフェイスを取得することができるので、あとは、このEJBインターフェイスを使ってEJBメソッドを呼び出します。

package sample;
import javax.naming.InitialContext;
public class EJBTestClient {
  public static void main(String[] args) {
    try { 
      InitialContext ic = new InitialContext();
      
      TestStatelessSessionBeanRemote statelessRemote =(TestStatelessSessionBeanRemote)ic.lookup(TestStatelessSessionBeanRemote.class.getName()); 
      
      System.out.println("Return From StatelessRemote : = " +statelessRemote.testString("TestString")); 
      
    } catch (Exception ex) { 
      ex.printStackTrace();        
    }
  }
}

Memo
ステートフルセッションBean の場合、上記のソース中の、"Stateless" および、"stateless" は、"Stateful"、"stateful" に変更してください。 SingletonセッションBean の場合、上記のソース中の、"Stateless" および、"stateless" は、"Singleton"、"Singleton" に変更してください。

実行構成の設定

実行構成を設定します。

メニューの実行 > 実行構成 を選択します。Javaアプリケーション > EJBTestClientを選択します。プロジェクトをEJBTestClient とし、メイン・クラスをsample.EJBTestClientと設定します。


図3.1.5.1-11

ビルドを実行してエラーが無ければ、EJBアプリケーションの準備は完了です。

3.1.6. ステートレスセッションBeanの実行(EJBテストクライアントからの呼び出し)

3.1.5.1. EJBテストクライアントの作成で作成したテストクライアントアプリケーションを実行して、EJBの動作確認を行います。

EJBの配備

3.1.1. ステートレスセッションBeanの作成で作成したStatelessBeanSampleをJava EEアプリケーションのチュートリアルの 5.1.1. Java EEアプリケーションの作成 に従って配備を行ってください。

テストクライアントの実行: 

構成および実行を選択し、実行をクリックします。


図3.1.6-1

EJBで処理が行われ、コンソールに、以下の結果が表示されます。


図3.1.6-2

3.1.7. ステートフルセッションBeanの作成

3.1.7.1. EJB プロジェクトの作成

ここでは、文字列のやり取りを行うステートフルセッションBeanを作成します。

EJB プロジェクト生成ウィザードを使用して、EJB プロジェクトを作成します。

メニューの ファイル > 新規 > プロジェクトを選択して、 新規プロジェクト画面を開きます。

EJB > EJB プロジェクトを選択して、次へ をクリックします。


図3.1.7.1-1

新規 EJB プロジェクト 画面が表示されます。

プロジェクト名に作成するプロジェクト名StatefulBeanSampleを入力して、ターゲット・ランタイムにWebOTX Application Server v9(Local Default)を選択します。 次へ をクリックします。

ターゲット・ランタイムにWebOTXサーバーランタイムがない場合、WebOTXマニュアル 1.2.4.1. WebOTXランタイムの設定 を参照の上、設定を行ってください。


図3.1.7.1-2

Java画面が表示されます。

次へ をクリックします。


図3.1.7.1-3

EJB モジュール画面が表示されます。

完了 をクリックします。


図3.1.7.1-4

StatefulBeanSampleプロジェクトが作成されます。


図3.1.7.1-5

プロジェクトのejbModule/META-INFフォルダ配下にMANIFEST.MFファイルが存在することを確認します。

EJB モジュール画面で、ejb-jar.xmlデプロイメント記述子の生成ON の場合、META-INFフォルダ配下にejb-jar.xmlファイルも存在することを確認してください。

3.1.7.2. EJB の生成

セッション Bean生成ウィザードを利用して、セッションBeanをプロジェクトに追加します。

メニューの ファイル > 新規 > その他 を選択すると、新規 画面が表示されます。

EJBセッション Bean (EJB 3.x) を選択して、次へ をクリックします。


図3.1.7.2-1

EJB 3.x セッション Bean の作成画面が表示されます。

Java パッケージにsampleを入力し、

クラス名にTestStatefulSessionBeanを入力し、

状態タイプステートフルに設定し、 ビジネス・インターフェースの作成リモートをONにします。

次へをクリックします。


図3.1.7.2-2

次のEJB 3.x セッション Bean の作成画面で、完了 をクリックします。  


図3.1.7.2-3

ステートフルセッションBeanのソースが追加されます。


図3.1.7.2-4

StatefulBeanSampleプロジェクトのejbModule配下にsampleというパッケージが追加されていることを確認します。

次にsampleパッケージ配下にTestStatefulSessionBeanRemote.javaとTestStatefulSessionBean.javaファイルが追加されていることを確認します。

以降の、StatefulBeanSampleプロジェクトの、メソッド作成から、デプロイおよび動作確認に至る手順は、 前述のステートレスセッションBeanでの、3.1.1.3. EJBメソッドの作成3.1.4. ステートレスセッションBeanの実行(Webアプリケーションからの呼び出し)と同様ですので、そちらを参照してください。

ただし、EJBテストクラインアントの作成時に、必要なプロジェクトの選択で、 ステートフルセッションBeanのStatefulBeanSampleを選択するなど、一部、読み替えが必要な箇所があります。


図3.1.7.2-5

それらに関しては、文中に、
    (※ステートフルの場合:・・・)
という記載があるので、それに沿ってチュートリアルを進めてください。

3.1.8. ステートフルセッションBeanのデプロイ

デプロイは、Webアプリケーションと、EJB アプリケーションを含む、Java EE アプリケーションとして行います。
Java EEアプリケーションの作成および、デプロイについては、Java EEアプリケーションのチュートリアルの 5.1.1. Java EEアプリケーションの作成 を参照してください。

Memo
5.1.1. Java EEアプリケーションの作成 は、 ステートレスセッションBean の場合を例に記載されています。
そのため、ステートフルセッションBean の場合には、
    ・ Java EE プロジェクト名(SampleApplication)
    ・ Java EEモジュール依存関係での選択項目(DynWebTest, StatefulBeanSample)
を、ここまでに作成したステートフルセッションBean の場合に合わせて、変更しながら進める必要があります。

3.1.9. ステートフルセッションBeanの実行

実行に関しては、ステートレスセッションBean の場合と同様ですので、 3.1.4. ステートレスセッションBeanの実行(Webアプリケーションからの呼び出し) をご覧下さい。

3.1.10. SingletonセッションBeanの作成

3.1.10.1. EJB プロジェクトの作成

ここでは、文字列のやり取りを行うSingletonセッションBeanを作成します。

EJB プロジェクト生成ウィザードを使用して、EJB プロジェクトを作成します。

メニューの ファイル > 新規 > プロジェクトを選択して、 新規プロジェクト画面を開きます。

EJB > EJB プロジェクトを選択して、次へ をクリックします。


図3.1.10.1-1

新規 EJB プロジェクト 画面が表示されます。

プロジェクト名に作成するプロジェクト名SingletonBeanSampleを入力して、ターゲット・ランタイムにWebOTX Application Server v9(Local Default)を選択します。 次へ をクリックします。

ターゲット・ランタイムにWebOTXサーバーランタイムがない場合、WebOTXマニュアル 1.2.4.1. WebOTXランタイムの設定 を参照の上、設定を行ってください。


図3.1.10.1-2

Java画面が表示されます。

次へ をクリックします。


図3.1.10.1-3

EJB モジュール画面が表示されます。

完了 をクリックします。


図3.1.10.1-4

SingletonBeanSampleプロジェクトが作成されます。


図3.1.10.1-5

プロジェクトのejbModule/META-INFフォルダ配下にMANIFEST.MFファイルが存在することを確認します。

EJB モジュール画面で、ejb-jar.xmlデプロイメント記述子の生成ON の場合、META-INFフォルダ配下にejb-jar.xmlファイルも存在することを確認してください。

3.1.10.2. EJB の生成

セッション Bean生成ウィザードを利用して、セッションBeanをプロジェクトに追加します。

メニューの ファイル > 新規 > その他 を選択すると、新規 画面が表示されます。

EJBセッション Bean (EJB 3.x) を選択して、次へ をクリックします。


図3.1.10.2-1

EJB 3.x セッション Bean の作成画面が表示されます。

Java パッケージにsampleを入力し、

クラス名にTestSingletonSessionBeanを入力し、

状態タイプSingletonに設定し、 ビジネス・インターフェースの作成リモートをONにします。

次へをクリックします。


図3.1.10.2-2

次のEJB 3.x セッション Bean の作成画面で、完了 をクリックします。  


図3.1.10.2-3

SingletonセッションBeanのソースが追加されます。


図3.1.10.2-4

SingletonBeanSampleプロジェクトのejbModule配下にsampleというパッケージが追加されていることを確認します。

次にsampleパッケージ配下にTestSingletonSessionBeanRemote.javaとTestSingletonSessionBean.javaファイルが追加されていることを確認します。

以降の、SingletonBeanSampleプロジェクトの、メソッド作成から、デプロイおよび動作確認に至る手順は、 前述のステートレスセッションBeanでの、3.1.1.3. EJBメソッドの作成3.1.4. ステートレスセッションBeanの実行(Webアプリケーションからの呼び出し)と同様ですので、そちらを参照してください。

ただし、EJBテストクラインアントの作成時に、必要なプロジェクトの選択で、 SingletonセッションBeanのSingletonBeanSampleを選択するなど、一部、読み替えが必要な箇所があります。


図3.1.10.2-5

それらに関しては、文中に、
    (Singletonの場合:・・・)
という記載があるので、それに沿ってチュートリアルを進めてください。

3.1.11. SingletonセッションBeanのデプロイ

デプロイは、Webアプリケーションと、EJB アプリケーションを含む、Java EE アプリケーションとして行います。
Java EEアプリケーションの作成および、デプロイについては、Java EEアプリケーションのチュートリアルの 5.1.1. Java EEアプリケーションの作成 を参照してください。

Memo
5.1.1. Java EEアプリケーションの作成 は、 ステートレスセッションBean の場合を例に記載されています。
そのため、SingletonセッションBean の場合には、
    ・ Java EE プロジェクト名(SampleApplication)
    ・ Java EEモジュール依存関係での選択項目(DynWebTest, SingletonBeanSample)
を、ここまでに作成したSingletonセッションBean の場合に合わせて、変更しながら進める必要があります。

3.1.12. SingletonセッションBeanの実行

実行に関しては、ステートレスセッションBean の場合と同様ですので、 3.1.4. ステートレスセッションBeanの実行(Webアプリケーションからの呼び出し) をご覧下さい。

3.1.13. メッセージ駆動型Beanの作成

メッセージ駆動型 Bean にはホーム インタフェースやリモート インタフェースがありません。 したがって、内部または外部のクライアントから直接アクセスできません。 クライアントは、JMS キューまたは JMS トピックにメッセージを送信することで間接的にメッセージ駆動型 Bean にメッセージを渡します。

ここでは、JMS キューでメッセージを送信する例について説明します。

3.1.13.1. 事前設定

JMS キュー関連の設定を行います。
設定に際しては、まず、配備予定のユーザドメインへログインしてください。
物理的な送信先の作成
下記コマンドで物理的送信先(JMS キュー)を作成します。作成される送信先リソースのJNDI名は、jms/MyQueueとなります。
        otxadmin> create-jmsdest --desttype queue --cascade MyQueue
    
詳細は、7.1.4.2. 物理的な送信先の作成を参照してください。
コネクションファクトリリソースの作成
下記コマンドでJMSサーバへの接続に必要なコネクションファクトリリソースを作成します。
        otxadmin>  create-jms-resource --restype javax.jms.QueueConnectionFactory jms/MyQCF
    
詳細は、7.1.4.3. コネクションファクトリリソースの作成を参照してください。

3.1.13.2. EJB プロジェクトの作成

ここでは、文字列のやり取りを行うメッセージ駆動型Beanを作成します。

EJBプロジェクトの作成

EJBプロジェクト生成ウィザードを使用して、EJB プロジェクトを作成します。

メニューのファイル > 新規 > プロジェクトを選択して、新規プロジェクト画面を開きます。

EJB > EJB プロジェクトを選択して、次へ をクリックします。


図3.1.13.2-1

新規 EJB プロジェクト 画面が表示されます。

プロジェクト名に作成するプロジェクト名MessageDrivenBeanSampleを入力して、ターゲット・ランタイムにWebOTX Application Server v9(Local Default)を選択します。 次へ をクリックします。

ターゲット・ランタイムにWebOTXサーバーランタイムがない場合、WebOTXマニュアル 1.2.4.1. WebOTXランタイムの設定 を参照の上、設定を行ってください。


図3.1.13.2-2

Java画面が表示されます。

次へ をクリックします。


図3.1.13.2-3

EJB モジュール画面が表示されます。

完了 をクリックします。


図3.1.13.2-4

プロジェクトMessageDrivenBeanSampleが作成されます。


図3.1.13.2-5

プロジェクトのMETA-INFフォルダ配下にMANIFEST.MFファイルが存在することを確認します。

EJB モジュール画面で、ejb-jar.xmlデプロイメント記述子の生成ON の場合、META-INFフォルダ配下にejb-jar.xmlファイルも存在することを確認してください。

3.1.13.3. EJB の生成

メッセージ駆動型 Bean生成ウィザードを利用して、Beanをプロジェクトに追加します。

メニューの ファイル > 新規 > その他 を選択すると、新規 画面が表示されます。

EJBメッセージ駆動型 Bean (EJB 3.x) を選択して、次へ をクリックします。


図3.1.13.3-1

EJB 3.x メッセージ駆動型 Bean の作成画面が表示されます。

Java パッケージにsampleを入力し、

クラス名にTestMessageDrivenBeanを入力し、

JMSがONの状態のままで、宛先タイプキューに設定し、次へをクリックします。


図3.1.13.3-2

次のEJB 3.x メッセージ駆動型 Bean の作成画面で、完了をクリックします。


図3.1.13.3-3

MessageDrivenBeanSampleプロジェクトにメッセージ駆動型Beanのソースが追加されます。


図3.1.13.3-4

3.1.13.4. EJBメソッドの作成

EJBのメソッドの追加を行います。

ビジネスメソッドの実装

TestMessageDrivenBeanクラスに物理的な送信先の作成で作成したJMS キューを指定し、onMessageメソッドを実装します。

    import javax.ejb.ActivationConfigProperty;
    import javax.ejb.MessageDriven;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.TextMessage;
		
	
    @MessageDriven(
      activationConfig = { @ActivationConfigProperty(
        propertyName = "destinationType", propertyValue = "javax.jms.Queue"
      ) }, 
      mappedName = "jms/MyQueue")
    public class TestMessageDrivenBean implements MessageListener {
    
        /**
         * Default constructor. 
         */
        public TestMessageDrivenBean() {
            // TODO Auto-generated constructor stub
        }
     
        /**
         * @see MessageListener#onMessage(Message)
         */
        public void onMessage(Message message) {
            // TODO Auto-generated method stub
         TextMessage msg = (TextMessage)message;
           try {
            System.out.println(msg.getText()+" come from MessageDrivenBean");
           } catch (JMSException e) {
            e.printStackTrace();
           }
        }
    }
    
TestMessageDrivenBeanクラスは下図のようになります。


図3.1.13.4-1

最後に、メニュー プロジェクト>クリーンでビルドしてください。


図3.1.13.4-2

3.1.13.5. テストクライアントの作成

Java プロジェクト ウィザードを使用して、プロジェクトを作成します。 メニュー のファイル > 新規 > プロジェクト を選択して、新規プロジェクト画面を開きます。 Java > Java プロジェクト を選択して、次へ をクリックします。


図3.1.13.5-1

新規 Java プロジェクト 画面が表示されます。 プロジェクト名に作成するプロジェクト名、EJBTestMDClientを入力します。 完了をクリックします。


図3.1.13.5-2

プロジェクトEJBTestMDClientが作成されます。 実行用ライブラリをクラスパスに追加します。EJBTestMDClientの右クリックメニュープロパティを選択し ます。 プロパティー画面で、Javaのビルド・パス>ライブラリーをクリックして、外部JARの追加 をクリックします。


図3.1.13.5-3

JAR の選択ダイアログで、クラスパスを次のように設定します。{INSTALL_ROOT}は、WebOTXのインストールディレクトリです。
表3.1.13.5-1
JARファイル名
${INSTALL_ROOT}/lib/wo-client.jar
${INSTALL_ROOT}/lib/install/applications/jmsra/wojmsra.jar

EJBTestMDClientプロジェクトにクライアント用クラスを作成します。

メニューの ファイル > 新規 > その他... を選択して、新規 ウィザード画面を表示します。クラス を選択して、次へをクリックします。


図3.1.13.5-4

新規 Javaクラス画面が表示されます。
名前EJBTestClientを入力します。
パッケージに、EJBのクラスと同じsampleを入力します。
public static void main(String[] args)を選択します。
完了をクリックします。


図3.1.13.5-5

JMS キューにメッセージを送信する過程について説明します。以下の例は、 3.1.13.1. 事前設定 > 物理的な送信先の作成で作成したJMS キューにメッセージを送信します。
JMS キューにメッセージを送信するには、InitialContextクラスのインスタンスを使います。
このインスタンスのlookupメソッドを、コネクションファクトリ名を引数に渡して呼び出すと、コネクションファクトリを作成することができます。
同様に、このインスタンスのlookupメソッドを、 JMSキュー名のJNDI名を引数に渡して呼び出すと、メッセージ送信先を取得することができます。
ここまでに、作成したコネクションファクトリと取得したメッセージ送信先を利用し、JMS キューにメッセージを送信することができます。

コードは、以下のようになります:
 
    package sample;

    import javax.jms.QueueConnection;
    import javax.jms.QueueConnectionFactory;
    import javax.jms.QueueSession;
    import javax.jms.TextMessage;
    import javax.naming.Context;
    import javax.naming.InitialContext;

    public class EJBTestMDClient {
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		send("TestString");
    
    	}
    
    	public static void send(String msg) {
    		try {
    			Context ctx = new InitialContext();
    			QueueConnectionFactory factory = (QueueConnectionFactory) ctx
    					.lookup("jms/MyQCF");
    			QueueConnection con = factory.createQueueConnection();
    			QueueSession session = con.createQueueSession(false,
    					QueueSession.AUTO_ACKNOWLEDGE);
    			javax.jms.Queue destination = (javax.jms.Queue) ctx
    					.lookup("jms/MyQueue");
    			javax.jms.QueueSender sender = session.createSender(destination);
    			TextMessage message = session.createTextMessage(msg);
    			sender.send(message);
    			session.close();
    			con.close();
    			System.out.println("Success");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    
EJBTestMDClientクラスは下図のようになります。


図3.1.13.5-6

3.1.14. メッセージ駆動型Beanのデプロイ

メッセージ駆動型Bean MessageDrivenBeanSample をサーバにデプロイします。
デプロイの手順については、3.2.7. EJBコンポーネントのデプロイ をご覧下さい。

3.1.15. メッセージ駆動型Beanの実行

作成したテストクライアント EJBTestMDClient を実行して、EJBの動作確認を行います。
実行構成の設定方法について、3.1.5.1. EJBテストクライアントの作成 > 実行構成の設定をご覧下さい。 メニューから実行 > 構成実行を選択し、表示された構成実行画面で、実行をクリックします。


図3.1.15-1

EJBで処理が行われ、コンソールに、以下の結果が表示されます。


図3.1.15-2

同時に、サーバのログファイルserver.log(${INSTALL_ROOT}/domains/domain1/logs/server.log)に下記の内容は出力されます。
 
    TestString come from MessageDrivenBean
    
${INSTALL_ROOT}は、WebOTXのインストールディレクトリです。