基于SpringDM的WEB應用開發(fā)

字號:

Spring DM 1.1.x的特性便是它可以支持在其中部署WEB應用,我使用后感覺這是個很酷的特性,我甚至覺得用這種方式開發(fā)基于OSGi WEB應用比使用Spring DM Server更好,至少目前你可以獲得更好的便攜性(可以在多個Spring DM支持的OSGi平臺上運行),并且Spring DM Server并沒有提供更多的企業(yè)應用支持。
    不過對于剛使用Spring DM進行WEB應用開發(fā)的人來說,成功地配置卻不是一件容易的事。以下詳細的講解一下相關配置。
    1 運行環(huán)境所需的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的發(fā)布包中找到,以上Bundles的start level設置為2。
    2 加入Log4j日志配置Bundles
    這個Bundles的目的在于提供log4j.properties,詳細做法可以參考本人的”spring osgi快速入門”
    3 開發(fā)WEB應用
    WEB應用的開發(fā)方式和普通的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 dm的IoC功能,web.xml中需要加入一些特定配置,類似于使用Spring時的配置,web.xml配置參考如下:
    
        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">
    Simple Osgi WebApp Bundle
    Simple OSGi War
    
    contextClass
    org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext