OSGI系列 服务注册

之前一直都是在说在blueprint中怎么发布(注册)服务以及获取服务,现在就来说说怎么通过代码来发布(注册)我们的服务和获取服务的

前提,需要引入咱们OSGI环境的依赖包:


一、发布(注册)服务

1、首先,我们来创建咱们的服务接口以及实现

服务接口:IService1.java

服务接口:Service1.java


2、然后,写一个Activator类,该类专用来注册服务的

public class Activator {
    protected static final Logger logger = LoggerFactory.getLogger(Activator.class);

    private BundleContext bundleContext;
    private Service1 service1;
    private Service2 service2;
    private ServiceRegistration serviceServiceRegistration;

    public void start() {
        Dictionary<String, String> properties = new Hashtable<>();
        properties.put("service.exported.interfaces","*");
        properties.put("service.exported.configs","service.rpc");
        serviceServiceRegistration =  bundleContext.registerService(Service1.class.getName(), service1, properties);
        serviceServiceRegistration =  bundleContext.registerService(Service2.class.getName(), service2, properties);
        logger.info("Score core started");
    }

    public void stop() {
        serviceServiceRegistration.unregister();
    }

    public void setBundleContext(BundleContext bundleContext) {
        this.bundleContext = bundleContext;
    }
    public void setService1(Service1 service1) {
        this.service1 = service1;
    }
    public void setService2(Service2 service2) {
        this.service2 = service2;
    }
    
    
}

二、获取服务

1、方式一(推荐)

ServiceTracker tracker = new ServiceTracker(context, Service1.class.getName(), null);
	tracker.open();
	Service1 service = (Service1) tracker.getService();
	if(service!=null)
	service.log(Service1.LOG_INFO,"ok");
	// 获取多个Service
	Object[] services = tracker.getServices();
	// 获取Service的数量
	int count = tracker.getTrackingCount();
	tracker.close();

2、方式二(最原始)

// 获取Service引用
	ServiceReference ref = context.getServiceReference(LogService.class.getName());
	if(ref!=null)
	{
		// 获取Service实例
		Service1 service = (Service1) context.getService(ref);
		if (service != null) {
			// 调用Service方法
			service.log(Service1.LOG_INFO, "ok");
			// 释放Service,在此之后不应该再继续使用Service实例
			context.ungetService(ref);
		}
	}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值