亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用java:comp定位EJB

2019-11-18 12:38:10
字體:
來源:轉載
供稿:網友

  假如您把同一個 J2EE 應用程序部署到多個應用程序服務器上,而這些應用程序服務器共享一個 JNDI 名稱空間,那么,由于名稱空間中的 JNDI 名稱必須是唯一的,這樣做將會出現問題。部署到 WebSphere application Server 環境中的 J2EE 應用程序,應該使用 java:comp/env 環境命名上下文(environment naming context(ENC))來查找 EJB,而不是使用 JNDI 名稱來查找。有了這個命名上下文,就可以避免發生沖突,應用程序的可移植性也將好得多。
  開發和部署按照 EJB 1.0 規范級別編寫的 EJB,困難之一是處理 EJB home 的 JNDI 名稱。例如,有很多代碼寫成像下面的代碼片段(取自會話 bean)那樣,試圖查找 com.ibm.wsc.Bean2 EJB 的 home:
  
  Context myInitCtx = new InitialContext();
  Object result = myInitCtx.lookup("com/ibm/wsc/Bean2Home");
  com.ibm.wsc.Bean2Home theBean2Home =(com.ibm.wsc.Bean2Home)
  javax.rmi.PortableRemote.narrow(result,com.ibm.wsc.Bean2Home.class);
  這一技術在Java開發環境(Java development tooling,JDT)中能工作得很好,在應用程序的部署階段似乎也不出什么問題。只要看一下上面的代碼,就可以確定在名稱空間中賦給Bean2Home的JNDI名稱,因為這個名稱就是EJB Home接口名稱。編碼約定就跟 EJB 類名被用來構造定位 home 的代碼那樣相當簡單。
  當把“Bean2”部署到使用同一個(共享的) JNDI 名稱空間的兩個不同服務器中時,問題就冒出來了。
  例如,有人可能有兩臺服務器,WSQASV 和 WSFXSV,它們共享同一個名稱空間(即 LDAP 或 CosNaming 服務器),并且他想把同一個 J2EE 應用程序(即 .ear 文件)部署到這兩臺服務器中。由于每臺服務器中的會話 bean 都必須查找/使用 Bean2Home 的正確實例,所以,這就出現了一個問題。要避免這個問題,必須做兩件事:
  安裝在服務器 WSQASRV 中的 Bean2Home 的 JNDI 名稱必須與安裝在服務器 WSFXSV 中的 Bean2Home 的 JNDI 名稱不同。這兩個 JNDI 名稱必須不同,EJB home 的 lookup( ) 才能把引用(即 IOR)返回給安裝了該 EJB 的正確的服務器。
  引用 Bean2Home 的客戶機(即會話 bean)必須根據部署了該應用程序的服務器顯式地指定 Bean2Home 的 JNDI 名稱。
  EJB 的命名模式已經開發,以硬編碼的方式把 JNDI 名稱編寫到 java源代碼中是問題的真正起因。我們需要這樣一種能力,不必根據部署了 EJB 的服務器修改代碼就能夠提供特定于運行時的信息。結果是創建并實現一個模式,它利用 ResourceBundle 或 PRoperty 文件提供運行時信息,如以下代碼片段所示:
  ResourceBundle myRB = ResourceBundle.getBundle("ServerProps");
  String myBean2HomeJNDIName = myRB.getString("Bean2HomeName")
  Context myInitCtx = new InitialContext();
  Object result = myInitCtx.lookup(myBean2HomeJNDIName);
  com.ibm.wsc.Bean2Home theBean2Home =(com.ibm.wsc.Bean2Home)
  javax.rmi.PortableRemote.narrow(result,com.ibm.wsc.Bean2Home.class);
  這一技術的全部要求就是為 WSQASV 服務器創建一個唯一的名為 ServerProps.properties 的 .properties 文件,WSQASV 服務器的這個文件包含有類似下面的內容:
  Bean2HomeName=WSQASV/com/ibm/wsc/Bean2Home
  WSFXSV 的 ServerProps.properties 文件包含有類似這樣的內容:
  Bean2HomeName=WSFXSV/com/ibm/wsc/Bean2Home
  現在,我們有了一個模式,不管將 J2EE 應用程序部署到兩臺服務器中的哪一臺,這個模式都不要求在部署之前對 java 代碼作絲毫更改,EJB home 的命名約定得到了一定程度的保護,但受服務器限定。這個“服務器名”限定使得在任一臺服務器中都可以正確定位 Bean2Home。在部署階段,部署者只需要知道 .properties 文件的內容,以將正確的 JNDI 名指定給 EJB。
  采用這種技術,只有一個問題還留待部署者去解決:如何治理特定于服務器的 .properties 文件。讓人左右為難的是,.properties 文件既是特定于應用程序的(即應用程序中所包含的特定 EJB home 正在被查找),又是特定于服務器的(即 EJB home 的 JNDI 名稱取決于安裝了該應用程序的服務器)。問題是:ServerProps.properties 文件是在 J2EE 應用程序包(即 .ear 文件)中呢,還是在服務器的類路徑中?把 .properties 文件放到 .ear 文件意味著 .ear 文件在部署到上述兩臺服務器之前必須先作修改。人們不希望這樣做,原因與人們不希望修改 java 源代碼的原因如出一轍。不過,人們倒是很希望有一個各個部件的單個包,而不必為特定于應用程序的文件具體配置服務器。
  EJB 1.1 解決方案
  幸運的是,EJB 1.1 規范引入了 JNDI 增強功能,非凡是環境命名上下文(ENC)以及關于如何“找到” EJB、資源和特定于應用程序的環境變量的強烈推薦的做法。要了解具體信息,請參閱 EJB 1.1 規范的第 14 章和 J2EE 1.2 規范的第 5 章。以下代碼片段使用所推薦的 java:comp/env 構造來查找 Bean2Home:
  Context myInitCtx = new InitialContext();
  Object result = myInitCtx.lookup("java:comp/env/ejb/Bean2Home");
  com.ibm.wsc.Bean2Home theBean2Home =(com.ibm.wsc.Bean2Home)
  javax.rmi.PortableRemote.narrow(result,com.ibm.wsc.Bean2Home.class);
  如何把“java:comp/env/ejb/Bean2Home”字符串和駐留在某臺特定服務器中的 Bean2Home 的 JNDI 名稱關聯起來,這項工作留給應用程序的裝配者和部署者去做。應用程序開發者既不知道也不關心 Bean2Home 的 JNDI 名稱。
  非凡地,裝配者必須在引用 EJB 的 ejb-jar.xml 文件(或者是引用 servlet 的 web.xml 文件)中包含一條帶有以下內容的子句:
  
  ejb/Bean2Home
  Entity
  com.ibm.wsc.Bean2Home
  com.ibm.wsc.Bean2
  Bean2
  

  .xml 文件的內容通常由開發工具(即 WebSphere Studio Application Developer)或裝配工具(即應用程序裝配工具(Application Assembly tool(AAT)))構建和驗證,不要求手工構造。請注重,沒有給出 JNDI 名稱,只有一條聲明,表明這個 EJB(或 servlet)將查找一個給定類型的 EJB home,并且該 EJB home 駐留在這個 J2EE 應用程序包即 .ear 文件中。(假如省略了 ejb-link 描述符,servlet 或 EJB 就可以查找并使用駐留在 JNDI 名稱空間中具有這一 bean 類型的任何服務器中所駐留的 Bean2Home。)實際上,應用程序裝配者并不知道也不關心 Bean2Home 的 JNDI 名稱。JNDI 名稱留給部署者指定,其限制條件是,不論 J2EE 應用程序被部署到什么服務器中,Bean2Home 都必須駐留在該 J2EE 應用程序中。
  在把應用程序安裝/部署到某一特定服務器(例如,在我們的示例中,是 WSQAEV 或 WSFXSV 服務器)中時,部署者必須做兩件事:
  為 Bean2Home 創建一個 JNDI 名稱,它指向被安裝到“這臺”服務器的 Bean2Home。JNDI 名稱在名稱空間中必須是唯一的,這樣才能夠定位到駐留在“這臺”服務器中的所期望的Bean2Home,而不至于無意中使用了駐留在別的服務器中的 Bean2Home。
  把 EJB 引用解析為正確的 Bean2Home JNDI 名稱。使用 ejb-link 描述符,這就迫使引用被解析為“這臺”服務器中的 Bean2Home JNDI 名稱。請注重,假如省略了 ejb-link,那么 ejb-ref 就有可能被解析為別的服務器中的另一個 Bean2Home 部署的 JNDI 名稱。
  要點是:應用程序(連帶應用程序開發者)不需要知道在公共名稱空間中注冊的這臺或任何其它服務器中所駐留的任何組件的實際 JNDI 名稱。
  應用程序可能不需要使用副文件就可以使用 EJB 的正確的 JNDI 名稱,這取決部署組件的服務器。
  不需要修改 J2EE 包(即 .ear 文件)中的文件或部署描述符。一個 .ear文件不經修改、不加調整就可以部署到任何服務器中。
  這一技術大大增強了 EJB 的可移植性。很輕易就可以部署應用程序,而不必為實際的 JNDI 名稱勞心費神??梢詮囊粋€ J2EE 應用程序抽取出 EJB,然后很輕易就可以將它集成到另一個 J2EE 應用程序中。
  剩下的問題是:部署者應選擇什么樣的 JNDI 名稱?要求是:
  在部署 J2EE 應用程序的服務器的名稱空間中,組件的 JNDI 名稱應是唯一的。
  命名模式假如不是自治理的,那就應該是易于治理的。
  用于 WebSphere for z/OS 的 Systems Management Administration 工具答應部署者指定特選的 JNDI 名稱,假如部署者選擇這樣做,或者應用程序要求這樣做的話。當不使用 java:comp/env 技術進行 lookup( ) 的時候就會出現這種情況。更為重要的是,該治理工具答應部署者指定一個系統生成的名稱,這樣生成的名稱必定是唯一的。名稱的格式如下:
  /////   
  因此,假如 Bean2 駐留在 EntityBeans.jar 文件中,并且所有的 J2EE 組件都被打包到 BeanSalad.ear 中,.ear 文件將被部署到 WSFXSV 服務器中,這臺服務器又在與 WSCPLEX sysplex 相關聯的 WebSphere 節點/群集上,那么,所生成的名稱將是:
  WSCPLEX/WSFXSV/BeanSalad/EntityBeans/Bean2/com.ibm.wsc.Bean2Home.class
  這個名稱唯一地標識了駐留在位于節點 WSCPLEX 的 WSFXSV 服務器中的 Bean2Home,對比于駐留在位于這個節點的 WSQASV 服務器中的 Bean2Home。
  通過使用這一技術,我們實現了自治理的 JNDI 名稱唯一性,這不為應用程序所知,并且應用程序的可移植性達

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜欧美不卡精品aaaaa| 成人性生交大片免费看小说| 日本一欧美一欧美一亚洲视频| 欧美成人精品一区二区三区| 在线午夜精品自拍| 91色中文字幕| 亚洲第五色综合网| 日韩欧美国产骚| 国产午夜精品全部视频在线播放| 精品美女永久免费视频| 97人人模人人爽人人喊中文字| 亚洲一区二区三区毛片| 久热99视频在线观看| 97在线视频免费看| 黑人巨大精品欧美一区二区| 久久久久久久av| 成人免费观看网址| 日韩欧美一区二区三区久久| 伊人精品在线观看| 国产精品丝袜一区二区三区| 日韩精品在线免费观看| 日韩毛片在线看| 日韩一二三在线视频播| 久久久www成人免费精品张筱雨| 国产婷婷97碰碰久久人人蜜臀| 91香蕉电影院| 日韩精品丝袜在线| 欧美日本精品在线| 欧美国产在线电影| 国产91精品不卡视频| 91精品国产99| 久久久午夜视频| 中文字幕欧美日韩| 尤物yw午夜国产精品视频明星| 久久亚洲综合国产精品99麻豆精品福利| 国产z一区二区三区| 亚洲精品免费网站| 亚洲免费人成在线视频观看| 国产精品综合不卡av| 久久影院免费观看| 亚洲国产精品999| 久久影视电视剧免费网站| 成人激情视频在线播放| 在线性视频日韩欧美| 国产精品嫩草影院久久久| 亚洲一区二区三区成人在线视频精品| 2019最新中文字幕| 久久精品色欧美aⅴ一区二区| 一区二区三区日韩在线| 成人精品一区二区三区| 欧美激情精品久久久久久免费印度| 色老头一区二区三区在线观看| 国产一区二区日韩| 日韩精品中文字幕在线播放| 日韩精品一二三四区| 久久精品这里热有精品| 国产欧美亚洲精品| 国产精品三级久久久久久电影| 欧美成人手机在线| 成人黄色激情网| 欧美剧在线观看| 欧美一区二区三区图| 日韩有码片在线观看| 中文字幕一区日韩电影| 中文一区二区视频| 国产视频久久久久久久| 国产亚洲欧美另类中文| 欧美激情精品久久久久久黑人| 日韩av电影免费观看高清| 欧美日韩国产色视频| 欧洲成人午夜免费大片| 久久成人人人人精品欧| 亚洲va欧美va在线观看| 欧美性猛交xxxx乱大交3| 在线a欧美视频| 国产精品久久久久久久久久久久久久| 亚洲xxxxx| 一区二区三区视频观看| 91精品国产免费久久久久久| 日韩暖暖在线视频| 亚洲综合视频1区| 这里只有精品在线播放| 亚洲精品国产精品国自产观看浪潮| 日韩免费不卡av| 一区二区三区www| 亚洲成人动漫在线播放| 黑人精品xxx一区| 亚洲香蕉伊综合在人在线视看| 97视频在线观看免费| 国产v综合ⅴ日韩v欧美大片| 国产成人精品最新| 欧美日韩中文在线| 国产亚洲欧美日韩一区二区| 亚洲福利影片在线| 91精品久久久久久久久中文字幕| 久久精品中文字幕免费mv| 国产精品福利网站| 亚洲男人的天堂在线播放| 精品国产欧美一区二区五十路| 日韩中文字幕在线视频| 久久久久久久久久久网站| 国产精品美女无圣光视频| 亚洲久久久久久久久久久| 国产精品aaa| 久久久噜噜噜久噜久久| 精品视频一区在线视频| 亚洲国产精品成人va在线观看| 日韩精品在线第一页| 国产性色av一区二区| 久久久久久亚洲精品中文字幕| 在线看欧美日韩| 欧美诱惑福利视频| 中国china体内裑精亚洲片| 亚洲国产精品成人精品| 国产精品mp4| 福利视频第一区| 国产精品老女人视频| 国产日韩欧美在线播放| 中文字幕日韩av电影| 久久国产精品亚洲| 中文字幕日韩在线观看| 成人国产精品日本在线| 久久91亚洲人成电影网站| 国产91久久婷婷一区二区| 国产欧美精品va在线观看| 中文字幕亚洲欧美日韩在线不卡| 久久久久久久一区二区| 中文字幕亚洲欧美在线| 少妇精69xxtheporn| 国模视频一区二区三区| 久久久日本电影| 97在线视频一区| 久久这里有精品| 日韩免费中文字幕| 国内精品久久影院| 久久伊人精品视频| 成人精品久久av网站| 97国产在线视频| 亚洲欧美日韩第一区| 成人信息集中地欧美| 日韩亚洲第一页| 欧美极品在线播放| 国产精品免费观看在线| 国产精品xxx视频| 国产乱肥老妇国产一区二| 国产精品福利小视频| 亚洲欧美在线磁力| 久久香蕉国产线看观看av| 日韩a**中文字幕| 亚洲夜晚福利在线观看| 欧美性猛交xxxx乱大交| 伊人久久久久久久久久久| 欧美韩日一区二区| 久久精品欧美视频| 成人在线免费观看视视频| 国产欧美精品xxxx另类| 国产91热爆ts人妖在线| 日韩免费视频在线观看| 欧美电影在线观看完整版| 亚洲精品成人久久| 精品人伦一区二区三区蜜桃免费| 欧美野外猛男的大粗鳮| 欧美激情喷水视频| 久久精品福利视频|