Мы используем 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 только для того, чтобы это работало.
Я попытался это изначально, и он не работал, но ясно, что некоторые другие проблемы продолжаются. Выполнение работы в фасоли весны, кажется, лучший вариант, и работает хорошо. – NTyler