博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
osgi实战学习之路:8. Service-3之ServiceTracker
阅读量:6547 次
发布时间:2019-06-24

本文共 3069 字,大约阅读时间需要 10 分钟。

通过ServiceTracker能够对查找的Service进行扩展

以下的demo引入装饰器模式对Service进行日志的扩展

demo:

Provider

student-manage/Activator.java

package 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.StudentManage;public class Activator implements BundleActivator {	public void start(BundleContext context) throws Exception {		System.out.println("register service start...");		Dictionary
prop=new Hashtable
(); prop.put("action", "student_action"); context.registerService(IStudentManage.class.getName(), new StudentManage(), prop); System.out.println("register service end..."); } public void stop(BundleContext context) throws Exception { }}

Consumer

student-action/Activator.java

package com.demo.action;import org.osgi.framework.BundleActivator;import org.osgi.framework.BundleContext;import com.demo.action.log.LogStudentManager;import com.demo.action.tracker.StudentManagerTracker;import com.demo.service.IStudentManage;public class Activator implements BundleActivator{	StudentManagerTracker managerTracker ;	public void start(BundleContext context) throws Exception {		System.out.println("action start begin...");		managerTracker=new StudentManagerTracker(context);		//开启		managerTracker.open();		//获取服务		IStudentManage service=(IStudentManage)managerTracker.getService();		service.add();		System.out.println("action start end...");	}	public void stop(BundleContext context) throws Exception {		//关闭		managerTracker.close();	}}

student-action/StudentManagerTracker.java

package com.demo.action.tracker;import org.omg.PortableInterceptor.INACTIVE;import org.osgi.framework.BundleContext;import org.osgi.framework.Filter;import org.osgi.framework.ServiceReference;import org.osgi.util.tracker.ServiceTracker;import org.osgi.util.tracker.ServiceTrackerCustomizer;import com.demo.action.log.LogStudentManager;import com.demo.service.IStudentManage;public class StudentManagerTracker extends ServiceTracker {		public StudentManagerTracker(BundleContext context) {		super(context, IStudentManage.class.getName(), null);	}	@Override	public Object addingService(ServiceReference reference) {		IStudentManage manage=new LogStudentManager(context, reference);		return manage;	}	@Override	public void open() {		super.open();	}	}

student-action/LogStudentManager.java

package com.demo.action.log;import org.osgi.framework.BundleContext;import org.osgi.framework.ServiceReference;import com.demo.service.IStudentManage;public class LogStudentManager implements IStudentManage {	IStudentManage studentManage;	BundleContext context;	ServiceReference reference;		public LogStudentManager(BundleContext context, ServiceReference reference) {		this.context = context;		this.reference = reference;	}	public void add() {		studentManage=(IStudentManage) context.getService(reference);		System.out.println("log start...");		studentManage.add();		System.out.println("log end...");	}}

结果:

你可能感兴趣的文章
Mysql字段类型设计相关问题!
查看>>
Xshell 密钥登陆
查看>>
所见不为真--图片格式文件检测python
查看>>
分享几种常用的嵌入式Linux GUI及其特点—干货
查看>>
Confluence 6 "Duplicate Key" 相关问题解决
查看>>
第18章 使用MariaDB数据库管理系统
查看>>
浅谈MySQL的B树索引与索引优化
查看>>
【喜报】HCIE--PASS !最可怕的敌人,就是没有坚强的信念!
查看>>
想学前端,为什么不看这些书呢?
查看>>
记一次mapreduce读取不到输入文件的问题
查看>>
我的友情链接
查看>>
MariaDB集群Galera Cluster的研究与测试
查看>>
SONY控制键盘JX-11,EVI-D70P控制方案
查看>>
Spring AOP 之二:Pointcut注解表达式
查看>>
在普通台式机上搭建服务器虚拟化架构Esxi平台
查看>>
电话线路 30B+D 名词解释
查看>>
吉炬消费系统软件输入密码后无法打开软件界面故障处理
查看>>
Hibernate学习系列————注解一对多双向实例
查看>>
Cannot load from mysql.proc
查看>>
网络运维之 EX4200消除var分区使用过高的告警
查看>>