【正文】
esources provided by the application server for data access by business ponents into the enterprise information services (data) tier, and most monly are exemplified by JDBC connection pools managed by the application Server. A J2EE programmer explicitly programs only EJBs and Web ponents. These customwritten ponents interact with each other and system services both implicitly and explicitly. For example, an EJB developer may choose explicit transaction demarcation (., BeanManaged Transactions) which means that the developer assumes the burden of writing explicit programmatic interaction with the platform’s Transaction Manager Service through welldefined interfaces. Alternatively, the developer may choose ContainerManaged transaction demarcation, where transactional behavior of a ponent is defined through its descriptors and handled pletely by the EJB container, thus acting as an implicit dependency of the EJB on the underlying Transaction Manager service. Links Between Components Remote Interactions J2EE defines only three basic interponent connection types that can cross application server boundaries, in all three cases。 Distributed。例如, JBoss 利用 Java 管理擴(kuò)展服務(wù)器來實(shí)現(xiàn)基本的命名和調(diào)用功能。我們感覺到通過動(dòng)態(tài)的部署和拆卸系統(tǒng)服務(wù),動(dòng)態(tài)的配置應(yīng)用服務(wù)器對(duì)動(dòng)態(tài)分布的部署 J2EE 應(yīng)用程序是一種十分重要的構(gòu)建資源有效型框架的方法。與之相似的是,一個(gè)消息驅(qū)動(dòng)的bean,也隱式需要一種運(yùn)行在網(wǎng)絡(luò)上消息服務(wù)實(shí)例。大多數(shù)現(xiàn)代的應(yīng)用服務(wù)器都提供這樣的功能。 為了著手構(gòu)建一個(gè)能夠部署不可網(wǎng)絡(luò)的動(dòng)態(tài)的分布式的架構(gòu),我們提出了一種普遍的部署單元即一個(gè)簡(jiǎn)單的基于 xml 部署的解釋器或者是一組類似的綁定到文檔中的解釋器。因此,這種架構(gòu)把所有的本地的組件請(qǐng)求當(dāng)作一個(gè)單一的組件加以對(duì)待。 本地交互 一些組件間的交互 可以發(fā)生在同一地點(diǎn)的相同應(yīng)用服務(wù)器虛擬機(jī)的組件間,有時(shí)候甚至可以發(fā)生在只有相同容器的組件間。 (3) 把初始綁定的 EJB 對(duì)象到 EJB 部署組件的能力 。 然而,沒有一個(gè)現(xiàn)代的應(yīng)用服務(wù)器允許詳細(xì)的控制所有組件類型的部署過程除了在它們的部署解釋器中的有限的選擇。 (4) 啟動(dòng)目標(biāo)組件 。雖然查詢的協(xié)議還沒有被標(biāo)準(zhǔn)化,但是假設(shè)一個(gè)基于 JMX 或者 JNDI 的查詢是合理的。組件的運(yùn)行時(shí) JNDI 環(huán)境為每一個(gè)組件部署所創(chuàng)建。 (1) 遠(yuǎn)程 EJB 調(diào)用:同步的 EJB 調(diào)用通過主 EJB 對(duì)象和 EJB 對(duì)象接口來實(shí)現(xiàn)?;蛘?,開發(fā)者也可選擇容器管理事務(wù)區(qū)分的方式。數(shù)據(jù)源是提供給應(yīng)用服務(wù)器的為事務(wù)組件進(jìn)入到企業(yè)信息服務(wù)層提供數(shù)據(jù)接口,通常由被應(yīng)用服務(wù)器管理的 JDBC 連接池實(shí)例化。 EJB 和 Web 組件都利用 JNDI目錄機(jī)制去尋找資源和它們想要交互的其 EJB 組件。 (2) Web 組件( Servlet、 JSP) 。 J2EE組件編程模型 在我們基本的 J2EE 組件前,先讓我們強(qiáng)調(diào)一下什么是組件。我們應(yīng)該把注意力放在 版本上,而實(shí)際上是在學(xué)習(xí)后者。 J2EE 編程模型一直被認(rèn)為是分布式的編程模型,在該模型中應(yīng)用組件在 J2EE 服務(wù)器上運(yùn)行并且彼此可以相互交互。 EJB 對(duì)象允許或者本地 EJB 對(duì)象是特定 EJB 實(shí)例的代理。 EJB 規(guī)范定義了很多種組件。 業(yè)務(wù)層或者 EJB 層 這一層包含 EJB,即企業(yè)應(yīng)用的事務(wù)邏輯模型。服務(wù)器端包括servlet、 jsp 和靜態(tài)網(wǎng)頁內(nèi)容。用 J2EE 進(jìn)行應(yīng)用開發(fā)必須遵守經(jīng)典的 3 層結(jié)構(gòu) —表現(xiàn)層,業(yè)務(wù)層和企業(yè)信息系統(tǒng)層。 (3) 服務(wù)器提供給組件的服務(wù) ?,F(xiàn)在工業(yè)上的組件框架標(biāo)準(zhǔn)以對(duì)象管理組的 CORBA 組件模型, SUN 公司的 JAVA 2 Platform J 企業(yè)版 [J2EE]和微軟公司的 .NET 標(biāo)準(zhǔn),其中在企業(yè)里應(yīng)用最為廣泛的組件框架是 2EEE。組件框架是一種中間件系統(tǒng),它支持遵守一定標(biāo)準(zhǔn)的有不同組件構(gòu)成的應(yīng)用程序。第 3 部分對(duì)這種架構(gòu)給出了 一般性的描述。 JBoss 的組件結(jié)構(gòu)允許根據(jù)部署應(yīng)用程序的需要增加服務(wù)配置。組件配置過程評(píng)估了應(yīng)用程序路徑的正確性,確認(rèn)在系統(tǒng)組件上的應(yīng)用組件的獨(dú)立性和完成復(fù)制組件的部署。這種組件說明語言用來描 述應(yīng)用程序組件和鏈接,它使得應(yīng)用組件與系統(tǒng)組件中清晰的分開。 (3) 提供簡(jiǎn)單但可表達(dá)的抽象 方法 去控制通過部署和拆卸組件獲得的適 用性。例如你必須在配置和部署應(yīng)用組件前先建立 JDBC 數(shù)據(jù)源,設(shè)立消息目的地和資源適配器。 (5) 新的請(qǐng)求路徑可以復(fù)用先前的組件配置路徑 。那非研究的主要結(jié)論可以概括如下: (1) 應(yīng)用合適的應(yīng)用程序,在廣域網(wǎng)中的垂直負(fù)荷可以 察覺的延遲。 關(guān)鍵詞: j2ee; 動(dòng)態(tài)配置 ; 分布式 ; 組件 ; 1 前言 近幾年,我們已經(jīng)看到基 于組件的企業(yè)應(yīng)用開發(fā)的顯著 增加。這種需要對(duì)于哪怕在單一的應(yīng)用程序服務(wù)器上嘗試 部署 J2EE 應(yīng)用的人來說也顯而易見,這種任務(wù)設(shè)計(jì)到大量的系統(tǒng)服務(wù)和應(yīng)用組件的配置。最近的著作已經(jīng)表明在廣域網(wǎng)中利用垂直負(fù)荷而不引起前面所述的超 時(shí)問題的可行性。 (4) 事實(shí)上,不同的復(fù)制組件可能會(huì)根據(jù)應(yīng) 用不同的方式實(shí)現(xiàn)相組件 。這種需要對(duì)于哪怕在單一的應(yīng)用程序服務(wù)器上嘗試布置 J2EE 應(yīng)用的人來說也顯而易見,這種任務(wù)設(shè)計(jì)到大量的系統(tǒng)服務(wù)和應(yīng)用組件的配置。 (2) 聲明應(yīng)用程序組件對(duì)應(yīng)用服務(wù)器,以及它們的配置和部署的依賴性。 在本論文中,我們提出自動(dòng)動(dòng)態(tài)部署 J2EE 應(yīng)用程序的框架涉及了上面的所有問題,這種框架為組件定義了結(jié)構(gòu)描述語言,鏈接說明和集合。組件集合語言允許先前定義的復(fù)制的組件通過連接合適的端口集合到應(yīng)用路徑,連接時(shí)通過鏈接復(fù)制對(duì)象和具體把這些復(fù)制組件映射到目標(biāo)應(yīng)用服務(wù)器節(jié)點(diǎn)。這種架構(gòu)實(shí)現(xiàn)利用了 JBoss 的可擴(kuò)展的微內(nèi)核結(jié)構(gòu),基于 JMX 規(guī)范。第 2 部分提供了必要的背景以理解和研究有關(guān)的 J2EE 組件技術(shù)規(guī)范。 2 J2EE 背景知識(shí) 介紹 組件框架。這種容器也提供通常需要的功能以實(shí)現(xiàn)命名,安全性,事務(wù),和持久性!組件框架為組件的執(zhí)行提供了一個(gè)集成的環(huán)境,因此顯著的減少了在設(shè)計(jì),實(shí)現(xiàn),部署和維護(hù)應(yīng)用程序 時(shí)工作。 (2) 組件和主服務(wù)器的鏈接 。 在眾多的服務(wù)列表中,消息通信,事務(wù)處理,命名機(jī)制和其它應(yīng) 用組件用到的服務(wù)是應(yīng)用服務(wù)器必須提供的。客戶端包括瀏覽器, applets, Java應(yīng)用程序等和負(fù)責(zé)和服務(wù)器端的表現(xiàn)層或者業(yè)務(wù)層進(jìn)行交互。表現(xiàn)層的服務(wù)器端通常通過 Http 協(xié)議來 進(jìn)行訪問。在 Java 虛擬機(jī)調(diào)用或者異步的消息傳遞,取決與 EJB 組件的類型。這種工廠代理對(duì)象通常被 EJB 部署者綁定在 JNDI 中。資源適配器在 Java 連結(jié)結(jié)構(gòu)中被定義。 J2EE 規(guī)范已經(jīng)經(jīng)過了好幾次修訂,現(xiàn)在最穩(wěn)定的版本是 , 版 本正處于重審階段。最近名單上有多出了新的 Apache project Geronimo。根據(jù)以上的定義,如下的組成 J2EE 應(yīng)用程序的 實(shí)體可以看作是軟件組件: (1) EJBS(會(huì)話,實(shí)體,消息驅(qū)動(dòng))。 EJB 和 Web 組件被部署在由應(yīng)用服務(wù)贊助商提供的容器中 .它們有定義良好的容器規(guī)則來管理生命周期,線程,持久化和其他問題。消息目的地,像對(duì)話和隊(duì)列,是由消息服務(wù)執(zhí)行所 提供的資源。例如, EJB 開發(fā)者可以選擇明確的事務(wù)區(qū)分方式,這種方式意味著開發(fā)者假設(shè)通過定義良好接口的事務(wù)經(jīng)理服務(wù)平臺(tái)來書寫明確的程序交互。在這三種情況下,通信通過特定的 Java 對(duì)象來完成。 在前兩個(gè)實(shí) 例中,應(yīng)用組件的開發(fā)者不僅書寫執(zhí)行在組件的運(yùn)行時(shí) JNDI 環(huán)境中的對(duì)象目錄代碼,而且書寫發(fā)布方法調(diào)用,與遠(yuǎn)程的組件相互發(fā)送和接受消息。在 Java 連接器的內(nèi)部通信情景下,Activation Spec 對(duì)象查詢以及所有的相應(yīng)的 M 容器隱式的完成。 (3) 用組件的命名服務(wù)去綁定目標(biāo)。 (7) 啟動(dòng)指定的組件 。 (2) 創(chuàng)建和綁定特定的 JNDI 目標(biāo)去訪問消息目的和數(shù)據(jù)源的能力 。然而,在不同應(yīng)用服務(wù)器的環(huán)境下,由于跨服務(wù)器的類下載問題,這種簡(jiǎn)單的控制解釋器的方式是不夠的。這種本地部署所關(guān)心的不是在分布式架構(gòu)中去表現(xiàn)而是去增強(qiáng)一致性。 (2) 具體服務(wù)應(yīng)用程序類的代碼的更替 。我們假設(shè)這種動(dòng)態(tài)的部署和拆卸服務(wù)存在于所有的兼容的 J2EE 服務(wù)器上而且在不理解類重載相關(guān)問題時(shí)一個(gè)健壯的類重載結(jié)結(jié)構(gòu)的應(yīng)用服務(wù)器就能夠重復(fù)的部署生命周期。例如,假如有一個(gè)事務(wù)容器要至少用一種方法去開始一個(gè)新的事務(wù),那么一個(gè)帶有這樣的事務(wù)容器的 EJB 就需要在應(yīng)用層表示事務(wù)管理服務(wù)。包括,開源的應(yīng)用服務(wù)器, JBoss 和 OnAS 在內(nèi),已經(jīng)有多種 J2EE 應(yīng)用服務(wù)器已經(jīng)全部或者部分的實(shí)現(xiàn)了組件化。所有其它的服 務(wù)是熱部署并且通過一個(gè)普通的調(diào)用總線來進(jìn)行通信。 ponent。 munication is acplished through special Java objects. ? Remote EJB invocation: synchronous EJB invocations through EJB Home and EJB Object interfaces. ? Java Connector outbound connection: synchronous message receipt, synchronous and asynchronous message sending, Database query using Connection Factory and Connection interfaces. ? Java Connector inbound connection: asynchronous message delivery into MessageDriven Beans (MDBs) only, utilizing Activation Spec objects. In the first two cases, an application ponent developer writes the code that performs lookup of these objects in the ponent’s runtime JNDI context as well as code that issues method invocations or sends and receives messages to and from the remote ponent. The ponent’s runtime JNDI context is created for each deployment of the ponent. Bindings in the context are initialized at ponent deployment time by the deployed (usually by means of ponent’s deployment descriptors). These bindings are assumed to be static, since the specification do