Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java EE 综合讨论区  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 Corba 如何返回另一个Corba对象 [Re:gxlzlu]
sothis



CJSDN高级会员


发贴: 168
积分: 60
于 2002-12-20 09:58 user profilesend a private message to usersend email to sothissearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
CORBA里面传送的东东,如果IDL中定义的是interface的话,那么传送的是reference,在CORBA中叫做IOR。如果是数据类型的话,如struct,那么传送的是值。两者的区别是显然的,就是往往interface里面只有方法,而数据类型里面只有变量。方法代码没办法传递,所以只有传引,传了引用后如果想要访问该方法,就通过远程调用来访问远端进程中的代码。
但是有时候希望有两者的结合,设想一下传送的东西中希望携带很多变量(值),同时又是一个对象,传过来后可以调用里面的方法体。有什么好处?第一是有时候变量值传送过来就好了,没有必要在需要值的时候再去远端进程要,减少网络交通,提高运行效率啊。第二是java都传值,CORBA要和2EE系统融合得更好的话,应该支持传值方式啊(RMI over IIOP的时候必须要考虑的问题哦)。这时候面临一个必然的问题就是类实例在客户端的再生问题。java里面用系统的serialization来做,没问题,两边都是JVM,代码和类加载方式一致么;CORBA里面,就只能交给Factory来做了,因为两边代码和类加载机制会不一样。Factory做的事是unmarshel,就是把得到的流恢复成类实例。各种语言的Factory实现手法是不一致的,对于java来讲,一般利用seriallization来做。
类实例在客户端再生过程中,成员变量的再生比较好理解,从流中取出来就可以了。但是成员函数呢?这些方法实现代码从哪儿来?从远端进程中过来?当然不行。记住CORBA是跨平台跨语言的,能设想从UNIX进程中传送过来的java代码(假如能传的话)能在Windows C++进程中执行的起来么?当然不行。代码实现必须在本地提供。在那里提供?在前面提到的对象类型所对应的Type Factory中提供。假如在客户端没有相应的设施提供将没有办法再生类实例,引发CORBA的Marshel异常。
这其实是CORBA中的一个话题叫做OBV(Object By Value),如果大家手上有CORBA中间件安装比方说VisiBroker的话,那么中间往往是带有OBV的例子的,可以参照这些例子。这里只是简述一下大概的做法。

准确的IDL定义:
valuetype returnValue{
setA();
getA();
}
interface test{
returnValue getSomeValue();
}
代码实现(java):
在client端需要实现returnValue值对象的所有方法以及returnValueFactory类,运行的时候这些都需要在类路径中。
在Server端需要实现test这个CORBA对象的实现和server主程序,当然也会引用到returnValue值对象的实现。




话题树型展开
人气 标题 作者 字数 发贴时间
8799 Corba 如何返回另一个Corba对象? gxlzlu 194 2002-12-15 04:12
7992 Corba 如何返回另一个Corba对象 sothis 1185 2002-12-20 09:58

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923