EJB學習(一)——EJB和WEB打包

周江霄發表於2015-07-28

    在做Java版高校雲平臺的時候,每個模組在搭建底層的時候都建立了三個專案,分別是jar專案(物件core層)、war專案(對應web層)和ear專案(對應ear層),剛開始接觸這好幾個專案,有些蒙了。最近在總結EJB的相關知識,對這些專案有了一些基本的瞭解,下面就對各個專案如何打包進行一個總結。


    在這之前,我們先來認識一下EJB,EJB是sun的JavaEE伺服器端元件模型,設計目標與核心應用是部署分散式應用程式。簡單來說就是把已經編寫好的程式(即:類)打包放在伺服器上執行。那麼打包是怎麼個回事呢?這就是我們今天要討論的問題。


    1.EJB打包


    要釋出 EJB 時必須把她打成*.jar 檔案, 一個 EJB 打包後的目錄結構如下:


    

    比如我們在高校專案中teacher模組總的core層:
    
    

    2.WEB應用打包

    一個 Web 應用釋出到 Jboss 伺服器時需要打成 war 包。 Web 應用打包後的目錄結構如下:

    

    比如我們在高校專案中teacher模組總的web層:

    

    3.企業應用打包

    一個完整的企業應用包含 EJB 模組和 WEB 模組, 在釋出企業應用時, 我們需要把它打成*.ear 檔案, 在打包前我們必須配置 application.xml 檔案, 該檔案存放於打包後的 META-INF 目錄。 我們在 application.xml 檔案中需要指定 EJB 模組和 WEB 模組的資訊, 比如我們高校中application.xml 配置如下,從這份XML檔案中就可以看到我們Teacher模組下所有的EJB模組和WEB模組,其中tool、base、api、core是EJB模組,而web是WEB模組。
    
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
	"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
	"http://java.sun.com/dtd/application_1_3.dtd">
<application>
  <display-name>itoo-basic-teacher-ear</display-name>
  <module>
    <ejb>itoo-tool-0.0.1-20150511.192711-61.jar</ejb>
  </module>
  <module>
    <ejb>itoo-base-0.0.1-SNAPSHOT.jar</ejb>
  </module>
  <module>
    <ejb>itoo-basic-api-0.0.1-SNAPSHOT.jar</ejb>
  </module>
  <module>
    <ejb>itoo-basic-teacher-core-0.0.1-SNAPSHOT.jar</ejb>
  </module>
  <module>
    <web>
      <web-uri>itoo-basic-teacher-web-0.0.1-SNAPSHOT.war</web-uri>
      <context-root>/itoo-basic-teacher-web</context-root>
    </web>
  </module>
  <module>
    <ejb>itoo-excelV2.0-api-0.0.1-20150716.044824-29.jar</ejb>
  </module>
  <module>
    <ejb>itoo-cloud-api-0.0.1-20150716.233937-30.jar</ejb>
  </module>
  <module>
    <ejb>itoo-authority-api-0.0.1-20150717.015628-31.jar</ejb>
  </module>
</application>

   4.使用第三方類庫的EJB打包

    對於針對特定應用的第三方類庫, 最理想的選擇是把他們放入 EJB Jar 檔案中。 每一個 JAR 檔案裡都有一個
manifest 檔案, 這個檔案由 jar 工具自動建立, 預設名字是 MANIFEST.MF。 我們可以在 manifest 檔案中加入一個Class-Path 屬性, 引用它所依賴的 JAR 檔案。 我們可以手工編輯 manifest.mf檔案, 在原有內容的基礎上, 新增Class-Path 屬性。Class-Path 屬性的值是用來搜尋第三方類庫的相對 URL。 這個 URL 總是相對於包含 Class-Path屬性的元件。 單個 Class-Path 屬性內可以指定多個 URL, 一個 manifest 檔案可以包含多個 Class-Path 屬性。

    加入我上面的Teacher模組中引用了第三方類庫,名為Upload.jar, Socket.jar,我們只需在MANIFEST.MF檔案中手動新增Class-Path:Upload.jar Socket.jar即可,打包完的目錄結構如下:

    


    5.共用了第三方類庫的 J2EE 應用打包


    一個 J2EE 專案通常由多個 EJB 和 Web 應用構成, 如果多個 EJB 及 Web 應用共用了一個第三方類庫,假設一個 J2EE 專案含有兩個 EJB 及一個 Web 應用, 他們的檔名分別為: HelloWorld.jar, HelloChina.jar,MyEJBTest.war。 這三個模組都使用了一個第三方類庫, 名為: Tools.jar現在我們要做的是編輯這三個模組的 manifest.mf檔案, 在原有內容的基礎上, 新增 Class-Path 屬性。

    打包後的目錄如下:                                                                                                                  
    
    J2EE 應用的檔案字尾為 ear, 應用使用到的各模組在 application.xml 檔案中定義, 本例的 application.xml 內容如下:
    
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/j2ee" version="1.4"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com /xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">
<display-name>EJB3Trail</display-name>
<description>J2EE Made Easy Trail Map</description>
<module>
<ejb>HelloWorld.jar</ejb>
</module>
<module>
<ejb> HelloChina.jar</ejb>
</module>
<module>
<web>
<web-uri>MyEJBTest.war</web-uri>
<context-root>MyEJBTest</context-root>
</web>
</module>
</application>

         以上就是對EJB和WEB專案打包的一些簡單介紹,其中的大部分內容參考了《EJB 3.0入門教程》這本書,感覺裡面說的很不錯,在這裡也推薦給大家。



相關文章