程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 值得信賴:J/XFS介紹,第1部分

值得信賴:J/XFS介紹,第1部分

編輯:關於JAVA

由於越來越多的金融機構將 Java 平台納入其銀行業的解決方案,能夠控制用於這些解決方案的硬件(諸如:讀卡機、打印機以及 ATM)真的很有必要。Java 平台金融服務的擴展(J/XFS)能使從事銀行應用程序開發的 Java 開發者輕松一些,並且為此項工作提供一種可靠的體系結構。在本系列(共兩部分)的第 1 部分,軟件工程師 Christoph Czernohous 介紹了這種健壯的體系結構,提供了 J/XFS 標准的概述和該體系結構的實現 ― 他對之有突出貢獻的 J/XFS for FDI(J/XFS 金融設備接口)。

從虛擬機內訪問硬件一向是一種挑戰。當從虛擬機內訪問專門的目標設備(比如:自動櫃員機 ATM)時,尤其顯而易見。我們這些從事銀行應用程序開發的開發者發現:通常沒有預先確定的方法來開發底層銀行硬件的功能。從開發者的角度看,將這樣的設備封裝起來,使其能夠通過一個定義好的接口訪問(就象虛擬機本身封裝了底層的計算機硬件一樣)是很理想的。如果這樣,不管安裝了什麼類型的硬件,這樣的設備都作為可選的卻熟知的附件回應虛擬機。

Java 開發者值得慶幸的是這樣的封裝不再是空想。J/XFS,Java 平台的一種擴展,提供了一套標准的 Java 接口,支持用於銀行應用程序的各種輸入、輸出設備。這樣,J/XFS 給應用程序新的類提供了 Java 技術的全部能力,即面向對象和獨立於硬件制造商以及操作系統廠商。實際上,J/XFS 甚至不局限於特定的通信拓撲結構,我們將在本文的後面部分討論。

本文(兩部分系列的第 1 部分)作為 J/XFS 及其參考實現 ― J/XFS 的金融設備接口( FDI )的介紹。 我將討論需求、歷史以及為 J/XFS 定形的設計決策,解釋組成內核的不同部件怎樣共同工作和介紹 FDI for J/XFS。出於為該系列的第二部分(我們將更多地討論在 J/XFS 框架下開發設備服務)作准備的目的,我將向您展示怎樣安裝和配置 FDI for J/XFS(從 J/XFS 論壇可免費得到,請參閱 參考資料)。

在第 1 部分結束時,您將懂得怎樣安裝 J/XFS 以及 FDI for J/XFS 怎樣實現這種體系結構。您還將安裝和配置軟件,它包含完全可操作的演示,有助於您通過實踐學習此項技術,為第二部分內容作准備。

J/XFS 體系結構

J/XFS 設計師做了一些深刻影響其本質的設計決策。他們所做的基本的決策之一是:在設備上執行的大多數操作將以異步方式執行。如果您發送消息給 J/XFS 設備,您所調用的方法立刻返回一個標識號。如圖 1 中的序列圖表所示,您啟動的操作的實際結果將在一段時間後,在一個單獨事件裡返回報告給您。

圖 1. 異步操作

先於 J/XFS 的另一種銀行外圍設備標准 ― Windows 開放系統體系結構/金融服務的擴展(WOSA/XFS)早已經定義好了。這種標准廣為人知,但是確實有一些缺點。例如,因為此標准使用 C 編程語言定義其接口,它沒有使用基本的面向對象的概念。此外,它被局限在一個操作系統。為了便於已經很熟悉 WOSA/XFS 的開發者學習 J/XFS,基本的 J/XFS 設備規范都是基於 WOSA/XFS 的。這種折衷使得 J/XFS 規范在某些地方看起來有點不象是面向對象,但是它顯然促成了這種體系結構被接受。

J/XFS 的過程中,網絡和通信受到了進一步關注。此外,由於 J/XFS 設備是獨立於制造商的硬件,可以被分布和使用於網絡。網絡本身,即它的硬件和協議,對應用程序完全透明。通信層能被完全交換,人們期望的任何網絡技術都有實現的可能性。

為了更好地理解這些決策是怎樣對 J/XFS 體系結構產生影響的,我們來看一看內核及其基本的組件。

內核內部

J/XFS 為帶有起支持作用的中間件的傳統的客戶/服務器環境,即內核。內核是 J/XFS 的核心,提供基本的基礎結構和安裝 J/XFS 環境要用到的 Java 類庫。它負責跟蹤所有連接的設備以及應用程序和設備之間的消息、事件傳遞。此外,內核也提供諸如:持久存儲或日志、跟蹤的支持功能。

因為它由兩個獨立的 Java API 組成(一個用於應用程序,一個用於硬件設備),所以, J/XFS 內核也作為編程框架。圖 2 展示了該框架的組件。

圖 2. J/XFS 環境的組件

標識符

每個使用 J/XFS 的 Java 應用程序都在 J/XFS 客戶上運行。因為內核管理連接的 J/XFS 客戶的列表,因此必須有識別它們的方法。J/XFS 使用被稱為 配置鍵的標識符來區分多個 J/XFS 客戶。 此外,多個 J/XFS 客戶能夠在一起組成邏輯單元。例如,可以將在一個特定的計算機上的所有 J/XFS 客戶放進一個組。您必須將一個 J/XFS 客戶正好分配到一個組。這些組的標識符被稱為 工作站名。“工作站名+配置鍵”必須是用來識別 J/XFS 客戶的唯一組合。

正如應用程序需要被唯一地識別,必須有方法來區分所配置的設備。J/XFS 對設備采用了與對應用程序一樣的方法。 J/XFS 中的每一個設備必須剛好連接一個 J/XFS 客戶,J/XFS 客戶反過來作為 J/XFS 客戶組的一部分,通過其工作站名進行識別。必須給每個設備分配一個 ID,此 ID 在有同一個工作站名的組內一定是唯一的。ID 被稱為 設備名。這樣在 J/XFS 環境中,再一次用“工作站名+設備名”識別一個設備。

請注意被分在一組(因為同一工作站名)的 J/XFS 客戶沒有必要在同一物理工作站。組的標識符以工作站名命名是因為這是最適合的目標之一。但是一個組能跨越一個以上的物理計算機。反之亦成立:在一個工作站上可能有多個組。如果聽起來讓您感到糊塗,只考慮一個 J/XFS 客戶組一個工作站名的情況。

應用程序接口

從應用程序角度來看,您並不知道(因為也沒有必要知道)任何與之進行通信的硬件的機器特定細節。您所要知道的只是將要使用的設備的 類型。J/XFS 標准為每一種支持的設備定義了一個 Java 接口。目前,J/XFS 標准包括下面幾種設備類型的規范:

收據打印機、日志打印機、存折打印機、文檔打印機、掃描儀

現金分配器、現金回收器、ATM

PIN 小鍵盤

芯片卡閱讀器、磁條卡閱讀器

文本輸入/輸出設備

報警設備

庫存單元

支票閱讀器和掃描儀

傳感器和指示器系統

攝像機

這些接口定義了它們所描述的設備類型的功能。設備實現由內核提供。這些類被稱為 設備控件。一個設備控件代表應用程序內的一個設備,作為設備本身的句柄和代理。

將與設備相關的所有消息發送給設備控件,內核關心的是消息有沒有到達實際的設備。對這些消息的響應 ― 在設備上執行的操作的結果,將作為事件向您報告。為了接收這種信息,必須注冊適當的偵聽器對象。

設備接口

在內核的另一端定義了單獨的 API 來插入硬件,並且使得內核可以訪問它。這個 API 完全獨立於內核的應用程序接口,因此應用程序開發者沒有必要知道關於它存在任何信息。 正如我前面提到的,為每一設備類型定義一個 Java 接口。內核使用這個接口來訪問設備。這些接口的實現被稱之為 設備服務。它們負責對硬件的兼容 J/XFS 的行為進行控制。設備服務與它們控制的硬件緊密結合在一起。因此,如果想在 J/XFS 中使用特定類型的硬件,必須為之提供兼容 J/XFS 的設備服務。

內核為設備服務提供了“纖細”的接口,允許將事件回送給應用程序。

通信層

內核內部可以使用任意一種需要的通信類型。J/XFS 定義了明確的接口,允許通信層完全地交換。新的通信類型通常由 J/XFS 內核開發小組開發並集成到內核中。

作為 J/XFS 應用程序或設備服務開發者,您沒有必要知道使用中的實際通信類型。事實上,您可以在部署應用程序之後改變通信層,完成這些不用修改一行應用程序代碼或設備服務代碼。

當 J/XFS 進行通信時要考慮一種特殊情況:如果不需要或不可能在網絡上分布 J/XFS 環境,可以選擇在一台 Java 虛擬機上運行任何東西。在這種情況下,不必通過網絡發送消息,但應用程序和設備服務必須仍能夠彼此通信。

對於這種情況,J/XFS 標准定義了一種特殊的通信類型 local。這種通信類型實際上以它表現出的細微不同的行為來區別於所有其它類型。但是這些僅僅是比較小的差別;可以將這種 local 類型當作是沒有網絡和在虛擬機內部進行信息交換的通信。

圖 3描繪了異步設備在 J/XFS 中的訪問。此圖表建立在圖 1 所示的圖表的基礎上,添加了些到目前為止所描述不同的組件。

服務器端

J/XFS 是一個客戶/服務器系統。由於這個原因,J/XFS 環境中一定要正好有一個 J/XFS 服務器。沒有中央服務器 J/XFS 不能工作。這個 J/XFS 的核心組件也是內核的一個部件。J/XFS 服務器要完成三項主要任務:

所有 J/XFS 組件的持久存儲

J/XFS 環境的動態行為監視

管理任務和系統管理的訪問點

配置服務器是持久數據在 J/XFS 環境中的首選的位置。它在對象庫內為每一個應用程序和設備服務提供虛擬空間。運行時如果需要記住超出應用程序生存周期的信息,應該將其發送到 J/XFS 服務器以便持久存儲。為了檢索存儲在該服務器的數據,必須提供唯一的鍵值(您能夠記得的)。 所有的內核配置信息存儲在配置服務器中。

當 J/XFS 客戶啟動時,將在 J/XFS 服務器宣布其可用性。J/XFS 服務器的 動態服務器部件收集此信息。而更重要的是關於可用的設備服務信息。設備服務一旦被成功地初始化和啟動,它將使動態服務器知道這一信息,這樣應用程序就可以為它請求設備控件且開始使用設備。J/XFS 服務器收集所有的這些信息。

J/XFS 服務器的第三個部件為叫做 監控器的東西。為了配置 J/XFS 環境或在運行時影響其行為,它為管理工具提供了接口。通過開發強大的監控器 API,這些工具具備了一些能力,例如:遠程啟動和停止設備服務、關閉 J/XFS 客戶以及修改配置服務器庫中的值。

客戶端

在運行時,Java 應用程序代表一個 J/XFS 客戶。為了能夠訪問 J/XFS 的基礎結構,J/XFS 應用程序中必須做的第一件事是初始化 設備管理器。設備管理器是 J/XFS 客戶應用程序的核心部件。它負責建立 J/XFS 環境以及在運行時管理所有與客戶有關的管理任務。

從設備管理器獲得 設備控件。將唯一的設備標識符(工作站名+設備名)告訴它,作為回應 ― 假設標識有效以及設備是可用的 ― 將得到設備控件。

如果不知道工作站名和設備名,可以請求設備管理器提供設備列表。獲得不同種類設備的列表有多種方法,取決於所需的信息。例如,可以向設備管理器請求所有活動的設備列表、具有應用程序的工作站名的所有設備列表或者所有配置好的設備列表,不管它們是不是活動的。一旦有可用的工作站名和設備名,可以向設備管理器請求設備控件,並且用它開始工作。

每一個 J/XFS 客戶還包含一個 日志記錄器對象。可以發送所有的日志和跟蹤這個對象的信息。偵聽器對象可以向日志記錄器進行注冊,日志記錄器發送日志並跟蹤日志信息。為了減少實際的信息處理量,可以給日志記錄器添加一個過濾器,這樣偵聽器只接收部分日志並只跟蹤所關心的信息。這是一種很靈活的方法,因為可以編寫自己的日志偵聽器類,該類以您希望的方式處理信息。

實現:FDI for J/XFS

為了能夠提供一些現成可用的組件(能夠集成到目前的解決方案中),J/XFS 論壇選擇實現 J/XFS 內核。這種產品被稱為 J/XFS 的金融設備接口(FDI),可以從 J/XFS 論壇 Web 站點免費下載(請參閱 參考資料)。FDI for J/XFS 帶有所有定義好的接口和類,它們是您現在開始使用 J/XFS 所需要的。此外,它的類庫包含幾種工具和支持類,幫助您使用 FDI for J/XFS 進行工作。

這些將在配置和管理過程中提供支持並幫助您了解此產品的工具如下:

基本配置工具(BCT)是一個簡單的命令行工具,使您能夠完成基本的配置和管理任務。例如,可以將配置信息發送給 J/XFS 服務器或者看一看當前可用的 J/XFS 客戶列表。BCT 可以被交互地使用或者可以把BCT 命令列在文件中以便進行批處理。

日志服務器和相應的 日志偵聽器可以用來在中央位置收集日志和跟蹤來自多個 J/XFS 客戶的信息。這些工具用 RMI 在網絡上發送數據。

設備服務啟動器是沒有任何業務邏輯的單獨的 J/XFS 應用程序。其唯一的目的是啟動 J/XFSI 客戶,因此可以遠程訪問與之相連的設備。

Melange demo是一個 J/XFS 應用程序樣本,允許在 GUI 中執行所選設備的一些操作。其目的是幫助您熟悉 FDI for J/XFS 環境。使用這個工具需要有 Java 基礎類庫。FDI for J/XFS 提供了幾個具有有限功能的設備服務樣本,因此您可以操作一遍 Melange demo。實際上這些是模擬器,因為它們並不管理真正的硬件。Melange demo 和設備服務樣本都提供了源代碼,但它們決不希望被用作真正的設備服務的模板。

安裝 FDI for J/XFS

迄今為止,對於 FDI for J/XFS 還沒有自動安裝過程或指導安裝的工具。您需要手工地進行 FDI for J/XFS 的 1.01 版本的安裝。為了安裝 FDI for J/XFS,需要 Java 虛擬機 1.1.8 或更高的版本。如果您在 Java 2 平台上工作,對於該版本的 FDI for J/XFS,必須禁用安全性。100 MHz 工業標准的 PC 對於客戶來說已經足夠了;服務器需要至少 200 MHz。您要在 FDI for J/XFS 的文檔中查找准確的最小要求(以及一個測試 FDI for J/XFS 所用到過的操作系統和相應的 Java 虛擬機的列表)。請注意這些只是對 FDI for J/XFS 的要求;您必須給它們添加您的應用程序的要求。

在下載了包含 FDI for J/XFS 的 zip 壓縮文檔之後,執行下面的步驟:

將 zip 壓縮文檔解壓縮到您選擇的目錄,並閱讀 readme.html 文件。該 zip 壓縮文檔包含 PDF 格式的附加文檔和 HTML 格式的 API 文檔。為了方便,API 文檔打包到一個單獨的壓縮文檔 ― jxfsapidoc1.01.zip 中。

使 Java 虛擬機能夠訪問 Java 壓縮文檔。您最可能要做的是通過將壓縮文檔的文件名添加到系統的 CLASSPATH 環境來完成。在客戶機上,壓縮文檔是 jxfsclient1.01.jar;服務器的壓縮文檔名是 jxfsserver1.01.jar。

在服務器系統上創建新的空目錄,該目錄可以存放所有的持久數據。本例使用 /home/jxfs/repository 目錄。

配置 FDI for J/XFS

配置 FDI for J/XFS 有點棘手,因此在進行配置之前請仔細閱讀這一段的每一步。

安裝客戶和服務器

為每個 J/XFS 客戶邏輯組選定一個唯一的工作站名。至少需要一個工作站名。本例使用 developerWorks作為工作站名。

在所分配的 J/XFS 客戶的邏輯組內,為每一個客戶選定一個唯一的配置鍵。本例客戶使用配置鍵 jxfsClient,服務器使用 jxfsServer。

有兩個地方要涉及到 TCP/IP 通信:客戶和服務器之間以及客戶與客戶之間。它們中的每一處需要一個沒有用到的 TCP/IP 端口號。如果一個 TCP/IP 主機上有多個 J/XFS 客戶,用於客戶到客戶通信的 TCP/IP 端口號對於每一個客戶來說必須是不同的。本例中客戶/服務器通信使用端口 2323,J/XFS 客戶間的通信使用端口 2424。區分 J/XFS 工作站名和 TCP/IP 主機名是很重要的。這兩者是完全獨立的,當然可以是相同的。

J/XFS 服務器從簡短的配置文件讀取其配置信息。在 server.cfg 文件裡提供了配置信息的骨架。可以在 zip 壓縮文檔解壓縮到的目錄中找到該文件。配置信息由鍵值對組成。編輯該文件,填入前幾步建立的信息。

workstation_name :指定給 J/XFS 服務器的工作站名。如前面所述,本例使用的是 developerWorks。

config_key :J/XFS 服務器的配置鍵,本例為 jxfsServer。

sdm_addparm_1 :用於 J/XFS 服務器和所有 J/XFS 客戶之間通信的 TCP/IP 端口,這裡是 2323。

sdm_addparm_2 :是安裝期間為 J/XFS 服務器創建的目錄的位置:/home/jxfs/repository。

log_file_name :啟動 J/XFS 服務器期間,只要發生問題,就會寫日志文件。提供服務器可以存放該文件的路徑和文件名,比如:/var/log/jxfs/server.log。

剩下的值保持不變。請注意:在使用反斜槓作為路徑分隔符的系統中,反斜槓必須用\表示。

用 com.jxfs.forum.tools.serverstart.JxfsServer 啟動 J/XFS 服務器,並提供文件 server.cfgand 的路徑作為其參數。完成了這一步,J/XFS 環境就配置好了並且運行。

配置一些設備服務樣本以供 Melange demo 使用。您可以用包含的 BCT 批處理文件(developerWorks.bct - 請參閱 參考資料)設置客戶。在此之後,您必須在文件中替換 所有下面出現的字符串:

< device_port > 客戶之間通信所選定的 TCP/IP 端口號,此次配置我們使用端口 2424。

< hostname > 客戶所在的計算機的 TCP/IP 主機名。

配置 BCT

由於 developerWorks.bct 文件由 BCT 命令組成,只有配置過 BCT 才能使用。這又是一個帶有鍵值對的屬性文件。

workstation_name :指定給 J/XFS 客戶的工作站名。如前面所述,本例使用 developerWorks。

config_key :BCT 的配置鍵;您可以將其設置為 BCT 。

sdm_addparm_1 和 mgmt_addparm_1 :用於 J/XFS 服務器和所有 J/XFS 客戶之間通信的 TCP/IP 端口。您將使用端口 2323 和 J/XFS 服務器所在計算機的 TCP/IP 主機名。請注意端口和主機名必須由分號隔開。

log_file_name :BCT 中 J/XFS 客戶啟動期間,只要出現問題,就會寫日志文件。提供服務器可以存放該文件的路徑和文件名,比如:/var/log/jxfs/bct.log。

剩下的值再一次保持不變,請記住在使用反斜槓作為路徑分隔符的系統中,反斜槓必須用\表示。

因為 BCT 是系統管理工具,它沒有存放在客戶的 Java 壓縮文檔 jxfsclient1.01.jar,而是在服務器壓縮文檔 jxfsserver1.01.jar 中。使 jxfsserver1.01.jar 在 Java 環境中可用,並通過啟動 Java 程序 com.jxfs.forum.tools.bct.BCT (以 BCT 批處理文件名作為參數)來啟動 BCT,將配置信息發送給 J/XFS 服務器。請注意參數前必須冠以 @ 符號。如果批處理文件叫 developerWorks.bct BCT,您將以 @developerWorks.bct 作為參數提供給 BCT Java 程序。

Melange demo

最後,准備啟動演示程序,Melange demo。我們將再一次使用屬性文件來安裝該程序。這一次骨架文件叫 demo.cfg。對其進行編輯,下面的鍵要使用恰當的值:

workstation_name :指定給 J/XFS 客戶的工作站名。本例使用 developerWorks。

config_key :J/XFS 客戶的配置鍵;這個示例選用 jxfsClient 作為它的值。

sdm_addparm_1 :用於 J/XFS 服務器和所有 J/XFS 客戶之間通信的 TCP/IP 端口。這裡我們使用端口 2323 和 J/XFS 服務器所在計算機的 TCP/IP 主機名。請注意這兩者必須由分號隔開。

log_file_name :如前面提到的所有情況,在 J/XFS 客戶啟動期間,只要發生問題就會將寫日志文件。提供服務器可以存放該文件的路徑和文件名,比如:/var/log/jxfs/jxfsClient.log。

如果直到這一步您都是按照文章中的步驟進行安裝,那麼現在您可以自信地啟動您的第一個 J/XFS 客戶。Melange demo 不是 J/XFS 內核的部件,因此存儲在一個單獨的 Java 壓縮文檔(jxfsdemo1.01.jar)中。當您使得該壓縮文檔在 Java 環境中可用之後,您可以通過調用 Java 程序 com.jxfs.samples.application.MelangeDemo (將演示配置屬性文件作為參數提供給它)來啟動 Melange demo。請不要忘記使 Java 虛擬機能夠訪問 Java 基礎類庫(在 swingall.jar 文件中包含 Swing )。

圖 4 是 Melange demo 的圖解。操作這個演示,來感覺一下 J/XFS。

圖 4. 帶有設備列表的 Melange demo

總結

這篇文章僅僅作為介紹,不可能涵蓋 J/XFS 和 FDI for J/XFS 的各個方面。更多信息包含在放在 FDI for J/XFS 的 zip 壓縮文檔的文檔中。建議您操作演示以及閱讀有幫助的文檔( 參考資料中介紹的)。該系列的第二部分是 J/XFS 框架下的設備服務開發的實作介紹,那麼開始准備吧!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved