`
housen1987
  • 浏览: 344567 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Osgi SpringDM struts2 学习笔记

 
阅读更多

本笔记针对Spring-dynamic 1.2.0版本进行一个简单开发应用讲解,使用Apache Felix-1.8.0作为osgi运行环境。

安装Felix
a. 运行Felix
  下载 Felix-1.8.0版本,解压后,可以看到bin,bundle,conf,doc四个目录
   
  运行命令
  java -jar bin/felix.jar

  
b. 配置Felix, 打开conf/config.properties 文件,配置说明如下

Js代码  收藏代码
  1. #设置, Felix容器启动时,自动加载的 Bundles, 下是以个是必须的  
  2. felix.auto.start.1= \  
  3.  file:bundle/org.apache.felix.shell-1.2.0.jar \  
  4.  file:bundle/org.apache.felix.shell.tui-1.2.0.jar \  
  5.  file:bundle/org.apache.felix.bundlerepository-1.4.0.jar  
  6.   
  7. #设置log级别  
  8. felix.log.level=1   
  9.  
  10. # 设置osgi framework 的启动级别  
  11. #org.osgi.framework.startlevel=1  
  12.  
  13. # 设置新安装的bundle的启动级别  
  14. #felix.startlevel.bundle=1  
  15.  
  16. # 默认情况对不完整的bundles,是抛exception异常。  
  17. # 也可指定只提示warn,只需把下面的#注释去年即可。  
  18. #felix.fragment.validation=warning  
  19.  
  20. # Felix installs a stream and content handler factories by default,  
  21. # uncomment the following line to not install them.  
  22. #felix.service.urlhandlers=false  
  23.  
  24. #  
  25. # Bundle config properties. 其它bunlde config properties  
  26. # 通过 BundleContext.getProperty("") 取得  
  27. #  
  28. org.osgi.service.http.port=8080  
  29. osgi.shell.telnet=on  
  30. obr.repository.url=http://felix.apache.org/obr/releases.xml  

 

示例中,加载了 felix text ui bundle,可以通过命令行,对felix的osgi容器进行管理。

c. 给Felix加上 web console管理bundle
  需要的类库
  org.apache.felix.framework-1.8.0.jar # osgi framework
  org.apache.felix.http.jetty-1.0.0.jar # jetty http servlet container
  org.apache.felix.log-1.0.0.jar # felix log support
  org.apache.felix.webconsole-1.2.10.jar

  启动后,直接访问 http://localhost:8080/system/console/bundles 默认用户名和密码为 admin/admin

运行Spring-dynamic 1.2.0 bundles模块
a. 下载Spring-dynamic 1.2.0(简称dm)
 运行 dm所需要类库清单如下

Java代码  收藏代码
  1. spring-osgi-core-1.2.0.jar                                     
  2. com.springsource.junit-3.8.2.jar                               
  3. com.springsource.org.objectweb.asm-2.2.3.jar                   
  4. com.springsource.slf4j.api-1.5.0.jar                           
  5. com.springsource.slf4j.log4j-1.5.0.jar                         
  6. com.springsource.slf4j.org.apache.commons.logging-1.5.0.jar    
  7. org.springframework.aop-2.5.6.A.jar                            
  8. org.springframework.beans-2.5.6.A.jar                          
  9. org.springframework.context-2.5.6.A.jar                        
  10. org.springframework.core-2.5.6.A.jar                           
  11. org.springframework.test-2.5.6.A.jar                           
  12. log4j.osgi-1.2.15-SNAPSHOT.jar                                 
  13. spring-osgi-annotation-1.2.0.jar                               
  14. spring-osgi-extender-1.2.0.jar      

 

修改 conf/conf.properties文件

Java代码  收藏代码
  1.  1 felix.auto.start.1= \  
  2.  2  file:bundle/org.apache.felix.shell-1.2.0.jar \  
  3.  3  file:bundle/org.apache.felix.shell.tui-1.2.0.jar \  
  4.  4  file:bundle/org.apache.felix.bundlerepository-1.4.0.jar \  
  5.  5  file:bundle/org.apache.felix.scr-1.0.8.jar \  
  6.  6  file:bundle/org.osgi.core-1.2.0.jar \  
  7. #新增以下的bundles加载  
  8.  7  file:bundle/com.springsource.org.aopalliance-1.0.0.jar \  
  9.  8  file:bundle/com.springsource.junit-3.8.2.jar                              \  
  10.  9  file:bundle/com.springsource.org.objectweb.asm-2.2.3.jar                  \  
  11. 10  file:bundle/com.springsource.slf4j.api-1.5.0.jar                          \  
  12. 11  file:bundle/com.springsource.slf4j.log4j-1.5.0.jar                        \  
  13. 12  file:bundle/com.springsource.slf4j.org.apache.commons.logging-1.5.0.jar   \  
  14. 13  file:bundle/org.springframework.aop-2.5.6.A.jar                           \  
  15. 14  file:bundle/org.springframework.beans-2.5.6.A.jar                         \  
  16. 15  file:bundle/org.springframework.context-2.5.6.A.jar                       \  
  17. 16  file:bundle/org.springframework.core-2.5.6.A.jar                          \  
  18. 17  file:bundle/org.springframework.test-2.5.6.A.jar                          \  
  19. 18  file:bundle/log4j.osgi-1.2.15-SNAPSHOT.jar                                \  
  20. 19  file:bundle/spring-osgi-annotation-1.2.0.jar                              \  
  21. 20  file:bundle/spring-osgi-extender-1.2.0.jar                                \  
  22. 21  file:bundle/spring-osgi-io-1.2.0.jar                                 

 

b. 借助dm进行开发。本节将以一个简单的应用,来演示如何使用Spring 1.2.0 进行开发。
功能说明:开发一个简单的问候模型,功能非常简单,传入参数名称,系统打印出 name, How are you today!

  先定义一个接口

Java代码  收藏代码
  1.  1 package com.xmatthew.practice.osgi;  
  2.  2   
  3.  3 /** 
  4.  4  * Greeting interface 
  5.  5  *  
  6.  6  * @author xmatthew 
  7.  7  * @since 2009-05-28 
  8.  8  */  
  9.  9 public interface Greeting {  
  10. 10   
  11. 11     String greet(String name);  
  12. 12       
  13. 13 }  

 

下面实现这个接口

Java代码  收藏代码
  1.  1 package com.xmatthew.practice.osgi.impl;  
  2.  2   
  3.  3 import com.xmatthew.practice.osgi.Greeting;  
  4.  4   
  5.  5 /** 
  6.  6  * How are u greeting 
  7.  7  *  
  8.  8  * @author xmatthew 
  9.  9  * @since 2009-05-28 
  10. 10  */  
  11. 11 public class HruGreeting implements Greeting {  
  12. 12   
  13. 13     public String greet(String name) {  
  14. 14         if (name == null) {  
  15. 15             name = "Matthew";  
  16. 16         }  
  17. 17         return name + ", How are you today!";  
  18. 18     }  
  19. 19   
  20. 20 }  
  21. 21   
 

c. 接下来,借助dm,发布我们的服务
 dm可以使我们借助Spring的配置文档进行服务的发布。
 要求必须配置文件必须以*.xml结尾,发布目录为 META-INF/spring
目录结构如下:
 greeting.jar
   |---- META-INF
          |---- spring
                  |----- greet_service.xml
                  |----- greet_osgi_service.xml  
<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->

Java代码  收藏代码
  1.  1 <!-- greet_service.xml-->  
  2.  2   
  3.  3 <?xml version="1.0" encoding="UTF-8"?>  
  4.  4 <beans xmlns="http://www.springframework.org/schema/beans"  
  5.  5   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  6.  6   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">  
  7.  7   
  8.  8   <!-- regular spring configuration file defining simple service  
  9.  9        bean. We've kept the osgi definitions in a separate   
  10. 10        configuration file so that this file can easily be used  
  11. 11        for testing outside of an OSGi environment -->  
  12. 12   
  13. 13   <bean name="hruGreeting" class="com.xmatthew.practice.osgi.impl.HruGreeting" />  
  14. 14   
  15. 15 </beans>  

 

Java代码  收藏代码
  1.  1 <!-- greet_osgi_service.xml -->  
  2.  2 <?xml version="1.0" encoding="UTF-8"?>  
  3.  3 <beans xmlns="http://www.springframework.org/schema/beans"  
  4.  4   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.  5   xmlns:osgi="http://www.springframework.org/schema/osgi"  
  6.  6   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  7.  7                       http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">  
  8.  8   
  9.  9   <!-- Export the simpleService bean (defined in a separate  
  10. 10        config file in this case) as an OSGi service -->  
  11. 11   
  12. 12   <osgi:service id="hruGreetingOsgi" ref="hruGreeting"  
  13. 13     interface="com.xmatthew.practice.osgi.Greeting" />  
  14. 14   
  15. 15 </beans>  

 

MANIFEST.MF

Java代码  收藏代码
  1. Bundle-Version: 1.0  
  2. Bundle-SymbolicName: com.xmatthew.practice.osgi  
  3. Bundle-Name: Greeting Service  
  4. Bundle-Vendor: Spring Framework  
  5. Export-Package: com.xmatthew.practice.osgi,org.springframework.osgi.samples.simpleservice  
  6. Bundle-ManifestVersion: 2  

 

需要注意: Export-Package必须指定,表示把包目录发布出去。若不指定则在后面的测试中会报class not found exception
d.最后发布 greeting.jar
  在Felix命令行,进行加载

  start file:bundle/greeting.jar

e. 测试 greeting.jar, 看是否能正常工作

编写一个BundleActivator实现类,来调用刚才发布的服务。

Java代码  收藏代码
  1. 1   
  2.  2 import org.osgi.framework.BundleActivator;  
  3.  3 import org.osgi.framework.BundleContext;  
  4.  4 import org.osgi.framework.ServiceReference;  
  5.  5   
  6.  6 import com.xmatthew.practice.osgi.Greeting;  
  7.  7   
  8.  8 /** 
  9.  9  * Greeting service client 
  10. 10  *  
  11. 11  * @author xiemalin 
  12. 12  * @since 2009-05-28 
  13. 13  */  
  14. 14 public class Activator implements BundleActivator {  
  15. 15   
  16. 16     /* (non-Javadoc) 
  17. 17      * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext) 
  18. 18      */  
  19. 19     public void start(BundleContext context) throws Exception {  
  20. 20         System.out.println("starting greeting client");  
  21. 21         // Query for all service references matching any language.  
  22. 22         ServiceReference ref = context.getServiceReference(  
  23. 23                 Greeting.class.getName());  
  24. 24         if (ref == null) {  
  25. 25             System.out.println("Couldn't find any Greeting Service");  
  26. 26         } else {  
  27. 27             Greeting service = (Greeting) context.getService(ref);  
  28. 28             if (service == null) {  
  29. 29                 System.out.println("service is null");  
  30. 30             } else  
  31. 31             System.out.println(service.greet("Matthew"));  
  32. 32         }  
  33. 33     }  
  34. 34   
  35. 35     /* (non-Javadoc) 
  36. 36      * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) 
  37. 37      */  
  38. 38     public void stop(BundleContext context) throws Exception {  
  39. 39   
  40. 40     }  
  41. 41   
  42. 42 }  

 

编写MANIFEST.MF文件

Java代码  收藏代码
  1. 1 Manifest-Version: 1.0  
  2. 2 Bundle-Name: Greeting Service client  
  3. 3 Bundle-Description: A bundle that displays messages at startup and when service events occur  
  4. 4 Bundle-Vendor: Apache Felix  
  5. 5 Bundle-Version: 1.0.0  
  6. 6 Bundle-Activator: com.xmatthew.practise.osgi.demo4.Activator  
  7. 7 Require-Bundle: org.osgi.framework  
  8. 8 Import-Package: org.osgi.framework,com.xmatthew.practice.osgi  

 

注:Import-Package必须指定com.xmatthew.practice.osgi 。

部署 greeting_client bundle,将会输出 Matthew, How are you today!
 start file:bundle/greeting_client.jar

至此使用Spring dynamic 的基本入门开发已经完成。

分享到:
评论

相关推荐

    SpringDM笔记31-Testing with OSGi and SpringDM

    标题 "SpringDM笔记31-Testing with OSGi and SpringDM" 涉及到的是在OSGi环境中使用SpringDM进行测试的相关知识。OSGi(Open Service Gateway Initiative)是一种Java模块化系统,允许动态地发现、加载和卸载服务。...

    OSGi与Spring:Spring DM开发

    ### OSGi与Spring:Spring DM开发环境配置详解 #### 一、引言 随着软件架构的不断发展,模块化和微服务化的趋势日益明显。在Java领域,OSGi(Open Service Gateway Initiative)作为一套成熟的技术标准,为实现模块...

    osgi+maven+springdm文档集

    通过学习这些文档,开发者不仅可以掌握OSGI、Maven和Spring DM的基本概念,还能了解到如何将这些技术结合在一起,构建可扩展、模块化的Java应用。这对于希望在企业级Java开发中实现高效、灵活和可维护性的人来说,是...

    学习SpringDM+OSGI的总结

    ### SpringDM与OSGI概述 #### OSGI概念解析 OSGI(Open Service Gateway Initiative),直译为“开放的服务网关初始化”,它是一系列针对Java动态化模块化系统的规范。OSGI不仅指代一个官方联盟,还代表着由该联盟...

    SpringDM笔记7-开发SpringDM Bundle

    标签提到的“源码”可能指的是查看和学习SpringDM以及相关OSGi库的源代码,这对于理解其工作原理和实现细节非常有帮助。同时,“工具”可能是指像Eclipse PDE或SpringSource Tool Suite这样的集成开发环境,它们提供...

    基于spring dm server 的osgi 例子

    【标题】:“基于Spring DM Server的OSGi实例” 在IT领域,OSGi(Open Services Gateway Initiative)是一种模块化系统和Java...对于学习和理解OSGi以及Spring DM Server的开发者来说,这是一个非常有价值的参考案例。

    osgi spring实例

    2. **打包Spring应用为OSGi bundle**:将Spring应用的类和依赖打包成遵循OSGi规范的bundle,每个bundle代表一个模块。 3. **声明服务和依赖**:在MANIFEST.MF文件中声明bundle提供的服务和依赖其他服务。 4. **使用...

    OSGISpring OSGISpring

    2. **Spring与OSGI的桥梁**:Spring Dynamic Modules(SDM)是Spring项目的一部分,它提供了在OSGI环境中使用Spring的基础设施。SDM允许Spring应用在OSGI容器中作为bundles运行,并管理它们的生命周期。 3. **服务...

    struts2学习笔记

    这个"struts2学习笔记"涵盖了Struts2的核心概念、配置、动作、拦截器、结果类型等关键知识点,旨在帮助初学者深入理解并掌握Struts2框架。 1. **Struts2核心概念** - **Action**:是Struts2的核心,负责处理用户的...

    OSGI+SpringDM+Hessian

    标题 "OSGI+SpringDM+Hessian" 涉及到三个重要的技术概念,它们分别是OSGI(Open Services Gateway Initiative)、SpringDM(Spring Dynamic Modules)和Hessian。这些技术在Java开发领域中都有其独特的应用和价值。...

    Spring DM集成Strtus2(一)

    标题“Spring DM集成Struts2(一)”指出我们要探讨的主题是关于如何在OSGi(Spring DM,即Spring Dynamic Modules)环境中集成Struts2框架。这是一个关键的Java Web开发中的技术结合,因为它允许开发者利用Spring的...

    spring-dm-osgi整合jar包

    2. Spring DM库:如`spring-osgi-core`, `spring-osgi-io`, `spring-osgi-extender`等,提供了与OSGi环境交互的接口和工具。 3. OSGi框架库:如`org.eclipse.osgi`,这是实现OSGi规范的实现,例如Equinox或Felix。 4...

    osgi-SpringDM

    Spring-DM指的是 Spring ...Spring-DM 的主要目的是能够方便地将 Spring 框架和OSGi框架结合在一起,使得使用Spring的应用程序可以方便简单地部署在OSGi环境中,利用OSGi框架提供的服务,将应用变得 更加模块化。

    spring DM英文版

    学习Spring DM,你需要了解OSGi的基本概念,理解模块化开发的优势,掌握Spring框架的核心特性,以及如何编写和解析Spring DM的元数据配置。此外,实践是提高技能的关键,通过分析提供的示例和自己动手创建项目,你会...

    SpringDM开发文档

    《SpringDM开发文档》是关于SpringDM框架的详细技术指南,该框架是在OSGi环境中运行Spring应用程序的关键组件。SpringDM,全称为Spring Dynamic Modules,是Spring框架针对OSGi(Open Service Gateway Initiative)...

    SpringDM笔记13-OSGi服务注册与引用

    在SpringDM(Spring Dynamic Modules)框架中,OSGi(Open Service Gateway Initiative)服务注册与引用是核心功能之一,它使得模块化系统中的组件能够互相发现并交互。本篇笔记将探讨如何在OSGi环境中注册服务以及...

    springDM开发指南(英文)

    Spring Dynamic Modules (Spring DM),作为Spring框架的扩展,旨在为OSGi环境下的应用开发提供强大的支持。它将Spring的依赖注入和面向切面编程能力与OSGi的模块化特性相结合,为开发者在构建动态、可扩展的企业级...

    spring osgi相关资源

    Spring OSGi是Spring框架与OSGi(Open Service Gateway Initiative)规范相结合的一种技术,它...通过学习和掌握Spring DM Server的使用以及Spring OSGi的相关库,开发者可以更好地在OSGi环境中构建和管理Spring应用。

Global site tag (gtag.js) - Google Analytics