Blueprint用另一个命名空间(http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0)支持osgi configadmin来配置节点的相关参数。
<?xml version="1.0" encoding="UTF-8"?> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd" default-timeout="0">
<!--从ConfigAdmin服务里获取ID为"com.ponder.configuration"的配置数据,如果配置数据里没有以下数据,则用以下的默认值 -->
<cm:property-placeholder persistent-id="com.ponder.configuration">
<cm:default-properties>
<cm:property name="Type" value="0" />
<cm:property name="URL" value="http://192.168.0.2/" />
</cm:default-properties>
</cm:property-placeholder>
<!--使用配置数据的例子 -->
<bean id="bean04" class="com.ponder.examples.bean04">
<property name="url" value="${URL}"/>
<property name="type" value="${Type}"/>
</bean>
</blueprint>
上例中”URL”和”Type”就是两个可从osgi ConfigAdmin服务获取配置值的变量。如果在ConfigAdmin服务无法获得相应的值,将采用以上cm:property里指定的默认值。
在此,我们简单介绍一下OSGI ConfigAdmin服务: OSGI ConfigAdmin服务是采用whiteboard模式来处理各bundle的配置数据。
一方面提供ConfigAdmin服务的bundle从外部资源(如property文件、xml文档、数据库等等,这完全由ConfigAdmin服务的具体实现bundle决定,在同一平台上可有多个ConfigAdmin服务的实现) 读取名/值对形式的配置数据,这些配置数据都用service.pid(就是一串字符串)来分组。
另一方面,需要获得配置数据的bundle将发布ManagedService服务,并且设定服务属性service.pid。当ManagedService发布后,提供ConfigAdmin服务的bundle将感知这个ManagedService服务,并将由服务属性service.pid决定的那组配置数据通过调用ManagedService服务的void updated(java.util.Dictionary props)方法注入目标bundle里。这样就完成了配置数据的注入。
之所以要采用whiteboard pattern,是因为这样可以动态地实现配置数据的注入,即每次ManagedService服务发布时,都可以获得配置数据,而这恰好是OSGI平台上bundle可能经常需要动态加载/卸载的动态性所要求的。
在Karaf环境下,配置数据通常以<service.pid>.cfg的文件名格式放在<karaf-root>/etc/下,由Karaf集成的ConfigAdmin服务bundle读取。
在上面的blueprint的配置例子中,cm:property-placeholder节点指定的persistence-id属性就是ConfigAdmin所需的setvice.pid。
最后补充一下,ConfigAdmin服务除了读取配置数据外,还可以用来回写配置数据,在这里就暂时不详细描述了。
分享到:
相关推荐
标题中的“osgi gemini blueprint环境”指的是OSGi(Open Services Gateway Initiative)框架下的Gemini Blueprint服务。OSGi是一个模块化系统,它允许Java应用程序被分解为一系列可独立部署的模块,增强了软件的可...
- **Blueprint** 和 **Declarative Services** 是两种常见的Spring OSGi服务配置方式,它们都允许在OSGi中声明性地定义Bean和服务。 3. **Spring OSGi的应用场景** - **动态性**:OSGi环境下的Spring应用能更好地...
3. **Blueprint**:Spring的OSGI扩展,提供类似Spring XML配置的模块化服务定义方式。 4. **Aries SPI Fly**:一种用于将Spring应用转换为OSGI bundle的工具,保持原有Spring配置不变。 《OSGI_Opendoc.rar》可能...
5. **使用Blueprint或PAX Wiring**:这两个是OSGI的XML配置模型,它们提供了在OSGI环境中声明和管理依赖的方式,可以方便地与Spring配置结合使用。 6. **打包和部署**:将所有bundle打包成jar文件,并部署到支持...
Spring OSGi 是一个将 Spring 框架与 OSGi(Open Service Gateway Initiative)容器相结合的开源项目,旨在提供一种在 ...提供的压缩包文件可能包含了入门手册和示例代码,这些资源将有助于你快速上手 Spring OSGi。
5. **Blueprint或Declarative Services**:这两种是OSGi中的服务配置方式,Blueprint更接近XML,而Declarative Services使用注解,简化了服务的声明和管理。 6. **远程服务**:OSGi Remote Services允许Bundle之间...
**Spring OSGi 入门** Spring OSGi 是 Spring 框架与开放服务网关规范(OSGi)的结合,它为基于 Java 的应用程序提供了模块化开发的能力。OSGi 是一个动态的、模块化的运行时环境,使得开发者可以创建可热插拔的...
相关技术文章可能深入探讨了OSGI的高级特性,例如: Blueprint Container用于在OSGI环境中实现依赖注入,它简化了服务的创建和管理;felix-configadmin服务允许动态配置bundle;还有OSGI的远程服务(Remote Services...
7. **Blueprint服务**:OSGI的Blueprint规范提供了一种在OSGI环境中声明式地定义服务和依赖的XML格式,与Spring的XML配置类似,但更适合OSGI环境。 8. **冲突管理**:在OSGI环境中,多个bundle可能提供相同的服务,...
在提供的压缩包文件名称“Tomcat-OSGi-QuickStart”中,"QuickStart"通常表示这是一个快速入门或示例项目,帮助用户快速理解和实践如何在Tomcat中配置和使用OSGi。这个压缩包可能包含了预配置的Tomcat服务器,示例...
可能会包括如何创建和打包OSGi Bundle、配置Manifest文件(包含Bundle的元数据)、使用Blueprint或Declarative Services进行服务声明、理解OSGi的生命周期管理以及如何在实际项目中应用OSGi技术。 **OSGi原理与最佳...
### Karaf 手册与入门指南 ...通过上述介绍,我们可以看到 Karaf 作为一个轻量级的 OSGi 运行时,不仅具备了丰富的功能和灵活性,还为开发者提供了强大而方便的工具集,使其成为构建复杂应用的理想平台之一。
- **OSGi 4.2 Blueprint Reference Implementation (RI)**: 实现了最新的 OSGi Blueprint 规范。 - **Java 5**: 兼容 Java 5 及以上版本。 - **Spring 3.x**: 兼容 Spring 3.x 版本。 - **服务导入改进**: 增强了...
输出包括bundle的ID、状态、Blueprint或Spring XML文件的bean创建情况、启动级别以及名称和版本。通过管道和命令行工具,可以方便地搜索特定的bundle,例如查找与"Camel"相关的bundle。 4. **使用Apache ServiceMix...
6. **入门指南和资源**: - CAMEL的入门快速指南提供了一个基础的路线图,帮助开发者快速开始使用CAMEL。 - 官方用户指南提供了详细的架构介绍、集成模式、Cookbook以及各种教程和附录等丰富的学习资源。 - 此外...
- Apache Karaf:一个小型的基于OSGi的运行时环境,其中可以部署容器代理的应用程序。 - Apache MINA:一个高性能的NIO驱动的网络框架。 Camel的核心概念在于它的集成模式,它们是一种设计模式,可以用来指导集成...