【正文】
messaging service implementation. Data sources are resources 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 管理擴展服務器來實現基本的命名和調用功能。我們感覺到通過動態(tài)的部署和拆卸系統(tǒng)服務,動態(tài)的配置應用服務器對動態(tài)分布的部署 J2EE 應用程序是一種十分重要的構建資源有效型框架的方法。與之相似的是,一個消息驅動的bean,也隱式需要一種運 行在網絡上消息服務實例。大多數現代的應用服務器都提供這樣的功能。 為了著手構建一個能夠部署不可網絡的動態(tài)的分布 式的架構,我們提出了一種普遍的部署單元即一個簡單的基于 xml 部署的解釋器或者是一組類似的綁定到文檔中的解釋器。因此,這種架構把所有的本地的組件請求 當作一個單一的組件加以對待。 本地交互 一些組件間的交互可以發(fā)生在同一地點的相同應用服務器虛擬機的組件間,有時候甚至可以發(fā)生在只有相同容器的組件間。 (3) 把初始綁定的 EJB 對象到 EJB 部署組件的能力 。 然而,沒有一個現代的應用服務器允許詳細的控制所有組件類型的部署過程除了在它們的部署解釋器中的有限的選擇。 (4) 啟動目標組件 。雖然查詢的協議還沒有被標準化,但是假設一個基于 JMX 或者 JNDI 的查詢是合理的。組件的運行時 JNDI 環(huán)境為每一個組件部署所創(chuàng)建。 (1) 遠程 EJB 調用:同步的 EJB 調用通過主 EJB 對象和 EJB 對象接口來實現?;蛘?,開發(fā)者也可選擇容器管理事務區(qū)分的方式。數據源是提供給應用服務器的為事務組件進入到企業(yè)信息服務層提供數據接口,通常由被應用服務器管理的 JDBC 連接池實例化。 EJB 和 Web 組件都利用 JNDI目錄機制去尋找資源和它們 想要交互的其 EJB 組件。 (2) Web 組件( Servlet、 JSP) 。 J2EE 組件編程模型 在我們基本的 J2EE 組件前,先讓我們強調一下什么是組件。我們應該把注意力放在 版本上,而實際上是在學習后者。 J2EE 編程模型一直被認為是分布式的編程模型,在該模型中應用組件在 J2EE 服務器上運行并且彼此可以相互交互。 EJB 對象允許或者本地 EJB 對象是特定 EJB 實例的代理。 EJB 規(guī)范定義了很多種組件。 業(yè)務層或者 EJB 層 這一層包含 EJB,即企業(yè)應用的事務邏輯模型。服務 器端包括servlet、 jsp 和靜態(tài)網頁內容。用 J2EE 進行應用開發(fā)必須遵守經典的 3 層結構 —表現層,業(yè)務層和企業(yè)信息系統(tǒng)層。 (3) 服務器提供給組件的服務 ?,F在工業(yè)上的組件框架標準以對象管理組的 CORBA 組件模型, SUN 公司的 JAVA 2 Platform J 企業(yè)版 [J2EE]和微軟公司的 .NET 標準,其中在企業(yè)里應用最為廣泛的組件框架是 2EEE。組件框架是一種中間件系統(tǒng),它支持遵守一定標準的有不同組件構成的應用程序。第 3 部分對這種架構給出了一般性的描述。 JBoss 的組件結構允許根據部署應用程序的需要增加服務配置。組 件配置過程評估了應用程序路徑的正確性,確認在系統(tǒng)組件上的應用組件的獨立性和完成復制組件的部署。這種組件說明語言用來描述應用程序組件和鏈接,它使得應用組件與系統(tǒng)組件中清晰的分開。 (3) 提供簡單但可表達的抽象 方法 去控制通過部署和拆卸組件獲得的適 用性。例如你必須在配置和部署應用組件前先建立 JDBC 數據源,設立消息目的地和資源適配器。 (5) 新的請求路徑可以復 用先前的組件配置路徑 。那非研究的主要結論可以概括如下: (1) 應用合適的應用程序,在廣域網中的垂直負荷可以察覺的延遲。 關鍵詞: j2ee;動態(tài)配置;分布式;組件 ; 1 前言 近幾年,我們已經看到基于組件的企業(yè)應用開發(fā)的顯著增加。這種需要對于哪怕在單一的應 用程序服務器上嘗試 部署 J2EE 應用的人來說也顯而易見,這種任務設計到大量的系統(tǒng)服務和應用組件的配置。最近的著作已經表明在廣域網中利用垂直負荷而不引起前面所述的超時問題的可行性。 (4) 事實上,不同的復制組件可能會根據應用不同的方式實現相組件 。這種需要對于哪怕在單一的應用程序服務器上嘗試布置 J2EE 應用的人來說也顯而易見,這種任務設計到大量的系統(tǒng)服務和應用組件的配置。 (2) 聲明應用程序組件對應用服務器,以及它們的配置和部署的依賴性。 在本論文中,我們提出自動動態(tài)部署 J2EE 應用程序的框架涉及了上面的所有問題,這種框架為組件定義了結構描述語言,鏈接說明和集合。組件集合語言允許先前定義的復制的組件通過連接合適的端口集合到應用路徑,連接時通過鏈接復制對象和具體把這些復制組件映射到目標應用服務器節(jié)點。這種架構實現利用了 JBoss 的可擴展的微內核結構,基于 JMX 規(guī)范。第 2 部分提供了必要的背景以理解和研究有關的 J2EE 組件技術規(guī)范。 2 J2EE 背景知識 介紹 組件框架。這種容器也提供通常需要的功能以實現命名,安全性,事務,和持久性!組件框架為組件的執(zhí)行提供了一個集成的環(huán)境,因此顯著的減少了在設計,實現,部署和維護應用程序時工作。 (2) 組件和 主服務器的鏈接 。 在眾多的服務列表中,消息通信,事務處理,命名機制和其它應用組件用到的服務是應用服務器必須提供的??蛻舳税g覽器, applets, Java應用程序等和負責和服務器端的表現層或者業(yè)務層進行交互。表現層的服務器端通常通過 Http 協議來進行訪問。在 Java 虛擬機調用或者異步的消息傳遞,取決與 EJB 組件的類型。這種工廠代理對象通常被 EJB 部署者綁定在 JNDI 中。資源適配器在 Java 連結結構中被定義。 J2EE 規(guī)范已經經過了好幾次修訂,現在最穩(wěn)定的版本是 , 版本正處于重審階段。最近名單上有多出了新的 Apache project Geronimo。根據以上的定義,如下的組成 J2EE 應用程序的實體可以看作是軟件組件: (1) EJBS(會話,實體,消息驅動)。 EJB 和 Web 組件被部署在由應用服務贊助商提供的容器中 .它們有定義良好的容器規(guī)則來管理生命周期,線程,持久化和其他問題。消息目的地,像對話和隊列,是由消息服務執(zhí)行所提供的資源。例如, EJB 開發(fā)者可以選擇明確的事務區(qū)分方式,這種方式意味著開發(fā)者假設通過定義良好接 口的事務經理服務平臺來書寫明確的程序交互。在這三種情況下,通信通過特定的 Java 對象來完成。 在前兩個實例中,應用組件的開發(fā)者不僅書寫執(zhí)行在組件的運行時 JNDI 環(huán)境中的對象目錄代碼,而且書寫發(fā)布方法調用,與遠程的組件相互發(fā)送和接受消息。在 Java 連接器的內 部通信情景下,Activation Spec 對象查詢以及所有的相應的 M 容器隱式的完成。 (3) 用組件的命名服務去綁定目標。 (7) 啟動指定的組件 。 (2) 創(chuàng)建和綁定特定的 JNDI 目標去訪問消息目的和數據源的能力 。然而,在不同應用服務器的環(huán)境下,由于跨服務器的類下載問題,這種簡單的控制解釋器的方式是不夠的。這種本地部署所關心的不是在分布式架構中去表現而是去增強一致性。 (2) 具體服務應用程序類的代碼的更替 。我們假設這種動態(tài)的部署和拆卸服務存在于所有的兼容的 J2EE 服務器上而且在不理解類重載相關問題時一個健壯的類重載結結構的應用服務器就能夠重復的部署生命周期。例如,假如有一個事務容器要至少用一種方法去開始一個新的事務,那么一個帶有這樣的事務容器的 EJB 就需要在應用層表示事務管理服務。包括,開源的應用服務器, JBoss 和 OnAS 在內,已經有多種 J2EE 應用服務器已經全部或者部分的實現了組件化。所有其它的服務是熱部署并且通過一個普通的調用總線來進行通信。 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