1.配制环境JDK环境。
2.编写编译IDL接口。
3.编写编译服务端程序。
4.编写编译客户端程序。
5.运行测试。
1 编写IDL接口HelloWorld.idl:
module sample{
interface HelloWorld{
string sayHello();
};
};
第一步建一个txt文档然后更改后缀名即可!!!刚开始做的时候卡在这里了 不知道在哪里编写idl接口!!!!
说明:CORBA处理字符串有:String和wstring两种类型,string类型主要用于处理ASCII类型的字符串,wstring用于处理多字节的字符串,例如:中文。可以把上面代码里String 改成Wstring,要不然到最后处理中文会报错!!!!
这里不改的话在下面服务端里加上转码的代码也一样的。
2.编译IDL接口:X:\corba>idlj –fall HelloWorld.idl
编译结果生成sample包,生成下述文件
_HelloWorldStub.java
HelloWorld.java
HelloWorldHelper.java
HelloWorldHolder.java
HelloWorldOperations.java
HelloWorldPOA.java
这个过程是在cmd窗口里运行的,编译的时候要定位到你建idl文件的地方。如果在桌面则是cd Desktop\这样子定位到文件所在位置!!基本功不扎实的要注意!
3 编写并编译服务端程序:HelloWorldServer.java
import sample.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.CORBA.portable.*;
import org.omg.PortableServer.*;
class HelloWorldServant extends HelloWorldPOA {
public String sayHello() {
return "\nHelloWorld南乔\n";
}
}
public class HelloWorldServer {
public static void main(String args[]) {
try {
//Initialize CORBA
ORB orb = ORB.init(args, null);
//接下来要做的事转码处理
java.util.Properties p = new java.util.Properties();
p.setProperty("com.sun.CORBA.codeset.charsets", "0x05010001, 0x00010109"); // UTF-8, UTF-16
p.setProperty("com.sun.CORBA.codeset.wcharsets", "0x00010109, 0x05010001"); // UTF-16, UTF-8
orb = org.omg.CORBA_2_3.ORB.init(args, p);
org.omg.CORBA.Object poaobj = orb.resolve_initial_references(
"RootPOA");
org.omg.PortableServer.POA rootPOA = org.omg.PortableServer.
POAHelper.narrow(poaobj);
org.omg.PortableServer.POAManager manager = rootPOA.the_POAManager();
//New Servant
HelloWorldServant objRef = new HelloWorldServant();
HelloWorld obj = objRef._this(orb);
//Binding
NamingContext ncRef = NamingContextHelper.narrow(
orb.resolve_initial_references("NameService"));
NameComponent nc = new NameComponent("HelloWorld", "");
NameComponent path[] = {nc};
ncRef.rebind(path, obj);
//Run
manager.activate();
System.out.println("HelloWorld is running!");
orb.run();
} catch (Exception e) {
System.err.println("ERROR: " + e);
e.printStackTrace(System.out);
}
}
}
注意try里第二行那里 那里就是处理CORBA中无法传值中文的转码操作!!!没有这个你传入中文字符串会报错!!
4 编写并编译客户端程序: HelloWorldClient.java
import sample.*;
import org.omg.CosNaming.*;
import org.omg.CORBA.*;
public class HelloWorldClient {
public static void main(String args[]) {
try{
ORB orb = ORB.init(args, null);
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
NameComponent nc = new NameComponent("Hello","");
NameComponent path[] = {nc};
HelloWorld helloWorld = HelloWorldHelper.narrow(ncRef.resolve(path));
String hello = helloWorld.sayHello();
System.out.println(hello);
} catch (Exception e) {
System.out.println("ERROR : " + e) ;
e.printStackTrace(System.out);
}
}
}
5 运行
启动名字服务器:X:\corba >tnameserv -ORBInitialPort 1050
启动服务端程序:X:\corba >java HelloWorldServer -ORBInitialPort 1050
输出:HelloWorld is running
启动客户端程序:X:\corba >java HelloWorldClient -ORBInitialPort 1050
输出:Hello World南乔
6总结:
用多了编译器然后在cmd中操作就很不熟练!!!!切记!!我们编辑的是java文件!!!在cmd中一定要用javac+文件名(有.java后缀!!!)编译出来class文件!!!!然后在java +class文件名(没有后缀!!!)才能执行。
另外还要注意的就是第五步里运行服务器、服务端程序和客户端程序要启动三个cmd窗口。
ok 以上就是一个不会用cmd窗口的菜鸡自己瞎琢磨各种百度三个小时完成的一次上机作业。。。。。。