OSGIシリーズサービス登録
2364 ワード
以前はblueprintでどのようにサービスを公開(登録)し、サービスを取得するかを話していましたが、コードで私たちのサービスを公開(登録)し、サービスを取得する方法についてお話しします.
前提として、OSGI環境の依存パッケージを導入する必要があります.
一、発行(登録)サービス
1、まず、サービスインタフェースと実装を作成します.
サービスインタフェース:IService 1.java
サービスインタフェース:Services 1.java
2、それから、サービス登録用のActivatorクラスを書きます.
二、サービスの取得
1、方式一(推薦)
2、方式二(オリジナル)
前提として、OSGI環境の依存パッケージを導入する必要があります.
一、発行(登録)サービス
1、まず、サービスインタフェースと実装を作成します.
サービスインタフェース:IService 1.java
サービスインタフェース:Services 1.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);
}
}