新公司要求用corba做電信項目,汗,以前偶是寫J2EE的,框架用多了,忽然轉(zhuǎn)做corba,覺得很不習慣,壓力也很大。網(wǎng)上找了很多,但都沒有合適的corba程序,自己用了兩天才寫了第一個hello world程序,不知道是自己的學習能力下降,還是corba的學習曲線太陡峭。。。以下就是我寫的第一個corba程序,好了,不廢話了,轉(zhuǎn)入正題:
關(guān)于corba的介紹我就不多說了,網(wǎng)上那么多專家給的概念,自己google一下,隨便點個了解下就行了。
我們公司用的IDL編譯器是Orbacus,首先寫一個IDL文件,文件名為:hello.idl以下是源碼:
//IDL
module test{
interface Hello{
void sayHello();
};
};
將IDL文件copy到編譯器的bin目錄下,然后打開MS-DOS窗口,轉(zhuǎn)換到你的編譯器的bin目錄下輸入命令jidl,如圖:
jidl命令的參數(shù)最好輸入文件全名(包括后綴),這時候會在該目錄下生成一個test目錄,在test目錄下創(chuàng)建一個Hello_Impl.java文件,代碼如下:
package test;
public class Hello_impl extends HelloPOA {
public void sayHello(){
System.out.println("Hello World");
}
}
它實現(xiàn)了sayHello()方法。
接著創(chuàng)建一個工具類,文件名為ORBImpl.java(注意包目錄結(jié)構(gòu)哦),代碼如下:
package test.common;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;
import org.omg.CORBA.ORB;
import org.omg.CORBA.Object;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import org.omg.PortableServer.POAManager;
import test.Hello;
import test.HelloHelper;
public class ORBImpl {
private ORB orb;
private POA poaRoot;
private POAManager poaManager;
private Object poaObj;
public ORBImpl(){
orb = null;
poaRoot = null;
poaManager = null;
poaObj = null;
}
public void initEnv(String[]args){
Properties props = System.getProperties();
props.put("org.omg.CORBA.ORBClass","com.ooc.CORBA.ORB");
props.put("org.omg.CORBA.ORBSingletonClass","com.ooc.CORBA.ORBSingleton");
try{
orb = ORB.init(args,props);
}catch(Exception ex){
ex.printStackTrace();
}
}
public void initServer(){
try{
poaObj = orb.resolve_initial_references("RootPOA");
poaRoot = POAHelper.narrow(poaObj);
poaManager = poaRoot.the_POAManager();
}catch(Exception ex){
ex.printStackTrace();
}
}
public void serverGo(Hello hello){
try{
String fileName = "Hello.ref";
String strClient = orb.object_to_string(hello);
PrintWriter out = new PrintWriter(new FileOutputStream(fileName));
out.print(strClient);
out.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
public void clientGo(){
Object clientObj = null;
try{
String fileName = "Hello.ref";
BufferedReader in = new BufferedReader(new FileReader(fileName));
String strClient = in.readLine();
clientObj = orb.string_to_object(strClient);
}catch(IOException ex){
ex.printStackTrace();
}
Hello hello = HelloHelper.narrow(clientObj);
hello.sayHello();
}
public void destroy(){
if(orb != null){
try{
orb.destroy();
}catch(Exception ex){
ex.printStackTrace();
System.exit(0);
}
}
}
public void active(){
try{
poaManager.activate();
orb.run();
}catch(Exception ex){
ex.printStackTrace();
System.exit(0);
}
}
public ORB getORBRoot(){
return this.orb;
}
}
然后創(chuàng)建Server.java文件,代碼如下:
package test;
import test.common.ORBImpl;
public class Server {
public static void main(String[]args){
ORBImpl server = new ORBImpl();
server.initEnv(args);
server.initServer();
Hello_impl helloImpl = new Hello_impl();
Hello hello = helloImpl._this(server.getORBRoot());
server.serverGo(hello);
server.active();
server.destroy();
}
}
終于到了最后一步了,創(chuàng)建客戶端文件Client.java,代碼如下:
package test;
import test.common.ORBImpl;
public class Client {
public static void main(String[]args){
ORBImpl client = new ORBImpl();
client.initEnv(args);
client.clientGo();
client.destroy();
}
}
打開MS-DOS窗口,轉(zhuǎn)換到你的編譯器的bin目錄下,輸入命令javac test/*.java編譯所有test目錄下的文件:

接著輸入命令java test.Server啟動服務(wù)器:

重新開啟一個窗口,輸入java test.Client啟動客戶端調(diào)用服務(wù)器方法:

接著會在服務(wù)器的窗口打印出結(jié)果:

在編譯運行的時候,記得使用JDK1.3版本的那樣可以直接設(shè)置classpath,如果是1.4版本,記得要使用java -Xbootclasspath/p:命令將OB.jar包含進來(偶就是用的1.4的。。。)
這篇文章希望能對你有用哦~
posted on 2007-07-27 12:51
楓中玎玲 閱讀(982)
評論(3) 編輯 收藏 所屬分類:
Corba