WeblogicServer9新特性:J2EELibraries(轉)

post0發表於2007-09-06
WeblogicServer9新特性:J2EELibraries(轉)[@more@]

  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正式版,可以到上免費下載。本練習可在能安裝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。LoanEJBdata目錄是放EJB的原始碼,Simple.java中是我手寫的一個Bean類。在目錄LoanEJB下執行java com.bea.wls.ejbgen.EJBGen -descriptorDir META-INF dataSimple.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。執行後會看到在LoanApprovalWEB-INFclasses下面會生成一個目錄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視窗都不會有報錯。開啟一個瀏覽器測試一下:。如果一切正常,會顯示在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,裡面包含一些業務方法。在OptionalPackagesSimpappOptionalPackage下執行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 SimpappOptionalPackagesimpapp.jar

  java weblogic.Deployer -adminurl t3://localhost:7001 -user weblogic -password weblogic -deploy SimpappEAR

  如果部署成功,在Console和Server視窗都不會有報錯。開啟一個瀏覽器測試一下:。如果一切正常,會顯示在Simple.java中設定的那行字串。

·上一篇:

·下一篇:
 
     最新更新
·

·

·

·

·

·

·WeblogicServer9新特性:J2EELibraries

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·使用訊息驅動Beans(3)

·

·

·

·


| | | | | | |

Copyright © 2004 - 2007 All Rights Reserved

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-968165/,如需轉載,請註明出處,否則將追究法律責任。

WeblogicServer9新特性:J2EELibraries(轉)
請登入後發表評論 登入
全部評論

相關文章