2012-12-12 80 views
0

我正在使用WebLogic 10.3.3。每次調用一個Web服務時,我都想寫一個日誌條目到數據庫。記錄未失敗

我的問題是,將日誌信息發送到數據庫的最佳方式是什麼?如果數據庫關閉,我不希望日誌記錄代碼停止Web服務。如果日誌代碼失敗,我不希望我的Web服務等待或崩潰。我希望日誌例程中的任何錯誤完全忽略Web服務代碼。

我不確定如何在WebLogic上的Java EE中執行此操作。有什麼建議麼?

回答

0

我想你已經給log4j一個旋風?只需使用try/catch塊將您的日誌記錄包圍起來,它就會影響您的服務。

+0

是的,但代碼在執行時仍在等待。我剛剛找到了@Asynchronous,所以我猜如果我用這個做日誌記錄ejb,那麼這應該工作。 – John

0

您對彼得的評論是正確的。

您當然需要一個單獨的服務來處理日誌記錄。

對於「如果記錄器關閉 - 數據庫或服務」丟失信息,您將始終存在問題。

你需要做的是設置一個JMS隊列,最有可能的是基於文件的後備存儲,這是最不可能發生故障的。讓您的服務寫入JMS隊列以執行日誌記錄,並讓您的EJB日誌記錄服務從隊列中提取消息以寫入數據庫。

通過這種方式,日誌消息將被立即存儲,而不必立即添加到數據庫中,同時不需要服務等待數據庫提交完成。

有幾種方法可以在不等待完成響應的情況下寫入JMS隊列,以便儘可能減少對服務的影響。

我不記得,如果10.3.3有政策網關功能,或者是否是排在10.3.4,但實現你的客戶端組件作爲政策將使其更容易申請到每個服務而沒有實際觸摸你的服務代碼併爲您提供可重複使用的解決方案。