Там какой-либо путь состоит в том, чтобы проверить утечку соединения в JAVA EE-приложение?
Приложение работает на моей локальной машине. Это использует базу данных MySQL, и пользователь вводит свои детали в эту базу данных.
По-моему, средства утечки соединения, не закрывающие соединение, возражают правильно. Я создаю слишком много соединений с базой данных в своем приложении. Я хочу проверить, существует ли какая-либо утечка соединения в соединениях с базой данных.
log4jdbc, Java JDBC драйвер, который может регистрировать SQL и/или JDBC вызовы для других JDBC драйверов, имеет регистратор, который регистрирует события открытия и закрытия соединения, а также сбрасывает все номера открытых соединений. Это очень полезно для поиска проблем с утечкой соединений.
Еще один инструмент, который вы, возможно, захотите проверить - ConnLeakFinder, простой инструмент для выявления утечек jdbc соединений в java коде. Однако у меня нет опыта работы с ним.
Если вы используете сервер приложений Java EE, у вас должна быть возможность настроить его так, чтобы он проверял соединения, когда они уходят, и восстанавливает устаревшие соединения, когда они не возвращаются.
Утечка соединения действительно является проблемой. Я был бы обеспокоен, если бы управление подключением было разбросано по такому количеству мест в коде, что было бы большой проблемой найти их все. Я ожидал увидеть пул соединений Java EE, который использовался только в пределах четко определенного уровня сохраняемости. Соединения должны открываться уровнем сервиса, который управляет транзакцией для этой единицы работы и закрывает ее, как только вариант использования завершается, в пределах области действия метода в блоке finally.
Если это не так, думаю, пора провести рефакторинг.
попробуйте использовать FindBug . Это инструмент статического анализа кода, доступный как плагин eclipse, так и как отдельное приложение. Помимо утечки соединения, в вашем приложении также обнаружатся другие проблемы
Используйте фабрику соединений, например:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
private static Connection connection;
public static synchronized Connection getConnection() throws SQLException {
if (connection == null || connection.isClosed()) {
connection = DriverManager.getConnection("url");
}
return connection;
}
}
Таким образом, вы никогда не оставите без присмотра соединения. Используйте пул соединений, если вам нужно более одного соединения (для производительности). Большинство серверов приложений имеют пул соединений JDBC.