Müşterilerden bir web sunucusu kullanma isteği aldık. Bu web sunucusunun bir bileşeni bir veritabanına bir bağlantı tutar.JDBC bağlantısının hala iyi olup olmadığını anlamanın güvenli bir yolu var mı?
Kullanmaya başlamadan önce bağlantının kapatılıp kapatılmadığını veya bir şekilde işlev görmediğini anlayabilmem gerekir.
// Decide connection details on alias.
private String alias = null;
// I must have my own because I prepare statements.
private Connection connection = null;
public Connection getConnection() {
try {
if (connection.isClosed()) {
// Start afresh.
connection = null;
}
// ** More tests here to check connection is ok.
if (connection == null) {
// Make a new connection.
connection = Connections.getConnection(alias);
}
} catch (SQLException ex) {
// Cause a NPE further down the line.
connection = null;
}
return connection;
}
Ne yazık ki bu bazen çeşitli hatalardan biri olsun böyle bir bayat bağlantı döndürür: Şu anda böyle bir şey yapmak. Bu tür oluşacağı:
java.sql.SQLException: Io istisna: bu sadece kaydedilen hatalardan biri olduğunu
Not soket yazma hatası ve bu bir yaklaşık sonra olur: yazılım bağlantı iptaline neden 72 saat boşta.
Aradığım şey, bağlantının açık, çalışır durumda ve kararlı olup olmadığını sürekli olarak belirtmesi gereken bir bağlantının en az bir veritabanı genel test kullanıcısıdır. Mümkün mü?
Buna karşı çok küçük bir sorgu çalıştırmayı umursamıyorum, ancak her iki veritabanında da agnostik olmalı ve çok az zaman alacak/hiç zaman harcamamalıdır.
BTW: Java 5 altında çalışıyorum, bu yüzden Connection.isValid
benim için bir çözüm değil.
sonra bu soruyu ziyaret olanlar için
Eklendi - Sonunda danışma sunulan aldı ve gerçek bir bağlantı havuzuna taşındı ve sadece yapmak şaşırtıcı kolaydır değildi ama hepsi arasında Sorunlarım kayboldu.
Tek garip bölüm, bir bağlantı havuzu ile bağlantınızı bitirdiğinizde bağlantınızın close
olması gerektiğini fark ettiniz. Havuz, kapanmayı engeller ve sahnenin arkasındaki havuza döndürür.
Bağlantıları rutin bir sorun olarak doğrulayan hazır bağlantı havuzlarına karşı neye sahipsiniz? –
@MarkoTopolnik - hiçbir şey - olduğu gibi - ama bu bağlantılara ekli ifadeler hazırladım, böylece bunları kendim halletmem gerekiyor. Yoksa ben mi? – OldCurmudgeon
Aslında, bu havuzların da hazırladığı ifade havuzlarıyla başa çıkma endişesi. Btw benim seçimim * boneCP *. –