本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

ColdFusionとJ2EEコンポーネント間のセッション・データの共有

Macromedia ColdFusion MX for IBM WebSphereを使用した異種テクノロジーの融合

Kulvir Bhogal (kbhogal@us.ibm.com), Software Engineer, IBM
Kulvir Singh Bhogal
Kulvir Singh Bhogalは、IBMコンサルタントとして、米国中のお客様サイトでJava中心のソリューションの考案および実装を行っています。
IBMのSoftware Services for WebSphereのコンサルタントであるKwang S. Kang氏は、IBMのWebSphereとMacromediaのCold Fusionプラットフォームにおける企業ソリューションの提供で幅広い経験を持っています。Kwangの連絡先は、kkwang@us.ibm.com です。

概要: ColdFusionとWebSphereの利点を組み合わせるということは、以前はあまり現実的な選択肢ではありませんでした。しかし、ColdFusion MXの登場で事態は変わりました。この記事では、開発者の皆さんに、ColdFusionのコードをWebSphere Application ServerのJ2EE環境で展開する方法について説明します。

日付:  2003年 5月 01日
レベル:  中級 この記事の原文:  英語
アクティビティー: 1872 ビュー
お気軽にご意見・ご感想をお寄せください: 


はじめに

ColdFusionマークアップ言語 (CFML) は、習得が簡単なスクリプト言語だと言われています。ColdFusionのタグに基づくプログラミング・モデルは、短期間のWeb開発を可能にします。またこのモデルはもともと単純であるため、より広い層の開発者がインターネット・アプリケーションを開発することができます。

この記事では、Macromedia ColdFusion MX for IBM WebSphere Application Server (以下Application Server) で、どのようにColdFusionとJ2EEコンポーネントの間でセッション変数を共有できるかを説明します。また、この強力な2つの製品を組み合わせて使用することによってもたらされる共同作用の効果についても説明します。


Application Serverとともに使用するためのColdFusionの設定

このセクションでは、Application Serverとセッション・データを共有するようにColdFusion MXを設定する方法について説明します。

ColdFusion MX Administratorインターフェースを使用してセッションのメモリー変数を有効にする

あらかじめ、ColdFusion MX for IBM WebSphere Application Serverが起動されていることを確認してください。

  1. 次のいずれかの方法でColdFusion MX Administratorインターフェースにログインします。
    • スタート>プログラム>Macromedia ColdFusion MX J2EE>ColdFusion MX Administratorの順に選択します。
    • Webブラウザーを開き、以下にアクセスします。
      http://<server:port>/<cfmx_contextroot>/CFIDE/administrator/index.cfm

      たとえば、http://localhost/cfmx/CFIDE/administrator/index.cfm のように入力します。
  2. 図1のように、ColdFusion MX Administratorインターフェースのメイン・メニューにあるServer Settingsから、Memory Variablesを選択します。
    図1. Server Settingsからメモリー変数を選択する

  3. 次に表示されるパネルで、図2のようにUse J2EE session variablesEnable Session Variablesの両方のオプションが選択されていることを確認します。Submit Changesをクリックして変更を適用します。
    図2. J2EEセッション変数の有効化

  4. ColdFusion MX for IBM WebSphere Application Serverを再起動します。

これで、J2EEセッション管理が正常に有効化されました。


アプリケーションの開発

このセクションでは、2つの「ログイン」アプリケーションのサンプルを考察します。最初のアプリケーションはCFMXSESSIONAという名前で、Java開発者がColdFusionで作成されたセッション・オブジェクトを使用する方法を示しています。次のアプリケーションはCFMXSESSIONBという名前で、ColdFusion開発者がJavaで作成されたセッション・オブジェクトを使用する方法を示しています。

ColdFusion MXアプリケーションのセッション管理を有効にする

CFMXSESSIONAでは、ColdFusionがセッション・オブジェクトを作成および管理する必要があります。ColdFusionは、図3のように、Application.cfm (CFMXのルート・ディレクトリーにあるWebアプリケーションのルート・ディレクトリー内) という名前のファイル内で<cfapplication>タグを使用してアプリケーションの設定を定義します。


図3. Webアプリケーションのルート・ディレクトリー内のAPPLICATION.CFMファイル

次のリスト1に示すように、NAME属性はColdFusion MXアプリケーションの名前を定義します。これは、セッション変数を使用するために必要な属性です。


リスト1. CFAPPLICATIONのNAME属性
                
                <cfapplication 
 name="CFMXSESSIONA"
clientmanagement="no"
sessionmanagement="yes"
sessiontimeout="#createtimespan(0,0,15,0)#">

次に、リスト2のように、sessionmanagement属性をYESに設定して、ColdFusion MXアプリケーションでセッション変数を使用できるようにします。


リスト2. ColdFusion MXアプリケーションのセッション管理の有効化
                
<cfapplicationname="CFMXSESSIONA"clientmanagement="no"
sessionmanagement="yes"sessiontimeout="#createtimespan(0,0,15,0)#">
            

オプションとして、サンプル・アプリケーションで実行したように、sessiontimeoutに明示的に希望の間隔を指定することにより、ColdFusion Administrationインターフェースで定義されたデフォルトのセッション・タイムアウト間隔をオーバーライドできます (リスト2を参照)。前出の例では、ColdFusionの関数createtimespanを使用して、希望のタイムアウト間隔を (日, 時, 分, 秒) の形式で作成しています。


セッション・オブジェクトの作成

このセクションでは、ColdFusionとJ2EEの開発者に向けて、この2つのテクノロジーで簡単に共有できるセッション・オブジェクトを作成するために必要な手順を、どちらのテクノロジーがセッション管理を受け持つかという場合に分けて説明します。

ColdFusion MXでセッションを作成する

最初に、プロパティー・セットを保存するため、リスト3のようにして、LoginAction.cfmという名前のColdFusionページにセッションをColdFusionstructコレクション・オブジェクトとして定義します。


リスト3. プロパティーを保存するためのsession構造体の作成
                
                
 <!--- Create Session Structure ---> <cfset
 SESSION = StructNew()>

 <!-- Define Variables within the Session Structure -->
	<cfset SESSION.SESSIONCREATEDBY = "ColdFusion">
	<cfset SESSION.ISAUTHENTICATED = "Y">
	<cfset SESSION.USERID = selectUser.userid>
	<cfset SESSION.USERNAME = selectUser.username>
	<cfset SESSION.ROLE = selectUser.role>

次に、リスト4のように、新しく定義したsessionコレクションにuseridなどのプロパティーを追加します。


リスト4.session構造体でのプロパティーの作成
                
<!--- Create Session Structure ---> <cfset
SESSION = StructNew()>

 <!-- Define Variables within the Session
 Structure --> <cfset SESSION.SESSIONCREATEDBY
 = "ColdFusion"> <cfset
 SESSION.ISAUTHENTICATED = "Y">
 <cfset SESSION.USERID = selectUser.userid>
 <cfset SESSION.USERNAME = selectUser.username>
 <cfset SESSION.ROLE = selectUser.role>

            

Javaでセッションを作成する

今度は、前のセクションと同じ内容を、J2EE開発者の立場から実行します。簡単にColdFusionに変換できるセッション・オブジェクトをJavaで作成するには、リスト5のように、LoginAction.jspというファイルのjava.util.Map構造体にプロパティーを保存します。


リスト5.java.util.Map構造体でのプロパティーの作成
                
                
// Define Variables within a java.util.Map
map.put("SESSIONCREATEDBY","JAVA");
map.put("ISAUTHENTICATED","Y");
map.put("USERID",Integet.toString(resultSet.getInt("USERID")));
map.put("USERNAME",resultSet.getString("USERNAME"));
map.put("ROLE",Integer.toString(resultSet.getInt("ROLE")));

            

リスト6のように、ここではMapオブジェクトをCFMXSESSIONBとしてセッションに保存します。


リスト6. java.util.Map構造体のセッションへの保存
                
                
// Store the Map in the HttpSession
session.setAttribute("CFMXSESSIONB",map);

            


セッション変数のデータ型変換

ColdFusion MX for Application Serverの使用により、J2EEおよびColdFusion開発者は、この2つのテクノロジー間でデータ型をマッピングし、情報を簡単に交換できるようになります。表1に一般的なデータ型のサンプルを示します。詳細については、Macromedia ColdFusion MXのマニュアル (参考文献を参照) を参照してください。


表1. ColdFusionとJava間のデータ型のマッピング
ColdFusionのデータ型 Javaのデータ型
ARRAYjava.util.Vector
DATEjava.util.Date
NUMBERjava.lang.Double (default)
RECORDSETjava.sql.ResultSet
STRINGjava.lang.String
STRUCTjava.util.Map

セッション変数へのアクセス

JavaとColdFusionの両方のテクノロジーでセッション・オブジェクトを定義したところで、今度はそのセッションの内容を相互交流的な方法で共有しましょう。データ・オブジェクト (セッションに含まれるオブジェクトなど) の共有によるこの2つのテクノロジーのシームレスな対話により、スキルのあるColdFusionおよびJ2EE開発者は、単一の統合ソリューションを共同で使用することができます。

ColdFusion MXで作成されたオブジェクトにJavaでアクセスする

ColdFusion MXでセッションを作成する」のセクションでは、プロパティーを保存するためにColdFusionのstructコレクション・オブジェクトを定義しました。Javaでは、このstructオブジェクトをjava.util.Mapと解釈することができます (詳細については表1を参照)。したがって、セッション構造体の内容にアクセスするために使用するデータ型は、Mapになります。

ColdFusionでは、session構造体は<CFAPPLICATION>タグで定義されるname属性の値として登録されます (リスト1を参照)。したがって、Javaページ、つまりこの例のDisplaySession.jspでは、リスト7のように、標準のgetAttributeメソッドを呼び出して返されたオブジェクトをjava.util.Mapにキャストすることにより、ColdFusionで作成されたセッション・オブジェクトにアクセスできます。


リスト7. CFMXセッション・オブジェクトの取得とjava.util.Mapへのキャスト
                
                
//////////////////////////////////////////////////////////////
// Get the CFMX Created Session Object // // The CF
Session is automatically named as the
CFAPPLICATION's // NAME attribute value
/////////////////////////////////////////////////////////////
map = (java.util.Map)
session.getAttribute("CFMXSESSIONA");

            

セッションの内容はjava.util.Map構造体として保存されているため、ここではリスト8のように標準のgetメソッドを呼び出してその値にアクセスすることができます。


リスト8.getメソッドによる値へのアクセス
                
                <%-- Display session variables --%>
				<tr>
	    <td align="right" class="label" width="250">USERID</td>
	    <td width="300"><%= map.get("USERID") %></td>
	</tr>
	<tr>
	    <td align="right" class="label">USERNAME</td>
	    <td><%= map.get("USERNAME")%></td>
	</tr>
	<tr>
	    <td align="right" class="label">ROLE:</td>
	    <td><%= map.get("ROLE")%></td>
	</tr>
	<tr>
	  <td align="right" class="label">SESSION CREATED IN:</td>
	  <td><b><%= map.get("SESSIONCREATEDBY")%></b></td>
	</tr>

Javaで作成されたセッション・オブジェクトにColdFusion MXでアクセスする

ColdFusion MXからJavaへの共有が終わったので、今度はその逆について考えてみましょう。このセクションでは、Javaで作成されたセッション・オブジェクトにDisplaySession.cfmというColdFusionページでアクセスします。ColdFusion開発者は、createObject関数を使用して、ColdFusionページ内に"Java"オブジェクトを作成することができます。リスト9のように、ここでは3つのJavaオブジェクトを作成する必要があります。


リスト9. 必要なJavaオブジェクトの作成
                
                
<!-- Create Java objects within CF --->
<cfset
REQ=createObject("Java","javax.servlet.http.HttpServletRequest")>
<cfset
SES=createObject("Java","javax.servlet.http.HttpSession")>
<cfset
MAP=createObject("Java","java.util.Map")>

            

ここでは、セッション、つまりjava.servlet.http.HttpSessionオブジェクトをjavax.servlet.http.HttpServletRequestオブジェクトに渡す必要があります。これが完了すれば、リスト10のように、セッションのgetAttributeメソッドを呼び出すことによって、このセッション・オブジェクトにアクセスできるようになります。


リスト10. セッション・オブジェクトにアクセスするためのJavaメソッド
                
                
 <!--- Get the HttpServletRequest --->
	<cfset REQ = GetPageContext().getRequest()>
	<!--- Get the HttpSession --->
	<cfset SES = req.getSession()>
	<!--- Get the CFMX session object (java.util.Map) --->
	<cfset MAP = ses.getAttribute("CFMXSESSIONB")>

            

ColdFusionはjava.util.Map構造体を解釈できるため、次のリスト11のように、標準のColdFusion変数出力変換を使用してセッションの値を表示することができます。


リスト11. 標準のColdFusion変換を使用した値へのアクセス
                
			<!--- Display Session Variables --->
	<tr>
	    <td align="right" class="label" width="250">USERID</td>
	    <td width="300">#MAP.USERID#</td>
	</td>
	<tr>
	    <td align="right" class="label">USERNAME</td>
	    <td width="300">#MAP.USERNAME#</td>
	</tr>
	<tr>
	    <td align="right" class="label">ROLE:</td>
	    <td width="300">#MAP.ROLE#</td>
	</tr>
	<tr>
	    <td align="right" class="label">SESSION CREATED IN:</td>
	    <td width="300"><b>#MAP.SESSIONCREATEDBY#</b></td>
	</tr>


サンプル・アプリケーション

ダウンロード・パッケージには、ColdFusionおよびJavaコンポーネント間のセッション変数の共有を使用した簡単なColdFusion MX for J2EEアプリケーションが入っています。詳細な設定手順については、readme.docファイルをお読みください。

図4は、このアプリケーションを実行したときの様子の一部です。ここでは、ColdFusion MXページでJavaのセッション・データがうまく取得されています。


図4. サンプル・アプリケーション


まとめ

これまでは、J2EE中心のWebSphere Application Serverの世界とColdFusionには互換性がありませんでした。この2つのソフトウェア製品およびサービスは、開発者や開発者が携わるプロジェクトに多くのメリットをもたらすものであり、この事実は残念なことでした。この記事では、ColdFusionと皆さんが作成したWebSphere J2EEソフトウェアの間でセッション・データを共有する方法について説明しました。このようなセッション・データの共有により、2つのテクノロジーの最も優れた部分を利用して、IBM WebSphere Application Serverの持つ広範なJ2EE機能を損なうことなく、CFMLによって提供されるスピードを備えた強力なWebアプリケーションを作成することができるようになります。



ダウンロード

ファイル名サイズダウンロード形式
i-coldstudio.zipHTTP

ダウンロード形式について


参考文献

  • 共有セッション変数を使用した簡単なColdFusion MX for J2EEアプリケーションのサンプル・アプリケーションをダウンロードしてください。

  • データ型の詳細については、Macromedia ColdFusion MXのマニュアルを参照してください。

  • WebSphereには、開発者向けの記事、チュートリアル、およびダウンロード・ファイルがあります。

著者について

Kulvir Singh Bhogal

Kulvir Singh Bhogalは、IBMコンサルタントとして、米国中のお客様サイトでJava中心のソリューションの考案および実装を行っています。

IBMのSoftware Services for WebSphereのコンサルタントであるKwang S. Kang氏は、IBMのWebSphereとMacromediaのCold Fusionプラットフォームにおける企業ソリューションの提供で幅広い経験を持っています。Kwangの連絡先は、kkwang@us.ibm.com です。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Sample IT projects
ArticleID=250180
ArticleTitle=ColdFusionとJ2EEコンポーネント間のセッション・データの共有
publish-date=05012003
author1-email=kbhogal@us.ibm.com
author1-email-cc=
author2-email=kkwang@us.ibm.com
author2-email-cc=

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。