Corba操作返回的序列大小是否有限制?

时间:2013-01-17 16:39:30

标签: java sequence corba

我的一个Corba操作是返回一个联合类型的序列(二维数组)序列。

在一次测试中,结果发现这个操作不能同时处理超过32 kB的数据。如果整体阵列大小超过32 kB,则客户端的响应只能正确解组,最高可达32 kB。从那时起,它被未初始化的数据填充(最终使解组失败)。

在相同的环境中,还有其他操作可以返回更大尺寸的数据。然而,这是返回序列序列的唯一操作。

我应该注意一般通过Corba转移的序列或数据的长度是否有限制?

我的环境包括一个32位Java 6客户端(使用标准Java ORB)和一个64位服务器(C,带有2AB ORB实现)。

到目前为止我已经尝试过了:

在客户端和服务器端调整了几个Orb属性,这似乎是相关的 - 超时设置(transport.ORBTCPReadTimeout - 超时设置为大数),GIOP设置(giop.ORBFragmentSizegiop.ORBBufferSize - 两者都设置为大数)。这些设置都没有改变行为。

使用数据包嗅探器,我可以确认数据已发送到客户端。在解编期间会出现问题。

1 个答案:

答案 0 :(得分:2)

CORBA无界序列实际上有点受限 - 但还不够,你应该注意到它。

它们被编组为无符号长(或以CORBA术语,CORBA::ULong),它告诉编组引擎每个元素将在网络下面出现多少次。它应该始终能够包含多达2,147,483,647个元素(即2 ^ 32,大小为CORBA::ULong)。这大概超过32kb,所以听起来你的ORB有一个bug。

此外,它通过部分填充而不是抛出CORBA::MARSHAL异常而无声地失败的事实非常糟糕。告诉您的ORB供应商开始测试基础知识。