osgi
Killko_Hon
这个作者很懒,什么都没留下…
展开
-
OSGI Blueprint入门之九
前几日,有网友提了一个问题:用blueprint注册了 一个servlet服务,并将另一个osgi服务注入这个 servlet服务bean里,以便在处理用户的http请求 时调用。但是部署运行后,发现servlet那里注入 的osgi服务一直为null。表面上,以上的应用似乎设计简单合理。为什么 会出现这样的问题呢? 原因很简单:此servlet非彼 servlet。当bluepr...2013-03-02 13:18:50 · 164 阅读 · 0 评论 -
OSGI Blueprint入门之六
Blueprint用另一个命名空间(http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0)支持osgi configadmin来配置节点的相关参数。[code="java"] [/code] 上例中”URL”和”...2013-02-04 09:34:40 · 203 阅读 · 0 评论 -
我的OSGI学习历程
系统开发到了一定程度的时候,我发现以往有很多可以再优化的地方,于是试图去优化,最终虽然优化了,但是因为牵连的东西有点多,所以花了不少时间。经过一番思考,才意识到需要优化的不是那些代码,而是那些架构。我们需要的大系统应该由多个相对独立的小系统组成,将业务分而治之。于是就去找合适的方法来达到这个目的,很幸运的是,我发现了OSGI。 刚开始, 就只是知道 OSGI是一...2013-02-04 16:26:11 · 139 阅读 · 0 评论 -
OSGI Blueprint入门之七
Blueprint既然是DI规范,自然在注入方面有很多的需求。在前几篇中,我们已接触了服务引用的注入:[code="java"] [/code] 上例中,reference节点定义了对一个OSGI服务的引用,然后在bean节点内用property子节点将该服务引用注入bean中,注入是blueprint通过bean的setCoder(com.pond...2013-02-05 09:02:43 · 166 阅读 · 0 评论 -
OSGI Blueprint入门之三
在上一篇的例子中,我们在bean节点里用property注入了一个OSGI service引用。那么这个OSGI service是从哪里来的呢?下面我们介绍一下Blueprint如何注册一个OSGI service。 首先我们在java代码中定义一个interface,然后用一个类去实现它,就和面向接口开发一样。最后,我们就通过Blueprint的service节点发布这个O...2013-02-05 18:25:07 · 113 阅读 · 0 评论 -
乱凑的一个osgi的demo
有网友问我有没有osgi的demo,于是将前段时间给朋友的一个例子拿来整理了一下。 首先,这个demo是在karaf下运行的,项目由三个bundle组成,会涉及自定义的console命令,服务的发布和引用。 项目为maven项目,为方便构建,将三个bundle项目作为一个父项目下的三个子项目。项目经mvn package构建后,在三个子项目的target文...2013-02-07 17:43:15 · 66 阅读 · 0 评论 -
研究一下基于osgi的web应用(1)
目前,J2EE的web应用可以说多不胜数,很多 做过J2EE,并开始接触OSGI的童鞋都会自然而然 地想,如果在OSGI之上该如何构建Web应用。在 这方面,OSGI虽然有一些解决方案,但“似乎”都 不是那么成熟的。这还真不好说,我隐隐约约感 觉似乎在观念上需要改变,就像我们要理解广义 相对论,需要去将万有引力的观念转变成时空扭 曲的观念来理解一样。不管如何,大概我们先理 理现在的观念还是比...2013-02-18 09:20:01 · 113 阅读 · 0 评论 -
研究一下基于OSGI的web应用(2)
除了支持动态页面的Servlet外,web还需要一些静态的资源来支持,例如:图片、待下载的文件、css、javascript脚本等等。 为了支持这些静态资源,HttpService服务除了提供注册Servlet的方法(registerServlet)外,还提供了一个注册资源的方法(registerResources) :[code="java"]HttpServi...2013-02-19 08:02:37 · 97 阅读 · 0 评论 -
OSGI Blueprint入门之八
Blueprint除了组装bean,osgi服务引用等的DI(IOC)功能之外,还可通过各种命名空间(namespace)来扩展。在《[url=http://killko.iteye.com/blog/1787606]Blueprint入门之六[/url]》中,我们就用过一个与ConfigAdmin相关的命名空间(http://aries.apache.org/blueprint/xm...2013-02-19 08:13:30 · 167 阅读 · 0 评论 -
研究一下基于OSGI的web应用(3)
有了servlet和filter,web应用的UI部分就己经有了基础,但光凭这个来搭建一个复杂的web应用的UI就象用二极管、三极管、电阻、电容去搭建一台电脑一样,有些不切实际,我们还是渴望着能用上以往的那些mvc框架(例如struts,springmvc等)来降低复杂度。如果能象j2ee那样将一个war作为一个web应用来部署该多好呀! 我们想到的,也已经有人做到了。这...2013-02-20 11:24:07 · 97 阅读 · 0 评论 -
研究一下基于OSGI的web应用(4)
上节提到将war包改造成wab,通过pax web extender部署 在OSGI framework上的方式来发布 web应用。表面上,我们似乎只需要作少量的改 动,就能将旧的web应用OSGI化了,但是我们没 得到任何好处,只是为OSGI化而OSGI化了,既 没得到OSGI的模块化、动态化的好处,还得受 OSGI classloader机制的限制。既然如此,我们 何必自讨苦吃地将它改造...2013-02-21 09:13:59 · 89 阅读 · 0 评论 -
OSGI设计模式之whiteboard pattern
OSGI的模块化带来的一个好处就是动态化。动态化就是要求软件构件之间的耦合是松散的,不会因为被依赖的构件的撤走而导致依赖它的构件的崩溃。所以,我们说在OSGI里提供了export-package/import-package的机制,但如非必要,它不能过分使用,因为如果export package的bundle被卸掉后,import package的那个bundle也会从active或resovle...2013-02-23 16:57:01 · 196 阅读 · 0 评论 -
osgi bundle的编译时与运行时的依赖
bundle之间存在耦合,就必然存在依赖关系,由于osgi特殊的classloader组织结构,osgi的bundle之间及bundle内部的依赖关系稍微比传统java应用稍微复杂点。 首先,在传统java应用中,在运行时,大部分jar包都是由同一个classloader来加载,所以它们在编译时和运行时时的依赖关系基本上是一致的,也就是说你编译通过了,在运行时,如果...2013-02-24 21:02:09 · 417 阅读 · 0 评论 -
Apache ServiceMix入门之五
我们也可以在Servicemix中,利用Camel支持通过Java Bean来处理我们的业务逻辑。首先,我们需要理解org.apache.camel.Processor这个接口,它只有一个方法process,参数是Exchange。Exchange是什么呢?我们可以将Exchange理解为一个“消息”的封装,它包含了in和out两部分,这两部分又可以分别包含一个(或零个)body和...原创 2014-12-20 12:59:25 · 259 阅读 · 0 评论 -
使用Apache ServiceMix轻松发布Web Service
Apache ServiceMix集成了Camel、Camel-CXF,可以轻松地发布Web Service。与传统的通过Servlet发布web Service的方式不同,我们可以通过Camel路由分别处理不同的web service调用。以下是一个简单的例子:我们首先看看以下服务接口定义:[code="java"]package com.ponder.ws;pu...原创 2015-04-14 15:22:45 · 344 阅读 · 0 评论 -
Servicemix,Karaf和Camel
Servicemix是一个基于JBI规范的ESB,从Servicemix4开始全面支持OSGI,所谓全面支持是指不仅Servicemix4本身是基于OSGI framework和OSGI Bundle来实现,而且在Servicemix4上跑的应用也是由OSGI Bundle来构成的。而目前有很多J2EE应用服务器本身是基于OSGI来实现,但在这些应用服务器上跑的应用则是传统架构的。 ...2013-02-02 15:00:18 · 90 阅读 · 0 评论 -
OSGI Blueprint入门之五
reference-list除了可以用setter的方式注入OSGI service外,还可以用listener的方法来实现OSGI service的注入。[code="java"][/code] 这种方法就是通过bean里定义由reference-listener子节点的属性bind-method和unb...2013-02-01 12:21:56 · 329 阅读 · 0 评论 -
OSGI Blueprint入门之四
上一篇提及了OSGI service的发布和引用,在 Blueprint里,服务的发布和引用是最常用的一种 最佳实践,通过借助服务引用这样松散的藕合方 法,可以让OSGI的动态性发挥得淋漓尽致。 一些较低层的,细粒度的服务引用可以注入到 bean里,再将这个bean发布出更高层次的,粗粒 度的服务,而Blueprint container将会通过监听 来自OSGI framew...2013-02-01 09:06:09 · 133 阅读 · 0 评论 -
约束是工具,还是枷锁?
刚接触OSGI时,感觉开发受到很大的约束,你不能随便就引用其它Bundle的类,你也很难控制你的Bundle的启动的先后次序,于是,千方百计地在Manifest.mf里动脑筋,又是Import-Package,又是Bundle-Classpath的,搞搞DynamicImport-Package,又或者试图通过Import-Package引用被依赖的Bundle,来达到被依赖的Bundle能够比依...2013-03-05 22:46:29 · 156 阅读 · 0 评论 -
Apache Servicemix入门之二
ServiceMix正常运行后,我们尝试编写一个Blueprint XML文档:[code="java"] [/code]将以上内容保存成example1.xml,并将此文件拷贝到/deploy/文件夹下。到ServiceMix的console里输入命令list,可以看到:[img]...2013-03-07 23:25:20 · 201 阅读 · 0 评论 -
Apache ServiceMix入门之一
ServiceMix是Apache的一个顶级开源项目,是一个ESB实现。在个人看来,它最大的特色就是从核心到应用全面支持OSGI。ServiceMix是以Karaf为内核,而Karaf也是从早期ServiceMix的内核部分独立出来而成的一个Apache顶级项目。Karaf是整合OSGI framework及一些周边基础功能实现而成的OSGI运行时环境,所以,可以说ServiceMix...2013-03-08 23:15:06 · 462 阅读 · 0 评论 -
Apache ServiceMix入门之三
上节介绍了一个简单的Camel的小例子,在例子中,介绍了Camel的Componet、Endpoint、URI的概念,总结起来就是:1、Component就是Endpoint的实例工厂;2、在编排的camel路由中,Componet是用URI来表示的;3、每个camel路由都有一个信息的来源Endpoint,并通过路由流过/流向目的Endpoint。上节举了一个fi...2013-03-14 00:41:26 · 268 阅读 · 0 评论 -
OSGI Blueprint入门之十
在传统的Ioc容器里,對象的生命周期一般为静态的,在初始化时创建后,就不会在运行期间撤下或替换。在Blueprint容器中,可以引入OSGI服务引用,而OSGI服务是动态存在的,也就是说随时有可能由不可用变为可用或由可用变为不可用。我们可以将一个bean发布出一个osgi服务,然后将这个服务的引用(reference)再注入另一个bean中,这个bean又可以再基于这个服务引用来...2013-03-15 09:28:46 · 197 阅读 · 0 评论 -
Apache ServiceMix入门之四
上节,我们尝试了camel-ftp component和file component组成的2个路由,可以看到两个路由间接地通过“file:c:/inbox"这个endpoint,达到下载文件,然后再将文件移到另一文件夹的效果。下面,我们再来看几个其它Component的例子:首先,我们先准备一下环境,先在console下运行:[code="java"]karaf@root>log:...2013-03-16 00:50:21 · 198 阅读 · 0 评论 -
OSGI原由
软件的复杂度总是越来越高,为了解决人有限的处理能力和它之间的矛盾,就要用到“内聚”,也就是说将“复杂度”封装起来,只暴露出少量必要的部分。 例如:高低电平信号->机器码->汇编指令->高级语言语句->函数(function或method)->类(class)->包(package) 就是一个复杂度封装的过程,就是一个“内聚”的过程。 模块化也是一种更高层面的“内...2012-09-22 14:04:14 · 77 阅读 · 0 评论 -
OSGI企业应用与Aries开源项目(1)
J2EE的企业应用十分地广泛和成熟,但在模块化方面还缺乏合适的解决方案,OSGI则正好可以弥补这方面的缺憾。但OSGI又偏偏是个底层的元素,如果要使J2EE和OSGI结合起来,就需要将J2EE应用从底层开始改造,就如你想将旧楼改造成更高的楼,需要重新将地基弄坚实点一样。 为了能让OSGI适应企业应用开发的需要,OSGI制定了一些企业开发规范,将J2EE己有的DI,持久化,事务等...原创 2013-01-29 16:37:38 · 182 阅读 · 0 评论 -
OSGI企业应用与Aries开源项目(2)
Aries JPA container是一个持久化容器,但它不类似Hibernate,而只是相当于Hibernate的一部分,它还需要如OpenJPA之类的JPA实现的支持,才能真正地完成持久化的工作。 一个常见的OSGI JPA应用可以是这样的:若干个用JPA的规范编写的实体(Entity),集合在一个Bundle里,并用persistence.xml描述成一个持久化单元(...原创 2013-01-29 17:14:22 · 128 阅读 · 0 评论 -
OSGI与SOA
我个人对soa的看法:soa是一个比面向对象,面向组件更高层次,更粗粒度的复用技术。 当我们把算法,可固化的业务逻辑封装进对象和组件时,就不得不面对随需变化,不断修正的业务规则和流程。这些业务规则和流程不仅仅是纯粹技术性的东西,它遵循的不仅仅是物理逻辑和自然哲学,而更多的是综合性的逻辑,这种综合性逻辑涉及各方各面,所以每一方面的变化都可能我们需要去修正这些业务规则和流程。另...2013-01-30 10:48:34 · 277 阅读 · 0 评论 -
用Maven开发OSGI Bundle
可能99%用Java开发软件的同学都会用Eclipse来作为开发用IDE,特别是开发OSGI方面的,可能更有可能用Eclipse。但很不幸,可能是因为早期对Eclipse的“童年”阴影,对Eclipse大量强大的功能,觉得学习繁琐,所以本人对Eclipse有点抗拒,当然这只是个人的感受:)。 那么不用Eclipse,我可以用什么呢?总不能用文本编辑器来写代码吧,所以我选择了n...原创 2013-01-30 14:29:25 · 131 阅读 · 0 评论 -
OSGI Blueprint入门之一
Blueprint是OSGI的一个规范,它来源于spring dm.目前主要有aries和gemini两套实现,本文以aries的实现为基础。大致来说Blueprint是一个OSGI的IOC规范。对于熟悉spring的朋友来说,应该会十分容易上手。 Blueprint也是以xml文档来构建应用,但它也有采用Annotation的方式,我们在此只介绍xml的方式。 ...2013-01-31 10:34:48 · 284 阅读 · 0 评论 -
OSGI lueprint入门之二
Blueprint的xml文档的顶层结点如下:[code="java"] ...[/code] 在顶层结点下,你可以定义bean节点。bean节点可以定义为bean或者bean工厂,从bean结点可以获得bean实例,通过指定scope属性可以决定是否返回单例的bean实例: scope=”singleton“ 节点将在初次引用时...2013-01-31 13:06:21 · 159 阅读 · 0 评论 -
OSGI Blueprint入门之三
在上一篇的例子中,我们在bean节点里用property注入了一个OSGI service引用。那么这个OSGI service是从哪里来的呢?下面我们介绍一下Blueprint如何注册一个OSGI service。 首先我们在java代码中定义一个interface,然后用一个类去实现它,就和面向接口开发一样。最后,我们就通过Blueprint的service节点发布这个O...2013-01-31 14:02:23 · 253 阅读 · 0 评论 -
关于osg μservice和微服务
有些概念---它们不是一些规范标准,所以也没有明确的、具体的实现。因为对概念的理解角度未必一致,我们不能很明确评判一些具体的实现是否在这些概念的范畴之内。关于服务化架构,就有很多这类的概念,例如:SOA、微服务。到底什么是SOA?什么是微服务?业界只有一些条目说明,而没有清晰的、硬性的标准和规范。更没有参考实现之类的东西。于是,不断有不同的实现或架构出来,宣称是SOA,是微...原创 2016-09-24 07:21:19 · 232 阅读 · 0 评论