![]() ![]() ![]() ![]() |
注意 : | このバージョンの MedRec アプリケーションでは、EJB は、Java EE 5 の新しい EJB 3.0 プログラミング モデルではなく、EJB 2.X プログラミング モデルに準拠します。つまり、たとえば、アプリケーション内の EJB では、@javax.ejb.Stateless など、EJB 3.0 メタデータ アノテーションではなく、EJBGen タグが Java ソース コードで使用されます。 |
注意 : | EJBGen のユーティリティおよびタグは、WebLogic Server 独自のものであり、EJB 3.0 ではサポートされていません。 |
このチュートリアルでは、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 を使用してこれらのファイルを再生成します。
この手順は EJBGen を使用するために必要ではありません。Administration Console を使用したデプロイ済み EJB の表示に関する追加情報としてのみ提供されています。
http://
host
:7101/console
host
は MedRecServer が実行されているコンピュータを指します。ブラウザが MedRecServer と同じコンピュータにある場合は、http://localhost:7101/console
という URL を使用できます。
weblogic
を指定して、[ログイン] をクリックします。tutorial_deployment
エンタープライズ アプリケーションを展開します。
アプリケーションに含まれるすべてのモジュール、EJB、および Web サービスのリストが、アプリケーション名の下に表示されます。
注意 : | 「前提条件」の指示に従って追いついた場合は、アプリケーションは PhysicianEar という名前で表示されます。 |
PhysicianSessionEJB
] をクリックします。PhysicianSessionEJB
に関するセッションやトランザクションの情報が表示されます。PhysicianSessionEJB
の Java ソース ファイルを格納しているディレクトリに移動します。prompt> cd C:\medrec_tutorial\src\physicianEar\physSessionEjbs\com\bea\medrec\controller
PhysicianSessionEJB.ejb
ファイルを表示します。prompt> notepad PhysicianSessionEJB.ejb
この Java ソース ファイルには .ejb
拡張子が付いているため、wlcompile
Ant コマンドは自動的に EJBGen ユーティリティを使用して、このファイルをデプロイ可能な EJB にコンパイルします。ファイルの処理方法は wlcompile
Ant が判断してくれるので、EJBGen アノテーションを使用する EJB をプログラミングするときに便利です。
PhysicianSessionEJB.ejb
ファイルは、プログラマがコーディングし、EJB の動作を定義するビジネス ロジックが含まれる、メインのステートレス セッション EJB Bean 実装クラス ファイルです。このファイルでは、標準の Java EE javax.ejb.SessionBean
インタフェースと同様のコンビニエンス クラスである、WebLogic 固有の抽象クラス weblogic.ejb.GenericSessionBean
を実装しています。EJB の形式と動作をさらに記述する EJBGen メタデータ アノテーションが使用されています。一般的なアノテーションには次のようなものがあります。
@weblogic.ejb.Session
- EJB のタイプがステートレス セッションであることをクラス レベルで指定します。次の例のように、属性を使用して EJB の特性を指定します。@Session(maxBeansInFreePool = "1000",
initialBeansInFreePool = "0",
transTimeoutSeconds = "0",
type = Session.SessionType.STATELESS,
defaultTransaction = Constants.TransactionAttribute.REQUIRED,
enableCallByReference = Constants.Bool.TRUE,
ejbName = "PhysicianSessionEJB")
@weblogic.ejb.JndiName
- EJB のリモートまたはローカル JNDI 名をクラス レベルで指定します。次に例を示します。@JndiName(remote = "PhysicianSessionEJB.PhysicianSessionHome")
@weblogic.ejb.RemoteMethod
- 生成されるリモート インタフェースで公開されるメソッドをメソッド レベルで指定します。
EJBGen に関する追加情報とアノテーションの完全なリストについては、「EJBGen リファレンス」を参照してください。
「チュートリアル 7 : Ant タスクによる分割開発ディレクトリ アプリケーションのコンパイル」では、wlcompile
Ant タスクを実行し、その中で、EJBGen ユーティリティを実行して physicianEar
アプリケーションの EJB をコンパイルしました。この手順では、EJBGen によって生成され、\build
ディレクトリに格納されているデプロイメント記述子ファイルと補助的な Java インタフェースを表示する方法について説明します。
PhysicianSessionEJB
のデプロイメント記述子ファイルを格納しているディレクトリに移動します。prompt> cd c:\medrec_tutorial\build\physicianEar\physSessionEjbs\META-INF
ejb-jar.xml
- PhysicianSessionEJB、そのインタフェース、およびそのセッション タイプとトランザクション タイプを指定する、標準の Java EE デプロイメント記述子。weblogic-ejb-jar.xml
- PhysicianSessionEJB
のプールやタイムアウトなどのデプロイメント設定を指定する、WebLogic 固有のデプロイメント記述子。
これらのファイルで使用される要素の詳細については、
ejb-jar_2_1.xsd および
weblogic-ejb-jar.xsd XML スキーマ ファイルを参照してください。
wlcompile
Ant タスクは EJB ファイルの Java ソースもこのディレクトリにコピーしています。prompt> cd c:\medrec_tutorial\build\physicianEar\physSessionEjbs\com\bea\medrec\controller
PhysicianSessionEJB
を構成する Java ソース ファイルを表示します。これらのファイルには、プログラマによって作成された、EJBGen アノテーションを含む Bean クラス (「手順 2 : EJBGen メタデータ アノテーションを含む EJB Bean クラス ファイルを表示する」を参照) や、EJBGen ユーティリティによって生成された以下の Java ファイルがあります。
分割開発ディレクトリ構造内でアノテーションを使用して EJB をプログラミングする場合、通常、ソース ディレクトリ全体に対して wlcompile
Ant タスクを実行するだけで、ビルド ディレクトリに EJB がコンパイルされ、そのサポート ファイルが生成されます。アノテーションを使用する EJB ファイルに *.ejb
拡張子が付いていれば、wlcompile
Ant タスクは、そのファイルに対して EJBGen Ant タスクを実行することを自動的に認識します。
ただし、wlcompile
Ant タスクとは別に、EJB デプロイメント記述子と補助的なホームおよびリモート インタフェースを個別に生成する場合は、EJBGen ユーティリティを単独で使用することもできます。EJBGen ユーティリティは以下のいずれかの方法で実行できます。
prompt> c:\bea\user_projects\domains\medrecdomain\bin\setDomainEnv.cmd
physicianEar
サブディレクトリに移動します。prompt> cd c:\medrec_tutorial\src\physicianEar
ejbgen.xml
という新しいファイルを作成します。prompt> notepad ejbgen.xml
注意 : | このチュートリアルで ejbgen.xml ファイルを手動で作成する代わりに、ejbgen_tutorial.xml という名前のファイルを ejbgen.xml という名前の新しいファイルにコピーして、手順を進めることもできます。 |
ejbgen.xml
ファイルの最初に、ejbgen_tutorial
という名前のプロジェクトを定義し、デフォルトのターゲット run-ejbgen
を指定します。<project name="ejbgen_tutorial" default="run-ejbgen">
taskdef
タスクを使用して、EJBGen タスクの完全なクラス名を定義します。<taskdef name="ejbgen"
classname="com.bea.wls.ejbgen.ant.EJBGenAntTask" />
PhysicianSessionEJB.ejb
Java ファイルに対して EJBGen タスクを実行する、メインのターゲットを定義します。 <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
) を指定しています。
ejbgen.xml
ファイルを完成します。</project>
<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>
prompt> ant -f ejbgen.xml
ejbgen
タスクにより、以下のような出力が表示されます。
Buildfile: ejbgen.xml
run-ejbgen:
[ejbgen] EJBGen WebLogic Server 10.0 SP0 Mon Mar 26 02:02:31 BST 2007 914577
[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: 7 seconds
上記の出力が表示されなかった場合や、問題が発生した場合には、代わりに、このチュートリアルで提供されている Ant ビルド ファイルを使用できます。
prompt> ant -f ejbgen_tutorial.xml
prompt> dir c:\medrec_tutorial\build\physicianEar\physSessionEjbs\META-INF
prompt> dir c:\medrec_tutorial\build\physicianEar\physSessionEjbs\com\bea\medrec\controller\*.java
アプリケーションの 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 またはテキスト エディタで開きます。
たとえば、以下のクラス レベルの @weblogic.ejb.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 データベースの使用は、@weblogic.ejb.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」を参照してください。
![]() ![]() ![]() |