OSGi的配置管理:ConfigAdmin

动态的OSGI配置 在OSGI语境下,很多元素都脱离不了动态的特征,配置也不例外。我们期望修改配置时可以在不重启OSGI Framework的情况下就能生效,OSGI为此提供了一个ConfigAdmin的机制。首先,看看demo8的代码,demo8里只有一个java类com.ponder.Demo.demo8.configurator,这个类实现了org.osgi.service.cm.ManagedService接口;org.osgi.service.cm.ManagedService接口里只有一个方法:public void updated(Dictionary dctnr);同时,我们在...

初次接触OSGI Blueprint

Blueprint简介 看了《 动态的OSGi服务 》后,我们知道,由于OSGI服务的动态性,引用OSGI服务需要大量的代码才可以确保正常。可以想象,如果应用使用了大量的OSGI服务的话,直接使用OSGI API开发OSGI应用的方式显然是不合适的。幸好,OSGI规范里为我们提供了很多方便的方式去使用这些OSGI服务,包括Declarative Service(声明式服务DS)、Blueprint、iPojo等等。 下面,我们来了解一下Blueprint。说到Blueprint,我们首先要提及Spring,相信很多java开发人员都会接触过Spring,作为一个成功的依赖注入(DI)实现框架,...

动态的OSGi服务

OSGI服务的动态性 我们对 OSGi服务 已经有了初步了解,接上一个 例子 ,我们再次清空/deploy文件夹,并删除/data文件夹; 只将demo3 1.0.jar复制到/deploy文件夹下; 用list命令可以看到demo3 bundle的状态是 installed 然后我们再将demo2 1.0.jar复制到/deploy文件夹下; 用list命令可以看到demo3 bundle的状态变成了 Active ,并且输出了预期的结果。 在以上例子中,我们会发现demo3 bundle是依赖了demo2 bundle,demo3 bundle必须在demo2 bundle成为 Activ...

OSGi中Bundle间的耦合:Export/Import Package与服务

创建OSGi Hello World工程 里,我们提到OSGI通过不同的classloader来加载不同的bundle,达到隔离bundle的目的,我们也提到通过Import/Export Package的方式来控制bundle之间“有限地”访问对方的类。 这里我们只有一个bundle(demo1 1.0.jar),但我们在这个bundle的manifest.mf里,可以看到设置了Import Package和Export Package。 Import package/Export package 在OSGI里,bundle暴露自己的类(Export)或引用其他bundle的类(Import...

创建OSGi Hello World工程

OSGI bundle工程 在学完《 走近Java模块化系统OSGi 》后我们已对osgi有初步的印象,今天我们将从一个hello world来具体地接触osgi。 我们将采用maven来构建一个简单的bundle,不熟悉maven的同学请先了解一下再继续。我们还会使用servicemix来做运行时平台,至于IDE,则不限。 首先是maven项目的pom.xml,如下: <?xml version="1.0" encoding="UTF 8"?>...

走近Java模块化系统OSGi

OSGI是什么? 刚入软件开发行业的初哥可能会觉得到处都是值得顶礼膜拜的大神,到处都是复杂到自已无法把握的代码,惊叹这些大神怎样能写出如此神奇的程序出来?! 其实真正好的软件的代码,应该是结构清晰,简单易懂的代码(别提linux内核代码,那是另类)。 说到底,软件设计就不外乎复用、内聚、藕合三个主题。 OSGI作为Java的模块化规范,也是为了更好地解决java在这三个主题的问题。 要理解OSGI,首先要知道OSGI不是一个应用层面的框架,而是设计层面的规范,所以不要用理解spring、hibernate、structs那样的框架的方式来理解OSGI,如果一定要找一个类似的东西和OSGI对比的...

反馈意见