摘要:EJB技術是J2EE平臺的核心技術,繼承了Java語言的平臺無關性的特點,簡化了用Java開發(fā)分布式組件應用程序的過程。分布式系統(tǒng)體系結構具有安全性、穩(wěn)定性、易維護、快速響應和擴展靈活等特點,用來構建具有分布式需求的企業(yè)物流系統(tǒng)非常合適。文章介紹了EJB技術如何實現(xiàn)分布式計算功能,描述了分布式企業(yè)物流系統(tǒng)的設計方案,提出了改進系統(tǒng)性能的幾種方法,最后討論了EJB安全性的相關內容。
關鍵詞:EJB;分布式;組件:物流系統(tǒng)
0 引言
如今,一體化物流是最具影響力的物流發(fā)展趨勢之一。電子商務的快速發(fā)展使得構建一體化物流系統(tǒng)成為可能。同時,EBXML、UDDI、XML/EDI等電子商務技術的迅速發(fā)展,使得企業(yè)之間的信息交互和業(yè)務互操作有了標準的規(guī)范和方法,為一體化物流系統(tǒng)的建設奠定了基礎。
SUN公司推出的J2EE企業(yè)平臺為現(xiàn)代企業(yè)應用提供了分布式系統(tǒng)體系結構的解決方案。J2EE不僅繼承了Java語言的平臺無關性的特點,而且還結合了組件技術,為現(xiàn)代企業(yè)快速創(chuàng)建分布式應用提供了一體化的解決方案。EJB即Enterprise JavaBeans,是一種服務器端組件體系結構,它簡化了用Java開發(fā)企業(yè)級的分布式組件應用程序的過程;通過EJB可以開發(fā)可擴展的、健壯的和安全的應用程序,而不用編寫復雜的分布式組件框架;利用EJB可以快速而且輕松地利用Java構建服務器端組件;EJB被設計為支持應用程序的可移植性和可重用性。這些特性使得EJB可以適用于為任何廠商的企業(yè)中間件服務。
本文介紹了基于EJB技術的分布式企業(yè)物流系統(tǒng)的設計方案,對物流系統(tǒng)運行初期所遇到的部分性能瓶頸給出了解決辦法,并且分析了EJB的安全性。
1 EJB技術實現(xiàn)分布式計算
EJB的核心是RMI,即Remote Method Invocation。在EJB中,對客戶端來說企業(yè)Bean必須可見,客戶端才能調用。而這正是通過Java RMI來實現(xiàn)的。企業(yè)Bean并不是完整的遠程對象,它們沒有繼承UnicastRemoteObject,而是包裝在RMI功能的外殼內,叫做EJB對象。EJB對象正是客戶端訪問的遠程對象。當一個客戶端調用EJB對象時,EJB對象將遠程調用請求委派給企業(yè)Bean執(zhí)行。
如果開發(fā)企業(yè)Bean,就需要Bean的EJB對象的接口,稱為遠程接口。遠程接口復制了企業(yè)Bean的所有的方法,調用EJB對象就好象在調用企業(yè)Bean本身一樣。
EJB的遠程接口也有自己的一些特性:EJB遠程接口間接地繼承了java.rmi.Remote接口;EJB遠程接口中的每個方法都需要拋出java.rmi.RemoteException異常;每個遠程接口中的方法都必須接收符合Java RMI標準類型的參數(shù)。參數(shù)可以是原始類型、可序列化或是遠程對象;可以在語法上控制它是值調用還是引用調用。
客戶端使用的EJB對象可以是真正的EJB對象,也可以是在網(wǎng)絡上某個地方的EJB對象的遠程存根(RemoteStub);客戶端代碼不關心這些,因為它只是調用EJB對象接口,而不管它是對象本身還是存根的具體實現(xiàn)。因此EJB的本地,遠程位置透明性通過RMI就達到了。
在EJB中,Home對象是產生EJB對象的工廠。通過Java命名目錄服務接口(JNDI)來查找Home對象,一旦找到了Home對象,就可以通過RMI來調用它。
Home對象的接口(也就是Home接口)也是個Java遠程接口,符合Java RMI規(guī)范。它必須拋出遠程異常,實現(xiàn)Java.rmi.Remote并介紹系列化參數(shù)。作為EJB對象,它們是各個容器私有的。
本地對象的客戶端只和本地接口交互,就好像遠程對象的客戶端只處理遠程接口一樣。和EJB對象一樣,對本地對象的引用可以是一個實際的本地對象,也可以是位于網(wǎng)絡某個地方的本地對象的遠程存根。
EJB的調用過程如圖1所示。
2 系統(tǒng)設計方案
E3B是J2EE平臺的核心,也是J2EE得到業(yè)界廣泛關注和支持的主要原因。J2EE的一個主要目的就是簡化企業(yè)應用系統(tǒng)的開發(fā),使開發(fā)人員將主要精力放在商業(yè)邏輯的開發(fā)上。EJB正是基于這種思想的服務器端技術,它本身也是一種規(guī)范,該規(guī)范定義了一個可重用的組件框架來實現(xiàn)分布式的、面向對象的商業(yè)邏輯。EJB的核心思想是將商業(yè)邏輯與底層的系統(tǒng)邏輯分開,使開發(fā)人員只需關心商業(yè)邏輯,而由EJB容器實現(xiàn)目錄服務、事務處理、持久性、安全性等底層系統(tǒng)邏輯。
本文所述的分布式企業(yè)物流系統(tǒng)采用EJB體系結構,由客戶層、應用邏輯層、數(shù)據(jù)層組成的??蛻魧訛橛脩籼峁┖啙?、友好的人機交互界面,主要負責數(shù)據(jù)的錄入和輸出數(shù)據(jù)的表示。當用戶進行數(shù)據(jù)交換時,其應用程序不直接訪問第三層的數(shù)據(jù)庫服務器,而是通過第二層——應用邏輯層提供的接口間接訪問后臺的數(shù)據(jù)庫,這樣就保證了后臺數(shù)據(jù)庫的安全性,實現(xiàn)真正意義上的“瘦客戶”模式。系統(tǒng)體系結構如圖2所示。
數(shù)據(jù)層實際上就是后臺的數(shù)據(jù)庫管理系統(tǒng),應用邏輯層可以通過JDBC與后臺數(shù)據(jù)庫進行通信。
應用邏輯層是整個系統(tǒng)的核心,它集中了整個應用的所有規(guī)則,負責接收客戶層發(fā)送過來的請求,對輸入的數(shù)據(jù)按照既定的業(yè)務規(guī)則進行加工處理,并轉換為對數(shù)據(jù)庫的訪問。因此,應用邏輯層是客戶層訪問后臺數(shù)據(jù)庫的代理。
分布式物流系統(tǒng)中各類事務(即物流系統(tǒng)的事務模塊)的主要邏輯可以被放置在EJB中。以這種方式,我們就可以使代碼集中,模塊化地解決事務問題,利用企Bean容器來支持低層服務,比如狀態(tài)管理、事務處理、線程管理、遠程數(shù)據(jù)訪問和安全等。
在本文所述的物流系統(tǒng)中,貨物跟蹤、車船跟蹤、運力調度等模塊都用EJB實現(xiàn),他們各自成為獨立的組件,企業(yè)的各部門、分公司可以根據(jù)權限訪問這些組件,實時查看貨物狀態(tài)、車船位置及運力的分配情況,從而實現(xiàn)物流系統(tǒng)的分布式和組件式管理。
客戶層開發(fā)的主要思想是合理劃分數(shù)據(jù)敏感組件和不敏感組件,分別形成靜態(tài)網(wǎng)頁和動態(tài)EJB組件,以利于應用程序的管理和維護,這樣編程人員可以非常方便地保持客戶端和服務器端數(shù)據(jù)一致??蛻舳藨贸绦虮旧聿慌c后臺數(shù)據(jù)庫服務器直接連接,而是通過調用應用邏輯層的組件與后臺數(shù)據(jù)庫服務器發(fā)生聯(lián)系,用于客戶錄入數(shù)據(jù)和顯示從服務器端返回的各種查詢結果和各種統(tǒng)計報表。
3 系統(tǒng)性能改進
在系統(tǒng)的運行初期,碰到了部分性能瓶頸,主要解決方法如下:
(1)一次性查詢大量數(shù)據(jù)時,系統(tǒng)性能下降,這是由于實體bean反復調用數(shù)據(jù)庫引起的。使用會話Bean來處理數(shù)據(jù)庫的批量操作可以減少數(shù)據(jù)庫調用次數(shù),從而提高性能。
(2)采用集群來提升系統(tǒng)性能。集群中的每臺應用服務器都含有相同的EJB,采用有效的算法可實現(xiàn)負載均衡。
(3)調整服務器的線程池大小、JVM堆棧大小、連接數(shù)等屬性,可達到最優(yōu)配置。
4 EJB的安全性分析
EJB的安全架構主要有兩種,分別是聲明性安全架構和編程安全架構。
聲明性安全架構是指由部署員建立與J2EE應用程序關聯(lián)的容器強制的訪問控制規(guī)則的架構。它是部署員使用部署工具將應用程序權限模型映射到特定于操作環(huán)境的策略和機制。應用程序權限模型在部署描述符中定義。
編程安全架構是指EJB容器先做出訪問控制決定,再將方法調用指派給組件的架構。組件的邏輯或狀態(tài)不包括這些訪問決定。但是一個組件可以使用兩種方法執(zhí)行細化訪問控制——EJBContext.isCallerlnRole(供企業(yè)Bean代碼使用)和HttpServletRequest.isUserlnRole(供Web組件使用)。組件根據(jù)調用參數(shù)、組件的內部狀態(tài)或其他因素,使用上述方法確定是否將組件選擇的權限授予調用者。
聲明性安全架構和編程安全架構在實際應用中可以互為補充。在編寫完應用程序之后,聲明性安全更加靈活。在編寫應用程序中,編程安全可以提供更加靈活的功能。此外,對于部署員而言,聲明性安全是透明且完全可理解的;而編程安全卻隱含在應用程序中,可能只有應用程序開發(fā)人員才能完全理解。在為特定組件和方法選擇安全架構過程中,應該考慮兩者的區(qū)別。
5 結束語
分布式系統(tǒng)體系結構具有安全性、穩(wěn)定性、易維護、快速響應和擴展靈活等特點,用來構建具有分布式需求的企業(yè)物流系統(tǒng)非常合適。EJB作為優(yōu)秀的分布式架構,可以簡化開發(fā)分布式應用程序的過程,從而開發(fā)出可重用的具有高度可移植性的應用程序。