程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Weblogic Server9新特性:J2EE Libraries

Weblogic Server9新特性:J2EE Libraries

編輯:關於JAVA

 J2EE(J2EE培訓 ) Shared Libraries是Weblogic Server 9.0(下簡稱WLS9)的一個新特性。通過J2EE Shared Libraries可以將一個J2EE模塊共享給其他企業應用(EAR包或EAR包的展開目錄)的J2EE模塊使用。J2EE Shared Library可以是任何類型的J2EE模塊,但推薦設計成企業應用格式。此外還有一種J2EE 1.4的標准共享庫方式,稱為 Optional Packages。Optional Packages提供和J2EE Libraries類似的方式將一個JAR文件共享給多個應用。區別在於 Optional Packages是基於標准的,但不能被當作J2EE模塊使用。optional packages必須通過部署對應的JAR文件方式先被注冊到Domain。注冊好後可以在任意J2EE模塊中通過manifest files來引用這些JAR包。Optional packages和J2EE librarIEs的區別在於optional packages可以被任何J2EE模塊(EAR, JAR, WAR, or RAR 文檔)或其對應擴展的目錄結構引用。而J2EE librarIEs只能被企業應用引用。本文通過詳細的說明將指導開發者熟悉這兩種共享方式,並獲得立竿見影的效果。

  本文附件exercise包括J2EE LibrarIEs 和 Optional Packages的練習代碼,可解壓到任意位置。需要預先安裝的軟件只有WLS9正式版,可以到www.bea.com.cn上免費下載。本練習可在能安裝WLS9的任何操作系統上完成,為了方便起見,文中僅以在Windows上為例。首先配置一個WLS Domain,記得用戶名和密碼要都設為weblogic,端口為7001。然後啟動該Domain,並啟動相應的Console。最後使用Domain/bin/setDomainEnv.cmd打開一個Prompt窗口,並把目錄切換到你解壓的文件的位置。這樣你就可以按照第五節和六節所述完成練習。如果想快速看一下練習結果,在solution中有已經配置好的兩個練習的代碼,部署後就可以測試。

  共享模塊的核心:MANIFEST.MF文件

  我們知道在Weblogic上部署的任何J2EE模塊的根目錄中可以有一個名為META-INF的目錄,你可以在一個J2EE模塊的META-INF目錄下創建一個名為MANIFEST.MF文件,來指定這個J2EE模塊的版本。MANIFEST.MF文件是一個純文本文件,格式大概如下:

  Extension-Name: myOptionalPackage

  Specification-Version: 0.9

  Implementation-Version: 1

  Extension-Name:可選。表示該庫或包的名字。主調應用調用這個應用時需要匹配這個值。如果你不設置這個值,系統將自動使用部署名。

  Specification-Version:可選。定義這個庫或包的規格版本。主調應用可以為共享模塊隨便指定一個規格版本。如果這個規格版本不可用,則主調應用不能被部署。規格參數可以有兩種格式。第一種使用主從版本格式,大小版本號用點分割,如"9.0.1.1"。第二種使用文本格式,如 "9011Beta"。如果使用主從版本號格式,主調應用可以配置為共享的模塊吻合一個特定版本,或者一個最小版本,或者一個最新的版本額。如果使用文本格式,主調應用必須和共享模塊的版本號嚴格吻合。

  Implementation-Version:可選。定義這個庫或包代碼的執行版本號。必須在已經定義了規格版本的情況下才能定義執行版本。執行版本使用和規格版本相同的格式。

  如果你不使用MANIFEST.MF文件或者有些條目沒有指定,可以在命令行中通過weblogic.Deploy進行部署的時候由參數來設置。在後面的練習中我們將詳細了解如何使用MANIFEST.MF將一個J2EE應用設計為J2EE LibrarIEs或Optional Packages。

J2EE LibrarIEs and Optional Packages比較

   Optional packages和J2EE LibrarIEs有如下共同點:

  1。在部署的時候都注冊到Domain上。

  2。都支持可選的執行版本和規格版本字符串。

  3。引用J2EE librarIEs and optional packages的應用可以指定共享文件的版本。

  Optional packages和J2EE LibrarIEs有如下區別:

  1。Optional package是普通的JAR文件,而 J2EE libraries可以是普通JAR文件,J2EE應用,或獨立的J2EE模塊。J2EE librarIEs可以包括有效地J2EE或WLS部署描述符,而optional package JAR中的任何部署描述符都被忽略了。

  2。任何J2EE應用或模塊可以通過META-INF/MANIFEST.MF引用 optional package。而只有企業應用可以通過weblogic-application.XML引用J2EE library 。

  3。Optional packages可以引用其他Optional packages,而J2EE librarIEs不能引用其他J2EE librarIEs。

  最佳實踐

  1。如果需要共享J2EE模塊給多個企業應用應使用J2EE LibrarIEs。

  2。如果要部署獨立的J2EE模塊作為共享庫,應該把模塊打包到企業應用中。這樣可以防止潛在的URI沖突。因為獨立模塊庫的URI來源於不署名。所以在部署時指定一個部署名,當其他應用引用它時作為URI。

  3。如果多個J2EE應用需要共享一些Java類,則應該用optional packages。

  4。如果有一些類在本Domain中需要被其他應用調用,而你又不經常升級這些類(比如第三方類),則最好把它們放在Domain的 /lib目錄下,而不是使用J2EE librarIEs或optional packages機制。在/lib子目錄下的類會在Server啟動時候自動裝載到系統環境變量中。

  5。即使你不打算使用版本需要功能,通常也需要指定一個規格版本和一個執行版本。為庫指定版本可以在做測試時為共享的文件部署多個版本。

  6。通常為每個庫指定一個擴展名,如果你不指定擴展名那系統會自動使用庫的部署名作為擴展名。

  7。當開發了一個Web應用要部署成J2EE應用,應該使用唯一的上下文目錄。如果它的上下文目錄和他依賴的應用的上下文目錄沖突,應該使用EAR的weblogic-application.XML中context-root元素來覆蓋庫的上下文目錄。

  組裝共享的J2EE Library 文件

  幾乎所有獨立的J2EE模塊或企業應用可以被部署成shareable J2EE library,但有如下限制:

  1。不能在一個J2EE library中引用另一個J2EE library.

  2。共享庫不能嵌套。如果你部署一個企業應用作為共享庫,那整個這個企業應用必須被作為一個庫,而不能指定這個企業應用中的某個獨立J2EE模塊為一個獨立的庫。

  3。像其他J2EE模塊和企業應用一樣,J2EE library必須被部署到目標Server或Cluster上去。這意味著庫需要一個有效的J2EE部署描述符和WLS指定的部署描述符。

  4。推薦把J2EE librarIEs打包成企業應用,而不是獨立的J2EE模塊。因為獨立模塊的URI來自於部署名。默認WLS使用部署壓縮文件的文件名或展開的目錄名作為部署名。

  5。如果你選擇把庫部署成獨立的J2EE模塊,通常應該指定一個部署名並把這個名字作為被應用引用的URI。

  練習開發和部署Shared J2EE Library

  本練習在J2EEShared目錄下。可以看到有兩個目錄,其中SharedLibraryEAR是被調用的shareable J2EE library,CallingLibraryEAR是調用該庫的企業應用。通過把SharedLibraryEAR配置成共享庫,CallingLibraryEAR可以訪問LoanEJB,就像打包在自己的企業應用中。

  1.我們先來開發一個庫應用。

  觀察一下SharedLibraryEAR下面的目錄結構和文件。

  目錄LoanEJB是一個EJB結構。包括一個空的目錄META-INF和一個包含一個JAVA文件Simple.java的目錄data。LoanEJB\data目錄是放EJB的源代碼,Simple.java中是我手寫的一個Bean類。在目錄LoanEJB下執行java com.bea.wls.ejbgen.EJBGen -descriptorDir META-INF data\Simple.java就會在生成SimpleHome.java,SimpleRemote.java,ejb-jar.xml,weblogic-ejb-jar.xml和ejbgen-build.XML。然後到LoanEJB編譯這幾個CLASS:javac data\*.Java,生成根和樁文件。最後執行jar cvf ..\LoanEJB.jar *,打包我們需要的EJB LoanEJB.jar到SharedLibraryEAR目錄。

  目錄APP-INF是一個空的目錄,可以放入當前這個應用需要的第三方包。

  目錄META-INF下包括application.xml和weblogic-application.xml。application.XML指定了這個應用所包含的只有一個EAR模塊:LoanEJB.jar,以及這個應用的部署名。為了把這個應用做成共享庫,現在我們創建一個MANIFEST.MF文件,並在裡面寫入如下信息:

  Extension-Name: myLib

  Specification-Version: 1.0

  Implementation-Version: 1.0

  然後在J2EEShared下執行Java weblogic.appc SharedLibraryEAR,生成可部署的企業應用。

  2.配置 CallingLibraryEAR來引用SharedLibraryEAR模塊。

  觀察一下CallingLibraryEAR下面的目錄結構和文件。

  目錄APP-INF是放企業應用內部公用的類和庫的目錄。在這個練習中不需要使用。

  目錄LoanApproval是一個Web應用。index.JSP用於調用EJB LoanEJB的getString方法,而沒有指定這個EJB是來自本企業應用還是其他庫。如果調用成功,則把在LoanEJB中設置的一個字符串顯示在浏覽器上。

  目錄META-INF中包括application.xml和weblogic-application.xml。application.xml指定了這個應用所包含的只有一個Web模塊LoanApproval。在weblogic-application.XML中除了編碼方式,我們還要指定使用的共享庫的名稱。能看到在library-ref中我們指向了SharedLibraryEAR這個庫myLib。同時在這個文件中我們還能指定庫的規格版本和執行版本,以及是否需要嚴格匹配等。

  在J2EEShared目錄下執行Java weblogic.appc -library SharedLibraryEAR CallingLibraryEAR來預編譯JSP。執行後會看到在LoanApproval\WEB-INF\classes下面會生成一個目錄jsp_servlet包含JSP被編譯成的Servlet__index.class和__error.class。由於在weblogic-application.XML中指定了使用的共享庫,所以appc在調用JSpc來編譯JSP的時候能找到調用的EJB LoanEJB的命名空間以及對應類。

  3。部署共享庫和前端企業應用並測試。

  確保你的Server運行的情況下,在J2EEShared下執行下面兩個命令來部署SharedLibraryEAR和CallingLibraryEAR。注意執行以前Console不能使被Look狀態的。

  Java weblogic.Deployer -adminurl t3://localhost:7001 -user weblogic -passWord weblogic -deploy -library SharedLibraryEAR

  執行之後在Console的Deployments部分能看到新添加了一個名為myLib(1.0)的庫,狀態為Installed。

  Java weblogic.Deployer -adminurl t3://localhost:7001 -user weblogic -passWord weblogic -deploy CallingLibraryEAR

  執行之後在Console的Deployments部分能看到新添加了一個名為CallingLibraryEAR的應用,狀態為Active。

  如果部署成功,在Console和Server窗口都不會有報錯。打開一個浏覽器測試一下:http://localhost:7001/LoanApproval。如果一切正常,會顯示在EJB中設置的那行字符串。

  注意,當需要卸載庫的時候,必須先卸載引用這個包的所有應用,然後Activate Change,然後再Look,並且卸載庫。

練習開發和部署optional packages

  本練習在OptionalPackages目錄下。可以看到兩個目錄,其中SimpappOptionalPackage是被調用的Optional Packages,SimpappEAR是調用該包的企業應用。通過把SimpappEAR配制成共享包,SimpappOptionalPackage可以訪問Simpapp類就像打包在自己的企業應用中。 

我們先來開發一個Optional Packages。

觀察一下SimpappOptionalPackage下面的目錄結構和文件。

目錄META-INF中現在是空的。需要創建一個MANIFEST.MF文件,包括如下內容:

   Extension-Name: myOptionalPackage

   Specification-Version: 0.9

   Implementation-Version: 1

  目錄simp下面包含一個源代碼文件Simpapp.java,裡面包含一些業務方法。在OptionalPackages\SimpappOptionalPackage\下執行javac simp/Simple.Java,會在simp目錄下編譯出Simple.class。然後執行jar cvfm simpapp.jar META-INF/MANIFEST.MF *,把這個類打成一個名為simpapp.jar的JAR包。

配置SimpappEAR來引用SimpappOptionalPackage模塊。

  觀察一下SimpappEAR下面的目錄結構和文件。

  目錄APP-INF和我們前面說的一樣,就不贅述。

  目錄META-INF下包括application.xml和weblogic-application.xml。application.XML指定了這個應用所包含的只有一個Web模塊SimpappWebAp。為了把這個應用做成Optional Packages,現在我們創建一個MANIFEST.MF文件,並在裡面寫入如下信息:

  Extension-List: simpapp

  simpapp-Extension-Name: myOptionalPackage

  simpapp-Extension-Specification-Version: 0.9

  然後在OptionalPackages下執行Java weblogic.appc -classpath SimpappOptionalPackage/simpapp.jar SimpappEAR,生成可部署的企業應用。注意這次我們沒在appc中使用-library,因為使用 optional packages的時候不需要獲得它的部署描述符。但我們需要指定optional packages模塊的位置放到classpath裡編譯JSP。

部署OptionalPackages和前端企業應用並測試。

確保你的Server運行的情況下,在OptionalPackages下執行下面兩個命令來部署SimpappOptionalPackage和SimpappEAR。注意執行以前Console不能是被Look狀態的。

  Java weblogic.Deployer -adminurl t3://localhost:7001 -user weblogic -passWord weblogic -deploy -library SimpappOptionalPackage\simpapp.jar

  Java weblogic.Deployer -adminurl t3://localhost:7001 -user weblogic -passWord weblogic -deploy SimpappEAR

  如果部署成功,在Console和Server窗口都不會有報錯。打開一個浏覽器測試一下:http://localhost:7001/SimpappWebApp/。如果一切正常,會顯示在Simple.Java中設置的那行字符串。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved