CORBA 序列:我可以用方法定义对象序列吗?

Posted

技术标签:

【中文标题】CORBA 序列:我可以用方法定义对象序列吗?【英文标题】:CORBA sequences: can I define sequences of objects w/ methods? 【发布时间】:2010-09-15 21:49:11 【问题描述】:

我有一个接口,其中的方法应该返回一个项目列表,并且每个项目都应该有一些与之关联的方法。例如,我想定义一个方法 listAllItems(),它返回一堆“item”对象,这些对象附加了方法(所以我可以让客户端进程选择其中一个项目并说 itemone.buy() 例如,这将在服务器上执行相应的方法)。

我可以在 CORBA 中执行此操作吗?似乎我无法定义“界面项”,然后在其他一些界面中说“序列”。

如果有影响,我会将我的 idl 编译为 Java。

谢谢!

【问题讨论】:

【参考方案1】:

Peyton 需要的信息,IDL 序列和 Java 集合类型之间的概念映射,可以在本手册的物理页 42,索引页 23 上找到:

http://www.omg.org/spec/I2JAV/1.3/

并回答他的问题:显然,即使您 typedef,java 实际上也没有指定序列对象。当然欢迎您手动执行此操作。但是,如果您想依赖 idlj 自动为您完成的工作,您将不得不使用 Helper.java 中的方法。它们适用于 [] 类型的简单数组,包括 getter 和 setter。

简而言之:如果你的 idl 包含

struct MyObject

  long my_int;
;
typedef sequence<MyObject> MyObjects;
interface HasArray

  attribute MyObjects some_stuff;
;

那么你的java实现需要:

public class HasArrayImpl extends HasArrayPOA

  private List<MyObject> local_storage;

  /** getter */
  MyObject[] some_stuff()
  
    /* ... */
  

  /** setter */
  void some_stuff(MyObject[] newSome_stuff)
  
    /* ... */
  

在底层,Java 会为您创建 MyObjectsHelper 和 MyObjectsHolder。

【讨论】:

【参考方案2】:

当然可以。

您必须详细说明为什么说它不适合您。但我经常使用包含一系列接口的 IDL。

【讨论】:

以上是关于CORBA 序列:我可以用方法定义对象序列吗?的主要内容,如果未能解决你的问题,请参考以下文章

Kryo序列化器(快速上手)

c# 自定义的一个泛型类可以序列化吗?

C++ 和序列化:有啥方法可以进行某种内省吗?

序列标注任务常用方法

关于java Serializable接口的问题

传递数组或序列以在 idl Java Corba 中运行