一、在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...