gpt4 book ai didi

.net - 将 Quartz .NET 与 NHibernate 集成

转载 作者:行者123 更新时间:2023-12-01 04:12:50 28 4
gpt4 key购买 nike

我已经安装了 Quartz .NET 并创建了 Quartz 数据库。我需要使用我自己的自定义数据扩展 Quartz 作业存储。例如,当我通过 Quartz API 添加作业时,我需要在同一个数据库事务中向我自己的自定义表添加附加信息。我知道 Quartz 中有一个名为 JobStoreCMT 的类,但是我找不到任何简洁的示例来展示如何为 Quartz 提供 NHibernate 创建的事务。

最佳答案

我对 JobStoreCMT 的理解是,您使用 .NET 2.0 中引入的 System.Transactions 命名空间中的类声明所有事务。幸运的是,NHibernate 也可以很好地处理这些事务,因此您可以将 Quartz 操作和 NHibernate 操作放在单个 TransactionScope 中,如下所示:

using (var ts = new TransactionScope()) {

// do something with your scheduler here, eg
_scheduler.ScheduleJob(someJobDetail, someTrigger);

// create an NHibernate session that will be part of the same transaction
using (var session = _sessionFactory.OpenSession()) {

// perform actions on session here, but do *not* make use of
// NHibernate transaction methods, such as ISession.BeginTransaction(),
// because the transaction is controlled via the TransactionScope instance.

}

ts.Complete();
}

上面的代码假设在其他地方声明并初始化了以下变量:
Quartz.IScheduler _scheduler;
NHibernate.ISessionFactory _sessionFactory;

上面的代码示例没有详细说明,但这是总体思路。

您可能遇到的一个问题是,上面的代码需要分布式事务,因为 Quartz JobStoreCMT 类创建了一个数据库连接,而 NHibernate session 创建了另一个数据库连接。尽管有可能(至少对于 SQL Server)有两个不同的数据库连接共享同一个事务,但我的理解是 System.Transactions 的当前实现将随着第二个连接的打开将事务升级为分布式事务。这将对性能产生重大影响,因为分布式事务比简单事务慢得多。

关于.net - 将 Quartz .NET 与 NHibernate 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5095859/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com