﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-littleQ-随笔分类-OSGi</title><link>http://www.blogjava.net/littleq/category/33399.html</link><description>&lt;div style="color:green" align="left"&gt;学习永无止尽&lt;/div&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 30 Jul 2008 07:48:15 GMT</lastBuildDate><pubDate>Wed, 30 Jul 2008 07:48:15 GMT</pubDate><ttl>60</ttl><item><title>什么是OSGi</title><link>http://www.blogjava.net/littleq/archive/2008/07/30/218714.html</link><dc:creator>littleQ</dc:creator><author>littleQ</author><pubDate>Wed, 30 Jul 2008 06:18:00 GMT</pubDate><guid>http://www.blogjava.net/littleq/archive/2008/07/30/218714.html</guid><wfw:comment>http://www.blogjava.net/littleq/comments/218714.html</wfw:comment><comments>http://www.blogjava.net/littleq/archive/2008/07/30/218714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/littleq/comments/commentRss/218714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/littleq/services/trackbacks/218714.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt">OSGi是什么? <br />
OSGi是一种松散耦合的组件和服务运行平台规范. 简单的说, 用户只需要修改通用的Java类库档案JAR文件中的META-INF下的元数据文件MANIFEST.MF, 添加必要的标签信息, 放置到OSGi框架的Bundle Repository中, 用户的类库就成了OSGi环境的一部分.<br />
<br />
成为OSGi环境的组件, 为其他标准的OSGi组件提供代码功能是最为直接的一种功能. 用户也可以将提供组件中的某种功能的接口和实现实例发布到OSGi服务注册表中, 供其他组件直接查找使用. 这就是OSGi的Serivce概念. 同样, 用户可以查找OSGi环境中其他组件提供的接口服务, 调用改服务完成必要的处理.<br />
<br />
OSGi组件提供的服务具有两种层面的含义: 系统层面, 即一个组件为其他组件提供服务, 这些服务体现为Java接口的实现; 业务层面, 即一个组件为外部系统或用户提供某种业务服务实现.<br />
<br />
OSGi的组成.<br />
OSGi框架由4层组成:运行环境、模块、生命周期管理、服务注册.<br />
运行环境是指标准的java环境. 只要具备了java2的构造和轮廓的都是被认可的运行环境.<br />
模块层定义了采用的ClassLoader机制.<br />
生命周期管理层则为bundle的安装、启动、停止、更新和卸载提供了支持.<br />
服务注册为Bundles提供了一个动态的协作模型. 本来Bundles可通过传统的class共享方式来实现协作, 但在动态的安装和卸载代码的环境下这种方法是不适用的. 服务注册为Bundles间共享Objects提供了一种可用的模型, OSGI提供了一堆的事件来通知服务的使用者关于服务的注册和卸载, 服务其实就是简单的Java objects.</span>
<img src ="http://www.blogjava.net/littleq/aggbug/218714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/littleq/" target="_blank">littleQ</a> 2008-07-30 14:18 <a href="http://www.blogjava.net/littleq/archive/2008/07/30/218714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习OSGi</title><link>http://www.blogjava.net/littleq/archive/2008/07/29/218551.html</link><dc:creator>littleQ</dc:creator><author>littleQ</author><pubDate>Tue, 29 Jul 2008 14:41:00 GMT</pubDate><guid>http://www.blogjava.net/littleq/archive/2008/07/29/218551.html</guid><wfw:comment>http://www.blogjava.net/littleq/comments/218551.html</wfw:comment><comments>http://www.blogjava.net/littleq/archive/2008/07/29/218551.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/littleq/comments/commentRss/218551.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/littleq/services/trackbacks/218551.html</trackback:ping><description><![CDATA[<p style="font-size: 10pt">第一次接触OSGi,看的第一篇资料是<a href="http://www.blogjava.net/BlueDavy" target="_blank">BlueDavy</a>的&lt;<a href="http://www.riawork.org/opendoc/OSGI_Opendoc.rar">OSGi实战</a>&gt;.并实践了其中的案例.<br />
还没有看完,暂时才看到把UserValidator接口和其不同的三种实现---FileConfigValidator, LDAPValidator, DBValidator做成bundle.<br />
bundle的开发和普通的java工程开发唯一的区别就是借助bundle的元数据MANIFEST.MF来实现工程之间package的共享.<br />
除了bundle之外,OSGi还有一个很重要的概念,就是service.这里的service和普通的web开发中的service不同:在OSGi框架中,service是很实在的东西,只有通过BundleContext注册成Service才能使POJO作为Service在OSGi框架中被其他POJO使用,也只有通过BundleContext来获取发布到框架中的Service,通过Service的方式来实现bundle之间的实例级依赖.如此说来,service的粒度比package,bundle都要细.<br />
<br />
暂时对OSGi了解的不是很多,还在继续学习中.等把&lt;OSGi实战&gt;看完,BlueDavy还整了&lt;OSGi进阶&gt;,可以看一看.感谢BlueDavy!<br />
<br />
其实现在最想了解的,还是基于Spring的OSGi:前者有强大的低依赖性编程模型和概念,后者具有动态性和模块性.两者的结合,我相信必然是更为强大的工具.</p>
 <img src ="http://www.blogjava.net/littleq/aggbug/218551.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/littleq/" target="_blank">littleQ</a> 2008-07-29 22:41 <a href="http://www.blogjava.net/littleq/archive/2008/07/29/218551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>