2015-05-04 33 views
0

可以說,我是「重用」,在多線程環境中像下面連接(異常處理和資源的閉合細節ommitted爲簡潔起見):重用或不重用掀起了連接池的連接

public contractMethod(){ 
    Connection conn = getConnectionFromJndiDSBackedByAPool(); 
    methodA(conn); 
    // close conn 
} 

private methodA(Connection conn) { 
    // do lots of things with the conn 
    // close statements & resultsets 
    methodB(conn); 
} 

private methodB(Connection conn) { 
    // do lots of things with the conn 
    // close statements & resultsets 
} 

上述方法是否比上述方法獲得(/打開)連接,完成它們的工作並自己關閉連接(當然還有其他相關資源)更好(和可擴展)?

回答

1

這不是你最大的問題。如果你有一個已經連接的會話池,所有準備就緒,通過從methodA到methodB的連接,你可能會獲得的性能增益在一段時間內不會達到最大的勝利。我猜猜查詢本身會佔用大部分時間。

如果發生異常,某些數據庫將「無效」您所處的事務,這意味着在該事務中所有進一步的嘗試都將失敗。賠率是你想要這個功能,如果你正在服務相同的公共contractMethod,無論你調用什麼私人方法。另外,如果您要爲每個私有方法執行「獲取另一個連接」路由,那麼如果methodB沒有可用的連接來執行其工作,則錯誤處理將變得更加複雜。

從這個答案中省略的事實是,有幾十個框架將這一切隱藏起來,讓你專注於解決問題,但我假設你知道這一點。 :-)