Używam jOOQ wewnątrz istniejącego projektu, który również używa niestandardowego kodu JDBC. Wewnątrz jOOQ transaction muszę wywołać inny kod JDBC i muszę przejść przez aktywne połączenie, aby wszystko dostało się do tej samej transakcji.Jak uzyskać podstawowe połączenie wewnątrz transakcji za pomocą jOOQ?
Nie wiem, jak odzyskać podstawowe połączenie wewnątrz transakcji jOOQ.
create.transaction(configuration -> {
DSLContext ctx = DSL.using(configuration);
// standard jOOQ code
ctx.insertInto(...);
// now I need a Connection
Connection c = ctx.activeConnection(); // not real, this is what I need
someOtherCode(c, ...);
});
Czytając dokumenty i wystającym nieco na kodzie źródłowym mój Najprościej jest to:
configuration.connectionProvider().acquire()
Ale nazwa jest nieco mylące w tym konkretnym przypadku zastosowania. Nie chcę nowego połączenia, tylko obecnego. Myślę, że to jest droga, ponieważ konfiguracja jest wyprowadzona i zawsze otrzymam to samo połączenie, ale nie jestem pewien i nie mogę znaleźć odpowiedzi w dokumentacji.
Dzięki @LukasEder za szybką odpowiedź. Używam 'DefaultTransactionProvider'. "ConnectionProvider" to 'DataSourceConnectionProvider' i brak' DefaultConnectionProvider'. Widziałem, że metoda 'ConnectionProvider.release()' nie robi nic w tym ostatnim i zamyka połączenie w pierwszym. 'DefaultTransactionProvider' mówi w dokumentach, które _intended do pracy z' DefaultConnectionProvider'_. Mam kłopoty? ;-) Wygląda na to, że zbyt szybko zabiję transakcję. – sargue
@sargue: Nie, nie masz kłopotów. Lokalna 'Konfiguracja' pochodzi z twojej własnej' Konfiguracja'. 'DefaultTransactionProvider' lokalnie używa' DefaultConnectionProvider' i zachowuje 'Connection' dla zakresu transakcji. Podejrzewam, że zasługuje na więcej dokumentacji. –
Dzięki @LukasEder. Zrobiono trochę edycji odpowiedzi i zaakceptowano jako najlepsze bieżące rozwiązanie. Może przydatna byłaby metoda dostawcy transakcji? 'configuration.transactionProvider(). currentConnection()' który zwróci wartość null na 'NoTransactionProvider' lub rzuci wyjątek na innych, bardziej egzotycznych dostawców, którzy nie mogą tego obsługiwać. Mogę utworzyć problem w GitHub, jeśli uważasz, że może być przydatny. – sargue