2009-03-10 2 views
2

У меня есть веб-приложение на основе рамки sharp-architecture. Он фактически использует NHibernate для dal, и я добавил сервисный уровень между (VIEW-CONTROLLER) и DAL.Quartz.net + NHibernate + Windsor.Castle + CommonServiceLocator

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

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

Я нашел реализацию Quartz.Net для весны (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 рамки.

Какой может быть наилучший подход для решения этой проблемы?

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

+0

Где вы планируете использовать CommonServiceLocator именно? Я не понимаю, как вы здесь выиграете. –

ответ

3

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

+0

В моих Работах я использую Workflow Foundation для обработки более читаемым способом логики. В каждой Деятельности мне нужно получить доступ к определенным службам, и я использую CommonServiceLocator, потому что в одной строке я получаю следующие службы: var orderService = (IOrderService) ServiceLocator.Current.GetService (typeof (IOrderService)); – alexl

+0

вводят IOrderService (push) вместо запроса (pull). Помните принцип Голливуда ... –

+0

См. Средство рабочего процесса (http://using.castleproject.org/display/Contrib/Castle.Facilities.WorkflowIntegration), если вам нужно вводить услуги в свой рабочий процесс –

 Смежные вопросы

  • Нет связанных вопросов^_^