国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

Apusic應(yīng)用服務(wù)器和CORBA互操作

2019-11-18 16:18:20
字體:
供稿:網(wǎng)友

  CORBA(Common Object Request Broker Architecture, 公共對象請求代理體系結(jié)構(gòu))是由OMG(對象管理組織,Object Management Group)提出的應(yīng)用軟件體系結(jié)構(gòu)和對象技術(shù)規(guī)范,被廣泛的用來開發(fā)分布式系統(tǒng)。Apusic應(yīng)用服務(wù)器是以RMI-IIOP(Remote Method Invocation Internet Inter-ORB PRotocol)協(xié)議為基礎(chǔ)完成分布式的對象的遠程訪問,因此可以和CORBA對象進行互相調(diào)用。并且,Apusic應(yīng)用服務(wù)器還完整的實現(xiàn)了CORBA-EJB映射規(guī)范,能夠在多個應(yīng)用服務(wù)器實例和CORBA客戶端之間傳播事務(wù)、安全等上下文信息。CORBA和EJB的互操作規(guī)范包含以下四個方面:

  EJB接口到CORBA接口的映射;

  JNDI名字到CORBA名稱服務(wù)(CosNaming )的映射;

  EJB和CORBA之間的事務(wù)傳播;

  EJB和CORBA之間的安全傳播。

  本文將通過一個范例展示CORBA客戶端訪問部署在Apusic上的EJB。雖然這是Apusic和CORBA互操作最簡單的一個方面,并且不涉及安全和事務(wù)的傳播,但已經(jīng)顯示了Apusic在互操作方面的能力和開發(fā)的一般步驟。

  首先介紹一下服務(wù)器和客戶端的開發(fā)運行環(huán)境。服務(wù)器端的環(huán)境為:

  windows 2000 Server

  JDK1.4.2

  Apusic應(yīng)用服務(wù)器3.0

  客戶端的環(huán)境為:

  Windows 2000 Professional

  JDK1.4.2

  Apusic應(yīng)用服務(wù)器完全支持標(biāo)準(zhǔn)的EJB-CORBA映射,也就是說,EJB的home和remote也是CORBA對象。我們可以使用JDK提供的RMI編譯器rmic -idl為EJB產(chǎn)生CORBA視圖的IDL接口。用來定位EJB home接口的JNDI(java naming service)被映射成CORBA naming service,這樣,CORBA客戶端就能查找和定位home接口并象CORBA對象一樣使用它們。下圖描述了CORBA客戶端訪問EJB的一般步驟:這些步驟包括:

  開發(fā)并部署EJB;

  使用RMI編譯器rmic -idl為EJB遠程接口產(chǎn)生IDL;

  使用CORBA IDL編譯器根據(jù)客戶端的程序語言為客戶端產(chǎn)生存根(stub);

  配置EJB服務(wù)器使用CORBA名稱服務(wù)。Apusic缺省就使用CORBA名稱服務(wù)作為JNDI 服務(wù)的提供者;

  CORBA客戶端在CORBA名稱服務(wù)中查找和定位EJB;

  CORBA客戶端象訪問普通CORBA對象一樣訪問EJB;

  首先開發(fā)一個EJB模塊,編譯并部署到Apusic應(yīng)用服務(wù)器上。這個例子中的EJB非常簡單,是一個Stateless session Bean,只包含一個業(yè)務(wù)方法sayHello。

  public java.lang.String sayHello(java.lang.String name) {

  String result = "hello, " + name;

  System.out.println("invoke sayHello() : " + result);

  return result;

  }

  然后使用RMI編譯器rmic -idl為EJB遠程接口產(chǎn)生IDL:

  rmic -idl -noValueMethods

  -classpath %apusic_home%/lib/apusic.jar;../ejb/build

  -d idl samples.ejb.Hello samples.ejb.HelloHome

  理論上可以使用任何CORBA規(guī)范支持的程序語言開發(fā)CORBA客戶端。本范例展示的是Java CORBA客戶端的開發(fā)。使用JDK1.4.2提供的idlj編譯上一步得到的IDL:

  idlj -emitAll -i ./idl -i %java_home%/lib

  -fclient

  -pkgPrefix java apusic

  -pkgPrefix javax apusic

  -pkgPrefix samples apusic

  -td src

  ./idl/samples/ejb/Hello.idl

  idlj -emitAll -i ./idl -i %java_home%/lib

  -fclient

  -pkgPrefix java apusic

  -pkgPrefix javax apusic

  -pkgPrefix samples apusic

  -td src

  ./idl/samples/ejb/HelloHome.idl

  注意,我們?yōu)镮DL文件中的java、javax和samples模塊在生成代碼時增加了“apusic”作為package的前綴,這樣可以避免同Java核心API的沖突。


  JDK1.4.2提供的idlj編譯器生成的Java代碼包含了bug,必須手工更改這些錯誤。將類_Exception.java,CreateException.java和RemoveException.java中的_read和 _write方法注釋或刪掉。

  這時,我們根據(jù)IDL編譯器編譯生成的Java文件,提供客戶端實現(xiàn),主程序的代碼片斷如下:

  ORB orb = ORB.init(args, null);

  // Look up the HelloHome, create an Hello and use it.

  NamingContextExt nc =

  NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));

  HelloHome home =

  HelloHomeHelper.narrow(nc.resolve_str("ejb/CORBAClientSample"));

  Hello hello = home.create();

  String str = (String) hello.sayHello("apusic,corba client");

  System.out.println(str);

  System.exit(0);

  從上面的代碼中我們看到了CORBA客戶端如何在CORBA名稱服務(wù)中查找和定位EJB,并且如何象訪問普通CORBA對象一樣訪問EJB。

  最后我們編譯并運行客戶端。注意,我們并不需要編譯所有idlj生成的Java源文件,只要編譯包apusic.sample.ejb和我們編寫的客戶端主程序。Java編譯器會根據(jù)類的連接情況自動編譯類中引用的其他類。

  javac -d ../build -sourcepath ./ apusic/samples/ejb/*.java

  javac -d ../build -sourcepath ./ CorbaClient.java

  確認EJB已經(jīng)部署在Apusic上并且服務(wù)器正常運行。在命令行啟動CORBA客戶端,通過啟動參數(shù)告訴客戶端Apusic的位置和端口,來保證客戶端ORB的正確初始化。假定Apusic運行在本機上,端口為6888:

  java CorbaClient -ORBInitialHost localhost -ORBInitialPort 6888

  如果前面的步驟都正確完成,我們將在客戶端的屏幕上看到: hello, apusic,corba client

  這個例子只是簡單的展示了CORBA客戶端能夠訪問EJB組件的業(yè)務(wù)方法。實際上CORBA和EJB的互操作復(fù)雜的地方在于事務(wù)和安全的映射,因此要求開發(fā)者對CORBA規(guī)范和開發(fā)比較熟悉。而且Java到IDL的映射可能遇到很多問題,例如:ValueType映射,集合的使用等,這就使CORBA客戶端訪問EJB在很多情況下不能成功。即使如此,Apusic支持和CORBA的互操作,依然對我們集成已有的CORBA系統(tǒng)、開發(fā)異構(gòu)環(huán)境的分布式應(yīng)用提供了很大的幫助,只是對開發(fā)人員的技術(shù)要求比較高。

(出處:http://m.survivalescaperooms.com)



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 光山县| 宁乡县| 饶河县| 海安县| 台南县| 盘锦市| 永仁县| 印江| 报价| 林甸县| 获嘉县| 横山县| 贡觉县| 彝良县| 扶沟县| 土默特右旗| 都安| 台山市| 东港市| 股票| 商水县| 无极县| 四川省| 罗源县| 鹤峰县| 兴海县| 柳林县| 兴安盟| 伊春市| 阜阳市| 舞阳县| 肇庆市| 石屏县| 伊宁县| 巫溪县| 元氏县| 永新县| 兴山县| 天柱县| 揭东县| 西华县|