分享

OSGi应用发布到tomcat

 Baruch 2017-08-28

 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的方式添加依赖。



 

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会同时导出)


 

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插件依赖错误的提示。
Org.eclipse.libra.warproducts.core.validation.validator代码  收藏代码
  1. public static final String SERVLET_BRIDGE_ID   
  2.   = 'org.eclipse.equinox.servletbridge'; //$NON-NLS-1$  
  3.   
  4. public static final String[] BANNED_BUNDLES = new String[] {   
  5.   'javax.servlet', //$NON-NLS-1$  
  6.   'org.eclipse.update.configurator',  //$NON-NLS-1$  
  7.   'org.eclipse.equinox.http.jetty',  //$NON-NLS-1$  
  8.   'org.mortbay.jetty.server',  //$NON-NLS-1$  
  9.   'org.mortbay.jetty.util'  //$NON-NLS-1$  
  10. };  
  11.   
  12. public static final String[] REQUIRED_BUNDLES = new String[] {   
  13.   'org.eclipse.equinox.servletbridge.extensionbundle', //$NON-NLS-1$  
  14.   'org.eclipse.equinox.http.registry', //$NON-NLS-1$  
  15.   'org.eclipse.equinox.registry', //$NON-NLS-1$  
  16.   'org.eclipse.equinox.http.servlet', //$NON-NLS-1$  
  17.   'org.eclipse.equinox.http.servletbridge' //$NON-NLS-1$  
  18. };  
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./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./blog/1601916 

 

参考:

r1: RAP/Equinox WAR products

http://wiki./RAP/Equinox_WAR_products

http://download./~hstaudacher/warproducts/3.7

http:///rap/developers-guide/devguide.php?topic=advanced/deployment.html&version=1.5

 

http:///blogs/2011/02/02/equinoxrap-war-products-has-moved-hello-eclipse-libra/

http:///blogs/2011/02/07/how-to-build-a-server-side-equinoxrap-application/

http:///blogs/2009/08/15/building-your-equinox-based-appserver-part-1/

 

rold1: webappbuilder

http:///blogs/2007/12/07/rap-deployment-part-2-deploying-your-application-as-a-war-file/

http://help./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./equinox/server/

http://www./equinox/server/http_in_container.php

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多