faint,,就根本没有人了解这个问题。。
我已经解决了,
随便谁进来我就给他100分,要不然结不了贴

解决方案 »

  1.   

    我现在遇到的问题是,如何通过C++调用ejb,估计也是通过corab,但是我不知道如何做??请指教
      

  2.   

    C++调用ejb
    我没用过。
    不过用corba的话比较简单。
      

  3.   

    请问楼主是用的哪个厂商的orb,我也正在做一个这样项目,用的orb是orbacus,也是服务器端用C++,客户端用java,我都还不知道具体要怎么连呢?楼主能不能给一段简单的示例代码啊?
      

  4.   

    C++的ORB实现是omniORB4.0,我的C++ corba server 是跑在linux上的。
    omniORB也有windows的版本。
    java的ORB用的是openORB
    实现:
    /******* test.idl ********/interface TransferString {
    string echoString(in string buffer);
    };/******* C++ server *******/
    //省略/******* Java Client *******/import java.lang.System;
    import org.omg.CORBA.*;
    import org.omg.CosNaming.*;
    import org.omg.CosNaming.NamingContextPackage.*;
    public class TestClient
    {
        protected static void connect() 
        {
            try {
                System.out.println("luach connectExt function");
                org.omg.CORBA.Object objRef = 
                    ourORB.resolve_initial_references("NameService");
                System.out.println("get root context successful");
                NamingContextExt rootContext = NamingContextExtHelper.narrow(objRef);
                System.out.println("narrow root context successful");
                
                org.omg.CORBA.Object  obj = 
                    rootContext.resolve_str("TransferWString.Object");              System.out.println("bind complete");
                
                transfer = TransferWStringHelper.narrow(obj);
                System.out.println("narrow complete");
            }   
            catch (NullPointerException ex)
            {
                System.out.println("Some required properties is empty." + ex);
            }
            catch (Exception ex)
            {
                System.out.println("Exception occured: "+ex);
                ex.printStackTrace();
            }    
        
        protected static void stringToObj(String ior)
        {
            if (ior != null && ior.length() != 0) {
                org.omg.CORBA.Object  obj = ourORB.string_to_object(ior);
                System.out.println("string to object successful");
                transfer = TransferStringHelper.narrow(obj);
                System.out.println("narrow complete");
            }
        }
        
        private static void echoString(String mesg)
        {
            try {
                String echoString = transfer.echoString(mesg);
                System.out.println("send " + mesg + 
                    "and return mesg " + echoString);
            }
            catch (Exception ex) {
                System.out.println("catch exception in call method");
                ex.printStackTrace();
            }
        }
        
        public static void main(String args[])
        {
            String ior = null;
            String nameservice = "corbaloc::10.1.8.190:2001/NameService";
            
            
            //String openOrbHome = "jar:file:" + owareHome +
             //               "/lib3rd/openorb-1.3.1.jar!/org/openorb/"; 
            //System.out.println("open orb home: "+openOrbHome);        ourORB = ORB.init( new String[] {
                //"-ORBOpenORB="+openOrbHome,
                "-ORBInitRef", "NameService="+nameservice
                }, 
                null
            );        System.out.println("init orb successful");
            if (ior != null && ior.length() != 0)
                stringToObj(ior);
            else
                connect();
            echoString("sfsf");
        }
        
        public static ORB ourORB = null;
        private static TransferString transfer = null;
    } 我用的jdk1.4.1, 用jdk1.3的时候运行会报错,注意配置好NameService
      

  5.   

    谢楼主,在jdk1.3api中没有
    NamingContextExt
    NamingContextExtHelper
    这两个类的。我用的orb是orbacus4.1.0,它的手册上讲这个版用jdk1.2 or later,而对jdk1.4支持的不怎么好,还没有正式兼容。的确,简单的java CORBA我在jdk1.4下执行服务端必须加上bootclasspath参数才能执行,而在jdk1.3就不用,服务可以像执行普通java程序那样,然而手册中介绍的namservice中举的例子却使用了NamingContextExt、NamingContextExtHelper那两个只在jdk1.4及以后才提供的类,
      

  6.   

    对,就是这两个类
    NamingContextExt
    NamingContextExtHelper但是在jdk1.3中可以用NameContext, 不过绑定需要NameCompnent类。NameComponent nameComponent = new NameComponent("TransferString", "Object");
    NameComponent path[] = { nameComponent };            
    org.omg.CORBA.Object  obj = rootContext.resolve(path);
      

  7.   

    有个问题我还是来这里问问楼主
    待会开贴给分
    applet怎么初始化orb我是把Applet传递给了ORB.init(this,prop)了,用appletviewer查看没问题,但是在页面里直接打开就出现下面的问题
    warning: ORB.destroy() was not called. This may result in resource leaks.org.omg.CORBA.COMM_FAILURE: socket() failed: java.net.SocketException: Connection reset  vmcid: 0x4f4f0000  minor code: 5  completed: No
    at com.ooc.OCI.IIOP.Connector_impl.connect(Connector_impl.java:138)
    at com.ooc.OB.GIOPClient.getWorker(GIOPClient.java:100)
    at com.ooc.OB.GIOPClient.bind(GIOPClient.java:434)
    at com.ooc.OB.DowncallStub.locate_request(DowncallStub.java:518)
    at com.ooc.CORBA.Delegate._OB_getDowncallStub(Delegate.java:1234)
    at com.ooc.CORBA.Delegate.request(Delegate.java:602)
    at com.ooc.CORBA.Delegate.is_a(Delegate.java:401)
    at org.omg.CORBA.portable.ObjectImpl._is_a(Unknown Source)
    at org.omg.CosNaming.NamingContextHelper.narrow(Unknown Source)
    at Client.main(Client.java:25)
    at a.paint(a.java:8)
    at sun.awt.RepaintArea.paint(Unknown Source)
    at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)其实用appletviewer查看时,都可以不把当前applet传递给ORB.init()方法。
    我是直接使用了那个application,写了另一个applet调用了application的main()方法的。