Estou definindo a arquitetura comum de agendamento de tarefas no meu projeto.
Estou utilizando Websphere 6.1.0.27; Spring 2.5.6 e Quartz 1.6.6.
E pra isso está faltando eu conseguir obter o contexto do spring na execução de um Job Quartz.
Estou seguindo esta implementação:
http://cse-mjmcl.cse.bris.ac.uk/blog/2007/06/20/1182370280435.html
Com o applicationContext; logo que subí a aplicação já caiu no meu Job; porem não conseguiu capturar o contexto onde faz “schedulerContext.get(APPLICATION_CONTEXT_KEY)”; assim como no exemplo.
E deu esse erro:[quote][02/02/10 13:03:43:062 ACT] 0000036b SystemOut O 13:03:43.062 [schedulerBean_Worker-1] ERROR c.a.b.app.gac.service.impl.JobTeste - org.quartz.JobExecutionException: No application context available in scheduler context for key “applicationContext”[/quote]A variável está declarada com o valor “applicationContex” mesmo e no applicationContext.xml tambem está assim.
Meu applicationContext.xml está no final do tópico.
Enfim; isto não é o que mais estou preocupado agora.
Pois estou tendo problemas para refazer este cenário acontecer de novo.
[size=17]O que acontece é o seguinte: quando este primeiro problema aconteceu; eu estava sem o debug ligado. Então para tentar solução para este problema; iniciei o debug e fui reiniciar a aplicação no servidor ( pra rodar novamente os agendamentos pois meu repeatCount estava com o valor = 3; significando que o Job rodou 3 vezes no primeiro teste e parou ). Até aqui tudo bem. Então com o reinício da aplicação eu estava esperando que este Job fosse dar o mesmo problema; porem agora eu estava com o debug ativo para análise. Mas aí que o pior aconteceu: o servidor reiniciou e nada do quartz “aconteceu”. Isto é completamente inesperado pois não modifiquei nada no applicationContext.xml ou qquer que seja o arquivo. Somente reiniciei o servidor ! E agora ? O que devo fazer ?[/size]
Já desinstalei a aplicação do websphere; limpei os arquivos temporarios do websphere; instalei a aplicação de novo; desliguei o debug … e nada !
A única coisa é que notei algo suspeito no log; que nao havia aparecido quando subí o servidor e o Job funcionou:
[quote][03/02/10 13:15:35:484 ACT] 00000025 VirtualHost I SRVE0250I: O Módulo da Web GAC foi ligado ao default_host[:9080,:80,:9443,:5060,:5061,:443].
[03/02/10 13:15:35:515 ACT] 00000025 ApplicationMg A WSVR0221I: Aplicativo iniciado: GAC
[03/02/10 13:16:06:828 ACT] 00000025 AppBinaryProc I ADMA7021I: A distribuição do aplicativo GAC foi concluída com êxito.
[03/02/10 13:16:06:843 ACT] 00000025 FileRepositor A ADMR0015I: O usuário defaultWIMFileBasedRealm/wasadmin criou o documento cells/O360UDI17Node01Cell/applications/GAC.ear/deltas/GAC/delta-1265220780781.
[03/02/10 13:16:06:843 ACT] 00000025 FileRepositor A ADMR0016I: O usuário defaultWIMFileBasedRealm/wasadmin modificou o documento cells/O360UDI17Node01Cell/applications/GAC.ear/deployments/GAC/gac.war/WEB-INF/.faces-config.xml.jsfdia.
[03/02/10 13:16:06:859 ACT] 00000025 FileRepositor A ADMR0016I: O usuário defaultWIMFileBasedRealm/wasadmin modificou o documento cells/O360UDI17Node01Cell/applications/GAC.ear/deployments/GAC/META-INF/ibm-application-bnd.xmi.
[03/02/10 13:16:06:859 ACT] 00000025 FileRepositor A ADMR0016I: O usuário defaultWIMFileBasedRealm/wasadmin modificou o documento cells/O360UDI17Node01Cell/applications/GAC.ear/deployments/GAC/gac.war/WEB-INF/web.xml.
[03/02/10 13:16:07:015 ACT] 00000025 FileRepositor A ADMR0016I: O usuário defaultWIMFileBasedRealm/wasadmin modificou o documento cells/O360UDI17Node01Cell/applications/GAC.ear/deployments/GAC/gac.war/META-INF/MANIFEST.MF.
[03/02/10 13:16:07:015 ACT] 00000025 FileRepositor A ADMR0016I: O usuário defaultWIMFileBasedRealm/wasadmin modificou o documento cells/O360UDI17Node01Cell/applications/GAC.ear/deployments/GAC/META-INF/MANIFEST.MF.
[03/02/10 13:16:07:046 ACT] 00000025 FileRepositor A ADMR0016I: O usuário defaultWIMFileBasedRealm/wasadmin modificou o documento cells/O360UDI17Node01Cell/applications/GAC.ear/deployments/GAC/gac.war/WEB-INF/faces-config.xml.
[03/02/10 13:16:07:046 ACT] 00000025 FileRepositor A ADMR0016I: O usuário defaultWIMFileBasedRealm/wasadmin modificou o documento cells/O360UDI17Node01Cell/applications/GAC.ear/deployments/GAC/gac.war/WEB-INF/.faces-navigation.xml.jsfdia.
[03/02/10 13:16:07:125 ACT] 00000025 FileRepositor A ADMR0016I: O usuário defaultWIMFileBasedRealm/wasadmin modificou o documento cells/O360UDI17Node01Cell/applications/GAC.ear/deployments/GAC/gac.war/WEB-INF/applicationContext.xml.
[03/02/10 13:16:07:125 ACT] 00000025 FileRepositor A ADMR0016I: O usuário defaultWIMFileBasedRealm/wasadmin modificou o documento cells/O360UDI17Node01Cell/applications/GAC.ear/deployments/GAC/deployment.xml.
[03/02/10 13:16:07:140 ACT] 00000025 FileRepositor A ADMR0016I: O usuário defaultWIMFileBasedRealm/wasadmin modificou o documento cells/O360UDI17Node01Cell/applications/GAC.ear/deployments/GAC/gac.war/WEB-INF/ibm-web-ext.xmi.
[03/02/10 13:16:07:140 ACT] 00000025 FileRepositor A ADMR0016I: O usuário defaultWIMFileBasedRealm/wasadmin modificou o documento cells/O360UDI17Node01Cell/nodes/O360UDI17Node01/serverindex.xml.
[03/02/10 13:16:07:171 ACT] 00000025 FileRepositor A ADMR0016I: O usuário defaultWIMFileBasedRealm/wasadmin modificou o documento cells/O360UDI17Node01Cell/applications/GAC.ear/deployments/GAC/gac.war/WEB-INF/faces-navigation.xml.
[03/02/10 13:16:07:187 ACT] 00000025 FileRepositor A ADMR0016I: O usuário defaultWIMFileBasedRealm/wasadmin modificou o documento cells/O360UDI17Node01Cell/applications/GAC.ear/deployments/GAC/gac.war/WEB-INF/ibm-web-bnd.xmi.
[03/02/10 13:16:07:187 ACT] 00000025 FileRepositor A ADMR0016I: O usuário defaultWIMFileBasedRealm/wasadmin modificou o documento cells/O360UDI17Node01Cell/applications/GAC.ear/deployments/GAC/META-INF/application.xml.
[03/02/10 13:16:07:187 ACT] 00000025 FileRepositor A ADMR0016I: O usuário defaultWIMFileBasedRealm/wasadmin modificou o documento cells/O360UDI17Node01Cell/applications/GAC.ear/GAC.ear.
[03/02/10 13:16:07:234 ACT] 00000025 FileRepositor A ADMR0017I: O usuário defaultWIMFileBasedRealm/wasadmin excluiu o documento cells/O360UDI17Node01Cell/applications/GAC.ear/deltas/GAC/delta-1265219703734.
[03/02/10 13:16:07:515 ACT] 00000028 ApplicationDe I ApplicationDeploymentController perform ApplicationDeploymentController: performing appcontexts refresh[/quote]
O log da hora que “funcionou” é esse (note que coloquei o início e o fim a partir de um log comum entre os dois):
[quote][02/02/10 13:00:29:718 ACT] 00000028 VirtualHost I SRVE0250I: O Módulo da Web GAC foi ligado ao default_host[:9080,:80,:9443,:5060,:5061,:443].
[02/02/10 13:00:29:718 ACT] 00000028 ApplicationMg I WSVR0226I: Pedido do módulo start operation iniciado pelo usuário concluído em Módulo, gac.war, do aplicativo, GAC
[02/02/10 13:02:33:140 ACT] 0000001f SystemOut O 13:02:33.140 [WebContainer : 2] INFO c.i.f.w.h.core.AsyncServerDetector - Asynchronous HTTP Service available: false
[02/02/10 13:02:33:140 ACT] 0000004c AsyncServerDe I gac: Asynchronous HTTP Service available: false
[02/02/10 13:02:33:343 ACT] 0000001f SystemOut O 13:02:33.343 [WebContainer : 2] INFO c.i.f.w.h.core.AsyncServerDetector - JMS API available: true
[02/02/10 13:02:33:343 ACT] 0000004c AsyncServerDe I gac: JMS API available: true
[02/02/10 13:02:33:625 ACT] 0000001f SystemOut O 13:02:33.625 [WebContainer : 2] INFO c.i.f.w.h.core.AsyncServerDetector - Adapting to Send Updated Views environment.
[02/02/10 13:02:33:625 ACT] 0000004c AsyncServerDe I gac: Adapting to Send Updated Views environment.
[02/02/10 13:03:11:156 ACT] 0000001f SystemOut O 13:03:11.156 [WebContainer : 2] DEBUG c.a.b.a.g.s.i.JobStarterServiceImpl - >> iniciarJobTeste()
[02/02/10 13:03:17:796 ACT] 0000001f SystemOut O 13:03:17.796 [WebContainer : 2] INFO org.quartz.core.QuartzScheduler - Scheduler schedulerBean_$NON_CLUSTERED started.
[02/02/10 13:03:17:843 ACT] 0000036b SystemOut O 13:03:17.843 [schedulerBean_Worker-1] DEBUG c.a.b.app.gac.service.impl.JobTeste - In JobTeste - executing its JOB at Tue Feb 02 13:03:17 ACT 2010 by triggerBean
[02/02/10 13:03:17:796 ACT] 0000004c QuartzSchedul I gac: Scheduler schedulerBean$_NON_CLUSTERED started.
[02/02/10 13:03:18:125 ACT] 0000001f SystemOut O 13:03:18.125 [WebContainer : 2] INFO org.hibernate.util.NamingHelper - JNDI InitialContext properties:{}
[02/02/10 13:03:18:234 ACT] 0000036b SystemOut O 13:03:18.234 [schedulerBean_Worker-1] DEBUG c.a.b.app.gac.service.impl.JobTeste - getApplicationContext iniciado
[02/02/10 13:03:18:125 ACT] 0000004c NamingHelper I gac: JNDI InitialContext properties:{}
[02/02/10 13:03:18:500 ACT] 0000001f SystemOut O 13:03:18.500 [WebContainer : 2] DEBUG c.a.b.a.g.s.i.JobStarterServiceImpl - – iniciarJobTeste: Hits=1.0, LastValue=7141.0, Min=7141.0, Max=7141.0, Avg=7141.0, Total=7141.0, StdDev=0.0, FirstAccess=Tue Feb 02 13:03:18 ACT 2010, LastAccess=Tue Feb 02 13:03:18 ACT 2010
[02/02/10 13:03:18:875 ACT] 0000001f SystemOut O 13:03:18.875 [WebContainer : 2] DEBUG c.a.b.a.g.s.i.JobStarterServiceImpl - << iniciarJobTeste -> void
[02/02/10 13:03:27:796 ACT] 0000036c SystemOut O 13:03:27.796 [schedulerBean_Worker-2] DEBUG c.a.b.app.gac.service.impl.JobTeste - In JobTeste - executing its JOB at Tue Feb 02 13:03:27 ACT 2010 by triggerBean
[02/02/10 13:03:28:000 ACT] 0000036c SystemOut O 13:03:28.000 [schedulerBean_Worker-2] DEBUG c.a.b.app.gac.service.impl.JobTeste - getApplicationContext iniciado
[02/02/10 13:03:37:796 ACT] 0000036d SystemOut O 13:03:37.796 [schedulerBean_Worker-3] DEBUG c.a.b.app.gac.service.impl.JobTeste - In JobTeste - executing its JOB at Tue Feb 02 13:03:37 ACT 2010 by triggerBean
[02/02/10 13:03:38:000 ACT] 0000036d SystemOut O 13:03:38.000 [schedulerBean_Worker-3] DEBUG c.a.b.app.gac.service.impl.JobTeste - getApplicationContext iniciado
[02/02/10 13:03:43:062 ACT] 0000036b SystemOut O 13:03:43.062 [schedulerBean_Worker-1] ERROR c.a.b.app.gac.service.impl.JobTeste - org.quartz.JobExecutionException: No application context available in scheduler context for key “applicationContext”
at com.altec.bsbr.app.gac.service.impl.JobTeste.getApplicationContext(JobTeste.java:84)
at com.altec.bsbr.app.gac.service.impl.JobTeste.execute(JobTeste.java:54)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:534)
[02/02/10 13:03:43:062 ACT] 00000516 JobTeste E gac: org.quartz.JobExecutionException: No application context available in scheduler context for key “applicationContext”
at com.altec.bsbr.app.gac.service.impl.JobTeste.getApplicationContext(JobTeste.java:84)
at com.altec.bsbr.app.gac.service.impl.JobTeste.execute(JobTeste.java:54)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:534)
[02/02/10 13:03:44:828 ACT] 0000036c SystemOut O 13:03:44.828 [schedulerBean_Worker-2] ERROR c.a.b.app.gac.service.impl.JobTeste - org.quartz.JobExecutionException: No application context available in scheduler context for key “applicationContext”
at com.altec.bsbr.app.gac.service.impl.JobTeste.getApplicationContext(JobTeste.java:84)
at com.altec.bsbr.app.gac.service.impl.JobTeste.execute(JobTeste.java:54)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:534)
[02/02/10 13:03:44:828 ACT] 00000517 JobTeste E gac: org.quartz.JobExecutionException: No application context available in scheduler context for key “applicationContext”
at com.altec.bsbr.app.gac.service.impl.JobTeste.getApplicationContext(JobTeste.java:84)
at com.altec.bsbr.app.gac.service.impl.JobTeste.execute(JobTeste.java:54)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:534)
[02/02/10 13:03:45:218 ACT] 0000036d SystemOut O 13:03:45.218 [schedulerBean_Worker-3] ERROR c.a.b.app.gac.service.impl.JobTeste - org.quartz.JobExecutionException: No application context available in scheduler context for key “applicationContext”
at com.altec.bsbr.app.gac.service.impl.JobTeste.getApplicationContext(JobTeste.java:84)
at com.altec.bsbr.app.gac.service.impl.JobTeste.execute(JobTeste.java:54)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:534)
[02/02/10 13:03:45:218 ACT] 00000518 JobTeste E gac: org.quartz.JobExecutionException: No application context available in scheduler context for key “applicationContext”
at com.altec.bsbr.app.gac.service.impl.JobTeste.getApplicationContext(JobTeste.java:84)
at com.altec.bsbr.app.gac.service.impl.JobTeste.execute(JobTeste.java:54)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:534)
[02/02/10 13:33:47:312 ACT] 00000025 LTPAServerObj W SECJ0371W: Ocorreu uma falha na validação do token LTPA pois o token expirou, com as seguintes informações: Token expiration Date: Tue Feb 02 13:27:54 ACT 2010, current Date: Tue Feb 02 13:33:47 ACT 2010.
[02/02/10 13:33:47:328 ACT] 00000025 LTPAServerObj W SECJ0371W: Ocorreu uma falha na validação do token LTPA pois o token expirou, com as seguintes informações: Token expiration Date: Tue Feb 02 13:27:54 ACT 2010, current Date: Tue Feb 02 13:33:47 ACT 2010.
[02/02/10 13:34:28:875 ACT] 0000004e ApplicationDe I ApplicationDeploymentController perform ApplicationDeploymentController: performing appcontexts refresh[/quote]
.
applicationContext.xml:[code]<?xml version="1.0" encoding="UTF-8"?>
<!-- Define the Job Bean that will be executed. Our bean is named in the jobClass property.
-->
<bean name="myJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.altec.bsbr.app.gac.service.impl.JobTeste"/>
<property name="name" value="JobTeste"/>
</bean>
<!-- Associate the Job Bean with a Trigger. Triggers define when a job is executed.
-->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="myJob"/>
<property name="jobName" value="JobTeste" />
<property name="startDelay" value="5000" />
<property name="repeatInterval" value="10000" />
<property name="repeatCount" value="3" />
</bean>
<!--
-->
<bean name="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
<property name="applicationContextSchedulerContextKey">
<value>applicationContext</value>
</property>
</bean>
<!-- applicationContextSchedulerContextKey: name used to publish applicationContext to Quartz Job instances
, so they can call business services -->
[/code]
keywords: websphere “user defaultWIMFileBasedRealm” “modified document cells” spring context contexto quartz websphere was