corba程序示例

 
不知道大家注意到没有,在JDK1.4编译idl文件时使用的 idlj -oldImplBase -fall Hello.idl
这个命令带有“-oldImplBase”参数,表示这是一个老版本的实现。而JDK1.4版本下,可以直接使用
idlj -fall Hello.idl 命令,这样idlj编译器对服务器端生成的是轻便对象适配器(POA)。
(直接再命令行敲入idlj可以得到其使用说明)
   这里我就不作详细说明了,操作基本上与上一个例子相似。
   首先在 D://CorbaSample2 目录下编写下面4个文件,然后依次进行如下操作:
      D://CorbaSample2>idlj -fall Hello.idl
      D://CorbaSample2>javac *.java HelloApp/*.java
      D://CorbaSample2>tnameserv -ORBInitialPort 1050
      D://CorbaSample2>java HelloServer -ORBInitialPort 1050
      D://CorbaSample2>java HelloClient -ORBInitialPort 1050 ( 本地调用,不需要用-ORBInitialHost参数来指定远程的IP地址)
      D://CorbaSample//Server>java HelloClient -ORBInitialHost localhost -ORBInitialPort 1050( 远程调用CORBA服务,可以将localhost替换成远程的IP地址)
( 注意 : 这里为了方便.我没有再划分客户端和服务端。进行对比,你可以发现这次idlj编译器生成的文件与上例中生成的文件有和不同。)    
                  
Hello.idl
module HelloApp{
    interface Hello    {
        string sayHello(in string message);    
};
};
  
HelloImpl.java
/* * @author javamxj (CSDN Blog) 创建日期 2004-12-27 */
import org.omg.CORBA.*;
import HelloApp.HelloPOA;
public class HelloImpl extends HelloPOA {
    private ORB orb;
    public void setORB(ORB orb_val) {
        orb = orb_val;
    }
    /* 实现接口声明方法sayHello */
    public String sayHello(String message) {
        System.out.println(" 我在CORBA的服务器端,客户端正在调用/'sayHello/'方法。 ");
        System.out.println("Hello  " + message);
        return message;
    }
}
HelloServer.java
/* * @author javamxj (CSDN Blog) 创建日期 2004-12-27 */
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
public class HelloServer {
    public static void main(String args[]) {
        try {
            /* 创建和初始化 ORB */
            ORB orb = ORB.init(args, null);
            /* 获取对RootPOA的引用,启动POAManager */
            POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
            rootpoa.the_POAManager().activate();
            /* 创建一个实例并将其向 ORB 注册 */
            HelloImpl h = new HelloImpl();
            h.setORB(orb);
            System.out.println(" 将实例注册到ORB ");
            /* 获取对服务端的对象引用 */
            org.omg.CORBA.Object ref = rootpoa.servant_to_reference(h);
            Hello href = HelloHelper.narrow(ref);
            /* 从名称服务中获取根元素名称上下文 */
            org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
            NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
            /* 在Hello名称下注册新对象 */
            String name = "Hello";
            NameComponent path[] = ncRef.to_name(name);
            ncRef.rebind(path, href);
            /* 等待客户端的调用。 */
            orb.run();
            System.out.println(" 等待CORBA客户端调用...");
        }
        catch (Exception e) {
            System.err.println("ERROR: " + e);
            e.printStackTrace(System.out);
        }
        System.out.println("HelloServer Exiting ...");
    }
}
 
HelloClient.java
/* * @author javamxj (CSDN Blog) 创建日期 2004-12-27 */
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CORBA.*;
public class HelloClient {
    public static void main(String args[]) {
        try {
            /* 创建和初始化 ORB */
            ORB orb = ORB.init(args, null);
            /* 获取根命名上下文 */
            org.omg.CORBA.Object objRef = orb                    .resolve_initial_references("NameService");
            NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
            /* 在名称上下文中查找Hello对象,获取对它的引用。 */
            String name = "Hello";
            Hello h = HelloHelper.narrow(ncRef.resolve_str(name));
            System.out.println(" 我在客户端,开始调用CORBA服务器端的/'sayHello/'方法");
            System.out.println(" 欢迎,  " + h.sayHello("javamxj blog"));
        } catch (Exception e) {
            System.out.println(" 错误 : " + e);
            e.printStackTrace(System.out);
        }
    }
}
 

 



==============JACORB2.3,20140307===========

在2.3版本下编译IDL语法有变

变成:idl *,或者idl hello.idl


同时为了易于管理,设置环境变量时,如下

JACORB_HOME=E:\Java\JacORB2.3
CLASSPATH=.;%JACORB_HOME%/lib/antlr-2.7.2.jar;%JACORB_HOME%/lib/avalon-framework-4.1.5.jar;%JACORB_HOME%/lib/concurrent-1.3.2.jar;%JACORB_HOME%/lib/idl.jar;%JACORB_HOME%/lib/jacorb.jar;%JACORB_HOME%/lib/logkit-1.2.jar;%JACORB_HOME%/lib/wrapper-3.0.3.jar;%JACORB_HOME%/classes;


=====END=====

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值