话不多说 实例呈上
1 服务端bundle
接口
package ds.example.service;
public interface NameService {
public boolean checkName(String name);
}
实现
package example.osgi;
import org.osgi.service.component.ComponentContext;
import ds.example.service.NameService;
public class NameImpl implements NameService {
String[] m_name = { "Marry", "John", "David", "Rachel", "Ross" };
public void activate(ComponentContext context){
System.out.println("NameService Component Active,within the bundlelifecircle");
}
public void deactivate(ComponentContext context){
System.out.println("NameService Component Deactive,within the bundlelifecircle");
}
@Override
public boolean checkName(String name) {
for (int i = 0; i < m_name.length; i++) {
if (m_name[i].equals(name)) {
return true;
}
}
return false;
}
}
根目录下增加OSGI-INF/component.xml 内容如下
<?xml version="1.0" encoding="UTF-8"?>
<component name="dsExample">
<implementation class="example.osgi.NameImpl"/>
<service>
<provide interface="ds.example.service.NameService"/>
</service>
</component>
MF文件内容
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Ds Plug-in
Bundle-SymbolicName: org.shenhongwei.ds
Bundle-Version: 1.0.0
Service-Component: OSGI-INF/component.xml
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: org.osgi.framework;version="1.4.0",
org.osgi.service.component;version="1.0.0"
Export-Package: ds.example.service
2 客户段bundle
package exampleclient.osgi;
import org.osgi.service.component.ComponentContext;
import ds.example.service.NameService;
public class CheckNameClient {
private NameService nameservice = null;
public void setNameservice(NameService nameservice) {
this.nameservice = nameservice;
String name="ddd";
if(this.nameservice.checkName(name)){
System.out.println("yyyyyyyy");
}
System.out.println("$$$$$$$$$$$$$$$$$$$$$");
}
public void unsetNameservice(NameService nameservice) {
if (this.nameservice != nameservice)
return;
this.nameservice = null;
}
// protected void activate(ComponentContext context) {
// System.out.println("ddddddddddd");
// NameService namecheck = (NameService) context
// .locateService("nameservice");
// String name="dddd";
// if(namecheck.checkName(name)){
// System.out.println("登陆成功");
// }
// System.out.println("登陆失败");
// }
}
根目录下增加OSGI-INF/component.xml 内容如下
<?xml version="1.0" encoding="UTF-8"?>
<component name="dsExample">
<implementation class="exampleclient.osgi.CheckNameClient" />
<reference name="nameservice" interface="ds.example.service.NameService"
bind="setNameservice" unbind="unsetNameservice" policy="static"
cardinality="1..1" />
</component>
mF文件如下
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Client Plug-in
Bundle-SymbolicName: org.shenhongwei.ds.client
Bundle-Version: 1.0.0
Service-Component: OSGI-INF/component.xml
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: ds.example.service,
org.osgi.service.component;version="1.0.0"
ok 运行成功!!!!!!!
分享到:
相关推荐
这个“OSGi实战 实例源代码”是BlueDavy的opendoc《OSGi实战》一书中的配套实践代码,为初学者提供了深入理解OSGi机制的宝贵资源。通过这些源代码,读者可以更好地掌握OSGi的核心概念,包括服务、模块化、依赖管理和...
6. **实例化策略**:DS允许你定义组件的实例化策略,如单例或多例。这有助于控制组件的创建数量,提高性能或满足特定需求。 7. **扩展点和插件**:在Equinox OSGi中,DS可以与Eclipse插件模型结合,形成扩展点和...
例如,一个组件可能声明它依赖于某种特定类型的服务,当这个服务可用时,DS会自动注入服务实例到组件中。如果这个服务被注销,DS会通知组件,组件可以根据事件来决定是否需要关闭或调整自身的行为。这种方式增强了...
1. **OSGI简单实例DS**:这里的DS可能指的是Declarative Services,它是OSGI框架中的一个组件模型。Declarative Services允许开发者声明式地定义服务及其依赖关系,而不是通过编程方式管理服务生命周期。通过XML配置...
IntelliJ IDEA 13是...通过这个实例,我们可以学习到OSGi的模块化概念,Maven的项目构建流程,以及IntelliJ IDEA中如何管理和调试OSGi项目。这对于提升Java开发者的技能和对模块化系统理解有着重要的实践价值。
这里的`@Component`和`@Service`注解是来自Declarative Services(DS),它是OSGi中声明服务的一种方式。 **4. 使用OSGi服务** 在`OSGI_Service`中,我们需要导入`SayHello`服务并使用它: ```java @Component ...
3. **Declarative Services (DS)**:OSGi标准的一部分,允许声明式地定义服务组件及其依赖,简化了服务的管理和生命周期控制。 4. **使用Aries或Pax Exam进行测试**:这些工具可以帮助开发者在OSGi环境中进行集成...
- **组件模型**:Equinox支持基于Declarative Services (DS) 和 Blueprint的组件模型,简化了服务组件的定义和管理。 - **事件系统**:Equinox的事件系统使得bundle之间可以订阅和发布事件,实现异步通信。 - **...
1. **Declarative Services (DS)**: OSGi DS是基于注解的编程模型,允许模块声明它们的服务依赖。DS容器会自动管理和维护服务的生命周期,简化了服务的获取和使用。 2. **Blueprint Container**: Blueprint是另一种...
DS(Declarative Service)方式是 OSGi 服务发布和获取的一种方式。这种方式的优点是通过配置发布获取服务,采用服务组件的延迟加载以及组件生命周期管理的方式来控制对于内存的占用以及启动的快速。但是,这种方式...
这个方法需要服务接口、实现该服务的实例以及可选的属性,这些属性可以用来描述服务的元数据,如服务版本、优先级等。 服务的消费者可以使用ServiceTracker或者lookupService方法来查找和获取服务。ServiceTracker...
文档通过各个章节,逐步深入到OSGi的关键部分,例如ClassLoader、Bundle的生命周期和通讯机制、DS(Declarative Services)中Component的生命周期和通讯机制等。 面向接口的开发是OSGi强调的一个重要方面,文档中...
### OSGI原理及实战知识点概述 #### 一、OSGI简介 - **定义**: OSGI(Open Service Gateway Initiative)是一种动态模块化系统标准,主要用于构建Java平台上的复杂应用程序和服务网关。它通过提供一个模块化框架,...
为了使用服务,服务消费者需要通过`BundleContext.getServiceReference()`获取服务引用,然后通过`getService()`方法获取服务实例。 ```java public class ConsumerActivator implements BundleActivator { ...
2. Spring在OSGI中的配置:讲解如何在OSGI中配置Spring,如使用Declarative Services(DS)声明依赖关系。 3. Hibernate在OSGI中的整合:阐述如何将Hibernate集成到OSGI环境中,包括SessionFactory和Session的管理。...
自OSGI R4.0版本引入Declarative Service(DS)后,它逐渐成为了一个成熟的开发框架,广泛应用于软件开发领域,尤其是随着Eclipse 3.0以及各大主流Java应用服务器(如Oracle的Weblogic、IBM的Websphere和Sun的...
OSGi的Declarative Services(DS)也可以配合JMX,使得服务的生命周期可以通过JMX进行控制。 10. **JMX的最佳实践**:设计良好的JMX接口应保持简单,避免过度复杂的操作。MBeans应该明确地表示其职责,并且避免过多...
实施此服务的DS组件通常: 接收DataSourceFactory服务从该DataSourceFactory中: 创建一个数据源(例如,通过连接到诸如PostgreSQL之类的远程RDBMS或例如创建内存中的derby数据库) 使用liquibase创建架构并为...
Declarative Services(DS),在OSGi环境中,是一种声明式的方式来管理服务和组件的机制。它的核心思想是通过XML配置文件来定义服务的提供者和消费者,而不是通过代码直接引用和依赖其他服务,从而实现更加灵活和...
1. **声明式服务**:在OSGi中,我们可以使用DS来声明服务的依赖和提供。每个贡献实体类的模块都会在其MANIFEST.MF文件中声明一个服务,指出它提供了哪些实体类。 2. **扩展模型**:一个专门的“扩展器”模块监听...