Quartz.net + NHibernate + Windsor.Castle + CommonServiceLocator

У меня есть веб-приложение, основанное на структуре sharp-architecture. На самом деле он использует NHibernate для dal, и я добавил сервисный уровень между (VIEW-CONTROLLER) и DAL.

Мне действительно нужно реализовать планировщик для частого запуска моих заданий. Я буду использовать Quartz.net для выполнения этой задачи. На самом деле я столкнулся с проблемой. Потому что у меня будет много заданий, которые будут выполняться по разному расписанию, например, каждые 30 секунд, каждый день, каждую неделю.

Я хочу знать, есть ли способ запустить NHibernate с внедрением службы внутри Quartz, и будет ли он поддерживать параллелизм заданий, я имею в виду, если два задания выполняются одновременно, если есть проблем с NHibernate не будет. Я знаю, что есть проблемы с NHibernate и многопоточностью.

Я нашел реализацию Quartz.Net для Spring (http://www.zorched.net/2009/03/07/using-quartznet-springnet-and-nhibernate-to-run-scheduled-tasks-in-aspnet/) и реализация для Castle-Windsor (http://bugsquash.blogspot.com/2009/03/windsor-facility-for-quartznet.html).

Проблема в том, что я думаю, что эти примеры не учитывают случай, когда задания могут выполняться одновременно, это проблема Nhibernate. И я хочу использовать CommonServiceLocator для более высокого уровня и не ограничивать себя одной структурой IoC.

Как лучше всего решить эту проблему?

Спасибо за вашу помощь


person alexl    schedule 10.03.2009    source источник
comment
Где именно вы планируете использовать CommonServiceLocator? Я не вижу, как вы могли бы выиграть здесь.   -  person Mauricio Scheffer    schedule 12.03.2009


Ответы (2)


Используйте средство NHibernate, затем добавьте ISessionManager в свои IJobs. Это должно дать вам одну ISession на поток, и у вас не должно быть проблем.

person Mauricio Scheffer    schedule 11.03.2009
comment
В своих работах я использую Workflow Foundation для более удобной обработки логики. В каждой деятельности мне нужно получить доступ к определенным службам, и я использую CommonServiceLocator, потому что в одной строке я получаю службы: var orderService = (IOrderService)ServiceLocator.Current.GetService(typeof(IOrderService)); - person alexl; 12.03.2009
comment
введите IOrderService (push) вместо того, чтобы запрашивать его (pull). Помните голливудский принцип... - person Mauricio Scheffer; 12.03.2009
comment
См. средство рабочего процесса (using.castleproject.org/display/Contrib/) если вам нужно внедрить сервисы в ваш рабочий процесс - person Mauricio Scheffer; 12.03.2009
comment
К я понял! Но мне нужно внедрить репозиторий и менеджер, чтобы моя служба работала. Могу ли я сделать это по коду, мне нужно сделать файл конфигурации. Под кодом я подразумеваю автоматическую универсальную инъекцию Castle, поэтому мне не нужно указывать каждый репозиторий вручную. - person alexl; 13.03.2009
comment
Я использую схему Sharp Arch, если вам нужен образец, я могу предоставить его - person alexl; 13.03.2009
comment
для регистрации универсальных компонентов без определения параметра типа: devlicio.us/blogs/casey/archive/2008/04/13/ - person Mauricio Scheffer; 13.03.2009

См. это http://docs.castleproject.org/Contrib.Quartz-Net-integration.ashx

person hellangle    schedule 21.11.2011