osgi实战学习之路:7. Service-2之ServiceListener
2014-08-19 06:34
337 查看
ServiceListener三种状态:
ServiceEvent.REGISTERED ServiceEvent.MODIFIED ServiceEvent.UNREGISTERING
基于ServiceListener实现服务查找的demo
Provider
student-manage/Activator.javapackage com.demo.service; import java.util.Dictionary; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import com.demo.service.impl.StudentManageA; import com.demo.service.impl.StudentManageB; public class Activator implements BundleActivator { public void start(BundleContext context) throws Exception { System.out.println("注册服务开始...."); //注册B System.out.println("注册服务B...."); Hashtable<String, String> dict=new Hashtable<String, String>(); dict.put("name", "b"); context.registerService(IStudentManage.class.getName(), new StudentManageB(), dict); //注册A System.out.println("注册服务A...."); dict=new Hashtable<String, String>(); dict.put("name", "a"); context.registerService(IStudentManage.class.getName(), new StudentManageA(), dict); System.out.println("注册服务结束...."); } public void stop(BundleContext context) throws Exception { } }
Consumer
student-action/Activator.javapackage com.demo.action; import java.util.SortedSet; import java.util.TreeSet; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.framework.ServiceEvent; import org.osgi.framework.ServiceFactory; import org.osgi.framework.ServiceListener; import org.osgi.framework.ServiceReference; import org.osgi.service.log.LogService; import com.demo.service.IStudentManage; public class Activator implements BundleActivator{ BundleContext context; UserManagerListener listener; public void start(BundleContext context) throws Exception { System.out.println("action listener begin..."); this.context=context; listener=new UserManagerListener(); System.out.println("服务调用------------------"); synchronized (listener) { String filter = "(" + Constants.OBJECTCLASS + "=" + IStudentManage.class.getName() + ")"; context.addServiceListener(listener, filter); ServiceReference[] refs = context.getServiceReferences(null, filter); if (refs != null) { for (ServiceReference r : refs) { listener.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED, r)); } } } //查找Service IStudentManage studentManage=listener.getStudentManageService(); //调用服务 studentManage.add(); System.out.println("action listener end..."); } public void stop(BundleContext context) throws Exception { } //监听类 class UserManagerListener implements ServiceListener { SortedSet<ServiceReference> studentManageRefs = new TreeSet<ServiceReference>(); public synchronized void serviceChanged(ServiceEvent event) { switch (event.getType()) { case ServiceEvent.REGISTERED: studentManageRefs.add(event.getServiceReference()); break; case ServiceEvent.MODIFIED: break; case ServiceEvent.UNREGISTERING: studentManageRefs.remove(event.getServiceReference()); break; default: break; } } /**查找服务 * @return IStudentManage */ public synchronized IStudentManage getStudentManageService() { if (studentManageRefs.size() > 0) { System.out.println("size:"+studentManageRefs.size()); return (IStudentManage) context.getService(studentManageRefs.last()); } return null; } } }
结果:
相关文章推荐
- osgi实战学习之路:8. Service-3之ServiceTracker
- osgi实战学习之路:8. Service-3之ServiceTracker
- osgi实战学习之路:2. maven+maven-bundle-plugin+karaf搭建osgi之HelloWorld
- osgi实战学习之路:3. osgi分层概念及相互合作demo
- osgi实战学习之路:6. Service-1
- osgi实战学习之路:1. ant+bnd+felix搭建osgi之HelloWorld
- osgi实战学习之路:2. maven+maven-bundle-plugin+karaf搭建osgi之HelloWorld
- osgi实战学习之路:5.生命周期及利用命令、装饰者模式实现基于socket交互Bundle命令demo
- osgi实战学习之路:1. ant+bnd+felix搭建osgi之HelloWorld
- osgi实战学习之路:3. osgi分层概念及相互合作demo
- osgi实战学习之路:4.Bundle
- window service 学习之路(一)【学习笔记】
- AN开发范例实战宝典学习日记一:使用Service 、contentProvider编写的音乐播放器
- OSGi 学习之路(1) - 概述什么是OSGi框架
- OSGi 学习之路(3) - osgi的helloworld
- ExtJS学习之路第四步:看源码,实战MessageBox
- OSGi 学习之路(1) - 概述什么是OSGi框架
- OSGi 学习之路(4) - osgi的模块化 java在模块化的局限性
- Android学习之路十二:Service
- java学习之路--static,this,代码块,内存的划分等--java实战经典第五章