将CORBA服务器上的整个对象传输到客户端

时间:2012-02-01 13:36:07

标签: json corba idl

我正在使用JDK中默认提供的Java IDL在CORBA中开发分布式应用程序,当然,还使用Java开发了客户端和服务器。

我在服务器上维护一些对象状态。

现在,在客户端,我想从服务器端带来该对象的整个状态(快照)。 这是一些Java类型的对象。 因为我无法将任何Java类型的整个对象从服务器传递到客户端,因为它具有IDL定义,当然还有CORBA功能,因为它是语言中立的。

我发现的一种方法是使用JSON

我将任何类型的整个Java Object压缩成字符串,并使用字符串数据类型将其传递给客户端,稍后在客户端上我可以从字符串中解除对象。 我也可以在idl中定义字符串类型。

但是这增加了两侧平整/平整的一些处理

有没有其他方法从客户端传递对象?或者我可能错过了什么?

更新:

传输以下类型的对象

class MyObject{ Map<String,String> object; }

3 个答案:

答案 0 :(得分:1)

CORBA已经具有Objects-By-Value的概念,因此如果您的ORB支持它,您可以使用它。将您的状态变量放在valuetype中并从那里开始。

请记住,CORBA不是Java。 CORBA可以与许多语言一起使用,因此,如果您发现自己试图找出如何在CORBA系统中发送仅Java内容的东西,那么您将发现这非常困难。要在CORBA中传输任何内容,它必须首先在IDL中表示。如果valuetype不符合您的需求,请使用另一个答案建议的结构方法。

答案 1 :(得分:0)

听起来好像你想让对象状态成为界面的一部分(因为如果你实际上转移状态,能够重新创建对象取决于接收者理解传输状态,因此它成为一个接口)

因此,定义包含IDL中数据字段的struct,并向对象接口添加一个方法以返回此表单中的状态。然后由常规CORBA编组处理传输。

答案 2 :(得分:0)

您只需将MyObjects定义为CORBA对象即可。为此你将使用IDL。您的地图是一个简单的名称,价值清单。

module Foo { 
  struct MapEntry { 
    string name;
    string value;
  }; 

  sequence<MapEntry> MyMap; 
  }; 
}; 

这将在Java中创建一个MapEntry对象数组。如果您想将它们重新映射到Java Map中,请随意。这是转移某个地图的CORBA方式。创建一个结构,将它放入一个序列中,完成。 这也适用于CORBA支持的其他语言(例如,C ++)