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

[经验分享] OSGi应用发布到tomcat

[复制链接]

尚未签到

发表于 2017-1-23 09:32:12 | 显示全部楼层 |阅读模式
 equinox中的内置的jetty服务器已经很优秀了,但应用可以需要用到已经成熟的技术,需要集成到如tomcat, weblogic等等容器中。(下面以tomcat容器为例, 其他已经包括了OSGi框架的容器可能会更麻烦一点) 
下面按照自己的操作需要注意的关键步骤,记录一下如何把OSGi应用部署到tomcat容器中。
 

1 环境准备(或rap1.5):

servletbridge相关插件[s1]


  • org.eclipse.equinox.http.servletbridge_1.0.300.v20120522-2049.jar
  • org.eclipse.equinox.servletbridge.extensionbundle_1.2.100.v20120522-2049
  • org.eclipse.equinox.servletbridge_1.2.200.v20120522-2049(需打包成servletbridge.jar



warproduct相关插件[s2](0.2.2.201212132117)


  • /org.eclipse.libra.warproducts.core
  • /org.eclipse.libra.warproducts.ui



2 打包部署到tomcat
  1) 集成到tomcat容器中,得去掉就javax.servlet Plugin的依赖。需要修改:插件中对于javax.servlet插件的引用,修改为package的方式添加依赖。
  
DSC0000.png
 
  2) 在已经可以运行的product的基础上 [s3],新建warproduct导出为war [r1]。(后面的就不用讲了,和部署其他war是一样的)


  • 下载demo.zip,然后导入eclipse
  • 打开/sample.server/server-web.product文件,运行"Launch an Eclipse application"
  • 新建warproduct,选择"Use a launch configuration"-"server-web.product"(warproduct插件的安装参考[r1]的链接)
  • 需要添加servletbridge.jar的library
  • 导出成war,然后放置到tomcat/webapp目录下即可。(web.xml & launch.ini会同时导出)
DSC0001.png
 


3 到底发生了什么
  1、这其中最牛叉的就是servletbridge.jar,其中就三个Java类:
  · org/eclipse/equinox/servletbridge/BridgeServlet.java
  接收和转发请求(给真正的Servlet),和插件org.eclipse.equinox.http.servletbridge配合把真正的Servlet(org.eclipse.equinox.http.servlet.HttpServiceServlet)注册到容器(如tomcat)。
  同时管理Framework。
· org/eclipse/equinox/servletbridge/CloseableURLClassLoader.java
  (。。。HARD。。。)
· org/eclipse/equinox/servletbridge/FrameworkLauncher.java
  对插件的部署,启动,extensionbundle的创建/更新
  2、当然,能让我们的导出工作如此轻松,warproduct居功至伟啊!warproduct是一个精简版的PDE-product的实现,在PDE-product的基础上实现自定义校验和添加了library的功能,以及实现自己的导出功能。(使用Ant导出的文章http://www.ibm.com/developerworks/cn/web/wa-rcprap/index.html
  现在的版本都是使用warproduct,找了老久才找到一个老版本的[rold1]),封装了如下的功能:


  • 去掉对jetty的依赖
  • 同时添加servletbridge相关插件和jar的校验
  • 过滤javax.servlet插件依赖错误的提示。

  public static final String SERVLET_BRIDGE_ID
= "org.eclipse.equinox.servletbridge"; //$NON-NLS-1$
public static final String[] BANNED_BUNDLES = new String[] {
"javax.servlet", //$NON-NLS-1$
"org.eclipse.update.configurator",  //$NON-NLS-1$
"org.eclipse.equinox.http.jetty",  //$NON-NLS-1$
"org.mortbay.jetty.server",  //$NON-NLS-1$
"org.mortbay.jetty.util"  //$NON-NLS-1$
};
public static final String[] REQUIRED_BUNDLES = new String[] {
"org.eclipse.equinox.servletbridge.extensionbundle", //$NON-NLS-1$
"org.eclipse.equinox.http.registry", //$NON-NLS-1$
"org.eclipse.equinox.registry", //$NON-NLS-1$
"org.eclipse.equinox.http.servlet", //$NON-NLS-1$
"org.eclipse.equinox.http.servletbridge" //$NON-NLS-1$
};
  + org.eclipse.equinox.http.servletbridge [s1] + tomcat 的功能相当于org.eclipse.equinox.http.jetty

源码Source
  s1: equinox source
  http://git.eclipse.org/c/equinox/rt.equinox.bundles.git/
  s2: warproducts demo
  https://github.com/hstaudacher/org.eclipse.rap.build.examples/tree/master/warproducts
  s3: example
  http://winse.iteye.com/blog/1601916 

参考:
  r1: RAP/Equinox WAR products
  http://wiki.eclipse.org/RAP/Equinox_WAR_products
  http://download.eclipsesource.com/~hstaudacher/warproducts/3.7
  http://eclipse.org/rap/developers-guide/devguide.php?topic=advanced/deployment.html&version=1.5
  http://eclipsesource.com/blogs/2011/02/02/equinoxrap-war-products-has-moved-hello-eclipse-libra/
  http://eclipsesource.com/blogs/2011/02/07/how-to-build-a-server-side-equinoxrap-application/
  http://eclipsesource.com/blogs/2009/08/15/building-your-equinox-based-appserver-part-1/
  rold1: webappbuilder
  http://eclipsesource.com/blogs/2007/12/07/rap-deployment-part-2-deploying-your-application-as-a-war-file/
  http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.rap.help/help/html/advanced/deployment.html

写道

the script/webappBuilder.xml of the org.eclipse.rap.demo.feature.
  r2:  Equinox in a Servlet Container
  http://www.eclipse.org/equinox/server/
  http://www.eclipse.org/equinox/server/http_in_container.php

运维网声明 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-332331-1-1.html 上篇帖子: Tomcat启动参数修改 下篇帖子: Tomcat虚拟目录设置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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