Использование Hibernate-сессии с кварцем - PullRequest
6 голосов
/ 15 декабря 2010

У меня есть веб-приложение, которое использует такие фреймворки, как Struts и Hibernate. В настоящее время я разрабатываю планировщик для этого приложения с использованием Quartz. Во время кодирования я понял, что использование Hibernate-сессии невозможно с потоками Quartz.

У кого-нибудь есть решение для использования сессий гибернации из кварцевого класса заданий?

Ответы [ 4 ]

3 голосов
/ 15 декабря 2010

Один из подходов - использовать HibernateUtil класс , который создает SessionFactory в статическом инициализаторе и делает его доступным через public static геттер.Ваша Кварцевая работа может создать Session как HibernateUtil.getSessionFactory().getCurrentSession() и использовать его.

3 голосов
/ 21 ноября 2014

Я знаю, что это старый вопрос, но я быстро выполнил поиск в Google, и это был первый хит.

В кварцевом задании добавьте эту строку в начале метода:

public void execute(JobExecutionContext context) throws JobExecutionException
{
    SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); //<-- this line

     //...your code here...
}

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

1 голос
/ 14 июня 2016

Поиск "Quartz Hibernate" вернул это.Переходя к другому решению (и используя Гобелен), я решил поделиться им.

при планировании работы:

…
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDataMap myJobDataMap = new JobDataMap();
myJobDataMap.put("HibernateSessionManager", hibernateSessionManager);
        myJobDataMap.put("PerthreadManager", perThreadManager);
JobDetail job = JobBuilder.newJob(SomeJob.class).withIdentity(
            "SomeJob", "someGroup").setJobData(
            myJobDataMap).build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(
            "Some Trigger", "someGroup").startNow().withSchedule(
            SimpleScheduleBuilder.repeatSecondlyForever(30)).build();
scheduler.scheduleJob(job, trigger);
scheduler.start();
…

и в работе

public void execute(JobExecutionContext context)
                throws JobExecutionException
{
    JobDataMap jdm = context.getMergedJobDataMap();
    HibernateSessionManager hibernateSessionManager = (HibernateSessionManager) jdm.get("HibernateSessionManager");
    PerthreadManager perThreadManager = (PerthreadManager) jdm.get("PerthreadManager");

    Session session = hibernateSessionManager.getSession();
    //do stuff with session …
    //now clean up, otherwise I ended up with <IDLE> in transactions
    perThreadManager.cleanUp();
}

Надеюсь, кто-нибудь может использовать это.

1 голос
/ 15 декабря 2010

Вы можете посмотреть по ссылке ниже, чтобы увидеть, если она дает вам направление следовать. Поскольку вы не используете Spring, может быть трудно применить это напрямую

http://forum.springsource.org/showthread.php?t=12117

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...