在我的情况下,如何将java.lang.Object值返回给CORBA上的客户端?

时间:2013-12-18 00:54:45

标签: java corba idl orb jacorb

我正在开发一个Corba应用程序。 我的IDL界面如下所示:

interface Transaction {
    ???????? addResource(in TransactionResource resource);
}; 

我希望当客户端为Transaction引用对象调用addResource方法时,能够将返回的Proxy.newProxyInstance(....)值返回给客户端。

addResource实现的例子:

public ?????? addResource(TransactionResource resource) {
        // creation of a proxy. 
            java.lang.Object o = Proxy.newProxyInstance(ManageDemand.class.getClassLoader() , new Class[] {ManageDemand.class}, new MyInvocationHandler());

        return o;
    }

我想将“o”返回给客户,我该怎么做?

addResource()方法返回值的类型是什么?它是org.omg.CORBA.Object吗?或其他类型?

2 个答案:

答案 0 :(得分:1)

我认为你不能用正常方式做到这一点。

根据我的理解,CORBA的概念是,它定义了它的内部消息表示,它是平台中立的(因此它的跨平台互操作性)。试想一下,如果它允许你给出一个任意的Java对象,如果接收方是C ++,那么它怎么能把它转换成C ++表示呢?

简而言之,您可以简单地使用您在IDL中定义的结构,如果您真的想要返回任意对象,那么CORBA可能不是您想要的。考虑像RMI这样的事情。

如果你真的需要这样做,我相信你唯一能做的就是自己进行序列化/反序列化,并将“对象”作为八位字节序列或字符串返回。但是,您需要知道对象接收器仍然是对象的单独实例(因此它周围的代理)。如果这些代理的工作需要服务器端的资源,那么我相信你需要重新考虑你的设计。我认为没有任何解决方案能够以这种方式神奇地将远程对象与服务器端对象链接起来。

答案 1 :(得分:-2)

您应该返回java.lang.Object的类型,然后在客户端,您应该将其转回。