JAVA版CORBA程序——HelloWorld

1.配制环境JDK环境。

2.编写编译IDL接口。

3.编写编译服务端程序。

4.编写编译客户端程序。

5.运行测试。

1 编写IDL接口HelloWorld.idl

module sample{

interface HelloWorld{

string sayHello();   

}; 

};

第一步建一个txt文档然后更改后缀名即可!!!刚开始做的时候卡在这里了 不知道在哪里编写idl接口!!!!

说明:CORBA处理字符串有:Stringwstring两种类型,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窗口的菜鸡自己瞎琢磨各种百度三个小时完成的一次上机作业。。。。。。

你可能感兴趣的:(JAVA版CORBA程序——HelloWorld)