posts - 51, comments - 17, trackbacks - 0, articles - 9
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          日歷

          <2007年2月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728123
          45678910

          文章分類

          收藏夾

          搜索

          •  

          最新評論

          JBoss3.0 下配置和部署EJB簡介

          Posted on 2007-02-28 10:59 chenweicai 閱讀(409) 評論(0)  編輯  收藏

          JBoss3.0 下配置和部署 EJB 簡介

          1.JBoss簡介

          JBoss 是一個運行 EJB J2EE 應用服務器。它是開放源代碼的項目,遵循最新的 J2EE 規范。從 JBoss 項目開始至今,它已經從一個 EJB 容器發展成為一個基于的 J2EE 的一個 web 操作系統( operating system for web ,它體現了 J2EE 規范中最新的技術,并且它還在 the JavaWorld Editors' Choice 2002 評選中獲得“最佳 Java 應用服務器”大獎。無論是學習還是應用, JBoss 為我們提供了一個非常優秀的平臺。有關 JBoss 的詳細信息請參閱其主頁 http://www.jboss.org

          ?????? 剛開始使用 JBoss 進行 EJB 開發時,由于可供參考的資源不是很多,所以有一個比較困難的起步階段。 JBoss 的配置和使用沒有提供圖形向導界面,所以開發部署 EJB 相對比較復雜。本文通過盡量具體的演示來對 JBoss3.0 下的 EJB 開發和部署的進行一個簡單的介紹,從而使剛開始使用 JBoss 的用戶可以很快地進入到真正的 J2EE 應用開發中。

          由于本文主要介紹 JBoss3.0 中不同類型 EJB 的配置和部署,不對基本的 EJB 開發做太多的描述,所以希望讀者具有 J2EE EJB 的經驗。想要了解有關信息請查閱參考資料 1

          2.JBoss3.0中基本的ejb配置和部署

          根據 J2EE 規范的要求,一個基本的 ejb jar 包使用的描述文件是 ejb-jar.xml web 應用的 war 包使用的是 web.xml 企業應用的 ear 包使用的是 application.xml 。這些配置文件都是中性的和平臺無關的。同時應用服務器可以使用一些其他的配置文件用于描述特定服務器的相關信息。 JBoss 中這樣的文件有 jboss.xml jboss-web.xml JBoss 容器中這些文件不是必須的,如果提供了那么 jboss.xml ejb-jar.xml 放在同一目錄下, jboss-web.xml web.xml 放在同一目錄下。關于 jboss.xml jboss-web.xml 的規范請參考 JBoss 安裝目錄下 docs/dtd/ 目錄下的對應的 DTD 文件。

          2.1 JBoss中關于EJB客戶端的配置:

          調用 EJB 的客戶端可以是 JSP Servlet 或客戶端應用程序。如果客戶端和服務器不在同一個 Java VM 上,那么在客戶端必須提供一個 jndi.properties 文件告訴客戶端進行有關 JNDI 命名服務的信息,并且把這個文件所在目錄設定到環境變量 classpath 中。

          以下是一個 jndi.properties 的樣例:

          				
          						java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
          				
          		
          				
          						
          								
          										java.naming.provider.url=localhost:1099?
          								
          						
          				
          				
          						(
          						服務器地址和端口號
          						)
          				
          		
          				
          						java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
          				
          		

          通過這個文件和 JBoss 的一些客戶端類庫,就可以使用 JBoss 提供的 EJB 對象服務了。

          2.2 JBoss中部署EJB:

          首先介紹 JBoss 容器中部署各類 EJB 對象的兩種方法。下面的演示以 Session Bean 為例,客戶端是一個本機上的 web 應用。這里不對演示程序進行具體介紹。

          第一種方式:

          把開發好的 ejb jar 包和 web 應用的 war 包公共放在 deploy 目錄下。

          演示 1 :不需要 jboss.xml 文件和其他任何特殊的設置。

          ejb-jar.xml:

          <ejb-jar>

          ?????? ······

          ????????????? <ejb-name>ejbtest</ejb-name>

          ?????? ······

          </ejb-jar>

          客戶端: web 應用中對 web.xml 不需要添加 ejb 信息,不需要 jboss-web.xml 文件。引用 ejb 對象的 jsp 文件如下:

          ?????? ······

          ?????? InitialContext ctx = new InitialContext();

          ?????? Object objref? = ctx.lookup("ejbtest");??????? // 使用 <ejb-name>
          ????? ?beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);

          ?????? ······

          ?

          演示 2 :使用 jboss.xml 文件。

          在缺省情況下 JBoss JNDI 服務將通過 ejb-jar.xml <ejb-name>XXX</ejb-name> 中的 XXX 來使用 EJB home interface 但是如果有多個 ejb 對象在相同的 ejb jar 包中,在 ejb-jar.xml 中通過 <ejb-name>XXX</ejb-name> 就可能不能很好的表示某一個 ejb 對象,所以一般我們希望可以提供一些附加的信息,例如采用這樣的格式 "[ 應用名 ]/[bean ]" 來引用一個 EJB 對象。這時 JNDI 服務就可能不能正確地找到你的 ejb 對象,我們就需要使用 jboss.xml 文件,通過它實現 jndi 名到 ejb 名的重定向。這個文件必須和 ejb-jar.xml 一起放到 META-INFO 目錄下。

          ejb-jar.xml:

          <ejb-jar>

          ?????? ······

          ?????? <ejb-name>ejbtest</ejb-name>

          ?????? ······

          </ejb-jar>

          jboss.xml:

          <jboss>

          ?????? <ejb-name>ejbtest</ejb-name>

          ?????? <jndi-name>example/ejbtest</jndi-name>

          </jboss>

          ?

          客戶端:需要使用新的 jndi 名進行 ejb 定位。

          ······

          ?????? InitialContext ctx = new InitialContext();

          ?????? Object objref? = ctx.lookup("example/ejbtest");?? // 使用 <jndi-name>????????????????????????????
          ??????
          beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);

          ······

          第二種方式:

          ejb web 應用包裝成一個企業應用包。部署 ear 時可以簡單地把通過 application.xml 描述 ejb jar 包和 web 應用的 war 包,同樣在 web.war 中不需要提供特殊的信息就可以和第一種方式一樣使用 ejb 對象。客戶端代碼也不需要進行改動。這里不再舉例說明。

          此外我們可以進行更進一步的部署,這時需要使用到 web.xml jboss-web.xml jboss-web.xml JBoss 提供的一個針對 web 應用進行配置的文件。 jboss-web.xml web.xml 一起放在 web 應用的 WEB-INF 目錄下

          演示 1 :改動 web.xml 文件,添加 <ejb-ref> 標記,不使用 jboss-web.xml 文件。

          (注意 <ejb-ref> 包括內部引用和外部引用。如果是同一個單元的可以通過 <ejb-link> 直接進行引用,而不用提供其他信息。)

          web.xml:

          ······

          <ejb-ref>

          ?????? ??? <ejb-ref-name>ejb/ejbtest</ejb-ref-name>? <!-- 采用 sun 推薦的命名方式 -->

          ??????? <ejb-ref-type>Session</ejb-ref-type>

          ??????? <home>org.zcx.test.zcxejb1Home</home>

          ??????? <remote>org.zcx.test.zcxejb1</remote>

          ??????? <ejb-link>ejbtest</ejb-link>??? <!-- 必須和被應用的 ejb-name 匹配 -->

          </ejb-ref>

          ······

          客戶端:由于在 web.xml 中引入 ejb 引用描述這時 ejb 定位發生了變化:

          ······

          ?????? InitialContext ctx = new InitialContext();

          ?????? Object objref? = ctx.lookup("java:comp/env/ ejb/ejbtest ");// 使用 java:comp/env 命名空間 ?????? beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);

          ······

          ?

          演示 2 :聯合使用 web.xml jboss-web.xml

          web.xml

          ······

          <ejb-ref>

          <ejb-ref-name>ejb/ejbtest</ejb-ref-name>? <!-- 采用 sun 推薦的命名方式 -->

          ??????? <ejb-ref-type>Session</ejb-ref-type>

          ??????? <home>org.zcx.test.zcxejb1Home</home>

          ??????? <remote>org.zcx.test.zcxejb1</remote>

          </ejb-ref>

          ······

          jboss-web.xml

          <ejb-ref>

          <ejb-ref-name> ejb/ejbtest </ejb-ref-name>

          <jndi-name> example/ejbtest </jndi-name> <!-- 這里對應 ejb 對象的 jndi -->

          </ejb-ref>

          客戶端:

          ?????? nitialContext ctx = new InitialContext();

          ?????? Object objref? = ctx.lookup("java:comp/env/ ejb/ejbtest ");??????? ??????????????????????????? ?????? beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);

          ?

          以上的所有演示說明了 ejb-jar.xml jboss.xml web.xml jboss-web.xml 之間的基本關系和它們的使用方式。它們是部署各類 ejb 對象的關鍵文件。接下來介紹針對不同類型的 ejb 對象所需要的特殊配置。

          3.JBoss3.0中對于CMP2.0 Entity Bean的有關配置

          JBoss3.0 JBossCMP 引擎實現了 EJB2.0 CMP2.0 規范。 JBoss3.0 以前的版本 CMP 的引擎是 Jaws ,它通過 standardjaws.xml jaws.xml 進行有關的配置。在新的 JBossCMP 引擎中 Jboss3.0 通過 standardjbosscmp-jdbc.xml josscmp-jdbc.xml 來配置 Entity Bean JBoss3.0 首先處理 standardjbosscmp-jdbc.xml 然后根據 ejb jar 中是否提供 jbosscmp-jdbc.xml 來做進一步處理。通過 standardjbosscmp-jdbc.xml jbosscmp-jdbc.xml 可以為 entity bean 的部署提供如下的功能有:

          l???????? 指定所使用的數據源和對應的類型映射

          l???????? 指定一些引擎關心的屬性

          l???????? 指定引擎如何創建和管理數據庫表的原則

          l???????? 描述 finder ejbSelect 方法

          l???????? 指定屬性和字段的類型映射

          這里主要根據 standardjbosscmp-jdbc.xml/jbosscmp-jdbc.xml 介紹 CMP2.0 的配置方法。 JBoss 中原有的 Jaws 引擎的配置方法和新的 JBossCMP 的配置方法類似。這些文件的具體的信息可以參考 JBoss 安裝路徑下 \docs\dtd 中對應的 DTD 文件。

          3.1增加新的數據源

          JBoss 自帶的數據庫是 Hypersonic 數據庫,我們可以增加一些新的數據源。具體的步驟很簡單,參照 Jboss 安裝目錄下 \docs\examples\jca 中的 *-service.xml 文件可以增加找到對應類型的數據庫配置樣本文件。以 mysql-service.xml 文件為例,它可以配置一個 MySQL 數據庫作為 Entity Bean 的數據源。以下演示創建一個名為 MySQLDS MySQL 數據源。

          圖一是配置好的 mysql-service.xml 文件的一段代碼樣本,通過屬性設置可以定制數據源的名稱和有關連接的其他屬性。注意該文件中所有 name 屬性必須保持一致。

          圖一 mysql-servic.xml 的樣本代碼

          在配置好這個文件后,把它部署在 JBoss deploy 目錄下,把對應的 jdbc 驅動也放在 lib 目錄下。重新啟動 Jboss 就會加載這個新的數據源。

          3.2 Entity Bean 對數據源的使用

          第一種方式:

          直接改動 standardjbosscmp-jdbc.xml 。把原有的數據源 java:/DefautlDS 屏蔽掉使用新的數據源 java:/MySQLDS 。( Java 前綴是必須的。)不需在其他地方作改動。 JBoss 會實現新的數據源做為缺省的數據源。圖二是一個配置好的文件片斷。

          圖二 standardjbosscmp-jdbc.xml 的樣本代碼

          第二種方式:

          由于有可能不同的 Entity Bean 使用不同的數據源,而不是都使用同樣的缺省配置,所以必須為單獨的 Entity Bean 提供定制數據源信息的支持。這時不需要改動 standardjbosscmp-jdbc.xml 文件,可以通過在 Entity Bean jar 包中 META-INFO 目錄下添加新的部署文件 jbosscmp-jdbc.xml 來完成。通過這個文件可以描述特定的 Entity Bean 的關于數據源的配置信息。圖三是一個配置好的文件片斷。

          圖三 jbosscmp-jdbc.xml 的樣本代碼

          4.JBoss3.0中對于Message Driven Bean的配置

          JBoss 中開發 MDB 需要使用 JMS 功能。 JMS Sun 公司開發的面向消息的中間件 API 。它的主要目的是創造一種統一的面向消息編程的 JavaAPI ,從而避免使用提供商特定的 API 。現在有幾種不同的 JMS 系統可供使用。 JBoss3.0 中提供的是 JBossMQ

          4.1 JBoss3.0中配置JMS服務

          JBoss3.0 中與 JMS 服務相關的配置文件包括兩個文件: jbossMQ-service.xml jbossMQ-destinations-service.xml jbossMQ-service.xml 配置了 jbossMQ 服務中的核心對象信息。一般我們不需要處理這個配置文件。 jbossMQ-destinations-service.xml 用于定義具體應用所需的目的地信息。通過編輯它我們可以創建新的 Topic Queue 用于具體的 JMS 應用的目的地。在 JBoss 中創建應用特定的 Topic Queues 的步驟比較簡單,參照 jbossMQ-destinations-service.xml 文件格式在該文件中添加自己應用程序所需的 Topic 名為 myTestAppTopic Queue 名為 myTestAppQueue 。如圖四所示。

          圖四 ? jbossMQ-destinations-service.xml 的樣本代碼

          4.2 JBoss3.0中EJB使用JMS服務的配置

          在開發 MDB 時要在部署文件中指定所使用的 JMS 服務中的目的地信息。 JBoss 中通過 ejb-jar.xml jboss.xml 共同說明。在 jboss.xml 中通過 <destination-jndi-name> 標記描述所使用的目的地信息。

          Ejb-jar.xml

          <message-driven>

          ????? <ejb-name>HelloTopicMDB</ejb-name>

          ????? <ejb-class>org.zcx.test.HelloMDB</ejb-class>

          ????? <message-selector></message-selector>

          ????? <transaction-type>Container</transaction-type>

          ????? <message-driven-destination>

          ??????? <destination-type>javax.jms.Topic</destination-type>

          ??????? <subscription-durability>NonDurable</subscription-durability>

          ????? </message-driven-destination>

          </message-driven>

          jboss.xml

          ? <message-driven>

          ????? <ejb-name>HelloTopicMDB</ejb-name>

          ????? <configuration-name>Standard Message Driven Bean</configuration-name>

          ????? <destination-jndi-name>topic/myAppTestTopic</destination-jndi-name>

          ??? </message-driven>

          客戶端:

          ······

          Context context = new InitialContext();

          ????? // Get the connection factory

          ????? // Create the connection

          ????? // Create the session

          ······

          // Look up the destination

          ????? topic = (Topic)context.lookup("topic/myTestAppTopic");

          ????? // Create a publisher

          // Publish the message

          ······

          5.JBoss3.0中EJB使用JavaMail服務的配置。

          由于 JBoss 提供了 JavaMail 服務的實現,所以在 JBoss 中使用 JavaMail 是非常方便地。它所需要配置的是 mail.service 文件。這個文件非常地簡單不用多介紹。按照 mail.service 文件的的注釋就可以順利地完成配置。

          圖五是使用 JavaMail 服務的一個 sessionBean 的代碼片斷

          圖五 ? 使用 javamail 的樣本代碼

          ?

          ?

          以上通過例子簡單的介紹了 JBoss3.0 Session Bean Entity Bean Message Drive Bean 最基本的配置和部署方法,通過這些介紹現在已經可以在 JBoss 中進行基本的 EJB 應用的開發了。本文中對于 EJB 應用中比較復雜的一些配置像權限設置、資源管理和 CMP2.0 中的眾多配置等都沒有涉及到,希望大家可以在不斷的實踐和交流中更好地掌握 JBoss 的使用和配置。


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 石渠县| 奉节县| 类乌齐县| 托克托县| 陈巴尔虎旗| 台南市| 樟树市| 巴南区| 葵青区| 米泉市| 义乌市| 阜新市| 旺苍县| 牟定县| 丹江口市| 惠州市| 南丹县| 建始县| 石门县| 英山县| 莲花县| 苏尼特右旗| 鹿泉市| 雷山县| 勃利县| 宁陕县| 建瓯市| 大关县| 辽中县| 岐山县| 任丘市| 岳西县| 南溪县| 图片| 宁陵县| 宁夏| 双牌县| 白水县| 惠水县| 平利县| 格尔木市|