Avitek Medical Record 開発チュートリアル

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

 


MedRec アプリケーションの開発

 


チュートリアル 10 : EJBGen を使用した EJB デプロイメント記述子の生成

このチュートリアルでは、WebLogic Server EJBGen ユーティリティを使用して、プログラマが記述したメインの EJB Bean ソース ファイル (ビジネス ロジックを含むもの) から、デプロイメント記述子ファイル (ejb-jar.xml および weblogic-ejb-jar.xml) と、ホーム インタフェース ファイルなどの EJB ソース ファイルを生成する方法を例示します。特に、このチュートリアルでは physicianEar アプリケーションの PhysicianSession EJB を使用します。

EJBGen は Bean ファイルの中の JDK 5.0 メタデータ アノテーションを使用して、デプロイメント記述子ファイルと補助的な EJB Java ソース ファイル (ホーム インタフェースやリモート インタフェースなど) を生成します。つまり、ビジネス ロジックを含む 1 つのファイルをプログラミングし、このファイルの内部で EJBGen 固有のアノテーションを使用して EJB の形式や動作を指定するだけでよいのです。EJBGen ユーティリティによってすべてのサポート ファイルが生成されます。

wlcompile Ant タスクは、通常の *.java 拡張子ではなく *.ejb 拡張子を持つ Java ファイルがあると、自動的に EJBGen ユーティリティを呼び出します。したがって、EAR 構造の中に EJBGen のアノテーションを付けたファイルと標準の Java ファイルを混在させ、1 つの wlcompile Ant タスクを使用してすべてのコードをコンパイルすることができます。

MedRec アプリケーションの EJB ファイルには、すでに EJBGen メタデータ アノテーションが付いています。

このチュートリアルは、以下の節で構成されています。

 


前提条件

このチュートリアルを始める前に、「チュートリアル 9 : 開発環境の MedRec のデプロイ」を完了して、physicianEar アプリケーションのコンパイル、MedRec サーバの起動、EJB を含むアプリケーションのデプロイを済ませておきます。

チュートリアル 5 までを完了しているが、それ以降のチュートリアルを 1 つまたは複数行っていないため、physicianEar アプリケーションをまだデプロイしていない場合は、c:\medrec_tutorial\src\physicianEar サブディレクトリに移動し、環境を設定し、Ant を使用してデフォルトの build.xml ファイルを実行することでアプリケーション全体をビルドして WebLogic Server にデプロイすれば、追いつくことができます。

prompt> c:\bea\user_projects\domains\MedRecDomain\bin\setDomainEnv.cmd
prompt> cd c:\medrec_tutorial\src\physicianEar
prompt> ant -f build.xml build deploy.physician.ear

 


手順

以下の手順では、Administration Console を使用してデプロイ済み EJB の管理情報を表示し、EJBGen メタデータ アノテーションを含む EJB Java ソース ファイルを表示し、EJBGen が生成するファイルを表示して、最後に、EJBGen を使用してこれらのファイルを再生成します。

手順 1 : Administration Console を使用してデプロイ済み EJB の情報を表示する

この手順は EJBGen を使用するために必要ではありません。Administration Console を使用したデプロイ済み EJB の表示に関する追加情報としてのみ提供されています。

  1. ブラウザで以下を指定して Administration Console を開きます。
  2. http://host:7101/console

    host は MedRecServer が実行されているコンピュータを指します。ブラウザが MedRecServer と同じコンピュータにある場合は、http://localhost:7101/console という URL を使用できます。

  3. ユーザ名とパスワードの両方に weblogic を指定して、[ログイン] をクリックします。
  4. 左の [ドメイン構造] ウィンドウで、[MedRecDomainArrow symbolデプロイメント] をクリックします。
  5. 右ペインの [デプロイメント] テーブルで、tutorial_deployment エンタープライズ アプリケーションを展開します。
  6. アプリケーションに含まれるすべてのモジュール、EJB、および Web サービスのリストが、アプリケーション名の下に表示されます。

    注意: 前提条件」の指示に従って追いついた場合は、アプリケーションは PhysicianEar という名前で表示されます。
  7. [EJB] 見出しの下の [PhysicianSessionEJB] をクリックします。
  8. タブを選択して EJB に関する情報を表示します。たとえば、[コンフィグレーション] タブには、PhysicianSessionEJB に関するセッションやトランザクションの情報が表示されます。

手順 2 : EJBGen メタデータ アノテーションを含む EJB Bean クラス ファイルを表示する

  1. コマンド ウィンドウを開いて、PhysicianSessionEJB の Java ソース ファイルを格納しているディレクトリに移動します。
  2. prompt> cd C:\medrec_tutorial\src\physicianEar\physSessionEjbs\com\bea\medrec\controller
  3. IDE またはテキスト エディタを使用して PhysicianSessionEJB.ejb ファイルを表示します。
  4. prompt> notepad PhysicianSessionEJB.ejb

    この Java ソース ファイルには .ejb 拡張子が付いているため、wlcompile Ant コマンドは自動的に EJBGen ユーティリティを使用して、このファイルをデプロイ可能な EJB にコンパイルします。ファイルの処理方法は wlcompile Ant が判断してくれるので、EJBGen アノテーションを使用する EJB をプログラミングするときに便利です。

    PhysicianSessionEJB.ejb ファイルは、プログラマがコーディングし、EJB の動作を定義するビジネス ロジックが含まれる、メインのステートレス セッション EJB Bean 実装クラス ファイルです。このファイルでは、標準の J2EE javax.ejb.SessionBean インタフェースと同様のコンビニエンス クラスである、WebLogic 固有の抽象クラス weblogic.ejb.GenericSessionBean を実装しています。EJB の形式と動作をさらに記述する EJBGen メタデータ アノテーションが使用されています。一般的なアノテーションには次のようなものがあります。

    • @Session - EJB のタイプがステートレス セッションであることをクラス レベルで指定します。次の例のように、属性を使用して EJB の特性を指定します。
    • @Session(maxBeansInFreePool = "1000",
      initialBeansInFreePool = "0",
      transTimeoutSeconds = "0",
      type = Session.SessionType.STATELESS,
      defaultTransaction = Constants.TransactionAttribute.REQUIRED,
      enableCallByReference = Constants.Bool.TRUE,
      ejbName = "PhysicianSessionEJB")
    • @JndiName - EJB のリモートまたはローカル JNDI 名をクラス レベルで指定します。次に例を示します。
    • @JndiName(remote = "PhysicianSessionEJB.PhysicianSessionHome")
    • @RemoteMethod - 生成されるリモート インタフェースで公開されるメソッドをメソッド レベルで指定します。

EJBGen に関する追加情報とアノテーションの完全なリストについては、「EJBGen リファレンス」を参照してください。

手順 3 : 生成済みのデプロイメント記述子ファイルと Java ファイルを表示する

チュートリアル 7 : Ant タスクによる分割開発ディレクトリ アプリケーションのコンパイル」では、wlcompile Ant タスクを実行し、その中で、EJBGen ユーティリティを実行して physicianEar アプリケーションの EJB をコンパイルしました。この手順では、EJBGen によって生成され、\build ディレクトリに格納されているデプロイメント記述子ファイルと補助的な Java インタフェースを表示する方法について説明します。

  1. コマンド ウィンドウを開いて、EJBGen ユーティリティによって生成された PhysicianSessionEJB のデプロイメント記述子ファイルを格納しているディレクトリに移動します。
  2. prompt> cd c:\medrec_tutorial\build\physicianEar\physSessionEjbs\META-INF
  3. テキスト エディタを使用して 2 つの EJB 関連のデプロイメント記述子ファイルを表示します。
    • ejb-jar.xml - PhysicianSessionEJB、そのインタフェース、およびそのセッション タイプとトランザクション タイプを指定する、標準の J2EE デプロイメント記述子。
    • weblogic-ejb-jar.xml - PhysicianSessionEJB のプールやタイムアウトなどのデプロイメント設定を指定する、WebLogic 固有のデプロイメント記述子。
    • これらのファイルで使用される要素の詳細については、ejb-jar_2_1.xsd および weblogic-ejb-jar.xsd XML スキーマ ファイルを参照してください。

  4. コンパイル済みの EJB クラスを格納しているディレクトリに移動します。wlcompile Ant タスクは EJB ファイルの Java ソースもこのディレクトリにコピーしています。
  5. prompt> cd c:\medrec_tutorial\build\physicianEar\physSessionEjbs\com\bea\medrec\controller
  6. IDE またはテキスト エディタを使用して、PhysicianSessionEJB を構成する Java ソース ファイルを表示します。これらのファイルには、プログラマによって作成された、EJBGen アノテーションを含む Bean クラス (「手順 2 : EJBGen メタデータ アノテーションを含む EJB Bean クラス ファイルを表示する」を参照) や、EJBGen ユーティリティによって生成された以下の Java ファイルがあります。
    • PhysicianSession.java - addRecordgetRecordSummary などのパブリック メソッドのシグネチャを記述した EJB のリモート インタフェース。このインタフェースは J2EE javax.ejb.EJBObject インタフェースを拡張しています。
    • PhysicianSessionHome.java - J2EE javax.ejb.EJBHome インタフェースを拡張した EJB のホーム インタフェース。

手順 4: EJBGen ユーティリティを使用してデプロイメント記述子ファイルと EJB ファイルを再生成する

分割開発ディレクトリ構造内でアノテーションを使用して EJB をプログラミングする場合、通常、ソース ディレクトリ全体に対して wlcompile Ant タスクを実行するだけで、ビルド ディレクトリに EJB がコンパイルされ、そのサポート ファイルが生成されます。アノテーションを使用する EJB ファイルに *.ejb 拡張子が付いていれば、wlcompile Ant タスクは、そのファイルに対して EJBGen Ant タスクを実行することを自動的に認識します。

ただし、wlcompile Ant タスクとは別に、EJB デプロイメント記述子と補助的なホームおよびリモート インタフェースを個別に生成する場合は、EJBGen ユーティリティを単独で使用することもできます。EJBGen ユーティリティは以下のいずれかの方法で実行できます。

以下の手順では Ant タスクの使用方法を示します。

  1. コマンド ウィンドウを開き、環境を設定します。
  2. prompt> c:\bea\user_projects\domains\medrecdomain\bin\setDomainEnv.cmd
  3. physicianEar サブディレクトリに移動します。
  4. prompt> cd c:\medrec_tutorial\src\physicianEar
  5. テキスト エディタを使用して ejbgen.xml という新しいファイルを作成します。
  6. prompt> notepad ejbgen.xml
    注意: このチュートリアルで ejbgen.xml ファイルを手動で作成する代わりに、ejbgen_tutorial.xml という名前のファイルを ejbgen.xml という名前の新しいファイルにコピーして、手順を進めることもできます。
  7. ejbgen.xml ファイルの最初に、ejbgen_tutorial という名前のプロジェクトを定義し、デフォルトのターゲット run-ejbgen を指定します。
  8. <project name="ejbgen_tutorial" default="run-ejbgen">
  9. taskdef タスクを使用して、EJBGen タスクの完全なクラス名を定義します。
  10.   <taskdef name="ejbgen"
    classname="com.bea.wls.ejbgen.ant.EJBGenAntTask" />
  11. PhysicianSessionEJB.ejb Java ファイルに対して EJBGen タスクを実行する、メインのターゲットを定義します。
  12.   <target name="run-ejbgen">
          <ejbgen
    source="1.5"
    outputDir = "C:\medrec_tutorial\build\physicianEar\physSessionEjbs"
    descriptorDir = "C:\medrec_tutorial\build\physicianEar\physSessionEjbs\META-INF"
    forceGeneration = "true"
    >
    <fileset dir="physSessionEjbs/com/bea/medrec/controller"
    includes="PhysicianSessionEJB.ejb" />
    </ejbgen>
        </target>

    source 属性では、ソース EJB Bean ファイルが (以前のリリースの WebLogic Server で使用された Javadoc タグではなく) JDK 1.5 メタデータ アノテーションを使用することを指定しています。outputDir および descriptorDir 属性はそれぞれ、EJBGen がホームおよびリモート インタフェースとデプロイメント記述子を生成するディレクトリを指定しています。forceGeneration 属性では、ソース ファイルに変更がなかった場合でも、常にファイルを生成することを指定しています。最後に、Ant 標準の fileset タスクでは、ソースの EJB Bean ファイルを格納しているディレクトリと EJBGen が処理するファイルの名前 (この場合は PhysicianSessionEJB.ejb) を指定しています。

  13. プロジェクト要素を閉じて、ejbgen.xml ファイルを完成します。
  14. </project>
  15. ファイルの内容は次のようになっている必要があります。
  16. <project name="ejbgen_tutorial" default="run-ejbgen">
      <taskdef name="ejbgen"
    classname="com.bea.wls.ejbgen.ant.EJBGenAntTask" />
      <target name="run-ejbgen">
          <ejbgen
    source="1.5"
    outputDir = "C:\medrec_tutorial\build\physicianEar\physSessionEjbs"
    descriptorDir = "C:\medrec_tutorial\build\physicianEar\physSessionEjbs\META-INF"
    forceGeneration = "true"
    >
    <fileset dir="physSessionEjbs/com/bea/medrec/controller"
    includes="PhysicianSessionEJB.ejb" />
    </ejbgen>
        </target>
    </project>

    ファイルを保存してテキスト エディタを終了します。

  17. 同じコマンド シェルで、ビルド スクリプトを実行するコマンドを入力します。
  18. prompt> ant -f ejbgen.xml

    ejbgen タスクにより、以下のような出力が表示されます。

    Buildfile: ejbgen.xml
    run-ejbgen:
       [ejbgen] EJBGen WebLogic Server 9.2 SP0  Fri Jun 23 20:47:26 EDT 2006 783464
       [ejbgen]
    [ejbgen] Creating C:\medrec_tutorial\build\physicianEar\physSessionEjbs\com\bea\medrec\controller\PhysicianSessionHome.java
    [ejbgen] Creating C:\medrec_tutorial\build\physicianEar\physSessionEjbs\com\bea\medrec\controller\PhysicianSession.java
    [ejbgen] Creating C:\medrec_tutorial\build\physicianEar\physSessionEjbs\META-INF\ejb-jar.xml
    Creating C:\medrec_tutorial\build\physicianEar\physSessionEjbs\META-INF\weblogic-ejb-jar.xml
    BUILD SUCCESSFUL
    Total time: 3 seconds

    上記の出力が表示されなかった場合や、問題が発生した場合には、代わりに、このチュートリアルで提供されている Ant ビルド ファイルを使用できます。

    prompt> ant -f ejbgen_tutorial.xml
  19. ファイルの作成日時をチェックして、デプロイメント記述子とホームおよびリモート インタフェースが実際に再生成されたことを確認します。
  20. prompt> dir c:\medrec_tutorial\build\physicianEar\physSessionEjbs\META-INF
    prompt> dir c:\medrec_tutorial\build\physicianEar\physSessionEjbs\com\bea\medrec\controller\*.java

    ファイルの実際の内容は、wlcompile Ant タスクで前に生成したファイルの内容と同じです。

 


ベスト プラクティス

アプリケーションの EJB コンポーネントの開発には EJBGen を使用します。EJB の開発とコード メンテナンスを簡素化するには、Bean の実装ファイルのみを記述して EJBGen メタデータ アノテーションを付け、その後に EJBGen を使用して残りのすべてのファイル (ホーム インタフェース、ローカル インタフェース、デプロイメント記述子ファイル) を生成します。

 


全体像

MedRec をコンパイルしてデプロイするスクリプトは、EJBGen を使用してアプリケーションのほとんどの EJB ファイルを生成します。wlcompile*.ejb 拡張子の付くファイルを処理するときに、EJBGen タスクが wlcompile タスクによって暗黙的に呼び出されます。

PhysicianSessionEJB.ejb Java ファイルには、EJBGen が EJB 記述子ファイルとホーム インタフェースを生成するために必要なすべての情報が含まれています。EJBGen のアノテーションを参照するには、C:\medrec_tutorial\src\physicianEar\physSessionEjbs\com\bea\medrec\controller\PhysicianSessionEJB.ejb を IDE またはテキスト エディタで開きます。

たとえば、以下のクラス レベルの @Session アノテーションでは、クラスがステートレス セッション EJB を実装することを指定し、プールとタイムアウトの設定を定義しています。この設定は生成される weblogic-ejb-jar.xml に含まれます。

@Session(maxBeansInFreePool = "1000",
initialBeansInFreePool = "0",
transTimeoutSeconds = "0",
type = Session.SessionType.STATELESS,
defaultTransaction = Constants.TransactionAttribute.REQUIRED,
enableCallByReference = Constants.Bool.TRUE,
ejbName = "PhysicianSessionEJB")
public class PhysicianSessionEJB extends GenericSessionBean {
...

 


トラブルシューティング

RecordEJB エンティティ Bean は、PointBase データベースにハードコード化されています。したがって、Medrec アプリケーションで Pointbase 以外のデータベース (Oracle、MySQL など) を使用する場合は、JDBC データ ソース (グローバル スコープおよびアプリケーション スコープの両方) が新しいデータベースを指すように変更するだけでなく、新しいデータベースに合わせて RecordEJB エンティティ Bean のソース コードを変更する必要があります。

RecordEJB エンティティ Bean のソース コードは、次の EJBGen ファイルに含まれています。

C:\medrec_tutorial\src\medrecEar\entityEjbs\com\bea\medrec\entities\RecordEJB.ejb

Pointbase データベースの使用は、@Entity メタデータ アノテーションの databaseType 属性によってハードコード化されています。次のコードの抜粋では、該当箇所が太字で示されています。

@Entity(maxBeansInCache = "1000",
dataSourceName = "jdbc/MedRecTxDataSource",
transTimeoutSeconds = "0",
ejbName = "RecordEJB",
reentrant = Constants.Bool.FALSE,
concurrencyStrategy = Constants.ConcurrencyStrategy.DATABASE,
delayDatabaseInsertUntil = Entity.DelayDatabaseInsertUntil.EJB_POST_CREATE,
tableName = "record",
readTimeoutSeconds = "600",
primKeyClass = "java.lang.Integer",
defaultTransaction = Constants.TransactionAttribute.MANDATORY,
abstractSchemaName = "RecordEJB",
databaseType = Entity.DatabaseType.POINTBASE)

たとえば、Oracle データベースを指定するには、databaseType 属性の値を Entity.DatabaseType.ORACLE に変更します。

databaseType 属性の有効な値については、「weblogic.ejbgen.Entity」を参照してください。

 


関連情報


  ページの先頭       前  次