隨著金融機構大量引入 Java 平台構建銀行解決方案,控制讀卡機、印表機、ATM 等專用硬體成為剛需。J/XFS (Java Extensions for Financial Services) 為銀行應用開發者提供可靠架構,定義標準 Java 介面支援各類輸入/輸出裝置,賦予應用程式物件導向、獨立於硬體廠商與作業系統的能力,甚至不限定特定通訊拓撲。
本文為兩部分系列之第一部分,介紹 J/XFS 及其參考實作 FDI for J/XFS (Financial Device Interface)。將討論需求、歷史、設計決策,解釋核心組件協作,並示範安裝配置 FDI (可從 J/XFS 論壇免費取得)。閱畢您將理解如何安裝 J/XFS、FDI 如何實作架構,並完成含完整可操作示範的軟體安裝配置,為第二部分(裝置服務開發實作)鋪路。
核心決策之一:裝置上大多數操作以非同步方式執行。發送訊息給 J/XFS 裝置時,呼叫方法立即回傳識別號,實際結果稍後透過獨立事件回報(圖 1)。

前身 WOSA/XFS 使用 C 語言定義介面,缺乏物件導向概念且綁定單一作業系統。為便利熟悉 WOSA/XFS 的開發者,J/XFS 基本裝置規格基於 WOSA/XFS,雖使部分規格看似非純物件導向,但促成架構被接受。
網路與通訊受高度重視:J/XFS 裝置獨立於廠商硬體,可分散部署於網路。網路硬體與協定對應用程式完全透明,通訊層可完全交換,支援任意網路技術實作。
J/XFS 為帶有支援性中介軟體的傳統用戶端/伺服器環境,即核心。核心是 J/XFS 核心,提供基礎設施與安裝所需 Java 類別庫,負責追蹤所有連接裝置、應用程式與裝置間訊息/事件傳遞,並提供持久化儲存、日誌追蹤等支援功能。
核心由兩個獨立 Java API 組成(應用程式端、硬體裝置端),亦作為程式設計框架(圖 2)。

每個 Java 應用程式運行於 J/XFS 用戶端。核心管理用戶端清單,以配置鍵區分多用戶端。多用戶端可組成邏輯單元(工作站名),每用戶端屬於一個工作站。「工作站名+配置鍵」唯一識別用戶端。
裝置識別同理:每裝置連接一用戶端,用戶端屬某工作站。同一工作站內裝置 裝置名 唯一。「工作站名+裝置名」唯一識別裝置。工作站名為邏輯概念,不一定對應實體機器。
應用程式無需知曉硬體機器細節,只需知曉要使用的裝置類型。J/XFS 標準為每種支援裝置定義 Java 介面,目前涵蓋:
這些介面定義裝置功能,實作由核心提供,稱為裝置控制項,代表應用程式內的裝置句柄與代理。所有裝置相關訊息發送給裝置控制項,核心確保送達實體裝置。操作結果以事件回報,需註冊適當偵聽器物件接收。
核心另一端定義獨立 API 插入硬體,與應用程式 API 完全獨立。核心透過此介面存取裝置,實作稱為裝置服務,負責控制硬體的 J/XFS 相容行為。裝置服務與硬體緊密結合,使用特定硬體必須提供相容裝置服務。核心為裝置服務提供「纖細」介面,允許將事件回送應用程式。
核心內部可使用任意通訊類型。J/XFS 定義明確介面允許通訊層完全交換,新類型通常由核心開發團隊整合。應用程式/裝置服務開發者無需知曉實際通訊類型,部署後甚至可不修改代碼切換通訊層。
特殊情況:無需/無法分散部署時,可選 local 通訊類型,在單一 JVM 內交換資訊,行為與網路通訊細微差異,可視為無網路的進程內通訊。
圖 3 整合圖 1 異步模型與上述組件,描繪 J/XFS 異步裝置存取全貌。
J/XFS 為用戶端/伺服器系統,環境中必須有唯一 J/XFS 伺服器,屬核心組件之一,執行三大任務:
運行時 Java 應用程式即 J/XFS 用戶端。首要任務初始化裝置管理器,核心組件負責建立環境與管理運行時行政任務。
從裝置管理器取得裝置控制項:提供唯一裝置識別符(工作站名+裝置名),若識別有效且裝置可用,回傳裝置控制項。不知識別符時可請求裝置清單(所有活動裝置、特定工作站裝置、所有配置裝置等)。
每用戶端含日誌記錄器物件,可發送日誌/追蹤資訊。偵聽器可向日誌記錄器註冊,可加濾波器僅接收關心資訊,支援自訂日誌偵聽器類別靈活處理。
J/XFS 論壇實作核心,產品稱為 FDI for J/XFS,可免費下載。包含所有定義介面與類別,以及工具與支援類別:
無自動安裝程式,需手動安裝 1.01 版。需求:JVM 1.1.8+,Java 2 平台需關閉安全性。用戶端 100 MHz 工業標準 PC 足夠,伺服器需 200 MHz+。精確需求請參閱文件。
步驟:
readme.html。含 PDF 額外文件與 HTML API 文件 (API 文件另打包為 jxfsapidoc1.01.zip)CLASSPATH:用戶端 jxfsclient1.01.jar,伺服器 jxfsserver1.01.jar/home/jxfs/repository配置較棘手,請仔細遵循每步驟。
developerWorksjxfsClient,伺服器 jxfsServer伺服器從 server.cfg 讀取配置(解壓縮目錄中有骨架檔)。編輯填入:
workstation_name:伺服器工作站名 (例 developerWorks)config_key:伺服器配置鍵 (例 jxfsServer)sdm_addparm_1:用戶端/伺服器通訊 TCP/IP 埠 (例 2323)sdm_addparm_2:持久化資料目錄位置 (例 /home/jxfs/repository)log_file_name:啟動日誌路徑 (例 /var/log/jxfs/server.log)其餘值保持預設。使用反斜線作路徑分隔符的系統中,反斜線須轉義為 \\。
啟動伺服器:
java com.jxfs.forum.tools.serverstart.JxfsServer server.cfg
完成此步驟,J/XFS 環境已配置完成並運行。
使用附帶 BCT 批次檔 developerWorks.bct 設定用戶端。編輯檔案替換所有:
<device_port>:用戶端間通訊埠 (例 2424)<hostname>:用戶端所在機器 TCP/IP 主機名developerWorks.bct 為屬性檔 (鍵值對):
workstation_name:用戶端工作站名 (例 developerWorks)config_key:BCT 配置鍵 (可設 BCT)sdm_addparm_1 與 mgmt_addparm_1:用戶端/伺服器通訊埠與伺服器主機名,以分號隔開 (例 2323;serverHost)log_file_name:BCT 啟動日誌 (例 /var/log/jxfs/bct.log)BCT 屬於系統管理工具,位於 jxfsserver1.01.jar (非用戶端 JAR)。使其可用並啟動:
java com.jxfs.forum.tools.bct.BCT @developerWorks.bct
參數前須冠 @ 符號。
編輯 demo.cfg:
workstation_name:用戶端工作站名 (例 developerWorks)config_key:用戶端配置鍵 (例 jxfsClient)sdm_addparm_1:用戶端/伺服器通訊埠與伺服器主機名,分號隔開 (例 2323;serverHost)log_file_name:用戶端啟動日誌 (例 /var/log/jxfs/jxfsClient.log)若依步驟操作,現可啟動首個 J/XFS 用戶端。Melange Demo 非核心組件,存於 jxfsdemo1.01.jar。使 JAR 可用並啟動:
java com.jxfs.samples.application.MelangeDemo demo.cfg
需使 JVM 存取 Java 基礎類別庫 (swingall.jar 含 Swing)。圖 4 為 Melange Demo 圖解,操作體驗 J/XFS。

本文僅為介紹,無法涵蓋所有面向。詳細資訊見 FDI ZIP 文件。建議操作示範並閱讀參考資料文件。第二部分將介紹 J/XFS 框架下裝置服務開發實作,敬請期待!