- 浏览: 1152723 次
- 性别:
- 来自: 火星郊区
博客专栏
-
OSGi
浏览量:0
文章分类
- 全部博客 (695)
- 项目管理 (48)
- OSGi (122)
- java (79)
- Vaadin (5)
- RAP (47)
- mysql (40)
- Maven (22)
- SVN (8)
- 孔雀鱼 (10)
- hibernate (9)
- spring (10)
- css (3)
- 年审 (6)
- ant (1)
- jdbc (3)
- FusionCharts (2)
- struts (4)
- 决策分析 (2)
- 生活 (10)
- 架构设计 (5)
- 破解 (2)
- 狼文化 (4)
- JVM (14)
- J2EE (1)
- 应用服务器 (1)
- 我的链接 (5)
- 数学 (2)
- 报表 (1)
- 百科 (6)
- Flex (7)
- log4j (2)
- PHP (1)
- 系统 (2)
- Web前端 (7)
- linux (6)
- Office (1)
- 安全管理 (5)
- python (2)
- dom4j (1)
- 工作流 (3)
- 养生保健 (4)
- Eclipse (8)
- 监控开发 (1)
- 设计 (3)
- CAS (1)
- ZK (41)
- BluePrint (3)
- 工具 (1)
- SWT (7)
- google (2)
- NIO (1)
- 企业文化 (2)
- Windoes (0)
- RCP (7)
- JavaScript (10)
- UML (1)
- 产品经理 (2)
- Velocity (10)
- C (1)
- 单元测试 (1)
- 设计模式 (2)
- 系统分析师 (2)
- 架构 (4)
- 面试 (2)
- 代码走查 (1)
- MongoDB (1)
- 企业流程优化 (1)
- 模式 (1)
- EJB (1)
- Jetty (1)
- Git (13)
- IPV6 (1)
- JQuery (8)
- SSH (1)
- mybatis (10)
- SiteMesh (2)
- JSTL (1)
- veloctiy (1)
- Spring MVC (1)
- struts2 (3)
- Servlet (1)
- 权限管理 (1)
- Java Mina (1)
- java 系统信息 (6)
- OSGi 基础 (3)
- html (1)
- spring--security (6)
- HTML5 (1)
- java爬虫搜索 (1)
- mvc (3)
最新评论
-
Tom.X:
http://osgia.com/
将web容器置于OSGi框架下进行web应用的开发 -
chenyuguxing:
你好, 为什么我的bundle export到felix工程中 ...
在Apache Felix中运行bundle -
string2020:
<niceManifest>true</ni ...
Bundle Plugin for Maven -
jsonmong:
OSGI,是未来的主流,目前已相当成熟。应用OSGI比较好的, ...
基于OSGi的声明式服务 -
zyhui98:
貌似是翻译过来的,有很少人在linux上做开发吧
如何成为“10倍效率”开发者
OSGi声明式服务是个好东西,有点依赖注入的味道,开发人员以配置的方式去注册或引用服务,你不需要为注册服务而单独写一个BundleActivator了,省去手工注册的繁琐。下面写一个例子改造上一篇代码的运行方式。
改造hello.service.consumer
去掉HelloServiceConsumer对BundleActivator的实现,变成一个非常普通的java类,部分代码如下:
//引用被注入的服务
private HelloService helloService;
//当组件变为satisfied时,该方法将被调用
public void activate(ComponentContext context) {
executor = Executors.newFixedThreadPool (1);
executor.execute(new HelloServiceVisitorTask());
System.out .println(“HelloServiceConsumer activate”);
}
//当组件变为unsatisfied时,该方法将被调用
public void deactivate(ComponentContext context) {
executor.shutdownNow(); //关闭服务访问线程
executor = null ;
System.out .println(“HelloServiceConsumer deactivate”);
}
//当SCR(Service Component Runtime)发现容器中注册有HelloService服务时,该方法将被
//调用,相当于注入helloService实例,该方法在组件激活前调用
public void setHelloService(HelloService helloService) {
System.out .println(“setHelloService”);
synchronized (helloServiceLock) {
if (this .helloService != helloService) {
this .helloService = helloService;
}}}
//当提供HelloService服务的组件变为不可用时,该方法将被调用,相当解绑引用
public void unsetHelloService(HelloService helloService) {
synchronized (helloServiceLock) {
if (this.helloService == helloService) {
this.helloService = null;
}}}
在src/main/resources目录下建立OSGi-INF目录,用来存放组件描述xml文件,内容如下:
<?xml version=”1.0″ encoding=”UTF-8″?>
<component name=”HelloServiceConsumerComponent”>
<!– 该组件没有提供服务 –>
<implementationMsoNormal” align=”left” style=”text-align:left;mso-layout-grid-align: none;text-autospace:none”> <!– 引用服务 –>
<reference name=”HelloServiceComponent” interface=”org.lazyman.study.osgi.service.HelloService”
bind=”setHelloService” //绑定服务的方法
unbind=”unsetHelloService” //解绑服务的方法
//表示要求容器中存在HelloServiceComponent的个数,该参数影响组件的激活策略
cardinality=”0..1″
//在不调用deactivate情况重新绑定新的服务
policy=”dynamic” />
</component>
最后我们需要在MANIFEST.MF文件里增加新的头:
Service-Component: OSGi-INF/consumer.component.xml
改造hello.service.impl
去掉HelloServiceActivator类,增加hello.service.component.xml组件描述文件,内容如下
<?xml version=”1.0″ encoding=”UTF-8″?>
<component name=”HelloServiceComponent”>
<service>
// 表明提供org.lazyman.study.osgi.service.HelloService服务
<provide interface=”org.lazyman.study.osgi.service.HelloService” />
</service>
// 服务实现类
<implementation />
</component>
同样需要在MANIFEST.MF文件里增加新的头:
Service-Component: OSGi-INF/hello.service.component.xml
部署运行
想激活基于服务的组件功能,需要增加如下bundle,可以去equinox网站下载
org.eclipse.equinox.ds //提供SCR功能
org.eclipse.equinox.util // ds的依赖
org.eclipse.osgi.services //osgi各种服务api
并且org.eclipse.equinox.ds bundle 必须在自定义bundle启动前启动,如下状态所示
Framework is launched.
id State Bundle
3 RESOLVED hello.service.consumer_1.0.0
4 RESOLVED hello.service.impl_1.0.0
5 RESOLVED hello.service_1.0.0
6 RESOLVED org.eclipse.equinox.ds_1.1.1.R35x_v20090806
7 <<LAZY>> org.eclipse.equinox.util_1.0.100.v20090520-1800
8 RESOLVED org.eclipse.osgi.services_3.2.0.v20090520-1800
启动 org.eclipse.equinox.ds bundle
start 6
id State Bundle
3 RESOLVED hello.service.consumer_1.0.0
4 RESOLVED hello.service.impl_1.0.0
5 RESOLVED hello.service_1.0.0
6 ACTIVE org.eclipse.equinox.ds_1.1.1.R35x_v20090806
7 ACTIVE org.eclipse.equinox.util_1.0.100.v20090520-1800
8 RESOLVED org.eclipse.osgi.services_3.2.0.v20090520-1800
分别启动5 4 3,可以看到如下结果
osgi> start 3
setHelloService //先调用服务绑定方法
HelloServiceConsumer activate //激活HelloServiceConsumerComponent
HelloService //调用服务接口方法的输出
该文总结了自己对OSGi声明式服务的学习历程,利用好这个功能可以让生活变得更加有趣!
目前启一个bundle都是手动start的,似乎有些麻烦,下篇将展示如何通过程序轻松启动所有bundle
–OSGi Declarative Services相关概念可以参见这篇文章(http://www.ibm.com/developerworks/cn/opensource/os-ecl-osgids/index.html )
发表评论
-
关于Felix Log Service
2012-12-07 16:44 1574OSGi服务纲要规范中定义了服务于OSGi平台的通用日志服 ... -
Maven 3 Felix 4 Eclipse 的搭建与部署(部分转载自别人文章)
2012-10-18 10:24 20404.1.开发环境搭建 4.2开发工具 Maven 3 F ... -
【绝对路径】OSGi环境中获取Plugin/Bundle中文件资源的绝对路径
2012-10-08 10:53 2510摘要:在进行Eclipse RCP开发的过程中,需要使用一 ... -
OpenCore:基于OSGi开发纯插件体系结构的WEB应用程序
2012-09-21 17:46 1426随着OSGi/Equinox逐渐成为Java EE服务端的基础 ... -
OSGi技术在Java Web开发中的应用
2012-09-20 11:26 1418随着 Java SE 对模块化功能原生支持的一再推迟(据最 ... -
OSGI典型的应用案例
2012-09-20 11:26 1639OSGI典型的应用案例主要有两个:分别是Eclipse和BMW ... -
OSGi特点
2012-09-20 11:26 12561、JRE版本无关性。虽然Java一直被人们认为是“Write ... -
OSGI与JMX 的关系
2012-09-19 17:09 1064不过重点是: JMX 本来设计的用途就只为了管理,我们不 ... -
在equinox环境开发web应用的"利器" -- registerResources()方法 详解
2012-09-19 17:07 1239registerResources()方法详解 1、简介 ... -
在equinox环境开发web应用的"利器" -- 序
2012-09-19 17:05 1370在equinox环境中开发web应用必须要借助一些工具包提供的 ... -
equinox环境下web应用资源的部署
2012-09-19 17:04 1311osgi的equinox实现环境下,web服务器和web应用都 ... -
OSGi产生的背景--在繁荣的混乱之中走出困惑
2012-09-19 16:58 1172软件的复杂性正在以惊 ... -
将web容器置于OSGi框架下进行web应用的开发
2012-09-16 14:26 3546将web容器置于OSGi框架下,其实就是将web容器做成OSG ... -
在Eclipse中开发OSGi Bundle
2012-09-16 14:26 1337Eclipse为开发OSGI Bundle提供了良好的支持,它 ... -
【第一代服务注册形式】 - 将一个Bundle注册为服务
2012-09-14 10:09 11581、创建业务接口类及其实现类 Java代码 ... -
Declarative Services规范简介及应用
2012-09-14 10:08 1425Declarative Services 是一 ... -
用FileInstall管理Bundle的动态安装、启动、卸载
2012-09-14 10:07 13351、文件目录如下: F:\study_osgi ... -
服务工厂 - Bundle消费者返回不同的服务对象
2012-09-14 10:03 1210一般情况下,服务对象在注册后,任何其它的Bundle在请求 ... -
服务跟踪(ServiceTracker)
2012-09-14 09:58 1164当多个Bundle使用同一 ... -
OSGi容器中Bundle之间Synchronous Communication
2012-09-11 17:07 1566OSGi Core定义了一个服务层,提供了一个Bundl ...
相关推荐
注册式服务是OSGI服务模型的一种形式,它强调服务的动态性。与声明式服务不同,注册式服务不是在配置文件中静态声明的,而是由服务提供者在运行时通过编程方式动态注册。服务提供者通过实现特定接口并在OSGI服务...
**基于OSGi构建小例子** OSGi(Open Service Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序拆分成独立的、可管理的模块,这些模块可以动态地安装、卸载和更新,而不影响系统的其他部分。在...
DS(Declarative Services)是OSGI中的一个核心服务,它提供了声明式的方式来管理和装配服务。而EVENT则是DS中关于事件处理的部分,用于在OSGI组件之间传递信息和协调工作。 OSGI服务是一种动态的服务注册和发现...
另一种方法是使用EventAdmin服务,它是OSGI规范的一部分,提供了一种基于主题的消息传递机制。通过EventAdmin,bundle可以发布事件,其他bundle则可以订阅这些事件并处理它们。 接下来,我们谈谈OSGI中的服务注册。...
这本书可能会详细解释如何通过XML配置文件来声明服务,以及如何利用OSGi的动态性来实现热更新和故障恢复。 总结来说,OSGi提供了一个强大的模块化系统,通过服务导向的架构,使Java应用更加灵活和可维护。开发者...
OSGi(Open Services Gateway Initiative)服务是Java平台上的一种模块化系统和框架,它允许开发者将应用程序分解为独立的、可重用的组件,称为“bundle”。这些bundle可以在运行时动态安装、启动、更新和卸载,极大...
OSGi(Open Service Gateway Initiative)是一种动态模块化的服务平台,能够动态地管理和部署服务。OSGi 服务发布和获取方式是 OSGi 框架中的一种核心机制,用于发布和获取服务。下面将详细介绍 OSGi 服务发布和获取...
OSGi(Open Services Gateway Initiative)是一种模块化系统和Java服务平台,它允许开发人员将应用程序分解为可独立更新和管理的模块。在OSGi环境中,服务是模块间通信的主要手段,而服务的发布和获取是OSGi核心概念...
OSGi(Open Service Gateway Initiative)是一种Java平台的标准,它允许开发者将应用程序分解为独立的、可重用的服务模块,每个模块称为一个Bundle。这种方式使得软件更加灵活,易于维护和升级。 在本文中,我们将...
1. **模块化**:每个bundle都是一个独立的模块,有自己的类路径和资源,可以通过声明式服务来暴露和消费接口。 2. **动态性**:bundle可以在运行时安装、启动、停止或卸载,使得系统可以进行热更新,而不会中断服务...
osgi声明式服务待办事项...在文件夹中结帐。 启动 eclipse Galileo 并将该文件夹用作工作区文件 > 将现有项目导入工作区。 应该有一个可以启动的 OSGI Run/Debug 配置。 待办事项更多信息...
OSGi(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许开发人员将应用程序分解为一组独立的、相互依赖的模块,这些模块被称为服务。这个标题“一个关于osgi的例子”暗示我们将探讨如何...
与Spring框架的XML配置类似,Blueprint使得我们在OSGi环境中能够以声明式方式管理我们的应用程序组件。 接下来,我们将Spring框架与OSGi结合。Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)能力著称,...
OSGi(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许开发人员将应用程序分解为一组可独立更新和管理的小型服务组件。在OSGi环境中嵌入Servlet,可以实现更加灵活和动态的Web应用部署。...
OSGi(Open Service Gateway Initiative)是一个Java社区定义的模块化服务平台,它允许在同一个运行环境中部署多个版本的同一个组件,而不会相互冲突,从而提供了一个动态的、模块化的运行时环境。OSGi规范定义了...
1. Spring DM是Spring对OSGi服务的扩展,提供了一种声明式的方式来管理OSGi Bundle中的Spring应用上下文。它允许开发者使用熟悉的Spring配置来定义服务和引用,简化了OSGi环境下的应用开发。 2. 自动化服务注册和...
7. **TomcatOsgi**:这可能是集成OSGi到Tomcat的具体实现或者一个特定的模块,比如一个特殊的Servlet或Filter,用于处理OSGi相关的请求和管理OSGi服务。 在实际应用中,集成OSGi到Tomcat可以带来诸多好处,例如提高...
1. **OSGI模块创建**:首先,你需要了解如何创建一个OSGI模块,这通常涉及到编写MANIFEST.MF文件,声明模块的依赖和导出的包。例如,OSGI.Api可能是提供公共接口的模块,OSGI.Ui可能是用户界面模块,而OSGI.Impl则是...
OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建可模块化的Java应用程序。它提供了一种灵活的框架,使得开发者可以构建、部署和管理模块化组件,这些组件被称为服务或bundle。OSGI的核心理念是将...
OSGI(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许应用程序由一系列可独立更新和替换的模块组成,这些模块称为“bundle”。在本实例中,我们将探讨如何利用OSGI技术来开发Eclipse...