OSGI動態註冊和建立服務

2021-07-10 07:27:19 字數 2533 閱讀 2618

1、需要引入

org.osgi

org.osgi

3.0.0

2、建立乙個工廠類實現介面managedservicefactory

public class wservicefactory implements managedservicefactory 

public void setcontext(bundlecontext context)

/***/

private final mapexistingservices = new hashmap<>();

/***/

private final mappidnamemap = new hashmap<>();

public wservicefactory()

inte***ces = (string) ifacelist.toarray(new string[ifacelist.size()]);

}@override

public string getname()

@override

public void updated(string pid, dictionary dctnr) throws configurationexception

string wwservicename;

string wwsecret = null;

// 服務名不能空

return;

} else

// 服務名不能重複

// 同一配置檔案修改的情況

serviceregistration ppcservice;

if (ppcservice != null) else

} else

}// 先清除當前配置檔案原來對應的服務資源

string legacyservicename = pidnamemap.get(pid);

if (legacyservicename != null)

existingservices.remove(legacyservicename);

pidnamemap.remove(pid);}}

// 設定服務相關屬性

serviceregistration ppcservice;

dictionary props = new hashtable();

// 設定wwservice相關屬性

instance.setapiservices(apiservices);

if (instance == null)

ppcservice = context.registerservice(inte***ces, instance, props);

}@override

public void deleted(string pid)

existingservices.remove(servicename);

pidnamemap.remove(pid);}}

return true;

}return false;

}public void setapiservices(apiservices apiservices) }}

}

3、將相關屬性初始化到需要用到的地方

public class wwservice implements iwwservice 

public void setapiservices(apiservices apiservices)

public apiservices getapiservices()

}

4、假如說,我們需要初始化的時候建立很多的服務,那麼我們可以通過將所有的服務介面注入到乙個介面服務類,看blueprint的配置,如:

5、將上面這些介面通過乙個服務發布出去,這樣子就相當於一次性發布了所有需要不發布的服務了

6、到此,將服務發布出去後,每當我們增加乙個新的cfg檔案,就會建立乙份新的服務,從而達到了橫向擴充套件了。

建立乙個jmust_service_0001.cfg檔案,裡面的內容是:

7、服務建立好之後,我們就需要應用這些服務了,那麼該怎麼辦呢?

建立個實現類:
public class serviceregister

public synchronized void unregister(servicereferencereference) throws exception }}

public void setbundlecontext(bundlecontext bundlecontext)

}

blueprint中監聽服務

OSGI 服務的發布和引用

一 在activator中註冊和引用服務 該方式可以說是最原始的方法,首先在manifest.mf中配置需要匯入的服務介面myservice import package org.jack.myservice 然後採用硬編碼方式註冊服務 public class myactivator implem...

Oracle靜態註冊和動態註冊

b 一 什麼是註冊?b 註冊就是將資料庫作為乙個服務註冊到監聽程式。客戶端不需要知道資料庫名和例項名,只需要知道該資料庫對外提供的服務名就可以申請連線到資料庫。這個服務名可能與例項名一樣,也有可能不一樣。在資料庫伺服器啟動過程中,資料庫伺服器會向監聽程式註冊相應的服務 無論何時啟動乙個資料庫,預設地...

動態註冊廣播和使用

在接收的裡面進行註冊 intentfilter filter new intentfilter filter.addaction message type 可更改,用於判斷傳送者的身份,註冊傳送者 mreceiver new mycase 廣播接收者 registerreceiver mreceiv...