利用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服务了,而只是只要实现接口中所定义的方法。
 
 
 
 
 
  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

yekai012

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值