小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

JNDI有關(guān)InitialContext()的困惑

 昵稱27831725 2016-01-13

Context initial = new InitialContext();
Object objref = initial.lookup("java:comp/env/ejb/SimpleConverter");    

一般情況下,intial.lookup("")中的參數(shù)就是你的JNDI名稱。但是用的應(yīng)用服務(wù)器,是把JNDI名放到j(luò)ava:comp/env/ejb/后面的。兩種方式都沒有錯。比如:
TomCat5.0中使用的是Object objref = initial.lookup("java:comp/env/ejb/SimpleConverter"); WebLogic6.1中使用的是:
Object objref = initial.lookup("HelloHome");

InitialContext的構(gòu)造方法主要是準(zhǔn)備JNDI的訪問環(huán)境,如果不加參數(shù),那就意味著是用本地匿名訪問,也就是說,用戶角色是匿名,ctx.PROVIDER_URL是LOCALHOST
所以,對于本地測試(并且JNDI資源沒有設(shè)置安全屬性)這兩段代碼沒有區(qū)別,如果要訪問遠(yuǎn)程的JNDI資源,就必須用飽含JNDI環(huán)境參數(shù)Hashtable初始化InitialContext。

必要的環(huán)境參數(shù)如:
Context.INITIAL_CONTEXT_FACTORY//連接工廠
Context.PROVIDER_URL//訪問連接
Context.SECURITY_PRINCIPAL//安全用戶
Context.SECURITY_CREDENTIALS//用戶密碼 

EJBLocalHome->本地主接口,負(fù)責(zé)控制Bean的整個生命周期,另外,可以看作是
生成Bean引用的
“工廠“類。  

EJBLocalObject->本地組件接口,定義Bean要向客戶提供的業(yè)務(wù)方法的簽名。

本地接口是一種輕量級代理,語法更簡單(直接類型轉(zhuǎn)換,不需要narrow),

開銷更小,速度更快。規(guī)范說可以在同一JVM內(nèi)使用,我只在同一個EJB包內(nèi)用過。
EJBLocalHome+EJBLocalObject   vs   EJBHome+EJBObject:  
  前一對不是遠(yuǎn)程調(diào)用,省時省力   
Home   vs   Object:  
  前者是Factory模式,用來生成后者;后者是proxy模式,用來暴露商業(yè)邏輯

InitialContext context = new InitialContext();          
Object ref = context.lookup(JNDIname);          
accHome = (AccountHome)PortableRemoteObject.narrow(ref,AccountHome.class);      
ejbObject = accHome.create();  
  上面即是ejb實例的一個很常見的創(chuàng)建過程  
理解如下:  
   上面的創(chuàng)建過程是通過遠(yuǎn)程接口創(chuàng)建ejb實例的過程:即先通過JNDIname找到ejb本地接
口的一個實例,然后再通過本地接口的實例創(chuàng)建ejb實例,PortableRemoteObject.narrow(ref,AccountHome.class);
實際上是一個強(qiáng)制轉(zhuǎn)換,由于是遠(yuǎn)程強(qiáng)制轉(zhuǎn)換,所以要用PortableRemoteObject.narrow()方法。


// 創(chuàng)建一個JNDI naming contest
           Context initial = new InitialContext();
          
           // 從JNDI 中以MyConverter 名子來定位到對象(在發(fā)布名稱指定了JNDI名稱)
//         Object objref = initial.lookup("java:comp/env/ejb/ConverterEJB");
           Object objref = initial.lookup("MyConverter");
          
           // 通過objref 得到ConverterHome 本地接口
           ConverterHome home = (ConverterHome)PortableRemoteObject.narrow(
                   objref, ConverterHome.class);
          
           // 再由Home 接口的create 方法來創(chuàng)建一個服務(wù)器上的EJB實例
           Converter currencyConverter = home.create();
          
           // 調(diào)用EJB 中的方法
           代碼省略

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多