J2EE之巅

 

基于Spring DM的WEB应用开发

 

Spring DM 1.1.x的最大特性便是它可以支持在其中部署WEB应用,我使用后感觉这是个很酷的特性,我甚至觉得用这种方式开发基于OSGi WEB应用比使用Spring DM Server更好,至少目前你可以获得更好的便携性(可以在多个Spring DM支持的OSGi平台上运行),并且Spring DM Server并没有提供更多的企业应用支持。

不过对于刚使用Spring DM进行WEB应用开发的人来说,成功地配置却不是一件容易的事。以下详细的讲解一下相关配置。

1  运行环境所需的Bundles

0             ACTIVE      system.bundle_3.2.2.R32x_v20070118

1             ACTIVE      com.springsource.slf4j.api_1.5.0

2             RESOLVED    org.springframework.osgi.jetty.web.extender.fragment.osgi_1.0.0

                           Master=46

3             ACTIVE      org.springframework.bundle.osgi.extender_1.0.1.v200803070100

4             ACTIVE      org.springframework.bundle.spring.core_2.5.5

5             ACTIVE      org.springframework.bundle.spring.web_2.5.5

6             ACTIVE      com.springsource.org.objectweb.asm_2.2.3

7             RESOLVED    osgi_log_config_1.0.0

                           Master=36

8             ACTIVE      org.springframework.bundle.osgi.core_1.0.1.v200803070100

9             ACTIVE      com.springsource.slf4j.log4j_1.5.0

10           ACTIVE      org.springframework.bundle.spring_2.5.2.v200803070100

11           ACTIVE      org.springframework.bundle.spring.context_2.5.5

12           ACTIVE      javax.servlet_2.4.0.v200706111738

13           ACTIVE      org.springframework.osgi.servlet-api.osgi_2.5.0.SNAPSHOT

14           ACTIVE      com.springsource.net.sf.cglib_2.1.3

15           ACTIVE      org.springframework.bundle.spring.beans_2.5.5

16           ACTIVE      javax.servlet.jsp_2.0.0.v200706191603

18           ACTIVE      org.springframework.osgi.jetty.start.osgi_1.0.0

19           ACTIVE      org.springframework.bundle.osgi.io_1.0.1.v200803070100

20           ACTIVE      org.aopalliance_1.0.0

21           ACTIVE      org.springframework.bundle.spring.context.support_2.5.5

23           ACTIVE      com.springsource.org.aopalliance_1.0.0

24           ACTIVE      org.springframework.bundle.spring.aop_2.5.5

25           ACTIVE      com.springsource.slf4j.org.apache.commons.logging_1.5.0

30           ACTIVE     org.objectweb.asm_2.2.3

33           ACTIVE      org.mortbay.jetty.server_6.1.9

35           ACTIVE      org.mortbay.jetty.util_6.1.9

36           ACTIVE      org.springframework.osgi.log4j.osgi_1.2.15.SNAPSHOT

                           Fragments=7

37           ACTIVE      org.mortbay.jetty_5.1.11.v200706111724

43           ACTIVE      org.springframework.bundle.osgi.extender_1.1.2

44           ACTIVE      org.springframework.bundle.osgi.io_1.1.2

45           ACTIVE      org.springframework.bundle.osgi.web_1.1.2

46           ACTIVE      org.springframework.bundle.osgi.web.extender_1.1.2

                           Fragments=2

47           ACTIVE      org.springframework.bundle.osgi.core_1.1.2

以上这些Bundles可以在spring dm 1.1.2的发布包中找到,以上Bundlesstart level设置为2

2 加入Log4j日志配置Bundles

这个Bundles的目的在于提供log4j.properties,详细做法可以参考本人的”spring osgi快速入门

3 开发WEB应用

WEB应用的开发方式和普通的WEB基本上一样,只是加入一些OSGi的配置。

大致结构如下:

META-INF

               MANIFEST.MF

WEB-INF

               Classes

               Lib

               Web.xml

               applicationContext.xml

1 MANIFEST.MF配置参考:

Manifest-Version: 1.0

Bundle-ManifestVersion: 2

Bundle-Name: Osgi_web_app Plug-in

Bundle-SymbolicName: osgi_web_app

Bundle-Version: 1.0.0

Bundle-Vendor: ccsoft

Import-Package: javax.servlet,

 javax.servlet.http,

 javax.servlet.resources;version="2.4.0",

 org.ccsoft.service,

 org.springframework.osgi.web.context.support;version="1.1.2",

 org.springframework.web.context,

 org.springframework.web.context.support

Bundle-ClassPath: WEB-INF/classes/,

 .

Require-Bundle: org.springframework.bundle.osgi.core,

 org.springframework.bundle.osgi.io,

 org.springframework.bundle.spring.beans,

 org.springframework.bundle.spring.context,

 org.springframework.bundle.spring.core

2 为了在web应用中使用spring dmIoC功能,web.xml中需要加入一些特定配置,类似于使用Spring时的配置,web.xml配置参考如下:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

      version="2.4">

      <display-name>Simple Osgi WebApp Bundle</display-name>

      <description>Simple OSGi War</description>

      <context-param>

       <param-name>contextClass</param-name>                                                                        

       <param-value>org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext</param-value>   

      </context-param>

     

      <listener>

       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>                       

      </listener>

      <servlet>

            <servlet-name>MyServlet</servlet-name>

            <servlet-class>org.ccsoft.web.MyServlet</servlet-class>

      </servlet>

     

      <servlet-mapping>

            <servlet-name>MyServlet</servlet-name>

            <url-pattern>/servlet</url-pattern>

      </servlet-mapping>

     

     

</web-app>

至于applicationContext.xml则是标准的spring dm配置文件形式,只是没有放在我们所熟悉的位置(META-INF/spring

配置示例:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xmlns:osgi="http://www.springframework.org/schema/osgi"

 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

                               http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">

     

      <osgi:reference id="HelloServiceOsgi" interface="org.ccsoft.service.SpeakService"/>

</beans>

在你的WEB应用中可以使用如下代码来访问别的Bundle提供的服务

WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(req.getSession().getServletContext());

SpeakService ss=(SpeakService)ctx.getBean("HelloServiceOsgi");

与你使用Spring开发WEB应用的写法是完全一致的。

好了现在你可以利用spring dm开发你的web应用了。更多相关问题还会在后续文章中逐一讨论。

蔡超

软件架构师

Chao.cai@hp.com

Chaocai2001@yahoo.com.cn

致力于OSGi在中国的推广

posted on 2008-12-22 17:20 超越巅峰 阅读(3151) 评论(1)  编辑  收藏

评论

# re: 基于Spring DM的WEB应用开发[未登录] 2010-07-15 11:16 Jack

我现在也在做spring-dm和war包相关的部署,我看了一下配置和你这个差不多,但是一运行就会出现OsgiBundleXmlWebApplicationContext这个类NoClassDefFoundError这样的错误,请问你有没有遇到过这个问题呢?  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(12)

随笔分类(54)

随笔档案(59)

文章分类(2)

文章档案(1)

相册

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜