新公司要求用corba做电信项目,汗,以前偶是写J2EE的,框架用多了,忽然转做corba,觉得很不习惯,压力也很大。网上找了很多,但都没有合适的corba程序,自己用了两天才写了第一个hello world程序,不知道是自己的学习能力下降,还是corba的学习曲线太陡峭。。。以下就是我写的第一个corba程序,好了,不废话了,转入正题:
关于corba的介绍我就不多说了,网上那么多专家给的概念,自己google一下,随便点个了解下就行了。
我们公司用的IDL编译器是Orbacus,首先写一个IDL文件,文件名为:hello.idl以下是源码:
//IDL
module test{
interface Hello{
void sayHello();
};
};
将IDL文件copy到编译器的bin目录下,然后打开MS-DOS窗口,转换到你的编译器的bin目录下输入命令jidl,如图:
jidl命令的参数最好输入文件全名(包括后缀),这时候会在该目录下生成一个test目录,在test目录下创建一个Hello_Impl.java文件,代码如下:
package test;
public class Hello_impl extends HelloPOA {
public void sayHello(){
System.out.println("Hello World");
}
}
它实现了sayHello()方法。
接着创建一个工具类,文件名为ORBImpl.java(注意包目录结构哦),代码如下:
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;
}
}
然后创建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();
}
}
终于到了最后一步了,创建客户端文件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窗口,转换到你的编译器的bin目录下,输入命令javac test/*.java编译所有test目录下的文件:
接着输入命令java test.Server启动服务器:
重新开启一个窗口,输入java test.Client启动客户端调用服务器方法:
接着会在服务器的窗口打印出结果:
在编译运行的时候,记得使用JDK1.3版本的那样可以直接设置classpath,如果是1.4版本,记得要使用java -Xbootclasspath/p:命令将OB.jar包含进来(偶就是用的1.4的。。。)
这篇文章希望能对你有用哦~
posted on 2007-07-27 12:51
枫中玎玲 阅读(970)
评论(3) 编辑 收藏 所属分类:
Corba