基于OSGi和Spring开发企业级Web应用

作为一个新的事实上的工业标准,OSGi已经受到了广泛的关注,就在不久前EclipseCon也发布企业级OSGi标准,而IBM以及Eclipse也宣称将大力发展Java模块化。Spring是一个著名的轻量级Java EE开发框架,其特点是面向接口编程和非侵入式的依赖注入。

编辑推荐:OSGi入门与实践全攻略 Spring开源框架技术

将OSGi和Spring结合能充分发挥二者各自的特长,更好地满足企业级应用开发的需求。Spring开发组织在2008年发布了将OSGi和Spring结合的第一个版本:Spring-DM。

dmServer是一个完全模块化部署的,基于OSGi的Java服务器,为运行企业Java应用和Spring应用提供更加强大的灵活性和可靠性。SpringSource应用平台是构建在Spring、OSGi和ApacheTomcat之上的应用服务器,这个新的应用服务器摒弃了原有的JavaEE服务器标准,自然而然地将Spring编程模型展现其中,随之而来的还有一套基于OSGi内核构建的全新部署和打包系统。

实例教程:

一、.指定TargetPlatform到所用到的所有的bundle包的目录中。

二、创建一个Service接口bundle

新建一个接口类:com.infotech.test.common.ShowMsgInfo;

同时新加一个接口方法:publicStringGetMsgInfo();

打开这个接口bundle工程的MANIFEST.MS文件,在Runtime/ExprotedPackages中添加刚刚新建的接口类,使之对外提供这个服务。

三、创建一个接口bundle的实现bundle

打开这个接口bundle工程的MANIFEST.MS文件,在Dependencies/ImportedPackages中添加上面新建的接口类:

新建一个接口实现类:ShowMsgInfo:

在这个类中,实现接口中的方法:

 
 
 
 
  1. packagecom.infotech.test.service;
  2. importcom.infotech.test.common.IShowMsgInfo;
  3. publicclassShowMsgInfoimplementsIShowMsgInfo{
  4.  @Override
  5.  publicStringGetMsgInfo(){
  6.   return"HelloWord!!!";
  7.  }
  8. }

接下来,我需要将这个实现类发布成为一个OSGI服务:在工程新一个目录OSGI-INF,并新建一个components.xml文档。

 
 
 
 
  1.  
  2.  
  3.   
  4.  

打开这个接口bundle工程的MANIFEST.MS文件,添加一行:

 
 
 
 
  1. Service-Component:OSGI-INF/components.xml

#p#
四、接下来,我们创建一个WEB应用bundle:

1.新建一个网页bundle工程:

2.在工程目录中创建WEB-INF/lib、WEB-INF/classes两个目录。

并在WEB-INF目录中,创建Spring、jsf、及web配置文件:

3.在MANIFEST.MF文件中的配置项:Runtime/Classpath中添加刚才创建的两个目录。

4.点击Add添加我们将要使用的jar包。

5.新建一个网页就的Bean类TestBean。

 
 
 
 
  1. packagecom.infotech.test.bean;
  2. importcom.infotech.test.control.TestBeanControl;
  3. publicclassTestBean{
  4.  privateTestBeanControltestControl;
  5.  publicStringgetShowMsg(){
  6.   returntestControl.getShowMsg();
  7.  }
  8.  publicTestBeanControlgetTestControl(){
  9.   returntestControl;
  10.  }
  11.  publicvoidsetTestControl(TestBeanControltestControl){
  12.   this.testControl=testControl;
  13.  }
  14. }

6.创建一下控制类TestBeanControl

 
 
 
 
  1. packagecom.infotech.test.control;
  2. importcom.infotech.test.common.IShowMsgInfo;
  3. publicclassTestBeanControl{
  4.  privatestaticIShowMsgInfomsginfoService;
  5.  publicStringgetShowMsg(){
  6.   returnmsginfoService.GetMsgInfo();
  7.  }
  8.  publicvoidsetMsginfoService(IShowMsgInfomsginfoService){
  9.   this.msginfoService=msginfoService;
  10.  }
  11.  publicvoidunsetMsginfoService(IShowMsgInfomsginfoService){
  12.   if(this.msginfoService==msginfoService)
  13.    this.msginfoService=null;
  14.  }
  15. }

7.打开这个接口bundle工程的MANIFEST.MS文件,在Dependencies/ImportedPackages中添加上面新建的接口服务类及WEB服务类。

8.新建一个OSGI-INF/components.xm文件,我们来引用上面发布出来的OSGI服务。

 
 
 
 
  1.  
  2.  
  3.   bind="setMsginfoService"unbind="unsetMsginfoService"
  4.   cardinality="0..1"policy="dynamic"/>

9.打开这个接口bundle工程的MANIFEST.MS文件,添加一行。

 
 
 
 
  1. Service-Component:OSGI-INF/components.xml

10.修改Application-test.xml。

 
 
 
 
  1.  
  2. 修改faces-config.xml
  3. "-//SunMicrosystems,Inc.//DTDJavaServerFacesConfig1.1//EN"
  4. "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
  5.  
  6.   xmanager_web_resources
  7.   
  8.    zh_CN
  9.   
  10.   
  11.    org.springframework.web.jsf.DelegatingVariableResolver
  12.   
  13.  
  14.  
  15.  
  16.   TestBean
  17.   com.infotech.test.bean.TestBean
  18.   session
  19.   
  20.    testControl
  21.    #{TestControl}
  22.   
  23.  
  24. index
  25. *
  26. index
  27. /index.jsp
  28.    

修改web.xml。

 
 
 
 
  1.  xmlns="http://java.sun.com/xml/ns/j2ee"
  2.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.  xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  4.  XmanagerWeb
  5.  
  6.   javax.faces.CONFIG_FILES
  7.   /WEB-INF/faces-config.xml
  8.  
  9.  
  10.   org.apache.myfaces.DETECT_JAVASCRIPT
  11.   false
  12.  
  13.  
  14.   org.apache.myfaces.PRETTY_HTML
  15.   true
  16.  
  17.  
  18.   org.apache.myfaces.AUTO_SCROLL
  19.   true
  20.  
  21.  
  22.   contextConfigLocation
  23.   /WEB-INF/Application*.xml
  24.  
  25.  
  26.   
  27.    org.springframework.web.context.ContextLoaderListener
  28.   
  29.  
  30.  
  31.   MyFacesExtensionsFilter
  32.   
  33.    org.apache.myfaces.webapp.filter.ExtensionsFilter
  34.   
  35.   
  36.    maxFileSize
  37.    100m
  38.   
  39.  
  40.  
  41.   MyFacesExtensionsFilter
  42.   FacesServlet
  43.  
  44.  
  45.   MyFacesExtensionsFilter
  46.   /faces/myFacesExtensionResource/*
  47.  
  48.  
  49.   SetCharacterEncoding
  50.   
  51.    org.springframework.web.filter.CharacterEncodingFilter
  52.   
  53.   
  54.    encoding
  55.    UTF-8
  56.   
  57.  
  58.  
  59.   SetCharacterEncoding
  60.   *.jsf
  61.  
  62.  
  63.   FacesServlet
  64.   javax.faces.webapp.FacesServlet
  65.   1
  66.  
  67.  
  68.   FacesServlet
  69.   *.jsf
  70.  
  71.  
  72.   index.jsf
  73.   index.jsp
  74.  

11.导入三个工程:

 
 
 
 
  1. Catalina.config
  2. Server.config
  3. Org.springframework.osgi.log4j.config

12.好了,写一个测试页:index.jsp。

 
 
 
 
  1. <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
  2. <%@taglibprefix="f"uri="http://java.sun.com/jsf/core"%>
  3. <%@taglibprefix="h"uri="http://java.sun.com/jsf/html"%>
  4. <%@taglibprefix="x"uri="http://myfaces.apache.org/tomahawk"%>
  5. <%@taglibprefix="c"uri="http://java.sun.com/jstl/core"%>
  6. <%@taglibprefix="t"uri="http://jsftutorials.net/htmLib"%>
  7.  
  8.  

13.最后创建一个Debug环境。

运行结果:

当前题目:基于OSGi和Spring开发企业级Web应用
网站地址:http://www.mswzjz.cn/qtweb/news33/461733.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能