六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

J2EE應用部署(一):基礎篇

[摘要]提綱: =================================== 一、基礎知識 1.1 J2EE應用的構成 1.2 封裝和部署操作的任務 1.3 不能封裝到EAR文件的組件 二、類裝載模式 2.1 在EJB 2.0之前 2.2 ...
提綱:
===================================
一、基礎知識
1.1 J2EE應用的構成
1.2 封裝和部署操作的任務
1.3 不能封裝到EAR文件的組件
二、類裝載模式
2.1 在EJB 2.0之前
2.2 在EJB 2.0之后
===================================
正文:
===================================

一、基礎知識
1.1 J2EE應用的構成
J2EE應用由以下兩種資源構成:
一個或者多個J2EE組件
一個J2EE應用部署描述器(Deployment Descriptor)

當多個異種的J2EE組件需要相互調用時,我們必須創建一個J2EE應用。在創建J2EE應用的過程中,有許多事情必須考慮,其中包括:
有哪些類型的組件可以封裝到J2EE應用里?
創建J2EE應用的過程中,人們擔負的各種職責。
當前J2EE封裝技術的局限之處。

為滿足J2EE組件交互的需要,不同的供應商所采取的類裝載策略。

J2EE規范區分了兩類資源:可以在容器之內運行的資源,可以封裝到EAR文件內的資源。EAR是Enterprise Application ARchive的縮寫,EAR文件用來把一個或者多個J2EE組件封裝到單個模塊里面,以便一起部署并裝入到服務器上。

J2EE規范闡明了運行時容器和部署模塊之間的區別。運行時容器是請求級的截取機制,為系統內的組件提供一種基礎服務。部署模塊是一種為那些最終將在運行時容器內執行的組件提供的封裝結構。下圖描述了J2EE容器的結構:
其中:
EJB容器

EJB容器用來容納業務邏輯,并為業務邏輯截取請求。EJB容器支持EJB訪問JMS、JAAS、JTA、JavaMail、JAXP、JDBC和連接器(Connector)。

Web容器

Web容器截取通過HTTP、FTP、SMTP或其他協議發送的請求。Web應用容器為Servlet和JSP頁面提供的資源與EJB容器提供的資源相同。

應用客戶端容器

客戶端應用是獨立的Java應用,它們在遠程的獨立JVM上運行(與Web容器和EJB容器所運行的JVM不同)。應用客戶端容器為這些應用截取請求。

運行在應用客戶端容器上的程序非常類似于帶有main()方法的Java程序,不過,程序不再由JVM控制,而是由一個容器(也就是應用客戶端容器)控制。

在應用客戶端容器內運行的程序能夠訪問遠程應用服務器上的JAXP、JDBC、JMS和JAAS資源。

Applet容器

Applet容器是一個特殊的容器,它為在瀏覽器內運行的Java程序截取請求。Applet容器不提供任何對其他資源(比如JDBC或JMS)的訪問。在Applet容器內運行的Applet必須自己直接向應用服務器請求資源(而不是把請求發送給容器,然后由容器發送請求給應用服務器)。

對于Applet如何與EJB容器進行通信,EJB規范沒有作出任何規定,但J2EE規范有這方面的規定。對于那些想要直接使用EJB的Applet,J2EE規范要求它們使用HTTP隧道。許多應用服務器提供某種形式的HTTP隧道,支持Applet直接使用EJB。

可以封裝到J2EE EAR文件里面的組件與包含容器的組件之間不存在直接的關聯。J2EE沒有規定EAR文件至少必須包含哪些內容,EAR文件可以由任意數量的以下組件構成:

EJB應用JAR文件

EJB應用JAR文件包含一個或者多個EJB組件。

Web應用WAR文件

一個WAR文件包含一個Web應用。EAR文件可以包含多個Web應用,EAR文件中的每個Web應用必須有一個唯一的部署上下文。EAR文件的部署機制允許指定這類不同的上下文。

應用客戶端JAR文件

應用客戶端JAR文件包含一個準備在應用客戶端容器內運行的獨立Java應用,還包含一個專用的部署描述器,其構成方式和EJB JAR文件的構成方式相似。

應用客戶端JAR文件除了包含運行獨立客戶程序所需要的類之外,還包含訪問JDBC、JMS、JAXP、JAAS和EJB客戶所需要的客戶端庫。

資源適配器RAR文件

資源適配器RAR文件包含了實現企業信息系統JCA(Java Connector Architecture)資源適配器所需要的Java類和本地庫。

資源適配器不在容器內執行。相反,它們應該作為應用服務器和外部企業信息系統之間的橋接軟件執行。

這些組件都在J2EE EAR文件之外分別地開發和打包,且分別擁有自己的部署描述器。然后,J2EE EAR文件通過定制的部署描述器,把一個或者多個這種組件裝配成一個統一的包。

1.2 封裝和部署操作的任務

在EJB、Web應用或其他組件的構造、部署和使用過程中,不同的人擔負著不同的職責。J2EE規范為開發者在創建企業應用過程中的職責定義了范圍廣泛的平臺角色(Platform Role)。盡管角色的數量眾多,但它們不外乎是一種為了更好地規劃和運行一個應用而設計的邏輯劃分,單獨的個人、小組或組織很可能扮演多個角色。在構造、部署使用EAR文件的過程中,常見的角色包括:

J2EE產品提供者

負責實現J2EE平臺,包括在規范中定義的所有J2EE API和其他功能。比如,J2EE應用服務器的供應商。

應用組件提供者

負責提供J2EE組件,例如EJB應用或Web應用。J2EE規范中的許多角色都具有應用組件提供者的特征,比如文檔編寫者、JSP頁面編寫者、資源適配器開發者等。

應用組裝者

負責把一個或者多個J2EE組件打包成EAR文件,構造出J2EE應用。應用組裝者還要負責創建J2EE應用部署描述器,說明應用依賴的各種外部資源,比如類庫、安全角色等。通常,應用組裝者要用到J2EE產品提供者和工具提供者提供的工具。

工具提供者

提供自動化J2EE應用創建、打包、部署過程的工具,例如為EAR文件自動生成部署描述器的工具,自動創建EAR文件的工具。

部署者

負責把Web應用和EJB應用部署到服務器環境上。部署者不負責部署資源適配器包和應用客戶端包,但可能要負責為這些組件進行額外的配置。這些組件雖然被打包成為J2EE EAR文件的一部分,部署企業應用時卻不必考慮。它們是J2EE應用的一部分,但不必象Web應用和EJB容器那樣經過一個“激活”過程。資源適配器包是置入合法JCA實現的簡單庫,雖然它們被打包進J2EE EAR文件,但它們不在J2EE容器環境下運行。因此,由于資源適配器包不包含J2EE容器,它們的激活不需要J2EE部署者的特別干預。應用客戶端程序在J2EE容器的環境下運行,但它們不部署到應用服務器上。客戶端程序獨立運行,部署者不負責為這些程序配置容器環境。

系統管理員

負責為應用服務器和J2EE應用配置網絡和運行環境,負責監視和維護J2EE應用的運行。

在本文的討論過程中,我們主要的角色是應用組裝者和部署者。

1.3 不能封裝到EAR文件的組件

大多數基于Web的J2EE應用只由Web和EJB應用構成,EAR文件能夠滿足封裝應用的基本需求。然而,EAR文件缺乏封裝復雜J2EE應用的能力,比如,J2EE經常要用到下面這類組件,但它們無法在EAR文件中聲明:
JDBC DataSource對象。
JMS ConnectionFactory和Destination對象。
JMX(Java Management Extension)的MBean。

在應用服務器之內運行的一些JMS消費者,例如作為ServerSession一部分運行的MessageConsumer。

當應用被部署或卸載時觸發運行的一些類(這些類是供應商提供的私有擴展,沒有在J2EE規范中定義,但供應商一般都提供它們)。

當前,這些組件必須由系統管理員通過專用管理接口手工配置和部署。隨著時間的推移,這些組件的應用也將日益增加,為了支持應用的整體移植性,讓EAR文件支持這些組件的封裝也變得日益重要。

二、類裝載模式

當一個類被引用時,Java虛擬機(JVM)必須裝入被引用的類。JVM利用一個標準的類裝入機制把類裝入內存,這個從源文件裝入Java類的機制稱為類裝載器。Java類可以從磁盤、網絡或其他媒體裝入,它們可以駐留在任何地方。多個類裝載器可以按照父-子關系鏈接在一起,形成一種層次結構。由子類裝載器裝入的類能夠看到(能夠使用)由任意父類裝載器裝入的類;由父類裝載器裝入的類不能看到由任意子類裝載器裝入的類。類裝載器、EAR文件與應用部署有著重要關系,因為應用服務器可能采用專用的類裝載器部署應用模塊。

如果在一個系統中,Web應用需要訪問某個EJB,它就必須能夠裝入它所需要的那些類。由于這意味著不同模塊之間的依賴關系,為了解決依賴問題,應用服務器必須為EAR類裝載器考慮不同的結構方案。

獨立的應用程序部署在它自己的類裝載器中。這意味著,如果分別地部署一個Web應用和一個EJB應用,每個應用的類將分別裝入各自的、級別相同的類裝入器,Web應用內的類不能看到另一個類裝載器裝入的類。如果Web應用想要使用那些分開部署的EJB,就會出現問題。

在EAR文件出現之前,許多開發者先部署EJB,然后以Web應用WEB-INF\lib目錄一部分的形式,再次封裝同一EJB JAR文件。這樣,同一類文件必須放入兩個不同的地方,才能讓應用正常地運行。顯然,這是一種應當避免的情形。EAR文件的引入就是為了解決這個問題。EAR文件不僅是一種方便的封裝格式,而且它還提供了一種特殊的類裝載模式,允許EAR文件內的應用訪問其他應用的類。

J2EE 1.3規范沒有具體規定EAR類裝載器應該如何運作。在決定類裝入方式時,應用服務器供應商有著很大的自由。實現EAR類裝載器之前,供應商必須決定:

EAR文件中所有應用的所有類由單一的類裝載器裝入,還是不同應用的文件由不同的類裝載器裝入?

在EAR文件中的不同應用之間,是否存在類裝載器的父-子關系?例如,如果兩個EJB應用依賴于log4j.jar,那么,是否應該由父類裝載器裝入log4j.jar,由子類裝載器裝入兩個EJB應用,從而維持適當的可見性關系?

如果類裝載器之間存在層次關系,那么這種層次關系允許擴展到什么程度?

多個EJB之間存在固有的關系,但Web應用沒有。那么,EJB應用的裝載方式是否應該和Web應用的不同,以便保持Web應用的完整性?

2.1 在EJB 2.0之前

在EJB 2.0 Public Final Draft 2之前,供應商在選擇類裝載模式方面有著很大的自由。如果JSP頁面和Servlet要使用某個EJB,那么它們只需能夠裝入EJB的Home接口、遠程接口、公共類和Stub類。這里所謂的公共類包括異常類、參數類等,它們應該放入一個依賴JAR文件,作為一個有著依賴關系的包裝入。在這種模式下,供應商必須為依賴于EJB的Web應用選擇一種裝入Home接口、遠程接口和Stub類的方式。

下面是這種類裝載模式的一個簡單實現(客戶端應用在另一個虛擬機之內運行,與所有其他組件隔離,因此下面的模型不包含客戶端應用的類裝入過程。):

在這個模型中,每一個EAR應用將由一個定制的EAR類裝載器實例裝入,EJB應用和Web應用都由EAR類裝載器的定制子類裝載器裝入。在EAR文件中,所有準備給一個以上應用共享的類都由EAR類裝載器裝入,包括所有公用依賴庫和資源適配器包。如果一個類由EAR類裝載器裝入,它將自動地可供所有由子類裝載器裝入的類使用。

所有EJB應用都由單一的EJB類裝載器裝入,這個EJB類裝載器是EAR類裝載器的子類裝載器。即使存在多個不同的EJB JAR文件,它們也都由同一類裝載器裝入。這一機制有利于同一JVM之內不同應用之間進行的EJB到EJB的調用。

每一個Web應用都在不同的類裝載器中裝入,保持類之間的隔離。這是因為,如果每一個Web應用有一個名為index.jsp的文件,則從該JSP頁面生成的Servlet會有同樣的類名字。由于每一個Web應用應該能夠裝入該Servlet的自己的版本,因此所有Web應用必須在各自的類裝載器中隔離起來。

Web應用要使用在同一EAR文件內部署的EJB,必須能夠看到這些EJB的外部接口和Stub實現類。由于EJB和Web應用的類裝載器屬于平等的關系(不是父-子關系),Web應用不能直接看到必需的類文件。然而,Web應用類裝載器和EJB應用類裝載器有著相同的父類裝載器。為了讓Web應用能夠使用EJB的類文件,EJB類裝載器獲取各個EJB的公用接口和它們的Stub實現文件,然后把它們“導出”給EAR類裝載器,在EAR類裝載器中它們可以被EAR中的所有應用訪問。公用接口和Stub實現文件就是客戶程序調用EJB時要用到的類。這樣,Web應用就能夠裝入使用所有EJB時需要用到的類。

依賴工具庫可能在不同位置裝入,具體由指定這些庫的位置決定。如果一個Web應用在它的WEB-INF\lib目錄下列出了一個依賴庫,則該庫只和這個Web應用有關,其他應用無需訪問該庫的內容,因此該庫不必由EAR類裝載器裝入。在這種情況下,Web應用類裝載器將裝入該庫的JAR文件。其他Web應用如果也要使用該庫,則必須在它自己的WEB-INF\lib目錄下提供。

如果依賴庫由EJB和Web應用共享,則它必須由EAR類裝載器裝入。EAR類裝載器將裝入所有聲明為EJB所依賴的庫,使得依賴庫中的類具有合適的可見性。這就允許EJB開發者把所有公用的異常類、Web應用可見的定制輸入參數類、EJB封裝到一個依賴庫里面。這個庫常常稱作common.jar,但并非一定得如此命名。

與EJB和Web應用一起在EAR文件內封裝的資源適配器包將自動由EAR類裝入器裝入。

2.2 在EJB 2.0之后

EJB 2.0規范引入了本地引用這一概念,它允許通過“傳遞引用”(而不是“傳遞值”)的方式訪問并存的客戶程序和EJB組件。本地引用這一概念使EAR類裝載問題發生了值得注意的變化。

當EJB客戶程序通過“傳遞引用”方式執行調用時,僅僅能夠訪問EJB的公用接口和Stub實現類是不夠的。客戶程序必須擁有一個EJB容器實現類的直接引用。在本地引用方式下,EJB的客戶程序需要比以前更多的信息,這意味著在EJB 2.0之前使用的類裝載模式已不再有效。為解決這個問題,EJB客戶程序的類裝載器必須是EJB類裝載器的子孫,如下圖所示:

在這個模型中,Web應用類裝載器是EJB類裝載器的子孫。這使得所有Web應用能夠訪問它們作為EJB客戶程序所需要的文件。不過,為實現隔離,每一個Web應用仍在一個定制的類裝載器中裝入。從整體結構來看,新的模型更簡潔、更容易理解,它不再要求EJB類裝載器把任何文件導出給EAR類裝載器。

J2EE規范沒有明確規定Web應用的依賴庫應該如何裝載。如果一個工具類庫通過WEB-INF\lib指定,很顯然它應該保持隔離,只能由Web應用的類裝載器裝入它;然而,如果通過其他方式指定了一個工具類是Web應用的依賴庫,它應該由Web應用的類裝載器裝入,還是應該導出給EAR類裝載器?J2EE沒有對這一點作出具體規定。

對于被指定為Web應用依賴庫的工具類庫,Silverstream應用服務器和J2EE參考實現在EAR類裝載器級裝入它們,WeLogic Server 6.0在Web應用類裝載器中裝入它們。但是,WebLogic Server 6.1改變了原來的辦法,支持在EAR級別上裝入Web應用依賴庫。這種改變是有意義的,因為Web應用的隔離總是可以通過把工具類庫放入WEB-INF\lib目錄實現。

在下一篇文章中,我們將從實踐的角度了解J2EE應用的封裝和部署過程。


主站蜘蛛池模板: 亚洲欧美久久精品 | 婷婷春色| 性久久久久久 | 亚洲国内| 伊人热人久久中文字幕 | 伊人影院在线观看 | 亚洲a级片在线观看 | 婷婷五月在线视频 | 日韩a级黄色片 | 青青青视频免费观看 | 婷婷中文 | 天堂网www在线资源中文 | 日本中文在线视频 | 亚洲综合激情丁香六月 | 日韩欧美一区二区在线观看 | 色一情一乱一乱91av | 日韩一级一欧美一级国产 | 影音先锋亚洲资源 | 日韩欧国产精品一区综合无码 | 在线日韩视频 | 青草国内精品视频在线观看 | 青青啪 | 四虎最新永久免费网址 | 五月天丁香婷婷网 | 性生免费视频 | 午夜免费福利影院 | 天天久| 四虎国产精品视频免费看 | 婷婷狠狠操| 四虎影院在线免费观看 | 天天干天天色天天干 | 一级做a爰片性色毛片刺激 一级做a爰片欧美一区 | 色欲香天天天综合网站 | 欧美一级亚洲一级 | 亚洲欧美日韩中文不卡 | 欧美综合在线播放 | 亚洲最大成人网色 | 日本三级香港三级人妇99 | 婷婷丁香激情五月 | 色综合网天天综合色中文男男 | 亚洲一区2区三区4区5区 |