springdm:基于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配置参考:

Manest-Version: 1.0

Bundle-ManestVersion: 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/es/,

.

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->org.springframework.web.context.ContextLoaderListener</listener->

</listener>





<servlet>

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

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

</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" erface="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应用了更多相关问题还会在后续文章中逐讨论
Tags:  springwebservice springwebflow springdmtutorial springdm

延伸阅读

最新评论

发表评论