在 ColdFusion MX 推出之前,ColdFusion 與 IBM WebSphere Application Server 的整合並不被看好。但隨著 ColdFusion MX 架構的全面 J2EE 化,這對組合煥然一新。本文將詳細介紹如何配置 ColdFusion MX,使其能在 WebSphere 等 J2EE 容器中與 Java 組件無縫共享會話變量,充分發揮雙方優勢,構建高效能的企業級 Web 應用。
要實現跨技術棧的 Session 共享,首要任務是在 ColdFusion MX 管理員介面中啟用 J2EE 會話變量支持。
https://<server:port>/<cfmx_contextroot>/CFIDE/administrator/index.cfm(例如 https://localhost/cfmx/CFIDE/administrator/index.cfm)。

配置完成後,我們透過兩個示例應用(CFMXSESSIONA 與 CFMXSESSIONB)展示 ColdFusion 與 Java 如何互相讀寫對方建立的 Session 物件。
在 Application.cfm 中定義應用名稱並啟用會話管理:
<cfapplication name="CFMXSESSIONA"
clientmanagement="no"
sessionmanagement="yes"
sessiontimeout="#createtimespan(0,0,15,0)#">
在 LoginAction.cfm 中建立 Session 結構:
<cfset SESSION = StructNew()>
<cfset SESSION.SESSIONCREATEDBY = "ColdFusion">
<cfset SESSION.ISAUTHENTICATED = "Y">
<cfset SESSION.USERID = selectUser.userid>
<cfset SESSION.USERNAME = selectUser.username>
<cfset SESSION.ROLE = selectUser.role>
Java 端(DisplaySession.jsp)透過 getAttribute 取得並強制轉型為 java.util.Map:
Map sessionMap = (java.util.Map) session.getAttribute("CFMXSESSIONA");
String userId = (String) sessionMap.get("USERID");
JSP 中將資料封裝於 java.util.Map 並存入 Session:
Map map = new HashMap();
map.put("SESSIONCREATEDBY", "JAVA");
map.put("ISAUTHENTICATED", "Y");
map.put("USERID", String.valueOf(rs.getInt("USERID")));
// ... 其他屬性
session.setAttribute("CFMXSESSIONB", map);
ColdFusion 頁面(DisplaySession.cfm)透過 getPageContext() 取得 HttpSession 並讀取:
<cfset REQ = GetPageContext().getRequest()>
<cfset SES = REQ.getSession()>
<cfset MAP = SES.getAttribute("CFMXSESSIONB")>
<!--- 直接以 Struct 方式存取 --->
#MAP.USERID# | #MAP.USERNAME# | #MAP.ROLE#
ColdFusion MX 內建類型映射機制,讓雙方無需手動轉換:
| ColdFusion 類型 | Java 類型 |
|---|---|
| ARRAY | java.util.Vector |
| DATE | java.util.Date |
| NUMBER | java.lang.Double |
| QUERY/RECORDSET | java.sql.ResultSet |
| STRING | java.lang.String |
| STRUCT | java.util.Map |
完整範例程式碼可下載:i-coldstudio.zip,內含 readme.doc 安裝說明。
透過 J2EE Session 共享,ColdFusion 的快速開發優勢與 WebSphere 的企業級穩定性完美結合。開發團隊可根據專長分工:ColdFusion 負責表現層與業務邏輯快速構建,Java 負責底層服務與高效能運算,共同構建無縫整合的現代化應用架構。
