我正在使用JDK中默认提供的Java IDL在CORBA中开发分布式应用程序,当然,还使用Java开发了客户端和服务器。
我在服务器上维护一些对象状态。
现在,在客户端,我想从服务器端带来该对象的整个状态(快照)。 这是一些Java类型的对象。 因为我无法将任何Java类型的整个对象从服务器传递到客户端,因为它具有IDL定义,当然还有CORBA功能,因为它是语言中立的。
我发现的一种方法是使用JSON
我将任何类型的整个Java Object压缩成字符串,并使用字符串数据类型将其传递给客户端,稍后在客户端上我可以从字符串中解除对象。 我也可以在idl中定义字符串类型。
但是这增加了两侧平整/平整的一些处理
有没有其他方法从客户端传递对象?或者我可能错过了什么?
更新:
传输以下类型的对象
class MyObject{ Map<String,String> object; }
答案 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 ++)