2012-02-01 44 views
1

我开发CORBA中使用Java IDL默认情况下,JDK提供的分布式应用程序,当然,客户端和服务器的JavaTranfering CORBA服务器上的整个对象给客户

我保持一些发达服务器上的对象状态。现在

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

的一种方式,我发现,使用JSON

我会压平型转换为字符串的整个Java对象,并通过相同的使用字符串数据类型的客户端,后来的客户端,我可以从deflatten字符串对象。 我也可以在idl中定义字符串类型。

但这增加了一些处理压扁/ deflattening两侧

是有任何其他方式从客户端传递的对象?或者可能是我错过了什么?

更新:

以下类型的对象被转移

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

+0

请你告诉你要传输的对象的例子定义其他语言? – tuergeist 2012-02-04 17:53:56

+0

@tuergeist提供了对象的类型定义。 – ajduke 2012-02-06 12:29:45

回答

0

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

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

    sequence<MapEntry> MyMap; 
    }; 
}; 

这将在Java中创建一个MapEntry对象数组。如果您想将它们重新映射到Java Map中,请随时取消。这是转移某种地图的CORBA方式。创建一个结构体,将其放入一个序列中,完成。 这也工作正常通过CORBA(例如,C++)的支持

0

这听起来就好像你想拥有对象的状态成为接口的一部分(因为如果你真的转移状态,能够重新创建对象取决于接收器了解传输状态,因此它成为一个接口)。

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

+0

但包含java.util.Map作为实例变量的对象类型 – ajduke 2012-02-01 13:51:52

+0

由于该类型不直接存在于IDL中(意外),因此必须按需复制数据 - 地图可能会表示为“序列”包含键/值对的'struct'类型。或者,像Brian所说的那样,使用'valuetype'。 – 2012-02-01 16:44:27

1

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

请记住,CORBA不是Java。 CORBA可以和许多语言一起使用,所以如果你发现自己试图弄清楚如何在CORBA系统中发送只有Java的东西,你会发现这很困难。要在CORBA中传输任何内容,首先必须在IDL中表示。如果valuetype不符合您的需求,则使用其他答案建议的结构方法。

相关问题