posts - 66,  comments - 11,  trackbacks - 0
          為將企業Bean的中間件服務需求告知EJB容器,開發者還需生成部署描述符。
          <?xml version="1.0" encoding="UTF-8"?>
          <ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee"
           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/ejb-jar_2_1.xsd"
          >
          <!-- 
              <ejb-name>:企業Bean的昵稱。在部署描述符的其他地方能夠引用它,供設置其他參數使用。
              <home>:Home接口的全限定名。
              <remote>:遠程接口的全限定名。
              <local-home>:本地Home接口的全限定名。
              <local>:本地接口的全限定名。
              <ejb-class>:企業Bean類的全限定名。
              <session-type>:標識企業Bean是有狀態的,還是無狀態的。
              <transaction-type>:事務類型。
           
          -->
              
          <enterprise-beans>
                  
          <session>
                      
          <ejb-name>Hello</ejb-name>
                      
          <home>examples.HelloHome</home>
                      
          <remote>examples.Hello</remote>
                      
          <local-home>examples.HelloLocalHome</local-home>
                      
          <local>examples.HelloLocal</local>
                      
          <ejb-class>examples.HelloBean</ejb-class>
                      
          <session-type>Stateless</session-type>
                      
          <transaction-type>Container</transaction-type>
                  
          </session>
              
          </enterprise-beans>
          </ejb-jar>

          Ejb-jar文件:
          HelloWorld EJB組件準備好了之后只需將他們打包成Ejb-jar文件。手工創建jar文件
          jar cf HelloWorld.jar *

          注意:ejb-jar.xml文件必須放置在META-INF子目錄中。當EJB容器初次打開Ejb-jar文件時,將在ejb-jar.xml中查找Ejb-jar所包含的EJB組件信息。

          如何調用EJB組件:
          目前,存在2類客戶:
          1、基于Java RMI-IIOP的客戶。這類客戶使用JNDI,即通過網絡查找對象。另外,它們使用JTA控制事務。
          2、CORBA客戶。這類客戶村尋CORBA標準。這對于使用其他語言訪問EJB組件的客戶而言,意義深遠,CORBA客戶使用CORBA命名服務,即通過網絡查找對象。
          訪問EJB組件的步驟:
          1、查找Home對象
          2、使用Home對象創建EJB對象
          3、調用EJB對象的業務方法
          4、銷毀EJB對象

          查找Home對象:
          開發EJB應用的最主要目標之一是,應用代碼能夠"一次編寫,到處運行".如果將已部署在機器A上的EJB應用遷移到機器B上,EJB應用代碼不需要改動,因為EJB實現了位置透明性。
          借助于命名和目錄服務能夠實現EJB的位置透明性。命名和目錄服務是能夠在網絡中存儲和查找資源的產品。

          在企業部署場景中,EJB服務器使用命名服務存儲位置信息,而這些位置信息是用于標識資源的,其中的資源涉及到EJB Home對象、企業Bean環境屬性、數據庫JDBC驅動、消息服務驅動和其他資源等。通過使用命名服務,應用代碼不用將具體機器或資源名硬編碼在代碼中,這就是EJB所具備的位置透明性,它使得代碼具有便攜性。

          為實現位置透明性,EJB容器需要屏蔽掉Home對象的具體位置,使得EJB組件的客戶代碼感知不到其具體位置。客戶不用將Home對象宿主的機器名硬編碼于代碼中。相反,使用JNDI就能夠查找到Home對象。物理上,Home對象可以存在于網絡上的任何地方,比如在運行EJB容器的同一進程地址空間中,其他機器上的EJB容器中。

          客戶為定位Home對象,它必須提供企業Bean的Home對象的JNDI昵稱。客戶使用該昵稱標識所需的Home對象。一旦將EJB組件部署到容器中,容器會自動將HelloHome昵稱綁定到Home對象。因此,在對已部署EJB組件的物理機器位置不知情時,開發者能夠在任一機器上使用該昵稱查找到上述Home對象,借助于JNDI能夠查找到它。JNDI能夠在網絡上查找命名服務,或在JNDI樹中查找到Home對象,當然,Home對象也可能位于客戶同一進程中,最后一旦找到Home對象,客戶將獲得對它的引用。
          package com.wyq.ejb;

          import java.util.Properties;

          import javax.naming.Context;
          import javax.naming.InitialContext;

          /**
           * 客戶代碼實例,用于調用簡單、無狀態會話Bean中的方法。
           *
           
          */
          public class HelloClient {

              
              
          public static void main(String[] args)throws Exception {
                  
          /*
                   * 設置屬性,用于JNDI初始化,從命令行讀入屬性。
                   
          */
                  Properties props 
          = System.getProperties();
                  
          /*
                   * 初始上下文是連接到JNDI樹的入口。
                   * 借助于環境屬性,能夠完成JNDI驅動、服務器的網絡地址等的設置
                   
          */
                  Context ctx 
          = new InitialContext(props);
                  
          /*
                   * 獲得對Home對象的引用。Home對象是創建EJB對象的工廠。
                   
          */
                  Object obj 
          = ctx.lookup("HelloHome");
                  
          /*
                   * Home對象是RMI-IIOP對象。因此,需要借助于特殊的RMI-IIOP造型操作將它們造型成RMI-IIOP對象
                   
          */
                  HelloHome home 
          =(HelloHome)javax.rmi.PortableRemoteObject.narrow(obj,HelloHome.class);
                  
          /*
                   * 使用工廠,來創建Hello EJB對象。
                   
          */
                  Hello hello 
          = home.create();
                  
          /*
                   * 調用EJB對象的hello()方法。它會將調用委派給EJB Bean類實例。一旦接收到響應結果,它便會返回。
                   
          */
                  System.out.println(hello.hello());
                  
          /*
                   * 在使用完EJB對象后,需要銷毀它。EJB容器負責銷毀EJB對象。
                   
          */
                  hello.remove();

              }

          }

          posted on 2009-10-31 12:36 王永慶 閱讀(131) 評論(0)  編輯  收藏 所屬分類: EJB學習筆記
          <2009年10月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          關注blogs

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 东辽县| 沙坪坝区| 闻喜县| 安新县| 河北区| 松江区| 武安市| 工布江达县| 安国市| 绥中县| 扬中市| 黄浦区| 西盟| 广平县| 隆尧县| 巴南区| 抚州市| 永康市| 绵阳市| 新干县| 绿春县| 河北区| 河南省| 石家庄市| 正宁县| 社旗县| 白河县| 饶阳县| 松滋市| 昌都县| 宽甸| 马公市| 凉城县| 上虞市| 鄂伦春自治旗| 潮安县| 明溪县| 杭锦旗| 桃园县| 南部县| 怀远县|