「分散トランザクションに参加できません」というメッセージが表示され、Oracleに例外がスローされるユニットテストで問題が発生しています。私たちはODP.netとNHibernateを使用しています。この問題は、ネストされたトランザクション内でデータベースに一定数のコミットを行った後に発生します。うーん、これは、継続的な統合サーバー(Windows Server 2003 R2 SP1)ではなく、私の開発マシン(XP SP2)で失敗しています。NHibernateとの分散トランザクションに参加できません
これは、問題の(っぽい)小さなREPROです:私たちが使用している接続文字列がある
using (new TransactionScope())
{
for (int j = 0; j < 15; j++)
{
using (var transactionScope = new TransactionScope(TransactionScopeOption.Required))
using (var session = sessionFactory.OpenSession())
{
for (int i = 0; i < 200; i++)
{
var obj = [create new NHibernate mapped obj]
session.Save(obj);
}
session.Flush();
transactionScope.Complete();
}
}
}
:
データソース=サーバー;ユーザーID =ユーザー;パスワード=パスワード; Enlist = true;
明らかにこれはやっているように見えますが、製品コードのケースはもっと複雑です(外部トランザクションループと内部トランザクションループは非常に分かれています)。
ビルドサーバーでは、外部ループ(j)の5番目の反復で確実に爆発します。私のローカルマシン上を通過するのを見て、これがトランザクションや接続の設定された制限の何らかの種類に当たっているのだろうか?
誰かが私が試してみることができるどんな趣味を持っていますか?それを修正する明白な方法は、この状況をよりうまく処理するためにコードを変更することですが、なぜそれが1つのマシンで動作し、別のマシンで動作しないのか理解したいと思います。ありがとう!
あなたはどのバージョンのNHibernateを使用していますか? –
Oracle版ですか? – DCookie
そして、あなたはOracleエラー番号を取得していますか? – DCookie