Znaleźliśmy błąd w starym kodzie, w którym połączenia nie są zamykane. To łatwa poprawka, ale zastanawiam się, jak staramy się udowodnić, że jest ona naprawiona. Istnieje możliwość skorzystania z puli połączeń lub nie. W przypadku korzystania z puli łatwiej byłoby dodać monitorowanie puli, ale gdy nie jest używane łączenie połączeń, w jaki sposób śledzimy te niezamknięte, osierocone połączenia? Czy to jest jak każdy inny wyciek pamięci?Jak śledzić osierocone połączenia JDBC, które nie są zamknięte?
Błąd wygląda zasadniczo jak błąd wycięcia i wklejenia. Mamy kilka klas, które zarządzają połączenia DB, więc wygląda to mniej więcej tak:
OurDBConn conn1 = ConnectionManager.getConnection();
try {
// business logic
} catch() {
//
} finally {
ConnectionManager.returnConnection(conn1);
}
/// and then later in the same method
OurDBConn conn2 = ConnectionManager.getConnection();
try {
// business logic
} catch() {
//
} finally {
ConnectionManager.returnConnection(conn1); // NOTE Error: conn1 should be conn2
}
Nie wiem, dlaczego wcześniejsze koderzy nie tylko można ponownie użyć oryginalnego połączenia, ale to, co jest
(rozpocznij edytowanie/dołączanie)
Tak, kod połączenia jest również nasz i mogę korzystać z podanych odpowiedzi.
Jednak nie sądzę, że zadałem właściwe pytanie, chociaż poniższe odpowiedzi odpowiadają na pytanie, które zadałem. Nie jestem pewien, co należy zrobić z poprawnym stackoverflow; zadać inne pytanie, lub edytować to?
Jedno z pytań, które powinienem był zadać to: w jaki sposób te osierocone, niezamknięte połączenia przejawiają się w wydajności systemu? Ponadto, ponieważ te obiekty połączeń istnieją tylko w ramach pewnej metody, czy połączenia nie kwalifikują się do usuwania śmieci? A jeśli są gc'ed, jaki jest efekt otwartych połączeń gc'ed?
(edycja koniec)
Będę uważnie obserwować ten problem, mamy bardzo podobny problem w kilku naszych projektach. – Tenner
Dla przypomnienia, musiałbym mieć naprawdę dobry powód, aby NIE przenieść tego do dojrzałej implementacji puli połączeń, takiej jak DBCP lub C3PO - jeśli masz taką możliwość - może powinieneś rozważyć to? – teabot