设为首页 收藏本站
查看: 403|回复: 0

[经验分享] 扩展Tomcat支持OSGi应用服务(1)

[复制链接]

尚未签到

发表于 2017-1-27 07:14:52 | 显示全部楼层 |阅读模式
1.摘要
   OSGi的动态服务,包版本管理,安全设施,热插拔等特性吸引了越来越多开发人员的关注,由于OSGi不同于以往的设计理念,在企业级应用中一直没有很大的发挥。不过通过大家的不断努力,OSGi已在企业级服务平台中有所集成。本文站在另一个角度尝试Tomcat服务器下的OSGi服务集成,为web应用提供动态服务,为企业级开发提供参考。
   本文需要读者了解以下内容:
  l Java编程及一些简单的设计模式
  l OSGi的相关知识
  l Tomcat服务器的相关知识
2.集成思路
  我们知道OSGi R4.0平台中发布的服务为java对象服务,只能在其内部使用,而不能够为外部环境所使用的主要原因是类加载问题。要想为外部环境引用OSGi平台中的服务,我们需要使用java的反射机制来达到目的。
  鉴于OSGi平台服务的各种新的让人向往的优势,我们当然希望将其应用于开发和生产环境中。那么如何将OSGi平台服务集成到Tomcat中,并被web应用所使用呢?首先我们需要了解一些基本知识。
2.1 J2EE基础知识
  我们知道,J2EE平台的JNDI规范,规定了服务器如何提供JNDI服务,同时也规定了web应用如何使用JNDI服务。举个例子,我们经常在服务器中配置数据库连接池,然后在web应用中使用(不明白的可以参考《Tomcat中数据源的配置及原理》DataSource对象,而这个DataSource对象就是通过JNDI发布给web应用的
  当然,JNDI不仅仅能够发布DataSource服务对象,它还可以发布其它java服务对象。基于这个原理,我们很自然地会想,能否将OSGi平台的服务对象发布到JNDI呢?答案是肯定的。把OSGi平台的服务对象发布到JNDI的方式有很多种,这里介绍通过扩展Tomcat服务器来集成OSGi平台来实现以上的想法。
2.2 扩展Tomcat,支持OSGi平台
  这里我们选择支持以下OSGi平台和Tomcat服务器:
  1. EclipseOSGi平台实现equinox,版本equinox3.3.2
  2. ApacheOSGi平台实现felix,版本felix1.6.0
    3.ApacheWeb应用服务器Tomcat,版本tomcat6.0.186.0以上目录结构一致)。
   我们选择扩展Tomcat服务器的目的是,希望保持OSGi环境对Tomcat的透明,即OSGi平台的集成不会影响Tomcat服务器的功能。我们需要在Tomcat启动时启动OSGi平台,在Tomcat停止时停止OSGi平台。所以我们将服务器的启动作为扩展点,具体来说,就是在Tomcatserver组件启动时,添加一个关于OSGi平台生命周期的监听器(OsgiLifecycleListener),OsgiLifecycleListener必须实现LifecycleListener接口,这样就可以接受到server组件的事件通知了,根据不同事件,就可以在Tomcatserver组件启动时,启动OSGi平台,在server组件停止时,停止OSGi平台了。
2.3 Tomcat中发布JNDI服务
   集成了OSGi平台后,我们希望将OSGi平台中服务发布到JNDI中,而OSGi平台中的服务对象各不相同,且是动态的,如果直接将这些服务发布给JNDIweb的使用将是痛苦的,也将不能获得OSGi动态服务的特性。所以,我们需要抽象一个共同的服务接口(OsgiServices),将该接口发布到JNDI中,而当web应用使用OSGi服务时,通过该接口来查找相应的服务。
   为了在Tomcat中发布JNDI资源(OsgiServices,我们创建自己的资源工厂OsgiServicesFactoryOsgiServicesFactory实现了对象工厂(ObjectFactory)
  
2.4 集成模型
  到目前为止,我们的集成模型可以用图表示如下:
   DSC0000.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-333843-1-1.html 上篇帖子: 在Tomcat中使用JDBC与JTA 下篇帖子: Tomcat中部署Java Web应用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表