- 浏览: 1437268 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (409)
- Java (48)
- Spring (29)
- struts2 (17)
- hibernate (4)
- 设计模式 (24)
- jbpm (1)
- JavaScript (5)
- 统计报表 (7)
- ExtJS_3.0 (35)
- struts1 (1)
- 分析设计 (3)
- Flex3 (24)
- UML (2)
- 数据库 (18)
- PowerDesigner (2)
- 应用服务器 (3)
- WebService (5)
- ActiveMQ_5.3.2 (6)
- Java通信技术 (11)
- GWT (6)
- OSGi (15)
- android (11)
- liferay6.0.6 (13)
- jquery (13)
- Linux (3)
- java.util.concurrent (16)
- guava (9)
- 开发模式 (1)
- 大数据 (2)
- 互联网金融 (4)
- treegrid-3.0 (7)
- 分布式 (8)
- GO语言 (4)
- maven (1)
- 缓存技术 (6)
- 其他 (2)
- 前端页面 (1)
- heasy (1)
- spring cloud(F版) (21)
- springboot (12)
- springmvc (5)
- mybatis (3)
- dubbo (1)
- 物联网 (0)
最新评论
-
raymond.chen:
谢谢您的分享
使用Ngrok解决通过外网访问内网web应用 -
wangyudong:
速度有点慢,不过在也找到了一个开源的holer,配置一个key ...
使用Ngrok解决通过外网访问内网web应用 -
a1006458222:
...
Axis2的部署和应用 -
偷师来了:
不好意思 这样的博客我觉得就灭有必要分享出来了 命令大家都会看 ...
Consul框架介绍 -
lliiqiang:
怎么直接删除文件夹啊?固定的几个文件可以删除,不固定的呢?需要 ...
Flex AIR —— 文件读写
Spring Dynamic Modules (即Spring动态模型,简称Spring DM)允许开发者构建Spring应用程序,这种应用程序能够在OSGi容器中进行部署,并可有效利用OSGi框架所提供的服务。这种应用程序具有以下几方面的优点:
1、更好的分离应用逻辑与模块。
2、同时部署同一个模块的不同版本的能力。
3、动态发现和使用系统内其他模块提供的服务的能力。
4、在运行着的系统中动态地安装、更新和卸载模块的能力。
5、使用 Spring 框架在模块内部和模块之间进行实例化、配置、整合组件的能力。
6、让企业应用开发者使用简单、熟悉的编程模型开发OSGi平台的功能。
Spring DM很关键的一个jar文件是spring-osgi-extender-*.*.*.jar,它主要负责为Bundle实例化Spring应用程序上下文。extender可以通过两种方式来识别需要处理的Bundle,一是MANIFEST.MF文件里包含了Spring-Context 头条目的Bundle,二是extender将把META-INF/spring下面的所有XML文件视为有效Spring 配置文件。缺省情况下,Spring使用META-INF/spring目录下所有的xml文件来创建Application Context。缺省设置可以在Spring-Context的manifest header中重写,Header的值是由逗号分隔的资源路径及指令列表表示。
Spring-Context头条目的配置范例如下:
Spring-Context: config/applicationContext.xml, config/beans-security.xml
Spring-Context: *;create-asynchronously=false
Spring-Context: config/osgi-*.xml;wait-for-dependencies:=false
Spring-Context: *;timeout:=60
Spring-Context: *;publish-context:=false
Header值中的指令主要有以下这些:
create-asynchronously (true|false):控制是否异步地(默认)或同步地创建应用程序上下文。
wait-for-dependencies (true|false):控制在上下文创建之前是否要等待(默认)或不等待所有强制依赖的服务变成 satisfied。
timeout (300):等待强制依赖服务变成 satisfied 的时间(以秒为单位),超时之后放弃等待且上下文创建会失败。如果 wait-for-dependencies:=false 被指定,那么这个设置会被忽略。默认值是 5 分钟(300 秒)。
publish-context (true|false):控制是否应用程序上下文对象是否发布其自身到 OSGi 服务注册表中。默认是发布。
一、将Bean输出为OSGi服务
1、接口及其实现类源码
public interface PersonManager { public void savePerson(String username, String password); }
public class PersonManagerImpl implements PersonManager { public PersonManagerImpl(){ System.out.println("instance PersonManagerImpl"); } public void savePerson(String username, String password) { System.out.println("save person: " + username + ", " + password); } }
2、xml配置文件内容
<?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-2.5.xsd http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd"> <!-- bundle:为每一个服务的导入者生成一个新的服务实例。当服务导入者停止时,服务实例会被回收。 --> <bean id="personManager" scope="bundle" class="p3.service.impl.PersonManagerImpl"/> <!-- 自动将受管Bean暴露成OSGi服务,并注册到OSGi容器中。不需要借助BundleActivator对象。 --> <osgi:service id="personManagerService" ref="personManager" interface="p3.service.PersonManager"/> </beans>
被Service元素定义的Bean的类型是org.osgi.framework.ServiceRegistration,它是在OSGi服务注册表中注册输出Bean而产生的ServiceRegistration对象。
指定服务接口(或者服务接口集):
使用interface属性来指定一个全限定接口名
使用嵌套的interfaces元素可以指定多个服务接口
<osgi:service id="personManagerService" ref="personManager">
<osgi:interfaces>
<value>p3.service.PersonManager</value>
</osgi:interfaces>
</osgi:service>
3、MANIFEST.MF文件内容
必须导出接口所在的包(如p3.service)供其它Bundle引入
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: P3 Plug-in Bundle-SymbolicName: p3 Bundle-Version: 1.0.0 Import-Package: org.osgi.framework;version="1.3.0" Export-Package: p3.service;version="1.0.0" Bundle-ClassPath: bin/
二、引用由Spring Bean输出的OSGi服务
1、接口及其实现类
public interface HelloPerson { public void save(String username, String password); }
public class HelloPersonImpl implements p4.service.HelloPerson { private PersonManager personManager; public PersonManager getPersonManager() { return personManager; } public void setPersonManager(PersonManager personManager) { this.personManager = personManager; } public void save(String username, String password) { personManager.savePerson(username, password); } }
2、服务消费类
/** * 如果一个Bean对象需要访问BundleContext,则可以让该Bean对象实现BundleContextAware接口 */ public class Activator implements BundleContextAware { private BundleContext bundleContext; private HelloPerson helloPerson; public void start() throws Exception { System.out.println("start Activator: " + bundleContext.getBundle().getSymbolicName()); helloPerson.save("cjm", "123"); } public void stop() throws Exception { System.out.println("stop Activator"); } public void setBundleContext(BundleContext bundleContext) { this.bundleContext = bundleContext; } public void setHelloPerson(HelloPerson helloPerson) { this.helloPerson = helloPerson; } }
3、xml配置文件内容
<?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-2.5.xsd http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd"> <!-- reference元素:用于定义一个本地bean代理某个OSGi服务(即引用其它Bundle导出的服务) id:本地bean的名字 interface:目标服务所注册的接口的全路径名 --> <osgi:reference id="personManagerOSGI" interface="p3.service.PersonManager" /> <bean id="helloPerson" scope="bundle" class="p4.service.impl.HelloPersonImpl"> <property name="personManager" ref="personManagerOSGI"/> </bean> <bean id="activator" class="p4.Activator" init-method="start" destroy-method="stop"> <property name="helloPerson" ref="helloPerson"></property> </bean> </beans>
4、MANIFEST.MF文件内容
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: P4 Plug-in Bundle-SymbolicName: p4 Bundle-Version: 1.0.0 Import-Package: org.osgi.framework;version="1.3.0", p3.service;version="1.0.0" Require-Bundle: org.springframework.bundle.osgi.core
发表评论
-
Spring-DM在web中的应用
2010-11-24 22:22 5889在web中使用Spring-DM时,需要用到spring-os ... -
从外部启动OSGi,并和OSGi进行交互
2010-11-24 19:56 3877本范例主要演示如下技术点: 1、从OSGi外部启 ... -
将web容器置于OSGi框架下进行web应用的开发
2010-11-17 20:10 3271将web容器置于OSGi框架下,其实就是将web容器做成OSG ... -
在Eclipse中开发OSGi Bundle
2010-11-11 21:33 13291Eclipse为开发OSGI Bundle提 ... -
服务工厂(ServiceFactory)
2010-11-10 23:35 2590一般情况下,服务对象在注册后,任何其它的Bundle在请求该服 ... -
服务跟踪(ServiceTracker)
2010-11-10 23:00 6959当多个Bundle使用同一接 ... -
用FileInstall管理Bundle的动态安装、启动、卸载
2010-10-27 21:53 24941、文件目录如下: F:\study_osgi ... -
在启动OSGi框架时自动安装启动Bundle
2010-10-20 21:12 6071Equinox提供了在启动框架时自动安装Bundle以及启动B ... -
Equinox概述
2010-10-19 22:50 2436Equinox是Eclipse开源组织提供的、参照 ... -
Declarative Services规范简介及应用
2010-10-17 22:22 1537Declarative Serv ... -
消费一个Bundle服务
2010-10-17 15:43 15151、消费接口及其实现类 public interface U ... -
将一个Bundle注册为服务
2010-10-17 15:15 31561、创建业务接口类及其实现类 public interfac ... -
Equinox的入门范例
2010-10-16 17:37 40341、从Eclipse安装程序中找到org.eclipse.os ... -
OSGi概述
2010-10-16 17:28 2402开放服务网关协议 (Open ...
相关推荐
2. **Spring DM入门**:讲解如何配置Spring DM,设置OSGi环境,以及如何在OSGi容器中启动和管理Spring应用。 3. **Apache CXF集成**:详细阐述如何在Spring DM环境中引入和配置CXF,以便创建和暴露Web服务。可能...
#### 三、使用Spring DM快速入门 - **环境搭建**:本章节介绍了如何设置开发环境,包括安装Eclipse 3.5.2以及必要的插件,如Spring Tools Suite等。 - **创建第一个Spring DM项目**:通过具体的步骤指导读者如何...
2. Spring DM入门:学习如何配置Spring DM,创建OSGi bundle,并在其中定义Spring配置。 3. 服务发现和通信:探讨如何在OSGi环境中查找和使用服务,包括使用服务引用和服务事件。 4. 动态性与生命周期:了解如何在...
### Spring OSGi 入门知识点...以上内容为Spring OSGi入门的基本知识点,涵盖了Spring DM的基础概念、配置方法以及如何在OSGi环境中导出和引用服务等内容。这些知识点对于理解如何将Spring与OSGi结合使用具有重要意义。
### Spring Dynamic Modules (Spring DM) 参考指南 #### 一、引言 **Spring Dynamic Modules** 是一个基于 Spring 框架的扩展项目,它为 OSGi 环境提供了一套全面的集成解决方案。Spring DM 主要用于简化在 OSGi ...
### Spring OSGi 入门知识点详解 #### 一、Spring-DM与OSGi结合的优势 Spring Dynamic Modules (Spring DM) 是Spring Framework的一个扩展项目,它使得Spring可以在OSGi环境中运行,进而为开发者提供了模块化的...
1. **环境搭建**:首先需要安装一个支持OSGi的运行时环境,如Apache Felix或Equinox,然后配置Spring OSGi容器,如Spring DM(现在已改名为SpringSource dm Server)。 2. **编写bundle**:创建Spring配置文件,定义...
Spring DM(Dynamic Modules)或Apache Felix的 SCR(Service Component Runtime)等工具可以帮助处理这种动态性,确保当服务可用时,对应的bean可以被正确注入。 5. **使用Blueprint或PAX Wiring**:这两个是OSGI...
虽然本指南不会深入讲解OSGi技术细节或Spring DM的具体应用,但它为初学者提供了快速入门的路径,并提供了必要的资源链接供进一步学习。 #### 第2章 先决条件 在开始之前,开发者需要准备一些基本的开发工具。具体...
spring.datasource.url=jdbc:dm://localhost:5236/your_database_name spring.datasource.username=your_username spring.datasource.password=your_password spring.datasource.driver-class-name=...
### Spring Dynamic Modules 实战(中文版) #### 知识点概述 Spring Dynamic Modules...开发者通过本实战文档可以快速入门并掌握在OSGi平台上利用Spring框架开发应用程序的技能,提升个人和企业的开发效率和应用质量。
10.1 Flex入门 388 10.1.1 问题 388 10.1.2 解决方案 388 10.1.3 工作原理 388 10.2 离开沙箱 393 10.2.1 问题 393 10.2.2 解决方案 394 10.2.3 工作原理 394 10.3 为应用添加Spring BlazeDS支持 ...
Spring Dynamic Modules(Spring-DM)是用于OSGI的Spring扩展,它使得Spring应用可以无缝地在OSGI环境中运行。通过Spring-DM,你可以利用Spring的依赖注入和配置管理能力,同时享受OSGI的模块化和动态性。 5. OSGI...
10.1 Flex入门 388 10.1.1 问题 388 10.1.2 解决方案 388 10.1.3 工作原理 388 10.2 离开沙箱 393 10.2.1 问题 393 10.2.2 解决方案 394 10.2.3 工作原理 394 10.3 为应用添加Spring BlazeDS支持 ...
1. **入门篇**:介绍dm Server的基础知识,包括安装、配置和基本操作。 2. **进阶篇**:深入探讨dm Server的核心特性和高级功能,如模块化部署、服务管理等。 3. **实战篇**:通过实际项目案例,展示如何利用dm ...