• osgi实战学习之路:8. Service-3之ServiceTracker


    通过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<String, String> prop=new Hashtable<String, String>();
    		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...");
    	}
    
    }
    


    结果:




  • 相关阅读:
    BZOJ 4059 [Cerc2012]Non-boring sequences(启发式分治)
    牛客练习赛1 A
    2018年全国多校算法寒假训练营练习比赛(第一场)J
    2018年全国多校算法寒假训练营练习比赛(第一场)C
    2018年全国多校算法寒假训练营练习比赛(第一场)D
    2018年全国多校算法寒假训练营练习比赛(第一场)E
    Wannafly挑战赛7 E
    Wannafly挑战赛7 C
    Wannafly挑战赛7 B
    Wannafly挑战赛7 D
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4255364.html
Copyright © 2020-2023  润新知