1、消费接口及其实现类
public interface UserValidatorListener {
public boolean checkUser(String username, String password)throws Exception;
}
public class UserValidatorListenerImpl implements UserValidatorListener {
private ServiceTracker serviceTracker;
public UserValidatorListenerImpl(ServiceTracker serviceTracker){
this.serviceTracker = serviceTracker;
}
@Override
public boolean checkUser(String username, String password)throws Exception{
Validator validatorService = (Validator)serviceTracker.getService(); //取得被跟踪的服务
if(validatorService==null){
return false;
}else{
return validatorService.validate(username, password); //调用服务方法
}
}
}
2、Bundle激活器
public class UserValidatorWebActivator implements BundleActivator {
private ServiceRegistration serviceRegistration;
private ServiceTracker serviceTracker;
public void start(BundleContext context) throws Exception {
serviceTracker = new ServiceTracker(context, Validator.class.getName(), null); //服务跟踪器,对Validator服务进行跟踪
serviceTracker.open(); //启动服务跟踪器
UserValidatorListener listener = new UserValidatorListenerImpl(serviceTracker);
boolean b = listener.checkUser("admin", "admin2");
System.out.println("用户验证结果:" + b);
}
public void stop(BundleContext context) throws Exception {
serviceTracker.close(); //关闭服务跟踪器
}
}
3、MANIFEST.MF文件内容
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: UserValidatorWebBundle
Bundle-SymbolicName: UserValidatorWebBundle
Bundle-Version: 1.0.0
Bundle-Activator: com.cjm.bundle.user.service.web.UserValidatorWebActivator
Import-Package: com.cjm.bundle.user.service;version="1.0.0",
org.osgi.framework;version="1.3.0",
org.osgi.util.tracker;version="1.3.3"
4、打包Bundle后,执行install命令安装Bundle,执行start命令启动Bundle
- 大小: 24.2 KB
分享到:
相关推荐
在ECF中,一个bundle可以通过发布服务来暴露其功能,其他bundle则可以通过查找和绑定这些服务来使用它们。这样的设计使得系统具有高度的模块化和可重用性。 "Virgo"是SpringSource开发的一个OSGi应用服务器,它基于...
一个OSGI bundle包含类、资源以及元数据,这些元数据描述了bundle如何与其他bundle交互。理解OSGI bundle是深入学习OSGI框架的关键。 **在线用户管理** 在线用户管理是现代Web应用中的常见需求,它涉及到用户注册...
6. **消费服务**: 其他bundle可以通过查询`ServiceReference`来找到并消费我们的服务,也可以通过监听`ServiceEvent`来跟踪服务的变化。 文件`Main.java`可能是示例程序,演示了如何在Felix环境中创建和管理bundle...
**示例应用**:压缩包中的"osgi_example"可能包含了一个简单的OSGi Bundle示例,例如,创建一个HelloWorld服务,其他Bundle可以注册和使用这个服务。 总结来说,基于Eclipse的Equinox框架开发OSGi Bundle应用,可以...
Juddi-portal-bundle-3.1.0.zip是Juddi项目的最新版本,它包含了Juddi门户的所有组件和配置,使得用户能够快速部署和运行一个完整的UDDI服务注册中心。这个压缩包的核心价值在于它不仅提供了一个强大的服务注册平台...
在Java开发领域,jersey-bundle是一个至关重要的组件,它主要用于构建RESTful Web服务。当我们遇到“java.lang.ClassNotFoundException: com.sun.jersey.spi.spring.container.servlet”这样的异常时,这通常意味着...
Fragment Bundle是一种特殊类型的Bundle,它的目的是增强或“附加”到另一个主Bundle(称为Host Bundle),以便共享其内部资源。Fragment Bundle可以访问Host Bundle的私有包,这对于跨Bundle的依赖注入和资源共享...
5. **服务重新注册**:如果另一个服务提供者bundle启动并注册了相同的服务,OSGi框架会再次通知消费者bundle,告知它有一个新的可用服务。 - **图7** 表现了服务重新注册的状态。 6. **新服务绑定**:消费者...
【标题】"CXF-BUNDLE-JAXRS-2.4.7.zip" 是一个与Apache CXF相关的开源项目,它包含了一个JAX-RS(Java API for RESTful Web Services)的OSGi捆绑包。JAX-RS是Java平台上的标准,用于创建RESTful服务,而CXF是一个...
在OSGi环境中,一个服务可以被其他bundle消费。在`server` bundle中,可能会定义一个公开接口,供其他bundle通过服务注册和查找机制进行交互。这涉及到OSGi框架的核心组件,如BundleContext和ServiceRegistry,它们...
当乘法服务bundle被启动时,其他bundle可以利用这个服务进行乘法运算。 描述中提到,用户可以根据需求启动相应的服务。如果启动了加法服务bundle,那么系统将执行加法运算;反之,如果启动了乘法服务bundle,则执行...
当一个bundle需要发送消息时,它可以发布一个服务,其他bundle则可以订阅这个服务来接收消息。另一种方法是使用EventAdmin服务,它是OSGI规范的一部分,提供了一种基于主题的消息传递机制。通过EventAdmin,bundle...
亚马逊Bundle是指卖家将多个相关或互补的产品组合成一个新的商品,创建一个单独的详细页面供消费者购买。这种组合销售的方式可以帮助卖家增加销售额,提高客单价,并吸引关联流量。 2. **Bundle带来的价值和好处**...
本篇文章将聚焦于一个名为`kafka_bundle-2.0.3.tar.gz`的Python库,该库是专为处理Apache Kafka而设计的。Apache Kafka是一种高吞吐量、分布式的流处理平台,广泛用于大数据实时处理和消息传递。 首先,我们要明确`...
1. 创建服务接口:我们首先创建一个名为`org.actual.helloworld`的工程,然后定义一个名为`Hello`的接口,其中包含一个`sayHello`方法。代码如下: ```java package cn.actual.helloword; public interface Hello {...
1. 模块化系统:OSGI的核心是模块化,每个模块称为一个Bundle,每个Bundle都包含类、资源和元数据,它们有自己的命名空间,避免了类加载冲突。 2. 动态性:OSGI环境中的Bundle可以在运行时安装、启动、停止、更新或...
在OSGi中,每个组件被称为一个"bundle",它包含了类、资源和其他元数据。Bundle有自己的生命周期,可以处于未安装、安装、解析、启动、暂停、停止或未解决的状态。开发者可以通过控制bundle的状态来管理其运行时行为...
使用facade模式,可以创建一个专门负责导出包的bundle(称为facade bundle),其他bundle通过`Require-Bundle`依赖这个facade来访问包中的类。 `Require-Bundle`是OSGi的manifest头,它指定了当前bundle对其他...
服务接口为服务消费者和提供者之间提供了一个明确的契约,保证了服务的实现可以动态替换,而不会影响服务的使用者。 2. 服务的注册和发现 当一个bundle(OSGi中的模块化包)中的服务实现类准备好提供服务时,它会...
5. **服务消费**:创建另一个bundle来消费这个服务,通过Service Tracker或者直接引用服务的类来获取并调用服务。 6. **部署与运行**:将这两个bundle放入OSGi运行时环境中,并启动它们。如果一切正常,消费者...