CFOBJECT の使用

CFOBJECT タグを使用して EJB にアクセスする場合は、このタグを使用して JRun との通信に必要なオブジェクトへの参照を取得します。オブジェクトへの参照を取得すると、ColdFusion ファイルから EJB にアクセスして、その EJB のメソッドを呼び出すことができます。CFOBJECT を使用するには、次の手順を実行します。

EJB の公開

アクセス対象の EJB は、JRun サーバーにすでに公開されていなければなりません。EJB 公開の詳細については、第 35 章を参照してください。ここでは、JRun インストール ルート/samples/sample1a/ejbeans にある Balance エンティティ Bean にアクセスします。このサンプルを実行するには、まず『JRun サンプル ガイド』で説明しているサンプル 1a をコンパイルして公開する必要があります。

ColdFusion Administrator における Java 設定の定義

CFOBJECT を使用して EJB と対話する前に、次の設定を ColdFusion Administrator の Java ペインで定義する必要があります。

EJB を公開し、ColdFusion Administrator で設定を定義したら、サーバー マシンを再起動してください。

CFML ファイルのコーディング

CFML ファイルから 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>