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

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

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

    kapok

    垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks

    Enterprise JavaBean (EJB) 是一些應用程式元件,它們實現了 EJB 體系結構規範,並且是 Java 2 Enterprise Edition (J2EE) 平臺的一部分。EJB 是開發和部署分散式的、可伸縮的、交易型的、安全的、可移植的、基於元件的商業應用的理想選擇。

    Enterprise JavaBean (EJB)是一些應用程式元件,它們實現了EJB體系結構規範,並且是Java 2 Enterprise Edition (J2EE) 平臺的一部分。EJB是開發和部署分散式的、可伸縮的、交易型的、安全的、可移植的、基於元件的商業應用的理想選擇。

    基於EJB的商業應用需要一個EJB容器,用於運行時的執行。所有遵從J2EE規範的應用伺服器,包括WebLogic 8.1在內,都提供了EJB容器。

    EJB體系結構背後的主要動機是關係的分離:它將與應用程式基礎設施相關的部分(例如交易處理和安全性)與核心應用程式部分(例如業務邏輯)分離開來。簡言之,EJB體系結構通過指定EJB容器與EJB開發者之間職責的區別,從而達到這種關係上的分離。例如,透明地實現交易處理是EJB容器的職責,而實現業務邏輯則應由EJB開發者負責。雖然EJB容器執行任務時可能需要某些線索(hint),但是,比起實際地實現這些與基礎設施相關的活動來,提供這類線索(通過基於XML的部署描述符)的代價是非常少的。總之,這種關係分離的規則使得商業應用的開發比其他方式要高效得多。

    EJB體系結構規範有4種版本:1.0、1.1、2.0和2.1。事實上,EJB version 1.0已經過時了,而最新版本,即2.1,由於剛剛才出現,所以還沒有廣泛提供。BEA WebLogic Server 8.1同時支援1.1和2.0這兩種版本。我們強烈建議在WebLogic Server 8.1中進行開發時使用EJB version 2.0。

    實體bean是一種EJB。除了EJB背後的一般動機外,使用實體bean的特定動機是為持久儲存中的業務域(business-domain)實體提供一種駐留在記憶體中的、可共用的、物件導向的視圖。通常,業務域物件就是關聯資料庫中一個表裏面的一行。在本文中,我們討論了關於在WebLogic Server 8.1環境下Entity EJB的設計、開發和部署的特定問題。至於關於EJB技術的綜合教程,我們推薦http://java.sun.com/j2ee上的J2EE教程。

    概述

    實體bean是設計用來管理關聯資料庫中的資料的。在BEA WebLogic Server 8.1環境下,Entity EJB的開發包括EJB的設計、生成、打包和部署。

    從設計的角度來看,實體bean可以由兩條正交軸線來分類:持久性和讀取。順著持久性這條軸線,有兩種類型的實體bean:Bean管理的持久性(Bean-managed persistence,BMP)和容器管理的持久性(Container-managed persistence,CMP)。如果是CMP,則EJB容器將管理實體bean的持久性。而對於BMP,則由實體bean的開發者通過指定的Java原始碼來管理實體bean的持久性。CMP和BMP之間的選擇是互斥的。順著讀取這條軸線,又有兩種類型的bean:遠端的和本地的。遠端實體bean提供了定位的透明性,並且可以從不同的Java虛擬機上讀取。相反,本地實體bean只能在同一應用伺服器內讀取。本地和遠端之間的選擇不是互斥的,因此可以設計具有雙重介面的bean。

    在EJB體系結構規範中,每個實體EJB元件都是由一組指定的Java類和一組指定的XML部署描述符組成。EJB的打包過程包括將所有指定的EJB Java類檔和XML部署描述符檔打包到一個Java Archive (JAR)檔中。如果實體EJB還要依賴於一些Java助手類檔,那麼也可以將這樣的類檔包括到EJB JAR檔中,或者將它們單獨打包到一個不同的JAR檔中。

    EJB的部署可分為兩種方式,要麼是在BEA WebLogic Server 8.1內直接部署EJB JAR檔以及所依賴的任何JAR檔,要麼是首先將EJB jar檔和所有依賴的JAR檔打包到一個企業應用歸檔(enterprise application archive,EAR)檔內,然後再在WebLogic Server 8.1內部署這個EAR檔。

    設計EJB

    在設計一個實體時,需要考慮的幾個重要選擇是:

    1. 是設計一個CMP實體bean還是一個BMP實體bean。
    2. 是設計一個本地實體bean,還是設計一個遠端實體bean,抑或是設計一個雙重介面的實體bean。
    3. 是設計一個粗粒度(coarse-grained)的實體bean,還是一個細粒度(fine-grained)的實體bean。
    4. 是使用資料傳輸物件,還是使用get和set方法來讀取實體EJB中的資料。

    下面將討論在開發實體EJB時要面臨的這些設計選擇。

    • CMP與BMP
      記住,雖然可能存在一些很合理的例外,但是一般情況下我們強烈推薦使用CMP這種設計。至於為什麼要選擇CMP,而不是BMP,這裏有三大主要原因。
    1. 與BMP相比,CMP提供了跨多種不同資料庫的可攜性,因為CMP實體bean不包含任何特定於資料庫的持久性原始碼。CMP易於設計、實現和維護。
    2. 通常,CMP擁有好於BMP的性能,因為EJB容器將自動生成特定於資料庫的原始碼,並且這些原始碼將為目標資料庫而最佳化。
    3. CMP通過使用本地介面,使得在相關EJB的網路中程式性地(programmatically)進行瀏覽變得非常容易。
    • 本地介面、遠端介面和雙重介面
    因為CMP通過本地介面管理著實體EJB之間的關係,所以我們強烈建議總是提供一個本地介面。我們認為遠端介面需要的時候很少,但是如果仔細評估一下就會證明遠端介面也是需要的。所以,我們還是設計一個雙重介面吧。

    本地介面通過本地客戶機提供了對EJB的最佳化的讀取;遠端方法呼叫(remote method invocation,RMI)的語義不要求通過本地客戶機、使用本地介面來讀取EJB。

    遠端客戶機與EJB容器位於不同的虛擬機上,它需要RMI和遠端介面來讀取EJB。從理論上講,單單設計一個本地實體存在著一個明顯的缺點,那就是只有在相同應用伺服器內的客戶機才能讀取該實體bean。然而,這只是一個理論上的缺點,因為實際上很少需要從應用伺服器之外讀取實體EJB。

    • 粗粒度與細粒度

      這是一個非常有爭議的專題,所以還應根據您個人的經驗小心地評價關於此專題的一些不同觀點。我們的選擇是,實體EJB最常用於表示應用程式業務域中各個實體,所以應該讓實體EJB儘量地細粒度,不過也應將設計限定為僅提供一個本地介面。關於這個問題的爭論始於EJB體系結構規範1.x版本,當時只能通過一個遠端介面來讀取實體EJB。建立在EJB 1.x版本基礎上的任何反對使用細粒度實體EJB的觀點,雖然當時也有合理之處,但是在EJB體系結構規範2.0 中卻已不合時宜了,並且最終遭到反對。請謹記:有些專家可能不同意我們的觀點,所以我們鼓勵您通過實驗進行考證,並在此專題上形成自己的觀點。
    • 資料傳輸物件與Get和Set方法
      這又是一個有爭議的專題。我們的觀點如下所述:
      • 在實體EJB的本地介面中暴露CMP持久欄位的所有get讀取器(accessor)方法。
      • 為不屬於實體EJB主鍵的一部分的每個CMP持久欄位建立包裝器(wrapper)set方法,並且在實體EJB的本地介面中暴露這些包裝器方法。使用這些包裝器方法背後的動機是,CMP要求所有持久欄位都具有抽象方法setXXX,如果需要在這些setXXX方法內進行任何驗證,那麼就可以先在包裝器方法內完成驗證,然後再呼叫相應的setXXX方法。如果不需
        這樣的驗證,那麼省掉包裝器方法而直接包括setXXX方法也無不可。
      • 在某些少見的環境下,可能要求實體EJB有一個遠端介面,這時可以為每個實體EJB定義一個資料傳輸物件,將該資料傳輸物件作為實體EJB的遠端介面中的一個參數,暴露其get和set方法。

    生成和打包EJB

    在EJB體系結構規範中,每個實體EJB元件都由一組指定的Java類和一組指定的XML部署描述符組成:

    1. 一個必需的實現實體bean核心功能的bean類。
    2. 一個遠端介面、本地介面或雙重介面,該介面為實體bean提供了適當的客戶機視圖。
    3. 一個遠端主介面(home interface)、本地主介面或者雙重主介面,該介面為實體bean的生命週期管理提供了適當的介面。
    4. 如果是具有組合主鍵的實體bean,那麼還有一個必需的主鍵類。
    5. 一個ejb-jar XML部署描述符檔,EJB體系結構規範version 2.0對此作了規定。
    6. 一個特定於供應商的 weblogic-ejb-jar XML部署描述符檔,BEA WebLogic Server 8.1 對此有規定。
    7. 如果是CMP實體bean,那麼還應有一個特定於供應商的weblogic-cmp-rdbms-jar XML 部署描述符檔,BEA WebLogic Server 8.1對此有規定。

    這裏使用的例子實體EJB是一個CMP實體EJB,它有一個遠端介面,它的名稱是AccountEJB。在隨WebLogic Server 8.1一起安裝的示例檔中,即 /weblogic81/samples/server/examples/src/examples/ejb20/basic/containerManaged目錄下,可以找到這個實體EJB。

    實體bean EJB類和介面可以用EJBGen工具來生成。

    • EJBGen
      EJBGen是一種EJB 2.0原始碼生成器,它能夠從一個EJB bean類生成本地介面/遠端介面、本地主介面/遠端主介面、主鍵類和部署描述符。在EJB bean類中使用EJBGen標記來指定不同的EJB設計設定(例如,本地/遠端和CMP/BMP)。在WebLogic Server 8.1 SP01 中,EJBGen 類被包括在/weblogic81/server/lib/weblogic.jar中。在WebLogic Server 8.1 SP02 & SP03中,EJBGen類被包括在/weblogic81/server/lib/ejbgen.jar文件中。將ejbgen.jar添加到Classpath中,以便使用EJBGen工具。

      EJBGen通過以下命令來呼叫:

      javadoc -docletpath ejbgen.jar -doclet weblogic.tools.ejbgen.EJBGen
      <EjbBeanClass>.java

      該命令有一些選項:

      • d [directory]: 建立EJB類/介面和部署描述符時所在的目錄。
      • descriptorDir [directory]: 建立部署描述符時所在的目錄。
      • wls7: 有了–wls7這個選項,就會生成WebLogic Serve 7.1部署描述符。

        如果要將更早版本的BEA WebLogic Server部署描述符轉換成WebLogic Server 8.1部署描述符,那麼可以使用DDConverter。

    • DDConverter
      DDConverter是一個命令行工具,用於將更早版本的XML部署描述符(ejb-jar.xml、weblogic-ejb-jar.xml和weblogic-cmp-rdbms-jar.xml)轉換成當前版本的WebLogic Server。 DDConverter可以用以下命令來呼叫:

    java weblogic.ejb20.utils.DDConverter [options] –d destDir file1 [file2...]

    在這個命令中,file是指包含EJB 1.1部署描述符的一個EJB 1.0部署描述符檔或JAR檔。DDConverter的一部分選項有:

      • d destDir:部署描述符輸出到的目錄。
      • EJBVer output EJB version: 指定輸出EJB版本。缺省版本是2.0。
        在部署EJB之前,必須將其打包到一個JAR檔或EAR檔中。
    • EJB JAR文件

      EJB JAR檔的結構由EJB類和介面以及包含部署描述符的 META-INF目錄組成。建立一個目錄source/ejb20/basic/containerManaged和一個目錄source/ejb20/basic/containerManaged/META-INF。將Account.java、AccountBean.java、AccountHome.java 和ProcessingErrorException.java從/weblogic81/samples/server/examples/src/examples/ejb20/basic/containerManaged目錄複製到source/ejb20/basic/containerManaged目錄。將ejb-jar.xml、weblogic-ejb-jar.xml和weblogic-cmp-rdbms-jar.xml從/weblogic81/samples/server/examples/src/examples/ejb20/basic/containerManaged目錄複製到source/ejb20/basic/containerManaged/META-INT目錄。

    通過Apache Ant使用編譯好的EJB Java類檔和部署描述符建立一個JAR檔,Apache Ant 是一種基於Java的聯編(build)工具。Apache Ant工具需要一個聯編檔。建立一個帶有目標的build.xml檔(參見清單1),以便編譯EJB原始檔案並利用編譯好的類檔生成一個JAR 檔。

    將build.xml檔複製到/source目錄。運行build.xml中的ejb-jar目標。EJB JAR檔生成在source/dist目錄中。EJB JAR可以使用BEA WebLogic appc編譯器來編譯。用appc編譯器來編譯並不是必需的,但這是BEA WebLogic推薦的。

    • appc
      appc編譯器利用EJB JAR檔生成容器類,並驗證部署描述符。在部署EJB JAR檔之前用 appc編譯EJB JAR類的好處是,這樣可以識別出在部署EJB JAR時可能發生的錯誤。要運行 appc編譯器,應保證weblogic.jar被包括在Classpath中。appc可以通過以下命令來呼叫:

    java weblogic.appc [options] <jar file or directory>

    appc有一些選項:

      • output<file>:指定輸出目錄。
      • keepgenerated: 保留生成的.java文件。
      • compiler<java>: 將Java編譯器設置成可用。
    • 部署EJB

      要部署一個實體EJBJAR檔,必須有一個帶有Java命名和目錄介面(Java Naming and Directory Interface,JNDI)名稱的資料源。在我以前的文章(WLDJ, Vol. 3, issue 1)中我已解釋了如何建立連結池(Connection Pool)。用JNDI名 "examples-dataSource-demoPool" 建立一個Tx Datasource。這個JNDI 名應該與weblogic-cmp-rdbms-jar.xml部署描述符檔的 <data-source-name>元素中指定的名稱相一致。

    為了部署實體EJB JAR檔,在管理控制臺(administration console)中選擇Deployments>EJB Modules節點。單擊Deploy a new EJB Module鏈結(見圖1)。

    這時會顯示出Deploy an EJB Module表單(見圖2)。在Deploy an EJB Module 表單中選擇 upload your files(s) 鏈結。接著將會顯示一個Upload and Install an Application or Module 表單。選擇一個要上載的EJB JAR檔,並單擊Upload按鈕。

    這時會顯示出Deploy an EJB Module表單。選擇myserver鏈結。接著可以看到myserver目錄中的子目錄列表。單擊upload directory鏈結。在upload目錄中選擇要部署的EJB JAR,並單擊Target Module按鈕(見圖3)。這時會顯示一個Select Targets for this EJB module表單(見圖4)。



    在Select targets for this EJB module表單中選擇一個或多個目標伺服器,並單擊Continue按鈕。在接著顯示出的表單中,在Name欄位中指定用於要部署的EJB模組的名稱(見圖5)。

    單擊Deploy按鈕以部署EJB JAR檔。這樣一來,EJB JAR將被部署到伺服器上,並且有一個EJB節點被添加到EJB Modules節點中(見圖6)。

    EJB應用程式還可以部署到BEA WebLogic Server上,方法是將EJB JAR檔複製到該應用程式要部署到的那個域上的applications目錄中。

    BEA WebLogic為在 WebLogic伺服器上部署EJB提供了一些建議。

    1. 應該將EJB作為企業歸檔應用程式(EAR應用程式)中的一個EJB JAR來部署,以利於應用程式的移植和修改。
    2. 引用了其他EJB的EJB應該部署在相同的應用程式中;weblogic-ejb-jar.xml中的enable-call-by-reference元素應該設置成True,以獲得更好的性能。
    3. 部署在WebLogic伺服器叢集上的EJB應該其次地(homogeneously)部署到叢集內每一臺受管的伺服器上。如果一個EJB只需部署到叢集內的一臺伺服器上,那麼在部署之前應使用appc編譯器先對 EJB進行編譯。

    結束語

    EJB應用程式的開發包括建立EJB類、編譯EJB類和利用編譯好的EJB類建立一個JAR檔,以及將EJBJAR部署到BEA WebLogic Server。通過遵循關於設計、生成和部署EJB JAR到BEA WebLogic Server上的一些建議,EJB應用程式的性能得到了提高。

    參考資料

    l Programming WebLogic Enterprise JavaBeans: http://edocs.bea.com/wls/docs8.1/ejb/index.html

    關於作者

    Deepak Vohra 是一名 Web 開發人員,同時也是一名 NuBean 顧問。
    Ajay Vohra 是Compuware 公司的一名高級軟體工程師。

    Listing 1: build.xml file
    <project name="example-entity-ejb" default="all" basedir=".">
    <property name="source" value="."/>
    <property name="ejb" value="ejb20/basic/containrManaged"/>
    <property name="build" value="{source}/build"/>
    <property name="j2sdkee" value="c:/j2sdkee1.3.1"/>
    <property name="dist" value="{source}/dist"/>

    <target name="init">
    <!-- Create the time stamp -->
    <tstamp/>
    <mkdir dir="{build}"/>
    <mkdir dir="{build}/META-INF"/>
    <mkdir dir="{dist}"/>
    </target>
    <target name="ejb">
    <javac srcdir="{source}" classpath="{j2sdkee}/lib/j2ee.jar"
    destdir="{build}" includes="{ejb}/*.java"/>
    <copy todir="{build}/META-INF">
    <fileset dir="META-INF" includes="*.xml" />
    </copy>
    </target>
    <target name="ejb-jar" depends="ejb">
    <jar jarfile="{dist}/entityejb.jar" includes="META-INF/*.xml,
    {ejb}/*.class" basedir="{build}"/>
    </target>
    </project>

    posted on 2005-06-15 15:26 笨笨 閱讀(2680) 評論(0)  編輯  收藏 所屬分類: J2EEALLWeblogic Portal
    主站蜘蛛池模板: 日韩免费视频网站| 永久免费在线观看视频| 午夜一区二区免费视频| 亚洲国产成人久久三区| 成人免费黄色网址| 亚洲精品中文字幕乱码影院| 久久青草精品38国产免费| 亚洲AV午夜成人影院老师机影院| 国产特黄特色的大片观看免费视频| 相泽亚洲一区中文字幕| 国产区在线免费观看| 亚洲精品色午夜无码专区日韩| 好紧我太爽了视频免费国产| 亚洲av日韩av天堂影片精品| 天天影视色香欲综合免费| 亚洲中文字幕久久无码| 日本高清免费aaaaa大片视频| 女bbbbxxxx另类亚洲| 亚洲精品乱码久久久久久不卡| 香蕉免费在线视频| 亚洲第一视频网站| 114一级毛片免费| 亚洲av成人一区二区三区在线播放| 国产乱子伦精品免费女| caoporm超免费公开视频| 亚洲国产精品一区二区成人片国内 | 国产无遮挡无码视频免费软件| 亚洲无线电影官网| 色se01短视频永久免费| 天天综合亚洲色在线精品| 在线精品亚洲一区二区小说| 亚洲w码欧洲s码免费| 国产精品手机在线亚洲| 亚洲av无码潮喷在线观看| 成人免费视频试看120秒| 三级黄色片免费看| 国产成人精品亚洲日本在线| 国产男女性潮高清免费网站 | 97精品免费视频| 亚洲成AV人片在WWW| 久久精品国产亚洲综合色|