`
catchid2003
  • 浏览: 19001 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

OSGI入门:介绍Declarative Services

    博客分类:
  • OSGI
阅读更多

原文: http://230996.blog.chinajavaworld.com/entry/3676/0/

 

欢迎来到“OSGi入门”系列的下个部分。这个部分十分的有趣,因为我们将开始尝试使用Declarative Services。

Declarative Service(或者“DS”)规范是OSGi最新的一个部分,并且它来自于跨越Bundle将服务配置到一起的结果。并非这个任务困难——正如我希望我以前讲课中展示的——它需要相当数量的样板代码。它也要求你对内容的条理很谨慎,也就是说你很容易搬起石头砸自己的脚。

早期试图解决此问题的是一个叫做Service Binder的工具。由 Humberto Cervantes Richard Hall 开发的工具。Service Binder引入了自动化的服务依赖关系管理,允许开发人员可以集中精力编写他们的服务。服务之间的配置通过声明处理,并且声明都写在XML中。

这个Declarative Service规范是从Service Binder进化而来,并且是OSGi的4.0版本的一个标准部分。那么,让我们看看它能做什么。

正如我在课程的上一个部分叙述的,我厌倦了在命令行做任何事情:从这点上,我将使用Eclipse SDK。请记住我所介绍的事实上并不依赖Eclipse。虽然Eclipse对我们有或多或少的帮助,不过没什么黑色魔法,所以我们在这里看到的任何东西在NetBeans、IntelliJ甚至在老旧的vi上都是完全可行的。

第一件事,我们需要下载Declarative Services的Equinox实现。假如你使用当前稳定的Eclipse版本是3.2.2,那就从这里下载。如果你使用不同的版本,你需要从顶层的Equinox下载页找到这个版本,并下载org.eclipse.equinox.ds_x.x.x_xxxxx.jar文件。把下载下来的文件放到你的Eclipse安装目录的plugins下,并重启Eclipse。事实上,如果你已经对Eclipse Plug-in开发有一点点了解,你可以把这个jar文件放入你的目标平台文件夹下。如果你不知道什么是“目标平台”,不用担心,只要把这个jar放到plugins目录下就可以了。

现在,我们将创建一个新的Bundle。做这些事情,我们使用Eclipse中的Plug-in项目向导来创建一个项目:[list=decimal]

  • 从主菜单,选择File->New->Project
  • 选择Plug-in Project并单击下一步
  • 输入项目名称:SimpleExporter
  • 在底部,“This plug-in is targeted to run with”文字下面,选择“an OSGi framework”之后在下拉框中选择“standard”。这一步不是绝对必须的,它只是防止我们使用盒外无效的其他OSGi框架实现的特性。
  • 单击下一步。在向导接下来的页面中,取消选中的“Generate an activator”复选框。单击结束
    [/list]

    我们现在有个空的Bundle项目,所以我们需要添加一些代码。为了尽可能的简单,我们将提供一个使用了在所有的Java Runtime中都有效的接口:java.lang.Runnable,使用一个顺手的小的Eclipse快捷方式,仅仅从你的浏览器复制下面的代码,然后选择SampleExporter项目中的src文件夹并点击Edit -> Paste。Eclipse将为你创建包和源文件。
    1
    2
    3
    4
    5
    6
    7
    
    package org.example.ds;
     
    public class SampleRunnable implements Runnable {
    	public void run() {
    		System.out.println("Hello from SampleRunnable");
    	}
    }
    


    到目前为止我们没有看到任何新东西,但是,接下来会有趣些:我们将创建一个XML文件来声明SampleRunnable为一个服务。在顶级目录下创建一个名为OSGI-INF的文件夹,并复制下面的例子到文件samplerunnable.xml中:
    1
    2
    3
    4
    5
    6
    7
    
    <?xml version="1.0" encoding="UTF-8"?>
    <component name="samplerunnable">
    	<implementation class="org.example.ds.SampleRunnable"/>
    	<service>
    		<provide interface="java.lang.Runnable"/>
    	</service>
    </component>
    


    这是我们将看到的DS中简单声明中的一个。它描述了一个提供一个服务到OSGI Service Registry的叫做“samplerunnable”的在java.lang.Runnable下的组件,并且这个组件通过类org.example.ds.SampleRunnable来实现。

    最后一步是告诉Declarative Service运行时关于这个XML文件的存在。我们为Bundle做这个事情是通过添加一个字段到MANIFEST.MF文件。因此,在编辑器中打开manifest(试着右键点击这个项目并选择PDE工具 -> Open Manifest),跳到名为“MANIFEST.MF”的标签,这允许我们直接编辑manifest的文本内容。添加下面的一行:
    1
    
    Service-Component: OSGI-INF/samplerunnable.xml
    


    然后保存这个文件。正如在上个部分中说的,manifest的最后一个空行是非常重要的,但是不像以前,如果你忘记了,你将从Eclipse获得一个错误信息。

    在走的更远之前,让我们运行Equniox来检查这些工作。在Run菜单中选择“Run…”。对话框打开后,在左边的树形列表中选择“Equniox OSGi Framework”,然后点击New按钮。如果你是一个有经验的Eclipse用户但是没有做过OSGI开发,这个对话框可能看上去有些陌生。第一个标签是Bundles,允许我们选择哪些Bundles将包含在运行配置中,并且是否我们将在启动时便初始化。要获得最小集合,点击Deselect All并仅对以下Bundles做标记
    [list=decimal]
  • SampleExporter(underneath Workspace)
  • org.eclipse.equniox.ds(underneath Target Platform)
    [/list]

    这些是我们感兴趣的Bundles,但是它们有些依赖,所以单击Add Required Bundles来添加那些依赖。所以,更好的主意是选中“Validate bundles automatically prior to launching”。最后,点击Run,并稍等片刻,osgi>提示符将出现在Eclipse控制台中。OSGi框架正在运行,并且你可以使用你以前学过的相同的命令与之交互。

    那么是否我们的服务被注册了?我么可以通过键入services命令来检查。在服务列表中的某个地方—可能在底部—你将看到如下显示:
    1
    2
    3
    
    {java.lang.Runnable}={component.name=samplerunnable, component.id=1, service.id=22}
      Registered by bundle: initial@reference:file:..../SampleExporter/ [5]
      No bundles using service.
    


    是的,它被注册了!并且注意一件重要的事情:它通过我们的Bundle注册的,不是通过Declarative Services Bundle。事实上DS代表了我们的Bundle注册了它。我们将迟些了解它如何做的,但是这节课的目的,足够说明了我们的服务的消费者不需要任何具体的工作,事实上,它们连我们使用Declarative Services也不必知道。如果那些消费者愿意那可以很好的使用Declarative Services,但是它们也能使用简单的OSGi代码。

    另外要注意的是在我们的Bundle中,没有具体的OSGi的Java代码。换句话说,我们写了个POJO类,这是Declarative Services的一个主要特性。

    这些就够了,我很抱歉,这节课程只是一个小小的基础。下次,我们将看看如何用DS以不同的方式消费服务,这将真正的展示出DS提供的的强大和便利。
  • 分享到:
    评论

    相关推荐

      OSGi 入门+进阶+实战

      5. **Blueprint或Declarative Services**:这两种是OSGi中的服务配置方式,Blueprint更接近XML,而Declarative Services使用注解,简化了服务的声明和管理。 6. **远程服务**:OSGi Remote Services允许Bundle之间...

      OSGI资料,OSGI进阶,OSGI实战,OSGI入门和整合Spring

      《OSGI入门和整合Spring》则关注OSGI与Spring框架的结合,主要讨论: 1. **Spring与OSGI集成原理**:Spring的bean管理如何与OSGI服务机制相结合,实现更灵活的依赖注入。 2. **Declarative Services(DS)**:利用...

      OSGI入门和整合Spring

      学习OSGI入门和整合Spring,对于开发复杂的企业级应用,或者想要提升系统灵活性和可维护性的开发者来说,是非常有价值的。通过理解OSGI的模块化机制和Spring的依赖注入原理,可以构建出更加高效和可扩展的Java应用。

      Spring OSGi 入门.pdf

      **Spring OSGi 入门** Spring OSGi 是 Spring 框架与开放服务网关规范(OSGi)的结合,它为基于 Java 的应用程序提供了模块化开发的能力。OSGi 是一个动态的、模块化的运行时环境,使得开发者可以创建可热插拔的...

      spring-osgi 入门手册和代码

      - **Declarative Services (DS)**:DS 是一种声明式服务配置机制,它允许开发者通过元数据定义服务及其依赖关系,而无需编写额外的代码。 - **Blueprint Container**:Spring OSGi 提供了一个基于 Blueprint 的...

      Spring OSGI 快速入门中文教程

      - **Blueprint** 和 **Declarative Services** 是两种常见的Spring OSGi服务配置方式,它们都允许在OSGi中声明性地定义Bean和服务。 3. **Spring OSGi的应用场景** - **动态性**:OSGi环境下的Spring应用能更好地...

      osgi实战(pdf超请版)

      - **7.2 OSGI R4规范**:详细解析OSGI R4规范,包括核心框架(Core Framework)、启动级别服务(Start Level Service)、声明式服务(Declarative Services)、配置管理服务(Configuration Admin Service)、事件管理服务...

      OSGi Technology 教程

      "Getting Started with OSGi 7 Introducing Declarative Services.doc"引入了声明式服务(Declarative Services,DS),这是OSGi中一种简化服务管理的方法。DS允许开发者通过XML配置文件来声明服务依赖和生命周期...

      osgi相关文档、及学习资料

      可能会包括如何创建和打包OSGi Bundle、配置Manifest文件(包含Bundle的元数据)、使用Blueprint或Declarative Services进行服务声明、理解OSGi的生命周期管理以及如何在实际项目中应用OSGi技术。 **OSGi原理与最佳...

      tomcat-osgi压缩包

      这些bundle可以是第三方库、应用程序模块或者系统服务,通过声明式服务(Declarative Services,DS)或 Blueprint等配置机制,来实现服务间的依赖管理和通信。 在提供的压缩包文件名称“Tomcat-OSGi-QuickStart”中...

      osgi 实战 pdf

      《OSGi实战》一书由BlueDavy撰写,是一份详尽的OSGi入门与实战指南,适合初学者和有经验的开发者深入了解OSGi框架及其应用。以下是对该书籍核心知识点的总结: ### OSGi简介 OSGi(Open Service Gateway Initiative...

      OSGI实战

      - **Declarative Services**: 声明式服务的原理及其与编程式服务的区别。 - **Configuration Admin Service**: 配置管理服务的使用方法和案例。 - **Event Admin Service**: 事件管理服务的功能和实现机制。 - **...

      OSGi传说beta1.1.pdf

      - **使用Declarative Services (DS)管理服务** - **OSGi的事件机制** - **使用DS处理事件** - **OSGi与Spring框架的整合** - **OSGi与Hibernate框架的整合** - **服务的属性和过滤器** #### 三、注册和导出服务 ##...

      konpflerfish konpflerfish tutorial

      本教程旨在通过开源的 Knopflerfish OSGi 框架向您介绍 OSGi 编程的基础。选择 Knopflerfish 的原因是它易于安装,并且提供了强大的桌面图形用户界面,这将帮助您快速部署第一个 OSGi 组件(bundle)。 在本教程的...

    Global site tag (gtag.js) - Google Analytics