OSGI 服務的發布和引用

2021-08-25 09:44:28 字數 1153 閱讀 1429

一、在activator中註冊和引用服務

該方式可以說是最原始的方法,首先在manifest.mf中配置需要匯入的服務介面myservice(import-package: org.jack.myservice),然後採用硬編碼方式註冊服務:

public class myactivator implements bundleactivator /* * 解除安裝服務 */ public void stop(bundlecontext context) throws exception } }

start方法會在bundle start時呼叫,stop會在bundle stop時呼叫;

引用服務時也需要在manifest.mf中配置需要匯入的服務介面所在的package,並通過硬編碼方式獲取服務:

public void start(bundlecontext context) throws exception }

其中的reference如果為null,在呼叫context.getservice(reference)時會丟擲異常。

二、通過declarative service方式註冊服務和注入服務引用

將之前的

activator

的實現刪除,並去掉

manifest.mf中配置的bundle-activator: org.jack.myactivator

。在meta-inf的同級目錄建立osgi-inf目錄,通過eclipse建立plug-in development/component definition檔案,取名component.xml,然後配置發布服務,當然也可以使用圖形介面:

<?xml version="1.0" encoding="utf-8"?>

要引用服務,同樣要建立osgi-inf/component.xml檔案,配置如下:

<?xml version="1.0" encoding="utf-8"?>

在此我們建立了乙個servlet

(通過繼承httpservlet

),並新增了setmyservice

方法和unsetmyservice

方法用於注入和取消注入服務引用。

以上使用ds方式注入,都需要在meta-inf中配置service-component: osgi-inf/component.xml以便指定引用的檔案。

SAT外掛程式引用服務 發布osgi服務

osgi的服務層 service layer 為bundle之間的解耦合及服務引用提供的強大而又靈活的實現機制。通過bundleactivator控制項的生命週期,通過bundlecontext與其他元件和服務互動。但是,osgi服務層在提供強大的功能的同時,也給使用者造成了很大的困惑,比如,元件的...

OSGI動態註冊和建立服務

1 需要引入 org.osgi org.osgi 3.0.0 2 建立乙個工廠類實現介面managedservicefactory public class wservicefactory implements managedservicefactory public void setcontext...

入門篇 04 如何發布和引用服務?

1 服務提供者如何發布乙個服務,服務消費者如何引用這個服務。1 服務的介面名 2 呼叫服務需要傳遞哪些引數 3 介面的返回值型別 4 介面描述資訊 2 服務發布和引用的三種方式 1 restful api 2 xml 配置 3 idl 檔案 1 發布和引用的步驟 1 服務提供者這一端通過部署 到 t...