У меня только что возникла проблема с заданием Quartz, которое я вызываю через Spring.У моего ExecuteInternal
метода был атрибут [Transaction]
(потому что он выполняет загрузку вызовов БД), но когда он запускается, я получаю сообщение об ошибке «Нет привязанного к потоку сеанса NHibernate».
Интересно, это потому, что Spring.NET не поддерживает атрибут [Transaction]
в кварцевых объектах?
Если нет, это нормально ... Я могу запустить транзакцию вручную, но хотел проверить, что это был случай, а не глупая ошибка в моей конфигурации где-то.
[Обновление] Я понял это на самом деле.В документации API говорится, что предпочтительный способ сделать это - использовать транзакции на уровне сервиса.Моя работа заключалась в использовании DAO для выполнения этой работы, но мои транзакции находятся на моем уровне обслуживания, поэтому я просто вызвал методы обслуживания из своей работы вместо того, чтобы выполнять ту же работу (сохранение, обновление записей и т. Д.), Поскольку они уже существуют.
Это также предполагает, что если вы дадите SchedulerFactoryObject объект DbProvider, вы сможете использовать транзакции в самом задании, но когда я это сделал, мне показалось, что я хочу найти мои триггеры, настроенные в специальной таблице в БД (чего я ненастроен так как все мои триггеры в XML), но, возможно, это еще один способ сделать это.
Хотя вызов методов службы мне подходит.