著录项信息
专利名称 | CORBA系统中的JAVA远程调用方法 |
申请号 | CN200910246082.7 | 申请日期 | 2009-12-01 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2010-12-22 | 公开/公告号 | CN101923485A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F9/46 | IPC分类号 | G;0;6;F;9;/;4;6查看分类表>
|
申请人 | 大唐软件技术股份有限公司 | 申请人地址 | 北京市朝阳区北苑路乙108号北美国际商务中心
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 大唐软件技术股份有限公司 | 当前权利人 | 大唐软件技术股份有限公司 |
发明人 | 黄翔 |
代理机构 | 北京德琦知识产权代理有限公司 | 代理人 | 谢安昆;宋志强 |
摘要
本发明公开了一种CORBA系统中的JAVA远程调用方法,该方法接收用户的调用请求,通过JAVA动态代理和拦截对所述调用请求进行重组,将所述调用请求转换为对CORBA服务的请求,通过预先封装的CORBA接口和实现类调用标准CORBA核心实现远程调用。用户进行远程JAVA调用时无须关心具体的调用实现过程,也无须实现特定的CORBA接口,使JAVA远程调用的前期开发和后期维护的工作量大大减少,且实现非常简单。
1.一种CORBA系统中的JAVA远程调用方法,其特征在于,该方法包括:
接收用户的JAVA远程调用请求,通过JAVA动态代理对所述调用请求进行拦截并重组,以将所述JAVA远程调用请求转换为对标准CORBA实现类的调用请求,通过CORBA接口调用标准CORBA核心实现远程调用;
其中,所述通过JAVA动态代理对所述调用请求进行重组,包括:通过JAVA动态代理在所述调用请求中添加用于CORBA实现类的控制语句;
所述通过CORBA接口调用标准CORBA核心实现远程调用包括:
预先建立统一调用接口,其中包含正向调用的接口对象和回调的接口对象,通过所述控制语句由所述统一调用接口调用标准CORBA核心进行远程调用。
2.如权利要求1所述的JAVA远程调用方法,其特征在于,所述控制语句采用XML格式封装。
3.如权利要求1所述的JAVA远程调用方法,其特征在于,所述正向调用接口对象包括:
用于实现正向调用的方法和用于连通检测的方法;所述回调接口对象包括:用于实现回调的方法和用于连通检测的方法。
CORBA系统中的JAVA远程调用方法 \n技术领域\n[0001] 本发明涉及JAVA技术领域,特别涉及CORBA系统中的JAVA远程调用方法。 背景技术\n[0002] CORBA(通用对象代理体系结构,Common Object Request BrokerArchitecture)是对象管理组织(OMG)为解决分布式处理环境(DCE)中,硬件和软件系统的互连而提出的一种解决方案。具有模型完整、先进,独立于系统平台和开发语言,被支持程度广泛的特点。\n目前,绝大多数分布计算平台厂商都支持和遵循CORBA规范。COBRA系统,主要分为3个模块:对象请求代理模块、公共对象服务模块和公共设施模块。最底层是对象请求代理(ORB)模块,用于实现对象间的通讯和互操作,在ORB模块之上为公共服务模块,可以提供诸如并发服务、名字服务、事务服务、交易服务、安全服务等具体应用服务;最上层的公共设施模块则用于提供可直接为业务对象使用的服务,规定业务对象有效协作所需的协议规则。CORBA允许不同应用之间相互通信,而不管它们存在于哪里以及是谁设计的。其中ORB模块是在调用对象之间建立Client/Server关系的中间件,是实现不同应用之间互相通信的关键。\n通过ORB模块,客户可以透明地调用一个服务对象上的方法,这个服务对象可以在本地,也可以在通过网络连接的其他机器上。ORB模块截获这一调用,同时负责查找实现服务的对象并向其传递参数、调用方法返回最终结果。客户并不知道服务对象位于什么地方,它的编程语言和操作系统是什么,也不知道不属于对象接口的其他系统部分。这样,ORB模块在异构分布环境下为不同机器上的应用提供了互操作性,并无缝 地集成了多种对象系统。 [0003] ORB模块采用使用接口定义语言(IDL)实现,而IDL是独立于其他语言的,这使ORB可以适用于采用不同的编程语言实现的模块和组件。更重要的是,ORB允许通过创建IDL对不支持CORBA的老旧系统进行建模,将老旧系统进行包装,从而与老旧系统接口之间传递信息。 \n[0004] CORBA系统可以实现客户端通过网络从服务器端远程调用服务器端提供的服务实现客户端本地的操作,例如集成在客户端设备中的CORBA客户端将客户端的指令和数据等通过客户端ORB的包装发送给集成在服务器端设备中的CORBA服务器端,CORBA服务器端解析出具体的指令和数据后交给服务器端设备进行处理,并将处理结果通过服务器端ORB包装后再返回CORBA客户端,从而实现服务的远程调用,这样的应用可以使客户端将一部分处理任务交给远端的服务器进行处理从而弥补本地客户端处理能力不足的问题。 [0005] 目前,人们普遍利用CORBA系统实现了JAVA对象的远程调用,但在CORBA系统中要实现Java对象远程调用,一般还需要预先规划并实现JAVA调用所对应的CORBA接口,即针对每一个JAVA调用,设计一个接口实现模块,将JAVA调用连接到CORBA实现类,通过接口实现模块使JAVA调用能够使用CORBA系统的服务,并通过ORB模块实现与远端CORBA系统的通信,从远端服务器中调用所需的资源。 \n[0006] 图1为现有在CORBA系统中实现JAVA对象远程调用的原理图,如图1所示,接口实现模块1~6分别对应不同的JAVA调用,当客户端接收到JAVA对象调用请求时,对应的接口实现模块将调用请求转换为符合CORBA接口规范的请求,并通过CORBA接口和对象模块提供的客户端CORBA接口和实现类,使用CORBA核心模块中的ORB和CORBA服务将调用请求发送到服务端ORB,通过服务端对象适配器、ORB接口等,调用服务端CORBA接口和实现类,并通过服务端的接口实现模块将CORBA调用和对象转换为服务端相应的JAVA调用和对象,服务端处理完成后,将处理结果 经原路径返回客户端。 \n[0007] 从上述的操作可以看出,JAVA对象远程调用中,所有的JAVA调用均须单独通过特定的接口实现模块来完成与CORBA服务的对接,每个JAVA调用是单独实现的。如果用户需求的JAVA调用的接口变更,则需要重新设计接口实现模块。而接口实现模块,其原理是直接调用CORBA接口来实现与CORBA对接,该模块中需要进行生成接口IDL文件、编译IDL文件成Java文件,按照编译完成的Java文件生成相应实现类,使用CORBA的接口连接CORBA服务等多个复杂步骤才能完成与CORBA的对接,即使很小的修改,也要重新进行一整套复杂的接口实现模块的设计实现过程,而调用接口变更的情况是很常见的,因此对于现有在CORBA系统中实现Java对象远程调用的方法,其后期系统维护的工作量很大,且整个实现架构比较复杂,需要预先规划并设计特定的接口实现模块,实现起来非常困难。 发明内容\n[0008] 本发明实施例提供一种CORBA系统中的JAVA远程调用方法,无需特定的接口实现模块,实现简单,在JAVA调用变更时所需的维护工作量很小。 \n[0009] 为达到上述目的,本发明的技术方案具体是这样实现的: \n[0010] 一种CORBA系统中的JAVA远程调用方法,该方法包括: \n[0011] 接收用户的调用请求,通过JAVA动态代理和拦截对所述调用请求进行重组,将所述调用请求转换为对CORBA服务的请求,通过预先封装的CORBA接口和实现类调用标准CORBA核心实现远程调用。 \n[0012] 由上述的技术方案可见,本发明的这种CORBA系统中的JAVA远程调用方法,用户进行远程JAVA调用时无须关心具体的调用实现过程,也无须实现特定的CORBA接口,使JAVA远程调用的前期开发和后期维护的工作量大大减少,且实现非常简单。 附图说明\n[0013] 图1为现有在CORBA系统中实现JAVA对象远程调用的原理图; \n[0014] 图2为本发明实施例的JAVA远程调用架构示意图; \n[0015] 图3为本发明实施例的JAVA远程调用方法的正向调用流程图; \n[0016] 图4为本发明实施例的JAVA远程调用方法的回调流程图。 \n具体实施方式\n[0017] 为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。 \n[0018] 本发明主要是在现有CORBA接口对象模块之上增加两个模块,即CORBA代理模块和用户接口模块,通过用户接口模块接收用户的JAVA调用请求,并通过CORBA代理模块将用户的JAVA调用请求统一进行重组和转换,将JAVA调用转换为标准的CORBA协议的对象调用后,再由CORBA接口对象模块和CORBA核心模块完成具体的CORBA调用,使用户进行远程JAVA调用时只需面对用户接口模块提供的简单的用户接口,无须关心具体的调用实现过程,也无须为特定的JAVA调用设计实现针对该JAVA调用的特定的CORBA接口模块,因此该方法只需按照标准CORBA实现统一的CORBA代理模块和用户接口模块,之后若要改变应用和改变接口,只需重新将用户的JAVA调用在CORBA代理模块中相应地重新指向到其它标准CORBA对象或实现类的即可,无须再针对不同的JAVA调用进行特定CORBA接口的实现和更改,使JAVA远程调用的后期维护工作量大大减少,且实现非常简单。 [0019] 图2为本发明实施例的JAVA远程调用架构示意图,如图2所示,该架构从上至下共分4个模块:用户接口模块、CORBA代理模块、CORBA接口对象模块、CORBA核心模块。 [0020] 第1层是用户接口模块,提供了面向用户的远程调用的工具和方法,如绑定到CORBA命名服务、从CORBA命名服务获取对象、数据发送到 CORBA通知服务、从CORBA通知服务接收通知事件等;具体如初始化CORBA代理模块中的CORBA代理对象,并将用户的JAVA调用请求交给CORBA代理模块处理。在该模块中,提供给用户的接口及其实现的功能是可以任意设计的,可以根据具体需要实现,接口的具体实现对于用户来说是透明的,用户并不需要关心,只需要根据提供的接口进行相应调用即可。 \n[0021] 第2层是CORBA代理模块,负责对用户接口模块下发的调用请求进行解析、重组和转发。具体是通过JAVA动态代理和拦截技术拦截用户的JAVA远程调用请求,并在该请求中插入控制说明,并将加入控制说明的调用请求发送给CORBA接口对象模块,进行具体的CORBA调用。由于在请求中插入了控制说明,因此CORBA接口对象模块可以根据控制说明的内容得知该JAVA调用对应哪个标准CORBA对象调用,应执行什么操作,因此实现了将普通Java调用请求转换为CORBA调用。CORBA代理模块在本架构中起到了承上启下的作用,对于用户接口模块而言,该模块屏蔽了直接对CORBA的API调用,而对于CORBA接口对象模块而言,该模块提供了标准的CORBA调用和结果的适配,实际上实现了从Java协议到CORBA协议的转换。其中,调用请求和响应中包含的各种参数和数据可以采用XML语言进行封装以保证兼容性和易用性。 \n[0022] 第3层是CORBA接口对象模块,该模块包含根据CORBA协议封装的具体接口和实现类,这些接口及其实现类负责通过底层CORBA核心模块实现对象的远程调用。现有CORBA系统中并没有提供对JAVA对象的回调的支持,而在本发明实施例中,通过在本模块中建立一个特殊的接口对象,可以供其他接口对象进行正向调用和回调,从而实现了对JAVA对象的回调,这个特殊的接口对象的具体实现方法如下:首先根据标准的CORBA协议建立IDL文件,该IDL中包含1个正向调用接口对象和1个回调接口对象,正向调用接口对象中实现用于正向调用的方法(invoke)和用于连通检测的方法(ping),回调对象中实现用于回调的方法(on_data)和同样用于连通检测的方法(ping);然后将IDL文件编译成Java文件,并分别实现相应 的接口。其中invoke方法是用于正向调用的实现方法,将用户请求调用的对象和参数作为该方法的输入参数,并查找并输出给相应的对象以实现正向调用,而on_data方法是用于回调的实现方法,其原理和invoke方法相同;而ping方法是负责检查待调用的远程对象是不是通的,从而可以实现在不通情况下的自动重连。通过建立支持回调的接口对象,其他接口对象通过调用这个统一的接口对象都可以实现正向调用和回调。另外,由于正向调用对象和回调对象中都包括用于连通检测的方法(ping),因此,CORBA代理模块还可以通过ping方法对调用对象接口所使用的网络连接进行心跳监测,并对于异常的接口进行自动重连的操作。当然如果不需要自动重连的功能,在正向调用对象和回调对象中也可以不包括ping方法。 \n[0023] 第4层是CORBA核心模块,是符合CORBA规范的标准实现,包含如图中IDL存根(Stubs)、ORB接口、客户端对象请求代理(Client ORB)、CORBA服务、IDL框架(Skeletons)、对象适配器(POA)、服务端对象请求代理(Server ORB)等,具体实现可以参考OMG组织有关CORBA规范的定义,这里不再详细描述。 \n[0024] 在上述的架构中,实现JAVA远程调用将会非常简单,用户只需按照标准JAVA发出调用请求,即可实现远程JAVA对象的调用,而无须关心具体调用实现,从而使CORBA系统中的JAVA远程调用的实现变得简单易行。 \n[0025] 图3为本发明实施例的JAVA远程调用方法的正向调用流程图,如图3所示,该流程包括如下步骤: \n[0026] 步骤301,接收调用请求。用户接口模块接收客户端用户发出的JAVA调用请求。 [0027] 步骤302,拦截用户的调用请求。CORBA代理模块通过JAVA动态代理和拦截技术,如JDK,将该请求拦截。 \n[0028] 步骤303,判断调用的对象是否为空。CORBA代理模块判断请求中所调用的对象是否为空,若是,则返回步骤301,否则执行步骤304。这里判断调用对象是否为空是指判断用户调用的JAVA对象是否在CORBA接口对 象模块中有对应的CORBA实现类。 [0029] JAVA对象预先需要绑定到CORBA的命名服务上,具体绑定方式可以采用如下的函数格式: \n[0030] *@param bindName绑定的名称 \n[0031] *@param implObj绑定对象的一个实现类 \n[0032] *@throws CorbaUtilException需要捕获的异常 \n[0033] */ \n[0034] public void bind(String bindName,Object implObj)throws [0035] CorbaUtilException 函数。 \n[0036] 其实现代码如下: \n[0037] public class TestBindService{ \n[0038] public static void main(String[]args){ \n[0039] CorbaUtil util=CorbaUtil.getInstance(); \n[0040] Properties props=System.getProperties(); \n[0041] props.put( ″ ORBInitRef ″, ″ NotificationService =corbaloc::localhost:14100/ \n[0042] NotificationService;;NameService = corbaloc::localhost:5555/NameService″); \n[0043] try{ \n[0044] util.bind(″testBindName″,new TestAlarmServiceImpl());\n//创建一 \n[0045] 个实现类 \n[0046] }catch(CorbaUtilException e){ \n[0047] e.printStackTrace(); \n[0048] } \n[0049] } \n[0050] } \n[0051] 步骤304,获取调用的方法、参数并重新进行封装。 \n[0052] 重新封装可以采用往调用请求中插入控制说明的方法,将调用的JAVA对象指向到标准的CORBA实现类,以实现调用请求中JAVA对象到标准的CORBA实现类的转换。控制说明的内容可以采用XML格式进行封装,以 保证良好的兼容性,当然也可以采用其它私有的格式,只要能够被识别即可。 \n[0053] 其中,本发明在将JAVA调用适配成CORBA调用过程中,内部通过定义XML格式的控制语句,实现了请求的重定义和封装,具体的XML格式如下: \n[0054] <?xml version=″1.0″encoding=″gb2312″?> \n[0055] \n[0056] say \n[0057] hello \n[0058] 4f6a67ee-4c67-4463-9594-a8cc02ddbfbb [0059] com.cattsoft.corba.interface.IHelloCallback \n[0060] \n[0061] 从这个XML可以知道,本次远程调用的方法是say,方法的参数是hello,回调对象的名称是com.cattsoft.corba.interface.IHelloCallback,回调对象的标识是4f6a67ee-4c67-4463-9594-a8cc02ddbfbb。这样当这个控制请求通过CORBA服务真正传递到对端以后,就可通过JAVA的反射机制,调用远程对象的say方法,并将“hello”作为参数传递过去,并将结果返回,实现远程调用。 \n[0062] 步骤305,将重新封装后的调用请求发送到CORBA核心模块。 \n[0063] 步骤306,CORBA核心模块中的客户端ORB将调用请求发送到服务端ORB。 [0064] 步骤307,服务端ORB收到调用请求后将请求转发给服务端的CORBA接口对象模块。 \n[0065] 步骤306和307是标准的CORBA远程调用过程,本发明在这里使用现有技术实现,因此不再赘述具体详细实现过程。 \n[0066] 步骤308,判断调用请求中请求的服务类是否为空,若是则返回步骤307,否则执行步骤309。 \n[0067] 步骤309,判断请求参数是否为空,若是,则执行步骤310,否则执行步骤311。 [0068] 步骤310,调用用户请求的实现类,传入空参数,并将结果返回。 [0069] 在调用用户请求的实现类时,需要按照名称,从CORBA命名服务获取预先绑定的JAVA对象,返回对象是ServiceClass类型,具体实现的函数如下: \n[0070] *@param serviceName服务名称 \n[0071] *@param serviceClass服务的类对象 \n[0072] *@throws CorbaUtilException需要捕获的异常 \n[0073] */ \n[0074] public Object locatService(String serviceName,Class serviceClass)throws CorbaUtilException 函数 \n[0075] 其实现代码如下: \n[0076] public class TestLocator{ \n[0077] public static void main(String[]args){ \n[0078] CorbaUtil util=CorbaUtil.getInstance(); \n[0079] Properties props=System.getProperties(); \n[0080] props.put( ″ ORBInitRef ″, ″ NotificationService =corbaloc::hx2009:14100/NotificationService ;;NameService =\ncorbaloc::hx2009:5555/NameService″); \n[0081] try{ \n[0082] TestAlmCallbackImpl ac=new TestAlmCallbackImpl(); [0083] ITestAlarmService services =(ITestAlarmService)util.locatService(″testBindName″, \n[0084] ITestAlarmService.class); \n[0085] String[]retuns=services.returnResult(″service2″); [0086] System.out.println(retuns[0]); \n[0087] }catch(Exception e){ \n[0088] e.printStackTrace(); \n[0089] } \n[0090] } \n[0091] } \n[0092] 步骤311,判断调用参数中是否包含回调对象,若是,则执行步骤312,否则执行步骤313。 \n[0093] 步骤312,为回调对象生成动态代理对象,调用用户请求的实现类,将代理对象作为调用参数,将调用结果返回。 \n[0094] 步骤313,调用用户请求的实现类,并将结果返回。 \n[0095] 图4为,本发明实施例的JAVA远程调用方法的回调流程图,如图4所示,该流程包括如下步骤: \n[0096] 步骤401,接收回调请求。 \n[0097] 步骤402,拦截回调请求。同样通过JAVA动态代理和拦截技术拦截。 [0098] 步骤403,判断回调的对象是否为空。若是,则返回步骤401,否则执行步骤404。 [0099] 步骤404,获取回调的方法、参数并重新进行封装。封装方法同调用请求 [0100] 步骤405,将封装后的请求发送到CORBA核心模块。 \n[0101] 步骤406,服务端ORB将请求发送到客户端ORB。 \n[0102] 步骤407,客户端ORB收到请求将请求转发到客户端的CORBA接口对象模块。 [0103] 步骤408,判断用户请求调用的服务类是否为空,若是则返回步骤407,否则执行步骤409。 \n[0104] 步骤409,判断请求参数是否为空,若是,则执行步骤410,否则执行步骤411。 [0105] 步骤410,调用用户请求的实现类,传入空参数,并将结果返回。 [0106] 步骤411,调用用户请求的实现类,并将结果返回。 \n[0107] 回调的流程实际上和正向调用的过程相同,只不过调用的对象是回调的 对象,调用方向是由服务端回调客户端对象。执行回调的前提是必须先有一次正向调用,将回调对象传递给被调用方,然后被调用方才可以根据需要随时反向调用请求方,实现双向调用。 [0108] 另外,在调用和回调过程中,还涉及将数据发送到事件通道和从事件通道接收数据的过程,具体实现的函数如下: \n[0109] 将数据发送到事件通道: \n[0110] *@param xmlMsgs XML格式的消息对象 \n[0111] *@param channeled通道的标识 \n[0112] *@throws CorbaUtilException需要捕获的异常 \n[0113] */ \n[0114] public void sendToChannel(String xmlMsgs,int channelId)throwsCorbaUtilException 函数 \n[0115] 将数据发送到事件通道: \n[0116] *@param xmlMsgs以数组形式存放的XML格式的消息对象 \n[0117] *@param channeled通道的标识 \n[0118] *@throws CorbaUtilException需要捕获的异常 \n[0119] */ \n[0120] public void sendToChannel(String[]xmlMsgs,int channelId)throwsCorbaUtilException 函数 \n[0121] 其具体实现代码如下: \n[0122] public class TestCorbaSender{ \n[0123] public static void main(String[] args){ \n[0124] CorbaUtil util=CorbaUtil.getInstance(); \n[0125] Properties props=System.getProperties(); \n[0126] props.put( ″ ORBInitRef ″, ″ NotificationService =corbaloc::hx2009:14100/NotificationService ;;NameService =\ncorbaloc::hx2009:5555/NameService″); \n[0127] try{ \n[0128] util.sendToChannel(″hello″,0); \n[0129] Thread.sleep(5000); \n[0130] }catch(Exception e){ \n[0131] e.printStackTrace(); \n[0132] } \n[0133] } \n[0134] } \n[0135] 从事件通道接收数据: \n[0136] 从通道获取数据,该方法供没有回调对象的使用,是阻塞方法: [0137] *@param channelId通道的标识 \n[0138] *@throws CorbaUtilException需要捕获的异常 \n[0139] */ \n[0140] public Object receiveFromChannel(int channelId)\nthrowsCorbaUtilException 函数 \n[0141] 从通道获取数据,并调用pusher的回调方法将数据发出: \n[0142] *@param pusher该接口的实现类 \n[0143] *@param channeled通道的标识 \n[0144] *@throws CorbaUtilException需要捕获的异常 \n[0145] */ \n[0146] public void receiveFromChannel(ICorbaPusher pusher,int channelId)throws CorbaUtilException 函数。 \n[0147] 其实现代码如下: \n[0148] public class TestCorbaReceiver{ \n[0149] public static void main(String[]args){ \n[0150] CorbaUtil util=CorbaUtil.getInstance(); \n[0151] Properties props=System.getProperties(); \n[0152] props.put( ″ ORBInitRef ″, ″ NotificationService =corbaloc::hx2009:14100/Notif icationService;;NameService =\ncorbaloc::hx2009:5555/NameService″); \n[0153] try{ \n[0154] util.receiveFromChannel(new CorbaPusherImpl(),0); [0155] }catch(Exception e){ \n[0156] e.printStackTrace(); \n[0157] } \n[0158] } \n[0159] } \n[0160] 由上述的实施例可见,本发明的JAVA远程调用方法的关键在于将用户的JAVA调用请求通过重组转换为CORBA系统可识别并操作的标准CORBA调用,再通过标准的CORBA远程调用过程,将用户的JAVA调用从本地客户端传送到远端的服务端,再通过CORBA实现服务端实现类的调用并将调用的结果返回客户端,从而使JAVA远程调用对于用户完全透明,用户不需要为每一种JAVA远程调用而单独设计特定的接口实现模块以与CORBA核心模块对接,使JAVA远程调用的后期维护的工作量大大减少,且实现非常简单。 [0161] 所应理解的是,以上所述仅为本发明的较佳实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。 \n[0162] 随附XML格式以及示例代码如下。 \n[0163] XML格式 \n[0164] 本发明在将JAVA调用适配成CORBA调用过程中,内部通过定义XML格式的控制语句,实现了请求的重定义和封装,具体的XML格式如下: \n[0165] <?xml version=″1.0″encoding=″gb2312″?> \n[0166] \n[0167] say \n[0168] hello \n[0169] 4f6a67ee-4c67-4463-9594-a8cc02ddbfbb [0170] com.cattsoft.corba.interface.IHelloCallback \n[0171] \n[0172] 从这个XML可以知道,本次远程调用的方法是say,方法的参数是 hello,回调对象的名称是com.cattsoft.corba.interface.IHelloCallback,回调对象的标识是4f6a67ee-4c67-4463-9594-a8cc02ddbfbb。这样当这个控制请求通过CORBA服务真正传递到对端以后,就通过JAVA的反射机制,调用远程对象的say方法,并将“hello”作为参数传递过去,并将结果返回。 \n[0173] 示例代码 \n[0174] 绑定对象 \n[0175] public class TestBindService{ \n[0176] public static void main(String[]args){ \n[0177] CorbaUtil util=CorbaUtil.getInstance(); \n[0178] Properties props=System.getProperties(); \n[0179] props.put( ″ ORBInitRef ″, ″ NotificationService =corbaloc::localhost:14100/NotificationService;;NameService \n[0180] =corbaloc::localhost:5555/NameService″); \n[0181] try{ \n[0182] util.bind(″testBindName″,newTestAlarmServiceImpl());//创建一个实现类 \n[0183] }catch(CorbaUtilException e){ \n[0184] e.printStackTrace(); \n[0185] } \n[0186] } \n[0187] } \n[0188] 获取对象 \n[0189] public class TestLocator{ \n[0190] public static void main(String[]args){ \n[0191] CorbaUtil util=CorbaUtil.getInstance(); \n[0192] Properties props=System.getProperties(); \n[0193] props.put( ″ ORBInitRef ″, ″ NotificationService =corbaloc::hx2009:14100/NotificationService;;NameService= \n[0194] corbaloc::hx2009:5555/NameService″); \n[0195] try{ \n[0196] TestAlmCallbackImpl ac=newTestAlmCallbackImpl(); [0197] ITestAlarmService services=(ITestAlarmService)util.locatService(″testBindName″, \n[0198] ITestAlarmService.class); \n[0199] String[]retuns = services.returnResult(″service2″); \n[0200] System.out.println(retuns[0]); \n[0201] }catch(Exception e){ \n[0202] e.printStackTrace(); \n[0203] } \n[0204] } \n[0205] } \n[0206] 发送数据到事件通道 \n[0207] public class TestCorbaSender{ \n[0208] public static void main(String[]args){ \n[0209] CorbaUtil util=CorbaUtil.getInstance(); \n[0210] Properties props=System.getProperties(); \n[0211] props.put( ″ ORBInitRef ″, ″ NotificationService =corbaloc::hx2009:14100/NotificationService;;NameService= \n[0212] corbaloc::hx2009:5555/NameService″); \n[0213] try{ \n[0214] util.sendToChannel(″hello″,0); \n[0215] Thread.sleep(5000); \n[0216] }catch(Exception e){ \n[0217] e.printStackTrace(); \n[0218] } \n[0219] } \n[0220] } \n[0221] 从事件通道接收数据 \n[0222] public class TestCorbaReceiver{ \n[0223] public static void main(String[]args){ \n[0224] Co由aUtil util=CorbaUtil.getInstance(); \n[0225] Properties props=System.getProperties(); \n[0226] props.put( ″ ORBInitRef ″, ″ NotificationService =corbaloc::hx2009:14100/NotificationService;;NameService= \n[0227] corbaloc::hx2009:5555/NameService″); \n[0228] try{ \n[0229] util.receiveFromChannel(new CorbaPusherImpl(),0); [0230] }catch(Exception e){ \n[0231] e.printStackTrace(); \n[0232] } \n[0233] } \n[0234] }
法律信息
- 2013-02-06
- 2011-02-02
实质审查的生效
IPC(主分类): G06F 9/46
专利申请号: 200910246082.7
申请日: 2009.12.01
- 2010-12-22
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2006-08-16
|
2006-03-07
| | |
2
| | 暂无 |
2007-07-13
| | |
3
| |
2007-07-11
|
2006-12-31
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |