OSGi和嵌入式Jetty

出自 kirkk.com ,点击 此处 进入原文链接《OSGi and Embedded Jetty》。

翻译:Link

    在开发Web应用程序的时候,有两种方法可以使Web应用程序与OSGi一起工作:

  • 在应用程序服务端中嵌入OSGi
  • 在OSGi运行时中嵌入应用程序服务端

     在这个贴子中,我将把应用服务端Jetty嵌入到OSGI的运行时Felix中。同我过去的贴子(简单的OSGi服务OSGi和模块化 ,和OSGi与Spring )一样,我会试着用最简单的工具来完成这项工作,让读者更具体验。这意味着Ant , Felix , Subversion , 和简单的文本编辑器 ,以及一个简单的终端窗口。这些代码可以在我的Google代码库 里找到。你可以在那里查找名称为HelloWorldWebJSP 的工程。

    如同工程的名字所显示的那样,我不仅会将Jetty嵌入到Felix中,我也会确保可以支持JSP页面,这会需要一些额外的技巧。如果你需要了解更多的细节,请添加评论或者与我联系 ,那就让我们开始吧!

得到Felix

    我使用Felix 1.4.1 来完成这个练习。我也在1.4.0版本上进行了测试,所以这两个版本都是可行的。如果你还没有Felix,先得到它 吧.

检出HelloWorldWebJSP

    下一步要做的是从Google的代码库里面检出这个工程。如果你希望使用工程中包含的脚本来启动Felix,你必须将工程与Felix的目录一起检出。为了检出这个工程,你需要subversion 。然后,浏览包含Felix的目录然后如下这样操作:

     svn checkout http://kcode.googlecode.com/svn/trunk/osgi/HelloWorldWebJSP

    为了方便,我提交了Felix bundle缓存,因此你不需要安装所有必须的bundle。环境已经配置好了。但是,如果你想自己建立环境,你需要删除felix-cache目录,在 启动Felix后,一步步完成安装必须的bundles的过程。我更希望等到你有机会完成这个例子的剩余部分后才做这件事情。如果有什么事情出错了,你都 可以做一个干静的检出重新开始。你需要安装的bundle在/web/lib目录下都可以找到,它们是:

    jetty-6.1.7.jar
    jetty-util-6.1.7.jar
    pax-web-service-0.5.1.jar
    osgi.cmpn.jar
    pax-web-jsp-0.5.1.jar

启动Felix

    下一步是启动Felix,打开终端窗口,浏览到HelloWorldJSP目录。你可以使用已经写好的脚本(假如你的目录结构是正确的话),或者你可以从命令行中象下面这样启动它,其中将path to felix 替换成你的Felix本地目录:

    java -Dfelix.config.properties=file:./config.properties -jar path to felix /felix-1.4.1/bin/felix.jar

    注意到你可以使用工程中包含的config.properties文件,而不是Felix默认的config.properties文件。这是因为我们需 要指定额外的导入包来使程序可以工作(javax.security.cert)。另外,如果HelloWorldWebJSP和Felix目录不是并行 的,你需要更改config.properties文件中指明的指向Felix bundle文件的目录。

试一试

现在,Jetty可以在Felix中运行了,你可以在浏览器中浏览到主页。为了达到这一点,你只需要简单的把你的浏览器指向http://localhost:8380/ 。点击hello ,点击goodbye 。为了见到JSP,点击serves a JSP 链接。

配置浏览

    这里面并没有什么魔法,但是找到所有让它发生的bundle是确实需要一些时间的,尤其是那些使JSP页面工作的bundle。尽管如此,这里一共有10 个bundle,包括4个Felix bundle,以及我们开发的作为web应用程序的一部分的bundle(在./web/bin目录下的web.jar)。为了查看已经安装的所有 bundle的列表,在终端窗口中键入如下命令:

    ps

    作为特别的兴趣,你会看到两个PAX Web 的bundle。OPS4J Pax Web - Service (0.5.1) 是提供Jetty集成(并实际上启动Jetty)的bundle,而OPS4J Pax Web - Jsp Support (0.5.1) 提供了通过Jasper 编译JSP的功能。注意到大多数在Pax Web网站上的例子都使用了Maven。因为我不想使用Maven,我是通过手工在Felix控制台安装这些bundle的。

代码浏览

    Web应用程序最关键的因素是Activator 。它注册了servlet,HTML页面和JSP页面,因此Jetty可以使其工作。这就是PAX Web使工作更简单的地方,因为它封闭了与Jasper的集成。

进一步的实验

    你可以做几件有趣的事情来进一步实验一下。

    首先,试着自己建立这个环境。因为当你检出它的时候,工程已经包含了所有的bundle,这显得并不是很困难。为了完成这一点,先在终端窗口中用下面的命令关闭已经存在的Felix实例:

    shutdown

    然后,删除felix-cache目录。这将给你一个没有安装任何bundle的干净的Felix实例。启动Felix,然后一个接一个地从Felix中用命令安装合适的bundle(如上面列出的),如下。

    install file:./path to bundle

    必须注意,如果HelloWorldWebJSP和Felix在文件系统中没有处于并行位置,你需要修改config.properties,指出 Felix bundle的路径。它们在Felix下面的bundle目录中可以找到。而且,不要忘记安装在bin目录下的web.jar(你或许需要运行构建脚 本),因为这是一个包含了我们的应用类的JAR文件。然后,在终端的Felix命令行中用下面的命令来启动bundle,这里bundle id 是用ps命令获得的bundle的id号。

    start bundle id

    第二,对JSP,HTML或者Servlet做一些修改。在web目录下有一个Ant构建脚本可以让你重新编译。你或许需要修改构件的脚本来确保所有的新 文件都被包含在生成的JAR文件中,这取决于你修改或者增加了什么。一但编译完成,在控制台中重新将web.jar部署到Felix中。做这些事情的时候 你不需要重启Felix。只需要这样做,这里bundle id 是Hello World Web bundle(例如:web应用程序)的id号:

    stop bundle id
     update bundle id
    refresh bundle id
    start bundle id

    第三,尝试在Activator中注册另一个的serlet然后发布它。或者创建和发布一个JSP。或者增加一些图像和其他资源。你可以修改构件脚本将它 们包含在已经在Felix上部署的web.jar中,或者你可以创建你自己的JAR文件并把它与web.jar一起部署。你可以在不中断已经运行的 Felix的情况下发布这些修改,这提供了对OSGi的灵活性深刻感受并使得环境的适应成为可能。不管你做什么,这个最基本的安装能够给你一个利用 OSGi体验web应用程序的基础。

   我希望不久后,我会对另一种配置——在应用程序服务端中嵌入OSGi进和实验。

    更新:上面的例子中使用了Felix,同时我也在Equinox 上对这个例子进行测试。你可以按照相同的步骤进行,结果也是一样的。除了Equinox解决方案的默认端口是8080,如果你希望改变它,你必须自己来做。另外,使用Equinox的时候,用ss命令替换ps命令来查看bundle列表。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值