Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Quartz+Spring: не завершаются задания при undeploy


Автор: AJetman 28.8.2009, 01:31
Хочу использовать Quartz в связке с Spring Framework. Код beanов ниже, все работает прекрасно... 

Код
<!-- Quartz Jobs -->
    <bean name="updateFormCacheJob" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="xxx.quartz.UpdatingOrderFormCacheJob"/>
        <property name="jobDataAsMap">
            <map>
                <entry key="orderDao">
                    <ref bean="jpaOrderDao"/>
                </entry>
            </map>
        </property>
    </bean>

    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="updateFormCacheJob"/>
        <property name="cronExpression" value="0 0 * * * ?"/>
    </bean>

    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" destroy-method="destroy">
        <property name="triggers">
            <list>
                <ref bean="cronTrigger"/>
            </list>
        </property>
        <property name="applicationContextSchedulerContextKey" value="applicationContext"/>
        <property name="transactionManager">
            <ref bean="transactionManager"/>
        </property>
    </bean>


Но имеется проблема. Раскрылась в том, что менеджеров пулов c3p0 при redeploy ругается на то, что пул уже был открыт, а сервер приложений при остановке вываливается с ошибкой (Glassfish версии 2.1.1-b27 вообще не захотел выключаться...). Погуглив узнал, что это из-за memory leakа в приложении... Закомментировав Quartz в файле настроек Spring'a все работает на ура. Другими словами, Quartz не закрывает свои задания при undeployment'e, а только при выключении Java-машины.

Поиск в интернете сказал, что проблема решается добавлением параметра destroy-method="destroy", но он у меня уже был и не помог, видимо.
Кто-нибудь сталкивался с этим? Может быть есть другие менеджеры заданий для Spring'a?

Автор: MisterCleric 28.8.2009, 10:42
Вообще горячий передеплой - это потенциальные мемори лики. Естественно, что в продакшине у тебя такого не будет. Я даже специальной отключаю опцию сканирования для горячего передеплоя, чтобы заказчики систем не рубали дров. Так что думаю можешь не заморачиваться - все-равно придется включать java-машину...

Автор: AJetman 28.8.2009, 16:55
Цитата(MisterCleric @ 28.8.2009,  10:42)
Вообще горячий передеплой - это потенциальные мемори лики. Естественно, что в продакшине у тебя такого не будет. Я даже специальной отключаю опцию сканирования для горячего передеплоя, чтобы заказчики систем не рубали дров. Так что думаю можешь не заморачиваться - все-равно придется включать java-машину...

Разобрался в проблеме - не связано с Quartz (параметр destroy-method работает), а с моими Dao, которые подключались из другой библиотеки...

MisterCleric, спасибо за ответ.

Тему можно закрыть.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)