J2EE之巔

           

          基于Spring DM的WEB應(yīng)用開發(fā)

           

          Spring DM 1.1.x的最大特性便是它可以支持在其中部署WEB應(yīng)用,我使用后感覺(jué)這是個(gè)很酷的特性,我甚至覺(jué)得用這種方式開發(fā)基于OSGi WEB應(yīng)用比使用Spring DM Server更好,至少目前你可以獲得更好的便攜性(可以在多個(gè)Spring DM支持的OSGi平臺(tái)上運(yùn)行),并且Spring DM Server并沒(méi)有提供更多的企業(yè)應(yīng)用支持。

          不過(guò)對(duì)于剛使用Spring DM進(jìn)行WEB應(yīng)用開發(fā)的人來(lái)說(shuō),成功地配置卻不是一件容易的事。以下詳細(xì)的講解一下相關(guān)配置。

          1  運(yùn)行環(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ā)布包中找到,以上Bundlesstart level設(shè)置為2

          2 加入Log4j日志配置Bundles

          這個(gè)Bundles的目的在于提供log4j.properties,詳細(xì)做法可以參考本人的”spring osgi快速入門

          3 開發(fā)WEB應(yīng)用

          WEB應(yīng)用的開發(fā)方式和普通的WEB基本上一樣,只是加入一些OSGi的配置。

          大致結(jié)構(gòu)如下:

          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應(yīng)用中使用spring dmIoC功能,web.xml中需要加入一些特定配置,類似于使用Spring時(shí)的配置,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則是標(biāo)準(zhǔn)的spring dm配置文件形式,只是沒(méi)有放在我們所熟悉的位置(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應(yīng)用中可以使用如下代碼來(lái)訪問(wèn)別的Bundle提供的服務(wù)

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

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

          與你使用Spring開發(fā)WEB應(yīng)用的寫法是完全一致的。

          好了現(xiàn)在你可以利用spring dm開發(fā)你的web應(yīng)用了。更多相關(guān)問(wèn)題還會(huì)在后續(xù)文章中逐一討論。

          蔡超

          軟件架構(gòu)師

          Chao.cai@hp.com

          Chaocai2001@yahoo.com.cn

          致力于OSGi在中國(guó)的推廣

          posted on 2008-12-22 17:20 超越巔峰 閱讀(3174) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: 基于Spring DM的WEB應(yīng)用開發(fā)[未登錄](méi) 2010-07-15 11:16 Jack

          我現(xiàn)在也在做spring-dm和war包相關(guān)的部署,我看了一下配置和你這個(gè)差不多,但是一運(yùn)行就會(huì)出現(xiàn)OsgiBundleXmlWebApplicationContext這個(gè)類NoClassDefFoundError這樣的錯(cuò)誤,請(qǐng)問(wèn)你有沒(méi)有遇到過(guò)這個(gè)問(wèn)題呢?  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(12)

          隨筆分類(54)

          隨筆檔案(59)

          文章分類(2)

          文章檔案(1)

          相冊(cè)

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 九龙城区| 英山县| 遵义县| 寿阳县| 石林| 石嘴山市| 眉山市| 同德县| 河西区| 丹寨县| 桓仁| 壶关县| 河津市| 商都县| 迁西县| 津南区| 体育| 天峻县| 泾阳县| 山东省| 贺州市| 泗洪县| 调兵山市| 碌曲县| 旺苍县| 江陵县| 奉化市| 定兴县| 丹棱县| 镶黄旗| 乐陵市| 桃园县| 江川县| 沧源| 宁阳县| 临桂县| 民和| 化德县| 抚松县| 建湖县| 崇仁县|