2013-08-01 44 views
2

我正在通過JNDI連接MS SQL Server。我的應用程序將連接到數據庫一次,並將存儲con以供將來使用。我能夠成功連接和檢索所需的數據。但是,當數據庫重新啓動時,我失去了連接「Connection reset by peer:socket write error」。JNDI DB連接可以存儲在會話中嗎?

因此,我需要重新啓動我的應用程序。所以,當我的conn通過代碼關閉時,我決定創建連接。這是正確的做法嗎?我應該將conn存儲在會話中嗎?

回答

0

不要。它會變脆。

使用一個連接池,最好是在分發之前可以探測連接以確保連接有效的連接池。

如果您的容器沒有提供這樣的池,您可以將自己的內容帶入您的Web應用程序。

0

當你不需要它時,你不應該保持與數據庫的活動連接。只要你的任務完成,沒有更多的數據需要處理,你應該關閉它。當你再次需要它時,請詢問新的數據源。
所以你想保留這個數據庫的DataSource對象。

+0

感謝您的答覆..所以我可以調用的DataSource.getConnection()每次當我要求數據?並在完成時關閉該conn。請澄清... – user2641506

+0

是的,但DataSource將決定是否關閉連接 - 請參閱NickJ回答如何使用數據庫池連接 – JIV

+0

dataSource.getConnection()是否將檢索來自dpcp的連接。如果爲每個請求調用,是不是爲每個請求創建新的連接? – user2641506

1

不要!使用類似Apache DBCP的東西,它可以從您可以查找連接的位置創建連接池。當你需要連接時,從池中查找它,當你完成時,將它釋放回池中。 Connection對象的生命週期將由dbcp庫管理。

1

同樣的答案在這裏:使用連接池。

我的推薦的Tomcat one而不是舊的Apache DBCP,甚至獨立/非Web應用程序,在任何容器沒有運行

+0

是的,我同意。如果它是一個在Tomcat,JBoss等服務器上部署的Web應用程序,則由服務器提供使用數據源。如果它是一個獨立的Java應用程序,Apache DBCP仍然很好。 :) – Richie

+0

@Richie no我的意思是,如果這是一個獨立的應用程序,就像一個批處理,我建議使用更快的Tomcat連接池 –

相關問題