2013-10-25 36 views
1

有沒有辦法找出或確定聲明式服務的服務綁定順序?我的問題是我有一個日誌服務運行在我的OSGI和其他服務之間。現在,我的組件綁定了這個日誌服務和其他一些服務。我想在每次服務綁定或解除綁定時寫入日誌消息。但是,如果服務A在我的日誌記錄服務之前綁定,則不能寫入A的日誌條目。聲明式服務的服務綁定順序

我可以以某種方式配置綁定順序嗎?我讀過關於將服務的綁定策略設置爲「靜態」,這是爲了確保首先綁定該服務。但那不完全是我想要的。每當我的日誌服務由於某種原因而消失時,我不希望我的組件被重新創建。

+0

你正在使用哪種框架?我正在使用Equinox,並且我對組件做了相同的處理,每個服務都有一個消息,但我從來沒有遇到任何問題。 – Cristiano

+0

你好,我使用Knopflefish。你是如何定義綁定順序的? –

回答

1

編輯:同意下面的人使用slf4j。

編輯:我從來沒有回答過這個問題:我可以配置綁定順序嗎?很可能不會單獨使用Declaritive Services。

這聽起來很適合ServiceTracker。只要保持關閉,直到您的日誌服務綁定。幸運的是,這與Declarative Services非常兼容。

還有pax日誌記錄,您不綁定到LogService,而是使用log4j/slf4j API,因此您可能不必擔心LogService的生命週期。

編輯:還有第三個選項,您爲綁定上的每個服務發佈一個OSGI事件,然後有一個事件偵聽器將打印LogService上的事件,或排隊直到LogService可用。儘管如此,這是更令人感動的部分。

+1

我會說爲SLF4j api的,我不會建議添加所有類型的複雜性只爲記錄器 –

0

您的DS運行時可能會有一些可選的日誌記錄或跟蹤選項,這可能有助於瞭解發生了什麼。