My understanding of JobStoreCMT is that you declare all your transactions using the classes in the System.Transactions namespace that was introduced in .NET 2.0. Fortunately, NHibernate handles these transactions well, so you have to put your Quartz operations and NHibernate operations in one TransactionScope, for example:
using (var ts = new TransactionScope()) {
The code above assumes that the following vars are declared and initialized elsewhere:
Quartz.IScheduler _scheduler; NHibernate.ISessionFactory _sessionFactory;
The above code example is not filled with details, but it is a general idea.
One of the problems you may encounter is that the above code will require a distributed transaction, because the Quartz class JobStoreCMT creates one database connection and the NHibernate session creates another database connection. Although it is possible (with SQL Server, at least) to have two different database connections sharing the same transaction, I understand that the current implementation of System.Transactions will update the transaction to a distributed transaction with the opening of the second connection. This will have a significant impact on performance, since a distributed transaction is much slower than a simple transaction.
source share