(OSGI应用与实践)运行petstore例子

    最近在看去年买的一本叫作《OSGI原理与最佳实践》一书,在书中的第三章讲到一篇如何运行一个建立在springdm上的petstore程序。经过反复的出错和实践,终于按照书上的相关步骤弄出一个可以运行的例子。

    书上所用的springdm为1.0版,而我这里用的是spring2.0 m1版,所以有些地方的配置可能和书上不一致。

    首先准备以下文件:

    Bootstrap

    ProductDal

    ProductList

    ProductManagement

    ShoppingCart

    ShoppingCartDal

    utils

    以上这些文件是从相应的source中直接导入到eclipse中,由于使用的是默认的编译选项,所以需要修改默认的Bundle-ClassPath,默认的是相应的工程名, 我这里修改为/bin(即eclipse默认的编译输出目录)。

   接下来,导入相应的springdm2.0的相应包

   1),

   org.springframework.osgi.core

   org.springframework.osgi.extender

   org.springframework.osgi.io

   org.springframework.osgi.web

   org.springframework.osgi.web.extender

   2),

   org.springframework.osgi.jetty.start.osgi

   org.springframework.osgi.jetty.web.extender

   3),

   org.springsource.javax.servlet

   org.springsource.net.sf.cglib

   org.springsource.org.aopalliance

   org.springsource.org.apache.log4j

   org.springsource.org.objectweb.asm

   org.springsource.slf4j.api

   org.springsource.slf4j.log4j

   org.springsource.slf4j.org.apache.commons.logging

   4),

    org.mortbay.jetty.server

    org.mortbay.jetty.util

   

    以上的相应包均从springdm2.0的dist和相应的lib包导入到eclipse中,其中第1部分从dist目录导入,第2部分,导入springdm与jetty融合的相应配置包,第3部分为相应运行所依赖的相应包,第4部分为jetty的运行服务器。这里需要注意的是不要导入eclipse所自带的jetty包,因为第2部分的包要求所依赖的jetty包的版本为6.1.9(即springdm自带的jetty包)。

     接下来,导入spring的相应包,此处的spring要求为3.0以上的版本(因为springdm2.0要求spring的相关包,版本为[3.0,4.0)),下载相应的spring包,导入以下包

    org.springframework.aop

    org.springframework.asm

    org.springframework.beans

    org.springframework.context

    org.springframework.context.support

    org.springframework.core

    org.springframework.expression

    org.springframework.jdbc

    org.springframework.transaction

    org.springframework.web

   

    导入完毕之后,设置工程中(即petstore)中所缺少的相应部分。配置运行时的包,即引用equinox的相应包,引用的包如下:

    eclipse自带的运行包

    现在可以运行了,运行之后,输入网址:http://localhost/petstore/app即可访问了。有一个问题就是,如果观看运行的终端,可以看到jetty启动了两个console,一个为默认的80,另一个为8080,其中第一个为org.eclipse.equinox.http.jetty提供的默认80,另一个为org.springframework.osgi.jetty.start.osgi提供的8080。如果把后一个去掉,则会在运行中报一个有关jetty没有成为相应的service的错误(不知道为什么)。

   

     配置过程中,出现了很多问题,比如servlet中无论如何也没有注入相应的httpService,最后才发现没有导入httpService的启动包,即(org.eclipse.equinox.http.jetty,它调用了由org.eclipse.quinox.http.servlet实现的httpserviceImpl,从而实现了org.eclipse.osgi.services,但这个实现类是由http.jetty包来启动的)。详细启动逻辑见http://flym.iteye.com/blog/687216

    OK,终于算是启动成功了,接下来,得好好研究下springdm。不过感觉这一个工程所导入的jar也太多了吧,可能是由于刚开始做osgi的工程,以前弄一大堆jar包习惯还没有改变过来。

    

你可能感兴趣的:(eclipse,spring,应用服务器,log4j,osgi)