- 浏览: 1418002 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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 5854在web中使用Spring-DM时,需要用到spring-os ... -
从外部启动OSGi,并和OSGi进行交互
2010-11-24 19:56 3836本范例主要演示如下技术点: 1、从OSGi外部启 ... -
将web容器置于OSGi框架下进行web应用的开发
2010-11-17 20:10 3233将web容器置于OSGi框架下,其实就是将web容器做成OSG ... -
在Eclipse中开发OSGi Bundle
2010-11-11 21:33 13259Eclipse为开发OSGI Bundle提 ... -
服务工厂(ServiceFactory)
2010-11-10 23:35 2562一般情况下,服务对象在注册后,任何其它的Bundle在请求该服 ... -
服务跟踪(ServiceTracker)
2010-11-10 23:00 6926当多个Bundle使用同一接 ... -
用FileInstall管理Bundle的动态安装、启动、卸载
2010-10-27 21:53 24271、文件目录如下: F:\study_osgi ... -
在启动OSGi框架时自动安装启动Bundle
2010-10-20 21:12 6039Equinox提供了在启动框架时自动安装Bundle以及启动B ... -
Equinox概述
2010-10-19 22:50 2356Equinox是Eclipse开源组织提供的、参照 ... -
Declarative Services规范简介及应用
2010-10-17 22:22 1499Declarative Serv ... -
消费一个Bundle服务
2010-10-17 15:43 14871、消费接口及其实现类 public interface U ... -
将一个Bundle注册为服务
2010-10-17 15:15 31291、创建业务接口类及其实现类 public interfac ... -
Equinox的入门范例
2010-10-16 17:37 39891、从Eclipse安装程序中找到org.eclipse.os ... -
OSGi概述
2010-10-16 17:28 2347开放服务网关协议 (Open ...
相关推荐
本教程旨在帮助哪些已经掌握了OSGi和Spring技术基础 的开发人员,迅速将Spring DM应用于实际开发,这是一 份入门教程,不求全面,但求简单。
spring dm osgi 中的服务提供和模块化编程
关于OSGi当前流行技术的介绍,是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支持 ...
spring集成JDBC 入门源码,快速上手,快速理解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-DM框架、OSGi框架及其整合应用的入门书籍 pdf格式 英文版 Apress
2015 Spring创意编码研究生 纽约大学工程学院创意编码存储库 (DM-GY 6063)。 2015 年Spring。由 Kevin Siwoff 教授。 欢迎使用 DM-GY 6063 创意编码! 此 repo 包含该类的作业和代码示例。 本课程是一门入门编程...
是一本适合新接触OSGI开发学习的一本很好的书,本书介绍了Equinox, Spring-DM和Felix这三个常用的OSGi容器的使用、开发、以及WebApplication的开发部署;介绍了OSGi的规范和Core Framework和Layer。包含书中的用例源...
本书基于作者多年使用OSGi的经验而编写,涵盖了...最后对OSGi知识进行深入讲解,通过对OSGi规范和实现框架(Equinox、Felix、Spring-DM和Apache CXF)的分析,以及最佳实践的介绍,帮助读者更好地掌握如何使用OSGi。
多年使用0SGi的经验而编写,涵盖了0SGi从入门到深入的...最后对0SGi知识进行深入讲解,通过对0SGi规范和实现框架(Equinox、Felix、Spring—DM和Apache CXF)的分析,以及最佳实践的介绍,帮助读者更好地掌握如何使用OSGi
版权所有(c)2018-2019 dm-drogerie markt GmbH&Co.KG, //dm.de 特此免费授予获得该软件和相关文档文件(“软件”)副本的任何人无限制地处理软件的权利,包括但不限于使用,复制,修改,合并的权利,发布,分发...
java实现学生管理系统源码DM-UY-1133-A 创意编码 SP17 的教学大纲 创意编码教学大纲和课堂存储库 Katherine Bennett,客座助理教授 电子邮件: 办公时间:周二 + 周四下午 4:20-6:30,否则需预约 办公地点:NYU ...
DND工具 在这里尝试:[ )下载并运行 ...入门 下载文件夹“ DNDTools Games”并找到文件“ DNDTools.exe” 跑 双击DNDTools.exe开始游戏。如果您已经有一个帐户,请输入您的用户名和密码,然后单击“登录”。 如果
DM-GY 9103 移动应用程序 基本信息 请务必阅读 入门 如果您没有,请一个 注册一个github账号和 请使用您的帐户信息填写 设置 Xcode 后, 提交 iPhone 或 iPad 以供开发人员批准 为教科书工作设置 git 存储库(最好是...
为希望实现模块化、动态化Java系统的架构师和开发工程师提供OSGi 入门知识,同时也为希望深入掌握OSGi的架构师、开发工程师提供OSGi 知识的深入讲解。本书从OSGi 的简介开始,到OSGi 框架的使用,再到OSGi规范的掌握...