編寫服務來接收配置內容
配置內容可以透過啟動方法所提供的 org.osgi.service.component.ComponentContext 物件來取得。
開始之前
關於這項作業
如果在啟動之後更新內容,所用的注入方法取決於服務在其「OSGi 宣告式服務 (DS)」宣告中所提供的環境定義。
一般而言,最好是在服務宣告上,利用 modified 屬性宣告一個專用來注入更新內容的方法。 如果 modified 方法不可用,DS 會停用服務,再利用新內容來重新啟動服務。
停用再啟動服務也可能導致回收相依服務,除非明確需要,否則必須避免。 如果要接收配置更新,偏好的方法是使用 modified 屬性。
範例
在前一個將服務關聯於持續身分作業中,您向 DS 定義了一項服務。
以下是該項作業中所說明的 DS 宣告其中的 activate 及 modified 方法範例。
private static Dictionary<String, Object> _props = null;
protected void activate(ComponentContext cc) {
_props = cc.getProperties();
}
protected void modified(Map<?, ?> newProperties) {
if (newProperties instanceof Dictionary) {
_props = (Dictionary<String, Object>) newProperties;
} else {
_props = new Hashtable(newProperties);
}
}
當您從配置內容取得值時,下列機制可提供一些彈性:
- 將方法編寫成至少會預期相同軟體組所包含的預設內容,但為了容許進行使用者置換,使用者配置的移轉並非必要。
- 忽略冗餘或無法辨識的內容。