麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

靈活使用EJB的本地和遠(yuǎn)程接口(三)

2019-11-18 12:33:58
字體:
供稿:網(wǎng)友

  JNDI 綁定和源代碼分析
  EJB 模塊
  從 DualEJBModule01 開始。在 EJB Deployment Descriptor 編輯器面板中,選擇 Beans 選項(xiàng)卡,然后選擇 DualEntity,并且確保 WebSphere Bindings 部分中的 JNDI 名設(shè)置為 “ejb/dual/ejb/DualEntityHome” 。保存所有的更改。首先,讓我們研究 DualEJBModule02 項(xiàng)目中 Dualsession EJB 的 ejb-jar.xml 的代碼片斷:
  ...
  
    useLocal
    java.lang.Boolean
    true
  

  
    doTrace
    java.lang.Boolean
    false
  

  
    ejb/DualEntityRemoteHome
    Entity
    dual.ejb.DualEntityRemoteHome
    dual.ejb.DualEntityRemote
    DualEJBModule01.jar#DualEntity
  

  
    ejb/DualEntityLocalHome
    Entity
    dual.ejb.DualEntityLocalHome
    dual.ejb.DualEntityLocal
    DualEJBModule01.jar#DualEntity
  

  ...
  
  這里,第一個(gè)元素(具有名稱“useLocal”)是用來控制 DualEntity EJB 的本地接口的使用的。第二個(gè)條目(具有名稱“doTrace”)預(yù)備只用于跟蹤。已實(shí)現(xiàn)的跟蹤功能是相當(dāng)基本的,但是對(duì)于我們的目的來說足夠了。 相應(yīng)的 Java 代碼看起來像是下面這樣的:
  
  public class DualSessionBean implements javax.ejb.SessionBean {
    PRivate javax.ejb.SessionContext mySessionCtx;
    private boolean doTrace;
    private boolean useLocal;
    private DualEntityRemoteHome entityRemoteHome;
    private DualEntityLocalHome entityLocalHome;
  
    public void setSessionContext(javax.ejb.SessionContext ctx) {
     mySessionCtx = ctx;
     try {
       Context initCtx = new InitialContext();
       Boolean option = null;
       option = (Boolean)initCtx.lookup("java:comp/env/useLocal");
       useLocal = option.booleanValue();
       option = (Boolean)initCtx.lookup("java:comp/env/doTrace");
       doTrace = option.booleanValue();
       if (doTrace)
        System.out.println("DualSessionBean#setSessionContext: useLocal="
           +useLocal);
       Object homeObject = null;
       if (useLocal){
        homeObject = initCtx.lookup("java:comp/env/ejb/DualEntityLocalHome");
        entityLocalHome = (DualEntityLocalHome)homeObject;
       } else {
        homeObject = initCtx.lookup("java:comp/env/ejb/DualEntityRemoteHome");
        entityRemoteHome = (DualEntityRemoteHome)
        javax.rmi.PortableRemoteObject.narrow(homeObject,
           DualEntityRemoteHome.class);
       }
     } catch(NamingException ne){
       // process exception here...
     }
    }
  ...
  
  在 Java 代碼中,EJB 環(huán)境變量是作為無(wú)狀態(tài)會(huì)話 Bean 對(duì)象的生命周期的類變量存儲(chǔ)的。DualEntity 的本地接口和 Remote Home Interface 是通過引用訪問的;這是首選的方式,并且遵守 EJB 2.0 規(guī)范。相對(duì)地,ejb-jar.xml 包含描述這些引用的 ejb-ref 和 ejb-local-ref 元素。打開 EJB Deployment Descriptor 編輯器,然后選擇 Beans 選項(xiàng)卡。確保 JNDI 名設(shè)置為“ejb/dual/ejb/DualSessionHome”。然后轉(zhuǎn)到 References 選項(xiàng)卡,確保對(duì) DualEntity 兩個(gè)引用指向 JNDI 名“ejb/dual/ejb/DualEntityHome”。必要時(shí)可以更改這些值,然后保存所作的更改。
  
  Web 模塊
  DualWebModule03project 標(biāo)準(zhǔn)的 J2EE Web 部署描述符包含兩個(gè)重要的代碼片段。第一個(gè)指定該 Servlet 的初始參數(shù):
  
  ...
   
   useLocal
   true
   

   
   doTrace
   true
   

       
     jndiProviderURL
     iiop://localhost:2809
   

   
     jndiNameOnServer
     ejb/dual/ejb/DualSessionHome
   

   
     initialCtxFactoryClassName
     com.ibm.ejs.ns.jndi.CNInitialContextFactory
   

  -->
  ...
  
  上面的代碼在意義上類似于前面討論的 EJB 環(huán)境參數(shù)。注釋掉的 Web 部署描述符部分后面將需要用于分離容器(Separate Containers)拓?fù)洹he Web deployment descriptor section that is commented out will be needed later for the Separate Containers topology. 假如這三個(gè)附加的參數(shù)沒有注釋掉,在與此體系結(jié)構(gòu)有關(guān)的邏輯將通過該 Servlet 的 init() 方法進(jìn)行調(diào)用。(稍后將對(duì)此進(jìn)行更多的介紹。)第二個(gè)代碼片段描述了需要用來建立 Servlet 與 EJB 通信的引用:
  
  ...
  
   ejb/DualSessionRemoteHome
   Session
   dual.ejb.DualSessionRemoteHome
   dual.ejb.DualSessionRemote
   DualEJBModule02.jar#DualSession
  

  
   ejb/DualSessionLocalHome
   Session
   dual.ejb.DualSessionLocalHome
   dual.ejb.DualSessionLocal
   DualEJBModule02.jar#DualSession
  

  ...
  
  相對(duì)地,DualServlet 的源代碼包含該 Servlet 的 init() 方法中的處理邏輯。下面是與處理 EJB 引用有關(guān)的代碼片段:
  
  ...
  final String JNDI_NAME_LOCAL = "java:comp/env/ejb/DualSessionLocalHome";
  final String JNDI_NAME_REMOTE = "java:comp/env/ejb/DualSessionRemoteHome";
  ...
    if (useLocal) {
     initCtx = new InitialContext();
     homeObject = initCtx.lookup(JNDI_NAME_LOCAL);
     sessionLocalHome = (DualSessionLocalHome) homeObject;
    } else {
     homeObject = initCtx.lookup(JNDI_NAME_REMOTE);
     sessionRemoteHome =
       (DualSessionRemoteHome) PortableRemoteObject.narrow(
       homeObject,
       DualSessionRemoteHome.class);
    }
  ...
  
  (下載的源代碼中的初始參數(shù)處理邏輯實(shí)際上更復(fù)雜,因?yàn)樗€處理分離容器(Separate Containers)拓?fù)洹#┛梢栽?DualWebModule03 的 Web Deployment Descriptor 編輯器窗格中,首選選中 DualServlet 的所有設(shè)置(包括 Initialization 部分在內(nèi)),然后轉(zhuǎn)到 References 選項(xiàng)卡,選中 EJB 和 EJB Local 這兩個(gè)子選項(xiàng)卡。兩個(gè)引用應(yīng)該指向 WebSphere Bindings 部分中的JNDI 名“ejb/dual/ejb/DualSessionHome”。
  
  項(xiàng)目依靠性總結(jié)
  現(xiàn)在我們基本上完成了這些模塊,讓我們?cè)俅位仡櫼幌滤许?xiàng)目(包括 EAR 在內(nèi))的依靠性:
  
  ·DualJavaModule00 沒有依靠性。
  
  ·DualEJBModule01 沒有依靠性。
  
  ·DualEJBModule02 在“Java Build Path”、“Java JAR Dependencies”和“Project References”·設(shè)置中必須有 DualJavaModule00、DualEJBModule01 項(xiàng)目。
  
  ·DualWebModule03 在“Java Build Path”、“Project References”和“Web Library Projects”設(shè)置中必須有 DualJavaModule00、DualEJBModule02 項(xiàng)目。
  
  ·DualEARForEJBContainer 在“Project References”設(shè)置中必須有 DualJavaModule00、DualEJBModule01、DualEJBModule02;EAR 部署描述符必須有指向 EJB 模塊和 Java 模塊的引用。
  
  ·DualEARForAllInOne 必須有指向所有模

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: javhdfreejaⅴhd| 高清成人在线 | 男女隐私免费视频 | 欧美激情 在线播放 | 国产成人高清在线 | 一区二区三区欧美在线 | www国产成人免费观看视频,深夜成人网 | 中文字幕在线观看成人 | 久久老司机 | 日韩av片网站| 91羞羞 | 国产成人在线观看免费 | 日韩欧美色综合 | 操操日日 | 亚洲一区二区不卡视频 | 亚洲成人在线免费 | 一级黄色毛片免费 | 国产免费观看av | 日本网站一区二区三区 | 1024亚洲天堂 | 国产一区二区三区四区五区加勒比 | 欧美一级黄色影院 | av在线免费观看网址 | 12av毛片| 在线a亚洲视频播放在线观看 | 中文字幕观看 | 狠狠色噜噜狠狠狠米奇9999 | av电影免费播放 | 日本欧美一区二区三区在线观看 | 福利在线国产 | 日韩黄网站| 国产亚洲精品成人a | 亚洲国产精品久久久久久久久久久 | 国内精品一级毛片免费看 | 亚洲午夜一区二区三区 | 一级做a爰片性色毛片2021 | 特色一级黄色片 | va毛片| 亚洲第一成网站 | 午夜视频你懂的 | 长泽雅美av |