利用OSGI声明服务实现Corba服务的改善
2008-06-19 11:59
239 查看
问题的提出:
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服务了,而只是只要实现接口中所定义的方法。
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服务了,而只是只要实现接口中所定义的方法。
相关文章推荐
- 利用微软WebService技术实现远程数据库存取 利用web服务在不同站点间共享同一数据库
- 跨集群服务——如何利用Kubernetes 1.3实现跨区高可用
- 利用防火墙实现向外网提供内网web和dns服务 推荐
- 利用ACS实现AAA服务
- IFC标准是为了满足建筑行业的信息交互与共享而产生的统一数据标准,是建 筑行业事实上的数据交换与共享标准。本文概要介绍了IFC标准的产生及发展 历程,IFC的整体框架结构,简要说明了IFC标准的实现方法和过程,描述了 当前的应用以及我们应该更加积极地利用IFC标准为建筑软件行业服务。
- 构建基于CXF的WebService服务(3)-- 利用拦截器实现权限验证
- 利用 bat 批量处理命令实现手动控制mysql /Oracle 服务的开启和关闭
- 利用微软WebService技术实现远程数据库存取 利用web服务在不同站点间共享同一数据库
- 利用VBS实现显示系统服务列表
- Spring Cloud分布式微服务系统中利用redssion实现分布式锁
- 利用curator实现的zookeeper分布式锁服务
- [置顶] 编写shell脚本以及利用函数实现批量安装Linux服务配置
- 利用xtraBackup实现不停master服务做主从同步
- .Net网络通讯编程[利用Socket实现字串、文件、序列化对象传输]--使用封装的网络服务2[使用IE浏览本页]
- nodeJS的原生http服务利用插件实现前后端交互
- 利用WCF实现上传下载文件服务
- 【WCF】利用WCF实现上传下载文件服务
- 【ArcGIS】利用ArcGIS 的Java API实现SDE数据库的直连和服务连接