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插件依赖错误的提示。
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
r2: Equinox in a Servlet Container
http://www.eclipse.org/equinox/server/
http://www.eclipse.org/equinox/server/http_in_container.php
相关推荐
在Web容器中部署OSGi应用,特别是像Tomcat这样的流行Servlet容器,可以提高应用的灵活性、可维护性和可扩展性。本文将详细介绍如何使用桥接技术(如Apache Felix的WebConsole或Pax Web)在Tomcat中部署OSGi程序。 ...
标题中的“tomcat-osgi”指的是将开源的Java应用服务器Apache Tomcat与OSGi(Open Service Gateway Initiative)框架集成的版本。OSGi是一种模块化系统,主要用于Java应用程序,它允许开发者将应用程序分解为一系列...
SpringSource应用平台,则是在Spring、OSGi和Apache Tomcat的基础上构建的新型应用服务器。它放弃了传统的Java EE服务器标准,转而采用一套全新的基于OSGi内核的部署和打包系统,从而更加自然地整合了Spring编程模型...
【RAP 打成war并发布到tomcat】 在IT领域,RAP(RWT Application Platform)是一种基于Web的应用程序开发框架,允许开发者构建富客户端应用程序,这些应用能够在多种浏览器上运行,类似于Eclipse RCP(Rich Client ...
这个文件包含了Spring DM Server,它是SpringSource公司提供的一个OSGi运行时环境,用于运行和管理Spring OSGi应用。服务器提供了以下功能: 1. 支持多种OSGi标准:包括R4.2和R4.3规范。 2. 集成了管理工具:允许...
总结来说,将Servlet集成到OSGi的Karaf容器中发布REST接口涉及到创建OSGi Bundle、注册Servlet服务、配置Jetty、部署Bundle、设置URL映射等多个环节。这样的模块化方式使得开发、测试和维护更加灵活高效,同时也为...
4. 部署Web应用:如果`bridge.war`是一个Web应用,需要将其部署到Tomcat,这样它就能与OSGi容器内的bundle交互。 5. 配置依赖关系:确保所有的bundle都正确声明了它们的依赖,并且在容器中可用。OSGi容器会自动解决...
五、将4个bundle发布到Virgo环境中并启动Virgo服务器 六、使用http://localhost:8080/venusource/访问,本架构只是搭建好osgi+springMVC+spring+hibernate的开发环境,所以测试案例只提供了从后台能插入到数据库和...
SpringSource应用平台是构建在Spring、OSGi和Apache Tomcat之上的应用服务器,这个新的应用服务器摒弃了原有的Java EE服务器标准,自然而然地将Spring编程模型展现其中,随之而来的还有一套基于OSGi内核构建的全新...
用户可以通过解压这个文件,然后按照官方文档的指引在本地环境中安装和配置Virgo服务器,以便在Apache Tomcat上运行OSGi应用。 使用Virgo服务器,开发者可以享受到以下优势: 1. **模块化开发**:OSGi的模块系统...
这部分内容重点介绍了如何利用Eclipse Platform Development Environment (PDE)来进行OSGi应用的开发,包括准备OSGi目标平台、开发OSGi应用、运行OSGi应用以及维护OSGi元数据等方面。 #### 面向B/S应用的OSGi实战 ...
标题中的“WEB容器托管OSGi容器(轻量级集成方式)”是指在Web应用程序服务器(如Tomcat、Jetty等)中嵌入OSGi(Open Service Gateway Initiative)框架,实现服务组件的轻量化管理和部署。OSGi是一种动态模块化系统...
2. **Web应用**:OSGi可以用于构建可热部署的Web服务器,如Jetty或Tomcat,使得Web应用的组件化和维护更加方便。 **OSGi与常见框架集成** 1. **Spring框架**:Spring支持OSGi,可以使用OSGi Bundle作为Spring的...
4. **Virgo Tomcat Server**: 是一个基于OSGi的服务器,支持Spring DM(Dynamic Module),是Spring OSGi应用的理想运行平台。 **二、环境配置** 1. **Eclipse Maven配置**: 需要在Eclipse中设置Maven的安装路径和...
通过以上步骤,您已经成功地完成了Tomcat的安装、配置和测试工作,并学会了如何使用Eclipse发布Java项目到Tomcat服务器上。这对于Java Web开发人员来说是非常重要的技能之一,能够帮助开发者高效地进行项目开发和...
一个OSGi应用由多个bundle组成,每个bundle负责特定的功能。 2. **协作机制**:J2EE应用之间的协作主要通过接口和API实现,而OSGi允许bundle之间通过共享Java包、发布或引用服务进行交互。这意味着OSGi提供了更灵活...