引??言?
??? 傳統(tǒng)的企業(yè)級應用面臨著很多的局限:以局域網為中心,伸縮性差;業(yè)務與數(shù)據(jù)在客戶端,不僅加重了客戶端系統(tǒng)要求,而且難于管理大量的客戶機;難于管理系統(tǒng)中大量的應用軟件等。鑒于J2EE是企業(yè)級應用上的理想平臺,和J2EE與Java Web Start在瘦客戶端技術上的強大優(yōu)勢,為此提出了基于J2EE與Java Web Start的企業(yè)級應用方案。?
基于J2EE與Java Web Start的企業(yè)級應用方案?
??? 1.體系結構?


??? 2.該方案在企業(yè)級應用的特點?
??? (1)? 由于采用多層結構和Java Web Start這兩種瘦客戶端技術,不僅解決了在企業(yè)級的局域網中部署軟件的問題,同時減少了客戶端系統(tǒng)及硬件需求,還降低了系統(tǒng)軟件成本。?
??? (2)? 主要業(yè)務和數(shù)據(jù)處理均在服務器端進行,這樣對網絡要求不高,且穩(wěn)定性好。?
??? (3)? 來自Java技術的特點,該系統(tǒng)具有高度的通用性和跨平臺的特性。?
??? (4)? 整個系統(tǒng)的安全性高,功能強大,效率高。因為用Java Web Start部署軟件,該軟件至少有本系統(tǒng)部署單位的軟件簽名,方可部署;Java Web Start不僅是瘦客戶端技術,而且是富客戶端技術(客戶端的處理功能強大);并且能及時的更新或升級該軟件等。?
??? 3.由于Java Web Start只能用于Java應用程序的Jar文件,對與其它類型的軟件不容易部署,特別是一些應用軟件,而這些軟件是市場的主流。雖然能通過編寫相關一些Java 類,并用Jar來對這些軟件和這些類進行打包來實現(xiàn),但這樣做僅僅起到一個安裝發(fā)布的作用,?
??? 其它的都不易實現(xiàn)。這是該方案的主要缺陷。但是憑著人們對Java技術的信心,特別是一些大公司在Java技術上大量投入,不僅Java Web Start技術會有新發(fā)展(例如:對其它軟件的兼容性),而且會有大量用Java技術編寫的應用軟件出現(xiàn)。?
??? 4.現(xiàn)在企業(yè)及事業(yè)單位的信息化是大勢所趨,而且相當多的企業(yè)及事業(yè)單位的信息化的工作做的很積極,有的不可避免與外部進行大量文件的來往,其中內部與外部網絡流量(所用的帶寬)的大小,內部信息的安全性等是重點關心的問題。鑒于J2EE與Java Web Start的企業(yè)級應用方案的優(yōu)勢,采用文件代理傳輸?shù)姆绞剑O計并實現(xiàn)文件代理傳輸?shù)南到y(tǒng),以期解決上述問題。?
需求分析和系統(tǒng)設計?
??? 對于有大量文件傳輸?shù)钠髽I(yè)級系統(tǒng),其網絡流量(帶寬)大小,內部信息的安全性等是企業(yè)級系統(tǒng)構架是首要考慮的問題。本文件代理傳輸系統(tǒng)就是基于這些問題所設計的,本系統(tǒng)所實現(xiàn)的功能:1)基于HTTP的代理下載,基于FTP的上傳與下載.2)對每一個系統(tǒng)內部成員或部門都有信息管理,包括用戶信息,代理信息等.3)有完整的日志信息,能及時地反饋準確的系統(tǒng)安全信息.4)管理員在運行管理端對各種文件代理傳輸?shù)男袨檫M行確認,根據(jù)內部的安全性的原則,進而確定為其進行文件代理傳輸,這樣就有效的把意外的文件傳輸帶來危害扼殺在最初階段,5)實現(xiàn)對外部Internet的訪問與內部成員或部門高峰訪問Internet是異步的,這樣不僅節(jié)約帶寬,而且最大限度利用了帶寬.系統(tǒng)圖如下:

??? 系統(tǒng)的功能與流程的設計與實現(xiàn):用戶通過發(fā)送有關登陸信息和代理信息(給一個URL請求下載資料,或給用戶名和密碼,及ftp地址其請求代理下載與上傳)的表單,經過web層和業(yè)務層處理后,把正確的信息存入信息DB(數(shù)據(jù)庫)中,再運行管理端確認,并選擇內部網對Internet訪問流量較少的時候,啟動代理組件取得代理信息,建立與外部Internet的連接,并對文件服務器進行訪問(代理上傳,把相關目錄下文件上傳,代理下載,則把下載的文件存入相關的目錄下).用戶則是通過ftp工具與ftp服務器進行文件傳輸(代理傳輸?shù)奈募嬖谖募掌魃?.?
??? 該系統(tǒng)是按J2EE和Java Web Start的企業(yè)級應用方案來設計的,其中客戶端的用Java寫FTP工具和運行管理端的對代理信息進行確認和激活遠程代理傳輸?shù)腏ava應用程序都部署在服務器端,客戶端和運行管理端通過Java Web Start所擁有的JNLP協(xié)議從服務器端下載(當然還可以用其他的FTP工具,但這違反瘦客戶端的原則);采用J2EE的多層體系結構的設計方案來設計與客戶端進行交互的服務器端程序;這樣不僅完全實現(xiàn)了瘦客戶端,而且整個系統(tǒng)具有可維護性和伸縮性,甚至完全可以把該系統(tǒng)嵌入到一個J2EE的系統(tǒng)中,成為其中的一個服務器端構件.?
相關技術及其特點?
??? 1.Java Web Start技術在服務器端的使用.?
??? Java Web Start是一種面向Web的應用程序部署解決方案,使用該技術的優(yōu)點:1)高度交互的用戶界面.2)較低的帶寬需求,因為它緩存已經下載的信息.3)支持脫機工作.4)在編寫基于Java Web Start的程序是還可使用或擴展JNLP API,以增強程序的功能.5)在企業(yè)級應用中可減少軟件的使用和升級成本等.Java Web Start的通信協(xié)議:JNLP(Java網絡加載協(xié)議),當服務器接受客戶端的application/x-java-jnlp的MINE格式的請求,?會使用之前所定義的相關文件類型(jnlp)的應用程序執(zhí)行,JNLP描述的文件內容為統(tǒng)一標準的XML文件,本系統(tǒng)所用到一個JNLP文件(ftp.jnlp)的相關代碼如下:?
?
??? 2.EJB的設計與實現(xiàn)?
??? EJB可用來封裝應用程序的業(yè)務邏輯,是J2EE平臺下的企業(yè)級應用的重要部分。通常一個EJB是由Home接口、remote接口和Bean類,以及輔助類組成。Remote接口定義EJB組件中提供的可供用戶調用的方法,及實現(xiàn)商業(yè)邏輯的函數(shù)或過程;Home接口定義Bean生命周期的有關方法; EJBObject為網絡可視對象,包含Stub和Skeleton作為Bean的代理。這樣的結構使得訪問遠程對象就像訪問本地對象一樣,保證企業(yè)級應用。在本系統(tǒng)中,出于在業(yè)務處理中的數(shù)據(jù)訪問的需要,同時考慮到數(shù)據(jù)的持久性,分別設計和實現(xiàn)了一個會話Bean和一個實體Bean.?
??? (1)由于EJB中的遠程訪問的方法要求方法的參數(shù)和返回結果是可串行化的類,及實現(xiàn)應用程序的某些功能的方法的需要.設計兩個可串行化類(即實現(xiàn)Serializable接口):PersonInfo類包含對應于PersonList表中部分字段信息和AgentList表中overORnot字段信息的數(shù)據(jù)成員;AgentInfo類的數(shù)據(jù)成員與數(shù)據(jù)庫中的AgentList表的表頭字段之間建立映射關系,并包含配對的getter和setter方法等。?
??? (2)對于類中每個數(shù)據(jù)成員用getter和setter來訪問,其訪問開銷和復雜過程等就應該考慮,為此采用數(shù)值對象把所有的數(shù)據(jù)封裝起來,然后一次發(fā)送所有數(shù)據(jù),最后通過數(shù)值對象把數(shù)據(jù)一次性存回數(shù)據(jù)庫.下面就是本系統(tǒng)采用這種方法的具體實現(xiàn)過程:?
??? 對于無狀態(tài)會話Bean:創(chuàng)建一個數(shù)據(jù)存放類InfoList,使用一個Vector類型的數(shù)據(jù)成員和一個setInfo方法,再創(chuàng)建數(shù)據(jù)訪問類Info來封裝對數(shù)據(jù)庫的訪問,并把數(shù)據(jù)填充到InfoList中.關鍵代碼:public class Info{… ?
Vector ns=new Vector();InfoList inL=new InfoList();rs=sts.excuteQuery(sql);?
while(rs.next()){?? PersonInfo p=new PersonInfo();?
p.setName(rs.getString("name"));… ins.add(p);} inL.setInfo(ins);…}?
??? 對于實體的Bean:采用與上面相同的方法創(chuàng)建于實現(xiàn)數(shù)據(jù)存放類AgentList,數(shù)據(jù)訪問類Agent.?
??? (3)無狀態(tài)會話Bean-處理用戶對用戶信息的訪問?
??? 通過遠程接口說明該EJB的功能: import javax.ejb.EJBObject; import java.rmi.RemoteException;?
public interface PersonMessage extends EJBObject{?
public PersonInfo getMessage(String name, String code);? // 返回用戶信息?
??? public boolean addHttpMessage(String name, String code, String url);?
// 增加http代理下載信息?
??? public boolean addFtpMessage(String name, String code, String ftpUrl, String Ftpname, String code, boolean? ul); // 增加ftp上傳、或下載信息?
?? ? …… }?
?? (4)實體Bean-實現(xiàn)對代理信息的管理?
??? 通過遠程接口說明該EJB的功能: import javax.ejb.EJBObject; import java.rmi.RemoteException;?
public interface AgentMessage extends EJBObject{?
?public int getAgentLength();??????????????? //獲取代理信息的數(shù)目?
?public AgentInfo getAgentMessage(int Index);? // 取得第index+1條代理信息?
?public void setOver(boolean bl)? // 反饋代理(bl=true,成功;bl=false ,失敗? ?
? ?? …… }?
3.采用可激活的RMI的實現(xiàn)對代理JavaBean的控制?
??? 考慮到運行客戶端和文件代理JavaBean都是Java應用,RMI在兩端的復雜程度和類加載的垃圾收集上優(yōu)于CORBA,故選擇RMI. Java RMI支持存儲在不同地址空間的程序級對象之間彼此進行通信,實現(xiàn)遠程對象之間的無縫調用。為了保證分布式系統(tǒng)的高效性,通常在服務器上的對象是激活的,可供客戶端隨時調用,但一直處于激活狀態(tài)要占用大量的系統(tǒng)資源,特別對于一些異步的對象,簡直是浪費系統(tǒng)資源。本系統(tǒng)中的代理JavaBean就是一個與普通用戶訪問異步的程序級的對象,因此采用RMI遠程方法調用激活系統(tǒng)守護進程來解決這個問題.它的機制是在程序運行后就處于睡眠狀態(tài),等待隨時激活.這樣就解決了RMI的JavaBean生成的開銷的問題.它包含可激活的遠程接口,接口實現(xiàn)類,注冊可激活遠程隊對象.下面是使RMI遠程接口的實現(xiàn)類:?
public class activatableRMIImpl extends Activatable implements activatableRMI?
{? ……?
} ?
4.相關的數(shù)據(jù)庫技術?
??? 由于本系統(tǒng)采用的是JDBC3.0的標準,JDBC3.0新引入了DataSource 類和RowSet接口。使用DataSource對象,使得連接緩存更簡單。因為它向程序隱藏了管理連接池的代碼(不用自己寫代碼實現(xiàn)連接池),是連接池管理自動化。另外還支持簡單事務:事務提交與回滾。下面是相關的代碼:?
Context ctx = new InitialContext();? //從JNDI中獲取initialContext的句柄?
DataSource ds = (DataSource) ctx.lookup("");//引用數(shù)據(jù)源?
Connection conn = ds.getConnection();//建立數(shù)據(jù)對象連接?
try{ conn.setAutoCommit(false);….?? conn.commit();?? //確定提交?
}catch(SQLException e){try{??? conn.rollback();…??? //提交不成功,就回退RowSet是增加了JavaBean接口ResultSet擴展,其中JDBCRowSet是RowSet的實現(xiàn)方式之一,JDBCRowSet最適合創(chuàng)建使用SWING/AWT和其它的JavaBean組件的應用程序,它潛在地允許創(chuàng)建活動的數(shù)據(jù)視圖,還可及時地更新視圖。本系統(tǒng)中在運行管理端對代理信息確認,該應用程序就采用通過JDBC直接訪問數(shù)據(jù)源,用OracleJDBCRowset類來創(chuàng)建活動的數(shù)據(jù)視圖。
結束語?
??? 基于J2EE與Java Web Start的企業(yè)級應用方案是在企業(yè)級應用中的一個相當不錯的選擇,不僅J2EE已成為眾多企業(yè)平臺架構的標準,而且Java Web Start在企業(yè)級部署軟件和客戶端的本地處理能力上有相當大的優(yōu)勢,另外采用該方案的系統(tǒng)成本不高.基于J2EE與Java Web Start的文件代理傳輸系統(tǒng)是對該方案的一個嘗試,本系統(tǒng)目前只是實現(xiàn)整個文件代理傳輸?shù)幕痉桨?,在整個系統(tǒng)功能方面,特別代理文件傳輸?shù)腏avaBean功能有待進一步完善。最后由于本系統(tǒng)具有伸縮性、高效性、安全性等,對于采用Java平臺,又有大量文件傳輸需求的企業(yè)級系統(tǒng),本系統(tǒng)具有不錯的應用價值。?
參考文獻:?
1.David J. Gallardo著 董慶霞譯《Java Oracle數(shù)據(jù)庫開發(fā)指南》清華大學出版社?
2.黃嘉輝編著 《Java網絡程序設計》 清華大學出版社?
3.尤晉元等《基于JNLP協(xié)議的軟件上下載服務器的設計與實現(xiàn)》《計算機應用與軟件》P5 2003/7?
4.http://java.sun.com/?
