私はいくつかのカスタムJDBCコードを使用する既存のプロジェクトの中でjOOQを使用しています。内部ではjOOQ transaction他のJDBCコードを呼び出す必要があり、すべてが同じトランザクション内に入るようにアクティブな接続を通過する必要があります。jOOQを使用してトランザクション内の基本接続を取得するには?
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, ...);
});
ドキュメントを読んで、ソースコード上のビットをのぞき見、私の最善の策はこれです:
configuration.connectionProvider().acquire()
しかし、名前は、この特定のユースケースには少し誤解を招く恐れがあります。私は新しい接続を望んでいません。現在の接続だけです。私はこれは設定が導出され、常に同じ接続を得るために行く方法だと思いますが、わかりませんし、ドキュメントで答えを見つけることができません。
おかげさまで、@LukasEderはあなたの迅速な答えです。私は 'DefaultTransactionProvider'を使用しています。 'ConnectionProvider'は' DataSourceConnectionProvider'であり、 'DefaultConnectionProvider'はありません。私は 'ConnectionProvider.release()'メソッドは後者では何もしないで、前者では接続を閉じていることがわかりました。 'DefaultTransactionProvider'は、' DefaultConnectionProvider'_で動作することが意図されていたドキュメントを示しています。私は困っていますか? ;-)私はトランザクションをあまりにも早く殺したかもしれないと思われる。 – sargue
@sargue:いいえ、あなたは困っていません。ローカルの 'Configuration'は自分自身の' Configuration'から得られます。 'DefaultTransactionProvider'はローカルで' DefaultConnectionProvider'を使い、 'Connection'をトランザクションのスコープとして保持します。私はこれがより多くのドキュメントにふさわしいと思う。 –
ありがとう@LukasEder。答えを編集して、現在の最良の解決策として受け入れます。おそらくトランザクションプロバイダのメソッドが役に立ちますか? 'configuration.transactionProvider()。currentConnection()'は 'NoTransactionProvider'でnullを返します。これをサポートできない他のよりエキゾチックなプロバイダに対しては例外をスローします。私はGitHubで役に立つかもしれないと思うなら問題を作り出すことができます。 – sargue