Использую ThreadLocal для управления транзакциями на чистом JDBC. Вот так
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
public static ThreadLocal<Connection> connection = new ThreadLocal<>();
public static Connection createConnection() throws SQLException {
Connection connection = DriverManager.getConnection("jdbc:h2:mem:test");
connection.setAutoCommit(false);
ConnectionFactory.connection.set(connection);
return connection;
}
public static void quietlyClose() {
try {
connection.get().close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void quietlyRollback() {
try {
connection.get().rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
И потом в ДАО в методах берем Connection вот так
Connection connection = ConnectionFactory.connection.get();
А в сервисе открываем вот так в каждом методе
Connection connection = ConnectionFactory.createConnection();
Но как сделать при таких условиях пул, не понимаю совсем.
P.S. Hibernate, Spring использовать запрещено.