`

部署并运行你的OSGi Web应用程序

 
阅读更多

【51CTO精选译文】本文是《你好,OSGi 》系列的最 后一篇,讲述在Eclipse外部如何执行OSGi容器。在Eclipse IDE内部执行Equinox OSGi容器对于开发非常便利。不过,当你的应用程序准备好部署,如果你想要在Eclipse外部执行你的OSGi容器,可以按照下面的步骤从命令行运行 你的Equinox OSGi容器。

51CTO编辑推荐: OSGi入门与实践全攻略

从Equinox下载完整的eclipse-equinox-<buildno>.zip 二 进制文件框架。本文中的示例代码在版本3.3下进行测试。

解压缩下载的文件,保存到你的计算机上。本示例将使用目录 C:/software。

在你的计算机上建立一个目录,命名为 C:/equinox (或对于你的操作系统等同的目录)。

从 C:/software 将下面的JAR文件复制到 C:/equinox:

1. org.eclipse.osgi_<version>.jar
2. javax.servlet v2_4.jar
3. org.apache.commons.logging v1_0_4.jar
4. org.eclipse.equinox.http.jetty.jar
5. org.eclipse.equinox.http.registry.jar
6. org.eclipse.equinox.http.servlet.jar
7. org.mortbay.jetty v5_1_11.jar
8. org.eclipse.equinox.common_<version>.jar
9. org.eclipse.equinox.registry_<version>.jar
10. org.eclipse.osgi.services_<version>.jar

现在,打开命令控制台,将目录更改到 C:/equinox,然后执行下面的目录:

java -jar org.eclipse.osgi_<version>.jar -console

Equinox OSGi容器将启动,并且你将会看到OSGi>提示符。

安装、验证和执行插件

需要指出的是,虽然你已经将所有的插件 JAR 文件复制到了 C:/equinox 目录,但所有这些插件还没有安装到OSGi容器。你必须一个一个地进行安置。可以通过下面的命令语句在OSGi容器中安装插件:

1. install file:<pathtoplug-injar>

例如,如果你想要安装javax_servlet v2_4插件,那么你应该执行下面的这行命令:

1. install file:javax.servlet_2.4<version>.jar

现在,使用install命令安装所有必须的插件。

在你的全部插件都安装完毕后,你可以通过执行ss命令来它们进行验证。OSGi容器将显示一个包含三个列的表格列出所有的已安装插件:第一列显示插 件的ID,第二列显示插件的状态,第三列显示套件的名称。

请注意,所有套件都处于INSTALLED状态,除了INSTALLED套件,它处于ACTIVE状态。因此,你下一步需要做的是启动所有插件。可 以通过下面的命令启动插件:

1.start <pluginid>

在本例中,javax.servlet v2_4套件的ID是1,所以你可以这样来启动它:

  1. start1

所有插件都启动之后,你可以通过调用ss命令来对他们进行验证。在你的OSGi控制台上显示的内容应类似于图 2 所示。

 Jetty 控制台
图 2. Jetty 控制台

最后,你可以通过在浏览器中输入 http://localhost/helloworld.html 来测试你的OSGi Web应用程序是否正确配置。你应该可以看到消息“Hello from helloworld.html”。

将OSGi容器嵌入到servlet容器

在这个小节,我们将来看看OSGi Web应用程序的另一种部署方式,它将Equinox OSGi容器嵌入到一个Web应用程序中,然后在servlet容器(如Apache Tomcat)中部署该Web应用程序。Equinox框架提供bridge.war,一个模板,具有Equinox OSGi容器的Web应用程序将这个模板嵌入到容器中。

bridge.war应用程序包含org.eclipse.equinox.servletbridge.BridgeServlet。这个 servlet负责对你的OSGi容器进行初始化。每当接收到一个客户请求,它将查看是否存在一个OSGi插件可以处理该请求;如果存在,它将控制转发至 该插件。下面的步骤向你演示了如何使用bridge.war中的com.javaworld.sample.osgi.web.programmatic 和com.javaworld.sample.osgi.web.declarative插件。

如果你还没有安装Apache Tomcat,请下载Apache Tomcat 5.5并将其解压到操作系统文件夹 C:/software(或相应的同等文件夹)。

下载bridge.war , 然后将其安装到你的Apache Tomcat服务器。一旦安装完成,启动bridge.war Web应用程序。

通过在浏览器中访问http://localhost:8080/bridge/sp_test 来 测试Bridge Web应用程序。你应看到一条消息:“Servlet delegate registered - org.eclipse.equinox.http.servlet.HttpServiceServlet”。

现在,返回到你的Eclipse IDE。在包资源浏览器试图中,右键单击并选择 Export > Deployable plug-ins and fragments,然后单击下一步按钮。在Deployable Plug-ins and fragments对话框中,输入如图 3所示的值。

导出插件
图 3. 导出插件

单击“完成”,Eclipse 将com.javaworld.sample.osgi.web.declarative.jar 和 com.javaworld.sample.osgi.web.programmatic.jar导出到 C:/software/apache-tomcat-5.5.25/webapps/bridge/WEB-INF/eclipse/plugins 文件夹(或你所用操作系统的同等文件夹)。请注意,Bridge Web应用程序将 C:/software/apache-tomcat-5.5.25/webapps/bridge/WEB-INF/ 文件夹中的内容复制到Tomcat 工作目录并从那里执行。当你网址:http://localhost:8080/bridge/sp_deploy 时,Bridge Web 应用程序将这些新的 JAR 文件复制到 C:/software/apache-tomcat-5.5.25/work/Catalina/localhost/bridge/eclipse /plugins。

现在,重启你的Tomcat服务器。一旦Tomcat重启完成,你将可以看到Tomcat控制台中的 osgi> 提示符。

输入ss来显示所有已安装到bridge.war中的OSGi套件。确认 com.javaworld.sample.osgi.web.declarative和 com.javaworld.sample.osgi.web.programmatic已安装到 OSGi容器;如果没有安装,可通过执行 install file:<jarfilename> 命令进行安装。

在 OSGi命令提示符下,执行 start <bundleid> 命令,启动 com.javaworld.sample.osgi.web.declarative.jar 和 com.javaworld.sample.osgi.web.programmatic.jar 插件。

现在,你应该能够在浏览器中输入 http://localhost:8080/bridge/helloworld.html 来访问 helloworld.html 了。

探索该应用程序

这个Bridge应用程序提供了以下URL,利用它们,你可以从网络浏览器来控制你的OSGi容器。(对于该示例,这些地址应加在 http://localhost:8080/bridge/ 后面;该URL可能会有所变化,要看你的Tomcat安装情况。)

1. sp_deploy:复制平台内容到工作或临时目录
2. sp_undeploy:工作目录删除 Eclipse 的副本
3. sp_redeploy:对平台进行重置(比如:终止、取消部署、部署以及启动)
4. sp_start:启动一个已部署平台
5. sp_stop:终止平台
6. sp_test:提供一个正常的检测,并且当基于 OSGi 的servlet 已准备好接收请求时终止

继续研究探索这个应用程序吧,别忘了给自己一个鼓励:你已经开发出了你的第一个OSGi Web应用程序!

总结

虽然OSGi的来源在于提供嵌入式和客户端解决方案,但很多人认为,它的强项将在于服务器端的开发。服务器端Equinox是一个开始,利用它,可 以更加简便地将OSGi的可插入、基于组件的开发模式应用到Web应用程序。(另一个是SpringSource应用程序平台, 但不在本文讲解的范围之内。)通过这篇文章中的示例,你已经向OSGi Web应用程序开发迈出了第一步。你已经在Eclipse中设置了OSGi Web应用程序开发环境;学习了注册OSGi套件的两种方式:程序方式和声明方式;以及,详细了解了如何使用这两种不同的方式对基于OSGi的Web应用 程序进行部署:将Jetty servlet容器插件嵌入到 Equinox,并将Equinox嵌入到Tomcat。

在这个系列文章中,你学习如何开始创建基于OSGi的应用程序,学习了OSGi开发模式以及创建了一个简单的包含两个套件的客户-服务器 (client-server)应用程序。你还学习了Spring动态模型如何简化了OSGi容器中Spring应用程序的开发,以及服务器端 Equinox如何提供了一个可访问的框架以在服务器环境中开发和部署OSGi应用程序。

所有这些实践练习为你打开了OSGi开发之门,希望这个系列的文章能够帮助你更好地理解OSGi和Java的模块化,以及将它应用到你的未来 Java开发项目中。

分享到:
评论

相关推荐

    CVE-2018-11788:Apache Karaf XXE漏洞(CVE-2018-11788)

    运行时是“多方面的”,这意味着您可以部署不同类型的应用程序:OSGi或非OSGi,Web应用程序,基于服务的等等。 在最近对Apache Karaf的研究中,我发现其XML解析器中存在一些XXE(XML外部实体注入)漏洞。 导致解析...

    org.apache.aries.blueprint.web-1.1.0.jar

    Aries项目正在提供一组可插入的Java组件,以支持... 这包括由OSGi联盟企业专家组(EEG)定义的以应用程序为中心的规范的实现和扩展,以及用于多捆绑应用程序的组装格式,以便将其部署到各种基于OSGi的运行时中。aries

    hawtio:Hawtio Web控制台可帮助您管理JVM内容并保持冷静!

    是用于管理Java应用程序的轻型模块化Web控制台。 Hawtio有例如:Apache ActiveMQ,Apache Camel,JMX,OSGi,Logs,Spring Boot和Diagnostics。 您可以使用自己的插件动态扩展Hawtio或自动在JVM中发现插件。 唯一...

    org.apache.aries.blueprint.web-1.1.0-source-release.zip

    Aries项目正在提供一组可插入的Java组件,以支持... 这包括由OSGi联盟企业专家组(EEG)定义的以应用程序为中心的规范的实现和扩展,以及用于多捆绑应用程序的组装格式,以便将其部署到各种基于OSGi的运行时中。aries

    java开源包1

    jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。 Java 绘图框架 JGraphEd JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java ...

    java开源包11

    jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。 Java 绘图框架 JGraphEd JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java ...

    java开源包2

    jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。 Java 绘图框架 JGraphEd JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java ...

    java开源包3

    jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。 Java 绘图框架 JGraphEd JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java ...

    java开源包6

    jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。 Java 绘图框架 JGraphEd JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java ...

    java开源包5

    jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。 Java 绘图框架 JGraphEd JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java ...

    java开源包10

    jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。 Java 绘图框架 JGraphEd JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java ...

    java开源包4

    jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。 Java 绘图框架 JGraphEd JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java ...

    java开源包8

    jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。 Java 绘图框架 JGraphEd JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java ...

    java开源包7

    jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。 Java 绘图框架 JGraphEd JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java ...

    java开源包9

    jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。 Java 绘图框架 JGraphEd JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java ...

    JAVA上百实例源码以及开源项目

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    java开源包101

    jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。 Java 绘图框架 JGraphEd JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java ...

    Java资源包01

    jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。 Java 绘图框架 JGraphEd JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java ...

    JAVA上百实例源码以及开源项目源代码

    Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...

Global site tag (gtag.js) - Google Analytics