CFOBJECT タグを使用して EJB にアクセスする場合は、このタグを使用して JRun との通信に必要なオブジェクトへの参照を取得します。オブジェクトへの参照を取得すると、ColdFusion ファイルから EJB にアクセスして、その EJB のメソッドを呼び出すことができます。CFOBJECT を使用するには、次の手順を実行します。
アクセス対象の EJB は、JRun サーバーにすでに公開されていなければなりません。EJB 公開の詳細については、第 35 章を参照してください。ここでは、JRun インストール ルート/samples/sample1a/ejbeans
にある Balance エンティティ Bean にアクセスします。このサンプルを実行するには、まず『JRun サンプル ガイド』で説明しているサンプル 1a をコンパイルして公開する必要があります。
CFOBJECT を使用して EJB と対話する前に、次の設定を ColdFusion Administrator の Java ペインで定義する必要があります。
ejipt_client.jar
ファイルのファイル名とパス/runtime
ディレクトリにある EJB の .jar
ファイルの名前とパス。このファイルは Deploy ツールにより作成され、JRun の起動時に /deploy
ディレクトリから /runtime
ディレクトリにコピーされます。次にサンプル クラスパス指定の例を示します。
c:\program files\allaire\jrun\lib\ejipt_client.jar; c:\program files\allaire\jrun\servers\default\runtime\ sample1a_ejb.jar
java.security.policy=c:\program files\allaire\jrun\lib\ jrun.policy;java.security.manager=java.rmi.RMISecurityManager
EJB を公開し、ColdFusion Administrator で設定を定義したら、サーバー マシンを再起動してください。
CFML ファイルから EJB にアクセスするには、次の手順を実行します。
javax.naming.context
への参照を取得します。この参照は、プロパティで使用する定数値へのアクセスに使用します。
java.util.Hashtable
への参照を取得します。この参照は、プロパティの定義に使用します。CFOBJECT を呼び出したら、init
メソッドを呼び出して java.util.HashTable
コンストラクタを呼び出します。javax.naming.InitialContext
への参照を取得します。CFOBJECT を呼び出したら、プロパティを指定して init
メソッドを呼び出し、java.util.InitialContext
コンストラクタを呼び出します。初期化が終了すると、この参照は EJB の検索に使用されます。
次の CFML ファイルでは、サンプル 1a で定義された Balance
Bean にアクセスして、save
メソッドを呼び出します。
<html>
<head> <title>CFOBJECT Test</title> </head> <body> <H1>CFOBJECT TEst</H1> <!-- Context オブジェクトを作成して、静的なフィールドで取得します。 ---> <CFOBJECT action=create name=ctx type="JAVA" class="javax.naming.Context"> <!-- Properties オブジェクトを作成して、明示的コンストラクタを呼び出します。---> <CFOBJECT action=create name=prop type="JAVA" class="java.util.Hashtable"> <!--- CFOBJECT によって与えられる初期化メソッドを呼び出して、 HashTable コンストラクタを呼び出します。---> <cfset prop.init()> <!-- プロパティを指定します。 ---> <cfset prop.put(ctx.INITIAL_CONTEXT_FACTORY, "allaire.ejipt.ContextFactory")> <cfset prop.put(ctx.PROVIDER_URL, "ejipt://rnielsen:2323")> <cfset prop.put(ctx.SECURITY_PRINCIPAL, "chief")> <cfset prop.put(ctx.SECURITY_CREDENTIALS, "pass")> <!-- InitialContext を作成します。 ---> <CFOBJECT action=create name=initContext type="JAVA" class="javax.naming.InitialContext"> <!--- CFOBJECT によって与えられる初期化メソッドを呼び出して、 InitialContext コンストラクタにプロパティを渡します。 ---> <cfset initContext.init(prop)> <!--- ホーム オブジェクトへの参照を渡します。 ---> <cfset home = initContext.lookup("sample1a.BalanceHome")> <!--- エンティティ Bean の新しいインスタンスを作成します。 (ハードコード化された預金口座番号) または、検索メソッドを使用して既存のエンティティ Bean を探します。---> <cfset balance = home.create(123)> <!--- エンティティ Bean 内でメソッドを呼び出します。 この例では、500 ドルを預金するようにハードコード化されています。---> <cfset balance.save(500)> <!--- コンテキストを終了します。 ---> <cfset initContext.close()> </body> </html>