我已經安裝了Quartz .NET並創建了Quartz數據庫。我需要用我自己的自定義數據來擴展Quartz作業存儲。例如,當我通過Quartz API添加作業時,我需要在同一個數據庫事務中向我自己的自定義表中添加附加信息。我知道在Quartz中有一個名爲JobStoreCMT的類,但是我一直沒有找到任何簡明的例子來說明如何向Quartz提供NHibernate創建的事務。集成Quartz .NET和NHibernate
4
A
回答
1
我對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會話創建另一個數據庫連接。雖然有可能(至少在SQL Server中)有兩個不同的數據庫連接共享相同的事務,但我的理解是,System.Transactions的當前實現將通過打開第二個連接將事務升級爲分佈式事務。這將對性能產生重大影響,因爲分佈式事務比簡單事務慢得多。
相關問題
- 1. iOS Quartz UIView集成
- 2. .net和matlab集成
- 3. Python和.NET集成
- 4. .NET和Facebook集成
- 5. SolrNet + NHibernate集成
- 6. Quartz,Unity&.NET
- 7. Quartz .NET MakeDailyTrigger
- 8. 如何集成Lua和.Net
- 9. 集成jQuery AJAX和.NET
- 10. .NET和Documentum 5.3集成
- 11. UPS Worldship集成和.net
- 12. NHibernate Validator未與Fluent NHibernate集成
- 13. .NET Voip集成
- 14. 。與NHibernate和XmlSerializer的.Net類
- 15. 在啓動時集成tomcat和Quartz調度程序
- 16. 將Nhibernate.Search與Nhibernate 2集成
- 17. nhibernate與Unity3D的集成
- 18. HL7集成在.net
- 19. IronPython的集成.NET
- 20. 與.NET IVR集成
- 21. 集羣模式下的Spring和Quartz集成不會覆蓋現有作業
- 22. C#/。NET - 持續集成和FTP部署
- 23. 使用FluorineFx Flash Builder和.Net集成
- 24. .NET核心和Azure Active Directory集成
- 25. 與.net和svn的持續集成
- 26. .NET UI測試(單元和集成)
- 27. NHibernate和.net-4.0新的ISet <T>集合
- 28. NHibernate和集合類型
- 29. NHibernate和集合計數
- 30. Spring.net + NHibernate + .net MVC:Spring.Objects.Factory.UnsatisfiedDependencyException
我不認爲這是Quartz.Net的有效用例。你可以說得更詳細點嗎?你是否想要將其他自定義數據傳遞給Quartz.Net作業,還是想更新自己的數據庫?請記住,在您的NHibernate事務關閉後,Quartz.Net作業可能會很長時間觸發,因此您無法在作業中重複使用現有事務(您可以做的最好的做法是在作業中打開一個新會話,持有ISessionFactory)。 – yorah 2011-03-03 18:05:25