Java中创建单例的最佳方法是什么?数据库连接应该是单例(单例是否是自动线程安全的)?因为理论上DB不能同时被许多用户访问.
将NHibernate与分布式事务一起使用时,我们遇到了问题.
请考虑以下代码段:
//
// There is already an ambient distributed transaction
//
using(var scope = new TransactionScope()) {
using(var session = _sessionFactory.OpenSession())
using(session.BeginTransaction()) {
using(var cmd = new SqlCommand(_simpleUpdateQuery, (SqlConnection)session.Connection)) {
cmd.ExecuteNonQuery();
}
session.Save(new SomeEntity());
session.Transaction.Commit();
}
scope.Complete();
}
Run Code Online (Sandbox Code Playgroud)
有时,当服务器处于极端负载时,我们将看到以下内容:
如果单独使用,应用程序最终(在几秒或几分钟后)将从此条件恢复.
为什么步骤1中没有报告死锁异常?如果我们无法解决这个问题,那么我们如何防止我们的应用程序暂时无法使用?
该问题已在以下环境中重现
我已经创建了一个测试夹具,有时会为我们重现这个问题.它可以在这里找到:http://wikiupload.com/EWJIGAECG9SQDMZ
sql-server nhibernate connection-pooling distributed-transactions