現有 SSH 專案需重用完整 Flex 專案 (透過 BlazeDS 與 Java 端通訊,服務由 Spring/SpringMVC 管理)。整合原理即將 Flex 編譯產出的 SWF/HTML/CSS 放入 Web 專案,並合併 Java 類別與 Spring 配置,但 BlazeDS 通道配置極易出錯。
services-config.xml, remoting-config.xml) 合併至 SSH 對應位置。web.xml 註冊 MessageBrokerServlet 及相關 Listener。Flex 編譯時 .flexProperties 仍保留舊專案名:
serverContextRoot="/FlexProject"
serverRootURL="https://localhost:8080/FlexProject"
直接使用舊 SWF 整合,前端提示 Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Failed,控制台無輸出。原因:SWF 內嵌的端點 URL 指向舊 Context Root,找不到 BlazeDS 端點。
更新 .flexProperties 為新專案名後,依配置檔放置位置不同出現兩種現象:
情況 A:配置檔放在 WEB-INF/flex/,web.xml 註冊 MessageBrokerServlet
HttpFlexSession has not been registered as a listener in web.xml...。情況 B:配置檔放在 WEB-INF/ 根目錄,web.xml 同樣配置
channelSet 需與部署後的實際 Context Root 一致。解決:重新編譯 Flex 專案,或執行階段動態設定 ChannelSet。web.xml 必須註冊 flex.messaging.HttpFlexSession 為 <listener>,否則 Flex Session 生命週期事件無法傳遞,導致 BlazeDS 無法正確綁定用戶 Session。services-config.xml 中的 channels 定義與 remoting-config.xml 的 destination 需正確掛載,且 Spring 掃描路徑需包含服務 Bean。web.xml 中 HttpFlexSession Listener 註冊順序 (需在 MessageBrokerServlet 之前)。MessageBrokerFactoryBean 是否正確載入 BlazeDS 設定檔。ChannelSet.login() 程式化登入替代表單提交,避免 Session 同步問題。Flex+Java 整合看似簡單,實則涉及編譯期端點綁定、執行期 Session 管理、Spring 容器啟動順序等多重細節,需系統性排查。