利用OSGI声明服务实现Corba服务的改善

问题的提出:         1.  客户对服务模块的质量要求很高,服务的停止时间长,会造成用户无法接受的经济损失。         2..通信协议采用Corba, 而Corba的服务部分对开发人员要求比较高。

要解决什么?         采用OSGI可以改善第一个问题,

解决方案:          

     实现本提案的功效所使用的技术手段
Corba服务有它自己的规范,先用IDL定义接口,再通过工具将其转成java规范的模块,但最有用的是POA类,如:
publicabstractclass GetTimeIntfPOA extends  org.omg.PortableServer.Servant implements org.omg.CORBA.portable.InvokeHandler,com.inventec.itc.itcnd.osgi.corba.GetTimeIntfOperations
 
从上可以看出,不论哪个Corba服务,都是org.omg.PortableServer.Servant的子类。
 
OSGI动态发现也有自己的规范,那就是必须是以Inteface的形式进行发布,才能被动态发现(启动和停止都能被别的程序发感知)。而且每个Corba服务都必须提供唯一的ID,所以对此我们可以定义一个接口,如下:
 
package com.inventec.itc.itcnd.osgi.corba.adapter;
 
publicinterface IOSGIRemote {
 
                public String getRemoteName();
 
}
 
强制所有Corba服务的实现类实现这个接口,所以,一个Corba服务的实现类即是org.omg.PortableServer.Servant的子类,也是IOSGIRemote的一个子类。
 
在组件中加入以下代码
 
public void setOSGIRemote(IOSGIRemote remote){
final String id = remote.getRemoteName();          
Servant servant = (Servant) remote;
}
 
通过OSGI的自动注入功能,我们就得到了我们想要的东西。
当类似于一个小型操作系统的OSGI系统启动时,自动发布组件会先启动,当系统中一个或多个Corba服务启动时,发布组件会自动感知并将其注册到命名服务上,同样,当Corba服务停止时,会自动将其从命名服务上清除。 同样,当发布组件更新或重启时,同样能够感知到系统中存在的Corba服务。这样对于Corba服务开发人员来说,已经不用关心自己开发的是不是Corba服务了,而只是只要实现接口中所定义的方法。
 
 
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值