0

我正在开发一个 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 吗?或其他类型?

4

2 回答 2

1

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

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

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

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

于 2013-12-18T02:05:02.113 回答
-2

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

于 2013-12-18T00:59:49.327 回答