<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 51, comments - 17, trackbacks - 0, articles - 9
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    JBoss3.0 下配置和部署 EJB 簡(jiǎn)介

    1.JBoss簡(jiǎn)介

    JBoss 是一個(gè)運(yùn)行 EJB J2EE 應(yīng)用服務(wù)器。它是開(kāi)放源代碼的項(xiàng)目,遵循最新的 J2EE 規(guī)范。從 JBoss 項(xiàng)目開(kāi)始至今,它已經(jīng)從一個(gè) EJB 容器發(fā)展成為一個(gè)基于的 J2EE 的一個(gè) web 操作系統(tǒng)( operating system for web ,它體現(xiàn)了 J2EE 規(guī)范中最新的技術(shù),并且它還在 the JavaWorld Editors' Choice 2002 評(píng)選中獲得“最佳 Java 應(yīng)用服務(wù)器”大獎(jiǎng)。無(wú)論是學(xué)習(xí)還是應(yīng)用, JBoss 為我們提供了一個(gè)非常優(yōu)秀的平臺(tái)。有關(guān) JBoss 的詳細(xì)信息請(qǐng)參閱其主頁(yè) http://www.jboss.org

    ?????? 剛開(kāi)始使用 JBoss 進(jìn)行 EJB 開(kāi)發(fā)時(shí),由于可供參考的資源不是很多,所以有一個(gè)比較困難的起步階段。 JBoss 的配置和使用沒(méi)有提供圖形向?qū)Ы缑妫蚤_(kāi)發(fā)部署 EJB 相對(duì)比較復(fù)雜。本文通過(guò)盡量具體的演示來(lái)對(duì) JBoss3.0 下的 EJB 開(kāi)發(fā)和部署的進(jìn)行一個(gè)簡(jiǎn)單的介紹,從而使剛開(kāi)始使用 JBoss 的用戶可以很快地進(jìn)入到真正的 J2EE 應(yīng)用開(kāi)發(fā)中。

    由于本文主要介紹 JBoss3.0 中不同類(lèi)型 EJB 的配置和部署,不對(duì)基本的 EJB 開(kāi)發(fā)做太多的描述,所以希望讀者具有 J2EE EJB 的經(jīng)驗(yàn)。想要了解有關(guān)信息請(qǐng)查閱參考資料 1

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

    根據(jù) J2EE 規(guī)范的要求,一個(gè)基本的 ejb jar 包使用的描述文件是 ejb-jar.xml web 應(yīng)用的 war 包使用的是 web.xml 企業(yè)應(yīng)用的 ear 包使用的是 application.xml 。這些配置文件都是中性的和平臺(tái)無(wú)關(guān)的。同時(shí)應(yīng)用服務(wù)器可以使用一些其他的配置文件用于描述特定服務(wù)器的相關(guān)信息。 JBoss 中這樣的文件有 jboss.xml jboss-web.xml JBoss 容器中這些文件不是必須的,如果提供了那么 jboss.xml ejb-jar.xml 放在同一目錄下, jboss-web.xml web.xml 放在同一目錄下。關(guān)于 jboss.xml jboss-web.xml 的規(guī)范請(qǐng)參考 JBoss 安裝目錄下 docs/dtd/ 目錄下的對(duì)應(yīng)的 DTD 文件。

    2.1 JBoss中關(guān)于EJB客戶端的配置:

    調(diào)用 EJB 的客戶端可以是 JSP Servlet 或客戶端應(yīng)用程序。如果客戶端和服務(wù)器不在同一個(gè) Java VM 上,那么在客戶端必須提供一個(gè) jndi.properties 文件告訴客戶端進(jìn)行有關(guān) JNDI 命名服務(wù)的信息,并且把這個(gè)文件所在目錄設(shè)定到環(huán)境變量 classpath 中。

    以下是一個(gè) jndi.properties 的樣例:

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

    通過(guò)這個(gè)文件和 JBoss 的一些客戶端類(lèi)庫(kù),就可以使用 JBoss 提供的 EJB 對(duì)象服務(wù)了。

    2.2 JBoss中部署EJB:

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

    第一種方式:

    把開(kāi)發(fā)好的 ejb jar 包和 web 應(yīng)用的 war 包公共放在 deploy 目錄下。

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

    ejb-jar.xml:

    <ejb-jar>

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

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

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

    </ejb-jar>

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

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

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

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

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

    ?

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

    在缺省情況下 JBoss JNDI 服務(wù)將通過(guò) ejb-jar.xml <ejb-name>XXX</ejb-name> 中的 XXX 來(lái)使用 EJB home interface 但是如果有多個(gè) ejb 對(duì)象在相同的 ejb jar 包中,在 ejb-jar.xml 中通過(guò) <ejb-name>XXX</ejb-name> 就可能不能很好的表示某一個(gè) ejb 對(duì)象,所以一般我們希望可以提供一些附加的信息,例如采用這樣的格式 "[ 應(yīng)用名 ]/[bean ]" 來(lái)引用一個(gè) EJB 對(duì)象。這時(shí) JNDI 服務(wù)就可能不能正確地找到你的 ejb 對(duì)象,我們就需要使用 jboss.xml 文件,通過(guò)它實(shí)現(xiàn) jndi 名到 ejb 名的重定向。這個(gè)文件必須和 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 名進(jìn)行 ejb 定位。

    ······

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

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

    ······

    第二種方式:

    ejb web 應(yīng)用包裝成一個(gè)企業(yè)應(yīng)用包。部署 ear 時(shí)可以簡(jiǎn)單地把通過(guò) application.xml 描述 ejb jar 包和 web 應(yīng)用的 war 包,同樣在 web.war 中不需要提供特殊的信息就可以和第一種方式一樣使用 ejb 對(duì)象。客戶端代碼也不需要進(jìn)行改動(dòng)。這里不再舉例說(shuō)明。

    此外我們可以進(jìn)行更進(jìn)一步的部署,這時(shí)需要使用到 web.xml jboss-web.xml jboss-web.xml JBoss 提供的一個(gè)針對(duì) web 應(yīng)用進(jìn)行配置的文件。 jboss-web.xml web.xml 一起放在 web 應(yīng)用的 WEB-INF 目錄下

    演示 1 :改動(dòng) web.xml 文件,添加 <ejb-ref> 標(biāo)記,不使用 jboss-web.xml 文件。

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

    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>??? <!-- 必須和被應(yīng)用的 ejb-name 匹配 -->

    </ejb-ref>

    ······

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

    ······

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

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

    ······

    ?

    演示 2 :聯(lián)合使用 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> <!-- 這里對(duì)應(yīng) ejb 對(duì)象的 jndi -->

    </ejb-ref>

    客戶端:

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

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

    ?

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

    3.JBoss3.0中對(duì)于CMP2.0 Entity Bean的有關(guān)配置

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

    l???????? 指定所使用的數(shù)據(jù)源和對(duì)應(yīng)的類(lèi)型映射

    l???????? 指定一些引擎關(guān)心的屬性

    l???????? 指定引擎如何創(chuàng)建和管理數(shù)據(jù)庫(kù)表的原則

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

    l???????? 指定屬性和字段的類(lèi)型映射

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

    3.1增加新的數(shù)據(jù)源

    JBoss 自帶的數(shù)據(jù)庫(kù)是 Hypersonic 數(shù)據(jù)庫(kù),我們可以增加一些新的數(shù)據(jù)源。具體的步驟很簡(jiǎn)單,參照 Jboss 安裝目錄下 \docs\examples\jca 中的 *-service.xml 文件可以增加找到對(duì)應(yīng)類(lèi)型的數(shù)據(jù)庫(kù)配置樣本文件。以 mysql-service.xml 文件為例,它可以配置一個(gè) MySQL 數(shù)據(jù)庫(kù)作為 Entity Bean 的數(shù)據(jù)源。以下演示創(chuàng)建一個(gè)名為 MySQLDS MySQL 數(shù)據(jù)源。

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

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

    在配置好這個(gè)文件后,把它部署在 JBoss deploy 目錄下,把對(duì)應(yīng)的 jdbc 驅(qū)動(dòng)也放在 lib 目錄下。重新啟動(dòng) Jboss 就會(huì)加載這個(gè)新的數(shù)據(jù)源。

    3.2 Entity Bean 對(duì)數(shù)據(jù)源的使用

    第一種方式:

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

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

    第二種方式:

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

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

    4.JBoss3.0中對(duì)于Message Driven Bean的配置

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

    4.1 JBoss3.0中配置JMS服務(wù)

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

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

    4.2 JBoss3.0中EJB使用JMS服務(wù)的配置

    在開(kāi)發(fā) MDB 時(shí)要在部署文件中指定所使用的 JMS 服務(wù)中的目的地信息。 JBoss 中通過(guò) ejb-jar.xml jboss.xml 共同說(shuō)明。在 jboss.xml 中通過(guò) <destination-jndi-name> 標(biāo)記描述所使用的目的地信息。

    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服務(wù)的配置。

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

    圖五是使用 JavaMail 服務(wù)的一個(gè) sessionBean 的代碼片斷

    圖五 ? 使用 javamail 的樣本代碼

    ?

    ?

    以上通過(guò)例子簡(jiǎn)單的介紹了 JBoss3.0 Session Bean Entity Bean Message Drive Bean 最基本的配置和部署方法,通過(guò)這些介紹現(xiàn)在已經(jīng)可以在 JBoss 中進(jìn)行基本的 EJB 應(yīng)用的開(kāi)發(fā)了。本文中對(duì)于 EJB 應(yīng)用中比較復(fù)雜的一些配置像權(quán)限設(shè)置、資源管理和 CMP2.0 中的眾多配置等都沒(méi)有涉及到,希望大家可以在不斷的實(shí)踐和交流中更好地掌握 JBoss 的使用和配置。


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 色天使色婷婷在线影院亚洲| 成人一a毛片免费视频| 国产亚洲Av综合人人澡精品| 亚洲日本精品一区二区| 亚洲国产成人久久综合野外| 免费看成人AA片无码视频羞羞网| 日本道免费精品一区二区| 牛牛在线精品免费视频观看| 日韩亚洲国产综合高清| 亚洲成色999久久网站| 亚洲日本一区二区一本一道 | 国产三级在线观看免费| 久99久精品免费视频热77| 国产福利免费视频| 特级毛片爽www免费版| 精品久久久久久亚洲综合网| 亚洲人成www在线播放| 亚洲中文字幕在线无码一区二区 | 高清永久免费观看 | 亚洲人成网亚洲欧洲无码久久| 国产成人免费永久播放视频平台| 中文字幕无码成人免费视频| 日本最新免费网站| 又大又硬又爽又粗又快的视频免费| 成人爽a毛片免费| 国产一级婬片A视频免费观看| 精品久久久久久国产免费了| 一区二区视频在线免费观看| 无码毛片一区二区三区视频免费播放| 亚洲AV无码专区在线电影成人| 亚洲一区二区三区国产精华液| 亚洲人成77777在线观看网| 亚洲一本一道一区二区三区| 亚洲kkk4444在线观看| 亚洲日韩av无码中文| 亚洲av日韩精品久久久久久a| MM1313亚洲精品无码久久| 另类专区另类专区亚洲| 一区二区三区AV高清免费波多| 永久免费观看黄网站| 三年片在线观看免费西瓜视频|