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



我正在开发一个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.ORBA.对象吗?还是其他类型?

我认为你不能用正常的方式来做。

根据我的理解,CORBA的思想是,它定义了一种与平台无关的内部消息表示(因此它具有跨平台的互操作性)。想想看,如果它允许你给出一个任意的Java对象,如果接收端是C++,那么它怎么能把它转换成C++表示呢?

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

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

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

相关内容

  • 没有找到相关文章

最新更新