2013-08-19 2 views
5

Мы используем Spring 3.1, JPA (через Hibernate) и Quartz. Обычно мы взаимодействуем с БД с помощью аннотации @PersistenceContext на Сервисных компонентах, а также с контроллерами SpringMVC или с вызовом службы, управляемой GraniteDS.Использование PersistenceContext в задании кварца

Я работаю над написанием задания кварца, которому необходимо взаимодействовать с базой данных. Я попробовал все, что мог, чтобы это работало. Я попробовал передать компонент Spring (управляемый с помощью @PersistenceContext и @Transactional) через jobMap, вызов функции entityManager.persist (o) выполняется, но ничего не происходит в базе данных. Я также попробовал аналогично this answer, создав фабричный класс для вызова autowireBean() для объекта задания. Я создал класс работы следующим образом:

public class CreateAlertJob implements Job { 

    @PersistenceContext 
    EntityManager entityManager; 

    @Override 
    @Transactional 
    public void execute(JobExecutionContext context) throws JobExecutionException { 

     SomeEntity entity = new SomeEntity(); 
     entityManager.persist(entity); 
    } 
} 

То же самое, метод выполняется, но база данных не изменяется. Я нашел this blog post, который ссылается на проект GitHub. Там он использует JpaInterceptor для установки сеанса Hibernate, но это использует шаблон DAO, и я хотел бы использовать @PersistenceContext.

Ясно, что есть что-то о кварцевой нити, которая мешает этому работать должным образом? Я собираюсь отказаться от идей и подумать о том, чтобы сделать вызов веб-службы контроллеру SpringMVC только для того, чтобы это работало.

ответ

6

С вашего CreateAlertJob не создано Spring, @Transactional в этом не вступает в силу.

У вас есть следующие варианты:

  • Делегирование фактическую работу весной фасоли и положить @Transactional там
  • Использование programmatic transaction management
  • Use AspectJ-based AOP implementation вместо реализации Spring по умолчанию (но это было бы излишним для такой простой проблема)
+0

Я попытался это изначально, и он не работал, но ясно, что некоторые другие проблемы продолжаются. Выполнение работы в фасоли весны, кажется, лучший вариант, и работает хорошо. – NTyler

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