2016-07-29 24 views
0

在一個應用程序中,我們使用JDBC連接到Oracle數據庫。我們已附上。問題是通過回調/偵聽器來識別數據庫已關閉。如何檢測JDBC中的Oracle數據庫關閉?

目前,我們有以下的添加監聽:當數據庫關閉

Connection eventListener = new ConnectionEventListener() { 
    @Override 
    public void connectionErrorOccurred(ConnectionEvent event){ 
     // log - connection error 
    } 

    @Override 
    public void connectionClosed(ConnectionEvent event) { 
     // log - connection closed 
    } 
} 

這個事件沒有被觸發。

的想法是檢測數據庫關閉然後數據庫開始,並有一個機制來通知用戶,並使其無論是對數據庫(配置)投票或暫停服務(應用程序)。

+0

你的意思是什麼?當連接失敗連接,然後可能數據庫關機或什麼的。 –

+0

還有一種殺死會話的方法,而db不關機,做如下: alter system kill session',' –

回答

0

您無法正確指定問題。你只能得到連接或無法獲得連接,無法指定原因(無法連接,數據庫關閉等),你會得到與所有這些情況相同的例外。

+0

我同意你的意見。有沒有其他方法,我們可以用它來檢查數據庫是否關閉,而不是我的連接出現問題。我知道(根據我的知識),我所有的控制權都在與數據庫的連接上。 –

+0

@harshchiki據我所知,沒有辦法來定義什麼是錯的。我試着運行sql plus和緩存的代碼異常,但是我有很多不同的代碼例外的問題。 – quento

1

恐怕您的請求沒有完全定義。例如,對於RAC集羣,您可以配置應用程序以響應ONS消息,並且您的應用程序可以安全地將所有連接遷移到另一個數據庫節點。所以,即使一個數據庫節點關閉,您的應用程序仍然可以順利運行。

簡要介紹一下JBOSS源代碼,有一個叫做異常分類器的類,它列出了各種有用的Oracle錯誤代碼。 對於example,但我認爲目前JBOSS的代碼庫有更長的列表。

Here是我收集的錯誤代碼的列表。所有的錯誤代碼都表達了一種情況,即連接到數據庫是不可能的(出於某種原因)。

PS:DCD(死連接檢測)是一個不同的主題。

0

你可能需要一個事務,所以如果你查詢失敗,它會給你一個錯誤,你可以檢查連接。

相關問題