分散トランザクション用に構成された既存のプロジェクトに取り組んでいます。
プロジェクトは Hibernate を使用していますが、いくつかの歴史的な理由から、私が取り組んでいる部分は JDBC を使用しており、そのままにしておく必要があります。
接続を取得するには、休止状態セッションの JDBC 接続を返す API を呼び出す必要があります。
1 つのトランザクションでいくつかの更新/挿入をまとめる必要があるため、ここで私がやっていることは次のとおりです。
- 接続で autoCommit を false に設定します。
- 挿入を行います (ステートメントの準備、クエリの実行)
- コミットを呼び出します。
コミット時に SQLException が発生します。これは、明らかに分散トランザクションでコミット/ロールバックを明示的に呼び出すことが許可されていないためです。データソース構成を非 XA に変更することはオプションではありません。
これを回避する方法はありますか?
connexionDiff.setAutoCommit(false);
psInsertLiv = connexionDiff.prepareStatement(reqInsertLivraison);
psInsertLivHisto = connexionDiff.prepareStatement(reqInsertLivraisonHisto);
psSequence = connexionDiff.prepareStatement(reqCleLivraison);
ps = connexionDiff.prepareStatement(requeteRelivraison);
rs = ps.executeQuery();
while(rs.next()) {
rsSequence = psSequence.executeQuery();
while ( rsSequence.next() ) {
sequenceLivraison = rsSequence.getInt(1);
}
psInsertLiv.setInt(1, sequenceLivraison);
psInsertLiv.setInt(2, rs.getInt(1));
psInsertLiv.executeUpdate();
psInsertLivHisto.setInt(1, sequenceLivraison);
psInsertLivHisto.setInt(2, rs.getInt(1));
psInsertLivHisto.executeUpdate();
connexionDiff.commit();
}
} catch (SQLException ex) {
try{
connexionDiff.rollback();
}catch {
//......
}
} finally {
//.....
}
どうも