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...