osgi的服務層(service layer)為bundle之間的解耦合及服務引用提供的強大而又靈活的實現機制。通過bundleactivator控制項的生命週期,通過bundlecontext與其他元件和服務互動。但是,osgi服務層在提供強大的功能的同時,也給使用者造成了很大的困惑,比如,元件的啟動順序,服務的查詢策略等等。osgi通過declarative service給出了一種通過xml配置檔案發布和繫結服務的功能,使用者只需要定義xml檔案即可向osgi環境中發布服務物件和獲取其他bundle元件發布的服務。
在osgi程式設計過程中,獲取其他bundle提供的服務是比較複雜的,尤其是獲取多個服務時需要做很多重複性的工作。有沒有更為簡單的方式實現服務的發布和繫結呢?最近在equinox郵件列表中看到patrick的向equinox開發組的一項提議,建議將service activator toolkit(sat)元件新增到equinox專案中,sat目前位於eclipse 技術專案ohf中。
sat大大簡化了osgi service bundle開發的複雜性。使用者可以通過sat外掛程式引用服務,發布服務,自定義bundle activator。下面是sat外掛程式的功能略圖:
上圖展示了如何引用和發布服務
上圖展示了如何定製bundleactivator。
下面通過幾行簡單的**展示sat如何簡化服務的發布和引用。
//服務的發布:pserver:dev.eclipse.org:/cvsroot/technology org.eclipse.ohf/plugins/org.eclipse.soda.satpublic class activator extends basebundleactivator
//將hotdo**endor服務發布到osgi環境中
private void addexportedvendorservice()
protected void deactivate() }
//服務的引用
public class activator extends basebundleactivator
//元件停止登出
protected void deactivate()
private customer getcustomer()
//宣告需要引用的服務的名稱
protected string getimportedservicenames() ; }
//設定服務過濾條件
private string getvendorfilter()
//獲取hotdo**ender服務
private vendorservice getvendorservice()
private void setcustomer(customer customer)
protected void start() throws exception
protected void stop() throws exception }
Notepad 外掛程式NppProject發布
最近幾天寫了乙個notepad 的專案管理外掛程式,暫時把它叫做nppproject。因為平時用npp比較多,出於對npp的喜愛,以及對npp專案管理功能薄弱的強烈不滿,一賭氣就寫了這個外掛程式,把我平時用到的最多的功能整合到這個外掛程式裡。現在,notepad 就是乙個mini ide。廢話少說,...
spring cloud eureka服務發現
服務端 enableeurekaserver public class public static void main string args eureka伺服器沒有後端儲存,但註冊的服務例項都有傳送心跳保持他們的登記日期 這可以在記憶體中完成 客戶也有乙個記憶體中的快取 所以他們不需要為每乙個服務...
spring cloud eureka服務發現
size x large color black b 1.eureka服務端 b color size 服務端 size large color black b 1.1高可用和域 b color size eureka伺服器沒有後端儲存,但註冊的服務例項都有傳送心跳保持他們的登記日期 這可以在記憶體...