2012-09-27 119 views
4

我正在使用Maven-SCR。通過使用@Component@Service標籤,我可以讓我的類實例註冊它自動提供的接口。在OSGi中,你如何優雅地處理初始化異常?

但有些情況下,激活方法(標記爲@Activate),甚至構造函數中,可能會拋出異常,並在某種程度上,我不能處理失敗。

的問題是:我想捕獲了異常,所以我可以正確登錄,但在同一時間,我想,以防止該類公佈其服務,如果它沒有啓動或初始化。

你們如何做到這一點?

謝謝!

回答

2

的SCR規範要求從這些方法異常被記錄到的OSGi LogService。您是否安裝了LogService實施包?如果是這樣,你可以在這裏找到這些方法的異常。如果您需要將這些例外記錄到其他日誌中,則可能需要查看諸如Pax Logging之類的內容。

+0

好吧,是的,我應該拋出異常,以便服務未註冊等,如果我在OSGi容器級別處理異常的方式有問題,我可以使用日誌配置來修復它。好。我認爲這是最爲切實的方法。謝謝! (PS:我正在使用Pax-logging) – Miquel

1

首先,我會看着你的OSGi框架的日誌記錄配置。它應該記錄這些例外。

如果不工作,你可以把這種類型的代碼註釋的方法

catch (Exception ex) { // or RuntimeException if possible 
    // log it 
    // then rethrow 
    throw ex; 
} 

注意這被認爲是由一些反模式,由於重複的堆棧跟蹤它往往生產。

這也被移動到一個方面,雖然可能在OSGi的引起疼痛。

+0

它會記錄它們,這只是我對它們的控制權。我認爲我的問題開始時有點混亂。我試圖解釋@BJ Hargrave的答案中的含義。謝謝! – Miquel

相關問題