static void clean() throws Exception {
final UserTransaction tx = InitialContext.doLookup("UserTransaction");
tx.begin();
try {
final DataSource ds = InitialContext.doLookup(Databases.ADMIN);
Connection connection = ds.getConnection();//line 1
connection = ds.getConnection(); //line 2- call again for testing purpose
PreparedStatement st = connection.prepareStatement("xxxxxxx sql script");
st.executeUpdate();
st.close();
connection.close();
tx.commit();
} finally {
if (tx.getStatus() == Status.STATUS_ACTIVE) {
tx.rollback();
}
}
}
Ich versuche DataSource.getConnection()
und DataSourceUtils.getConnection(DataSource)
zu vergleichen, nach dem Javadoc, die erste bekommt immer eine neue Verbindung und zweiter immer eine aktuelle Verbindung, die binden bekommen der aktive UserTransaction
(im aktuellen Thread).Usertransaction mit DataSource.getConnection() und DataSourceUtils.getConnection
sah ich die obigen Beispielcode, ich verstehe nicht, wie das Beispiel kommen DataSource.getConnection
verwenden, die auf meinem Verständnis basiert, wir immer DataSourceUtils.getConnection(DataSource)
anstelle anderer verwenden sollten, weil wir das ganze Stück von Skripten in ein begehen wollen Verbindung statt mehr als eine Verbindung. (korrigieren Sie mich, wenn ich falsch liege)
Ich verstehe nicht warum, also fügte ich eine doppelte Zeile zu testen (Zeile 2), kann jemand erklären, wie diese Sache im Hintergrund arbeiten, wenn es ohne Linie 2 und mit Linie 2? Was ist der Unterschied?
Edited
Basierend auf dem Javadoc, DataSource.getConnection()
nicht einmal in der Lage ist, die Verbindung zum aktiven Usertransaction
zu befestigen, wie funktioniert die UserTransaction
intern die Verbindung des Set autoCommit(false)
?