歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

使用Java進行CORBA編程-JacORB-入門

http://www.jacorb.org/download.html下載JacORB3.0Beta。
下面開發一個簡單的應用。

首先需要定義IDL文件。例如:

[cpp]  
  1.   module learning {  
  2.   module corba {  
  3.         module bookstore {  
  4.             struct Author {  
  5.                 string firstName;  
  6.                 string lastName;  
  7.             };  
  8.               
  9.             struct Book {  
  10.                 string name;  
  11.                 double price;  
  12.             };  
  13.             typedef sequence<Book> BookList;  
  14.               
  15.             struct SearchCondition {  
  16.                 string name;  
  17.                 any value;  
  18.             };  
  19.               
  20.             exception NotFound{};  
  21.               
  22.             interface BookQuery {  
  23.                 void search(in SearchCondition condition, out BookList bookList)  
  24.                     raises (NotFound);  
  25.             };  
  26.               
  27.             interface ClientCallback;  
  28.             interface CallbackServer {  
  29.                 void registerCallback(in ClientCallback cc);  
  30.                 void callback_notifyMsg(in string msg);  
  31.             };  
  32.               
  33.             interface ClientCallback {  
  34.                 void notifyMsg(in string msg);  
  35.             };  
  36.         };  
  37.     };  
  38. };   

在Eclipse裡面,可以通過下面的XML配置執行ANT Build編譯IDL文件。

[html]
  1. <project name="common-demo" default="idl">  
  2.     <property name="idl.dir"        value="." />  
  3.     <property name="gen.dir"        value="../../.." />  
  4.     <property name="resources.dir"  value="resources" />  
  5.           
  6.     <property name="jacorb.dir"     value="../../../../../jacorb-3.0beta1" />  
  7.   
  8.     <path id="jacorb.classpath" >  
  9.         <fileset dir="${jacorb.dir}/lib">  
  10.             <include name="*.jar" />  
  11.         </fileset>  
  12.     </path>  
  13.   
  14.     <target name="idl.taskdef">  
  15.         <taskdef name="jacidl" classname="org.jacorb.idl.JacIDL" classpathref="jacorb.classpath"/>  
  16.     </target>  
  17.   
  18.     <target name="idl" depends="idl.taskdef">  
  19.         <jacidl srcdir="${idl.dir}" destdir="${gen.dir}" includes="*.idl" helpercompat="jacorb"  
  20.            includepath="${jacorb.dir}/idl/omg" />  
  21.     </target>  
  22. </project>  

對於struct,生成3個文件。以Author為例,
Author.java
AuthorHelper.java  -> 用來從Any對象中extract出Author對象/向Any對象中insert Author對象
AuthorHolder.java  -> 用於輸出參數

如果定義了sequence,還會得到*ListHelper.java和*ListHolder.java文件。

對於interface,除了上面的3個文件,還生成3個文件。以BookQuery為例:
BookQueryOperations.java ->定義我們的interface
BookQueryPOA.java ->BookQuery服務的提供者(Servant),我們的代碼需要繼承這個類
BookQueryPOATie.java ->如果我們的服務實現類沒有沒有繼承BookQueryPOA類,直接實現BookQueryOperations接口,需要通過BookQueryPOATie來轉換為一個Servant對象。

接下來可以分別進行Server端和Client端的編碼。

Server
Server端的一般步驟如下:
1)新建1個類,繼承自*POA類。在其中實現所有提供的接口。
接下來在Server端的main方法中,
2)調用ORB.init()這個靜態方法,初始化ORB並得到一個ORB對象。
3)在ORB對象上調用resolve_initial_references("RootPOA"))方法,獲得root POA,然後激活它。或者創建1個新的POA,激活這個POA。
4) 在ORB對象上調用resolve_initial_references("NameService"))方法,獲得NameService的引用。
5)創建我們的服務提供對象,向NameService注冊,注冊時提供一個服務名。
6)調用ORB對象的run方法。

Client
Client端的一般步驟如下:
在Client端的main方法中,
1)調用ORB.init()這個靜態方法,初始化ORB並得到一個ORB對象。
2) 在ORB對象上調用resolve_initial_references("NameService"))方法,獲得NameService的引用。
3)提供服務名,向NameService查詢並得到服務提供者的代理。
4)調用服務。

Any對象
對於Any對象,首先使用ORB對象的create_any方法生成1個Any對象,然後可以使用*Helper類的extract/insert方法抽取/插入一個對象。
可以使用Any對象的type方法獲得這個Any對象中存放的對象的類型。

Copyright © Linux教程網 All Rights Reserved