Java直接调用Corba服务(不依赖IDL,非EJB)

2008-11-05 | By Jinyang | Filed in: 技术相关.

有时因为Corba服务的提供提供来自不同的厂商而可能出现服务的发布不断增加进而来在在java客户端需要依据idl来写很多代码,如果使用EJB的显示来调用corba则代码量更多一些。

从我的理解,无论是Corba 、Web Service 或是其他的协议,都是基于TCP协议并进行了简化来提供易用性。因此也都应该可以直接进行调用。

以下是java直接调用Corba服务的代码片段:

/**
* 模块名称  函数名称  输入(还可以增加服务的IP、端口等参数使之更灵活)
*/

public static String callCorbaDirect(String targetServiceName,
            String funcName, Object input)

{

org.omg.CORBA.Object target = null;
 InterfaceDef intf = null;
 String serviceName = targetServiceName; 
Properties p = new Properties();
        p.put("org.omg.CORBA.ORBClass", "com.fujitsu.ObjectDirector.CORBA.ORB");
        p.put("org.omg.CORBA.ORBSingletonClass", "com.fujitsu.ObjectDirector.CORBA.SingletonORB");
        p.put("org.omg.CORBA.ORBInitialPort", "8002");// 端口
        p.put("org.omg.CORBA.ORBInitialHost", "*.*.*.*");// IP
        p.put("org.omg.CORBA.PROVIDER_URL", "iiop://localhost:8002");      // 这边应该有一些是不需要的
        ORB Orb =ORB.init(new String[] {}, p); //初始化ORB对象

 

         try {
            org.omg.CORBA.Object _tmpObj =
                objRef = Orb.resolve_initial_references("NameService");
            NamingContextExt   ncRef   =  NamingContextExtHelper.narrow(objRef);  
            System.out.println("**初始化 intf 开始:"+serviceName+"***");

            NameComponent nc = new NameComponent(serviceName, "");
            System.out.println("**初始化 NameComponent 结束:"+nc.toString()+"***");
            NameComponent NCo[] = { nc };

            // Issuing resolve method of NamingService
            target = (org.omg.CORBA.Object)(ncRef.resolve(NCo));

            org.omg.CORBA.Object intf_obj = target._get_interface_def();
            intf = InterfaceDefHelper.narrow(intf_obj);
           
            System.out.println("**初始化 intf 结束***");
            
        } catch (java.lang.Exception e) {
            e.printStackTrace();
        }

 

}

 

 以上即完成了对Corba服务的引用,直接就可以使用相应的corba服务,更为适合一些常变化,业务要求不高的服务(代码没做什么优化)。


Tags:

发表评论

电子邮件地址不会被公开。 必填项已用*标注