Hi Romain!
Yes, quartz is responsible for the serialization.
The JobData that is serialized into the database is simply a map.
The data included in the map is set by the application – in your case TomEE is
doing it.
It mainly includes:
- EJB_TIMERS_SERVICE - an object of type
org.apache.openejb.core.timer.EjbTimerServiceImpl
- TIMER_DATA - an object of type org.apache.openejb.core.timer.TimerData
These are objects put to the JobData in
org.apache.openejb.core.timer.EjbTimerServiceImpl.schedule(TimerData timerData).
What I am concerned about is that a timer added with e.g. TomEE 1.5.0 cannot be
executed within TomEE 1.5.1 because the deserialization fails.
To my way of thinking, it would be better to add only the relevant data as
simple data types (String, Integer, ...) to the JobData.
That would allow changes to the EjbTimerServiceImpl (or TimerData)
implementation without getting into incompatibility problems because of
deserialization issues within persisted timers added by a former TomEE version.
Best regards,
Thomas
-----
From: Romain Manni-Bucau [via OpenEJB]
[mailto:[email protected]]
Sent: Samstag, 10. November 2012 10:44
To: Thomas Schuler
Subject: Re: Use external database for persistent timer service
about serialization stuff: it is completely managed by quartz
(org.quartz.impl.jdbcjobstore.StdJDBCDelegate and all its children - one
by database type)
we could recreate the hierarchy (you too normally configuring quartz to
use the context classloader and since you have not to be so generic as us
you can simply override serialization method in a single class) but IMO if
this need is relevant for you it should be pushed to quartz itself, wdyt?
*Romain Manni-Bucau*
*Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
*Blog: **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
*LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
*Github: https://github.com/rmannibucau*
2012/11/9 Romain Manni-Bucau <[hidden email]>
> I pushed some stuff yesterday about 2 (well can be linked even if not
> direct) so it should be in the snapshot
> Le 9 nov. 2012 13:16, "tschuler" <[hidden email]> a écrit :
>
> Hi Romain!
>>
>> About 1: It may be a config issue, but I don't think so - doesn't matter
>> right now.
>> About 2: If you have a solution for it, please let me know. Would be
>> included in a future snapshot, I think?
>> About 3: We need to be sure that timer issues using e.g. the actual TomEE
>> version can be executed using the next TomEE version.
>> As there are serialized OpenEJB classes in the quartz
>> database, they may be incompatible with the class definition included in a
>> future TomEE version.
>>
>> Best regards,
>> Thomas
>>
>>
>> From: Romain Manni-Bucau [via OpenEJB] [mailto:
>> [hidden email]]
>> Sent: Donnerstag, 8. November 2012 22:38
>> To: Thomas Schuler
>> Subject: Re: Use external database for persistent timer service
>>
>> about 1: maybe just a quartz config
>> about 2: looking into it, think i got why but thinking to the best
>> solution*
>> about 3: we can store it as we want. That said not sure it'd be used, if
>> you change your tomee instance you often reset some datas (and i think
>> these timers can be resetted in such a case, no?)
>>
>> *Romain Manni-Bucau*
>> *Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
>> *Blog: **http://rmannibucau.wordpress.com/*<
>> http://rmannibucau.wordpress.com/>
>> *LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
>> *Github: https://github.com/rmannibucau*
>>
>>
>>
>>
>> 2012/11/8 tschuler <[hidden
>> email]</user/SendEmail.jtp?type=node&node=4658490&i=0>>
>>
>> > Hi!
>> >
>> > I tried todays snapshot and it worked better if TomEE is running all the
>> > time.
>> > But in case of TomEE restart a few errors happen for persisted timers.
>> >
>> > 1) automatic timeout:
>> > It takes two minutes until the timer fires again
>> >
>> > 08.11.2012 14:28:46 org.apache.catalina.startup.Catalina start
>> > INFO: Server startup in 2357 ms
>> > 08.11.2012 14:29:45 org.quartz.impl.jdbcjobstore.JobStoreSupport
>> > logWarnIfNonZero
>> > INFO: ClusterManager: detected 1 failed or restarted instances.
>> > 08.11.2012 14:29:45 org.quartz.impl.jdbcjobstore.JobStoreSupport
>> > clusterRecover
>> > INFO: ClusterManager: Scanning for instance
>> > "DE064071352380642408"'s
>> > failed in-progress jobs.
>> > 08.11.2012 14:29:45 org.quartz.impl.jdbcjobstore.JobStoreSupport
>> > logWarnIfNonZero
>> > INFO: ClusterManager: ......Freed 1 acquired trigger(s).
>> > 08.11.2012 14:30:45 org.quartz.impl.jdbcjobstore.JobStoreSupport
>> > recoverMisfiredJobs
>> > INFO: Handling 1 trigger(s) that missed their scheduled
>> fire-time.
>> > 08.11.2012 14:30:45 timerPersisted.server.SchedulerBeanAutomated
>> > automaticTimeout
>> > INFO: Automatic timeout occured
>> >
>> > 2) automatic and programmatic timeouts:
>> > TomEE kill prevented the execution of five programmatic timeouts,
>> while
>> > server restart the first programmatic timeout causes an error and is
>> never
>> > executed
>> >
>> > INFO: OpenWebBeans Container has started, it took 10 ms.
>> > 08.11.2012 16:59:02
>> > org.apache.openejb.core.timer.EjbTimerServiceImpl ejbTimeout
>> > WARNUNG: Exception from ejbTimeout on SchedulerBeanPersisted
>> > org.apache.openejb.OpenEJBException: Deployment does not exist
>> in
>> > this container. Deployment(id='SchedulerBeanPersisted'),
>> Container(id='My
>> > Singleton Container')
>> > at
>> >
>> >
>> org.apache.openejb.core.singleton.SingletonContainer.invoke(SingletonContainer.java:180)
>>
>> > at
>> >
>> >
>> org.apache.openejb.core.timer.EjbTimerServiceImpl.ejbTimeout(EjbTimerServiceImpl.java:552)
>>
>> > at
>> >
>> org.apache.openejb.core.timer.EjbTimeoutJob.execute(EjbTimeoutJob.java:39)
>> > at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
>> > at
>> >
>> >
>> org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
>>
>> > 08.11.2012 16:59:02
>> org.apache.openejb.assembler.classic.Assembler
>> > createApplication
>> > INFO: Created Ejb(deployment-id=SchedulerBeanAutomated,
>> > ejb-name=SchedulerBeanAutomated, container=My Singleton Container)
>> > 08.11.2012 16:59:02
>> > org.apache.openejb.core.timer.EjbTimerServiceImpl ejbTimeout
>> > WARNUNG: Exception from ejbTimeout on SchedulerBeanPersisted
>> > org.apache.openejb.OpenEJBException: Deployment does not exist
>> in
>> > this container. Deployment(id='SchedulerBeanPersisted'),
>> Container(id='My
>> > Singleton Container')
>> > at
>> >
>> >
>> org.apache.openejb.core.singleton.SingletonContainer.invoke(SingletonContainer.java:180)
>>
>> > at
>> >
>> >
>> org.apache.openejb.core.timer.EjbTimerServiceImpl.ejbTimeout(EjbTimerServiceImpl.java:552)
>>
>> > at
>> >
>> org.apache.openejb.core.timer.EjbTimeoutJob.execute(EjbTimeoutJob.java:39)
>> > at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
>> > at
>> >
>> >
>> org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
>>
>> > 08.11.2012 16:59:02
>> > org.apache.openejb.core.timer.EjbTimerServiceImpl ejbTimeout
>> > WARNUNG: Exception from ejbTimeout on SchedulerBeanPersisted
>> > org.apache.openejb.OpenEJBException: Deployment does not exist
>> in
>> > this container. Deployment(id='SchedulerBeanPersisted'),
>> Container(id='My
>> > Singleton Container')
>> > at
>> >
>> >
>> org.apache.openejb.core.singleton.SingletonContainer.invoke(SingletonContainer.java:180)
>>
>> > at
>> >
>> >
>> org.apache.openejb.core.timer.EjbTimerServiceImpl.ejbTimeout(EjbTimerServiceImpl.java:552)
>>
>> > at
>> >
>> org.apache.openejb.core.timer.EjbTimeoutJob.execute(EjbTimeoutJob.java:39)
>> > at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
>> > at
>> >
>> >
>> org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
>>
>> > 08.11.2012 16:59:02
>> > org.apache.openejb.core.timer.EjbTimerServiceImpl ejbTimeout
>> > WARNUNG: Failed to execute ejbTimeout on SchedulerBeanPersisted
>> > successfully within 1 attempts
>> > 08.11.2012 16:59:02
>> org.apache.openejb.assembler.classic.Assembler
>> > createApplication
>> > INFO: Created Ejb(deployment-id=SchedulerBeanPersisted,
>> > ejb-name=SchedulerBeanPersisted, container=My Singleton Container)
>> > 08.11.2012 16:59:02
>> org.apache.openejb.assembler.classic.Assembler
>> > createApplication
>> > INFO: Started Ejb(deployment-id=SchedulerBeanAutomated,
>> > ejb-name=SchedulerBeanAutomated, container=My Singleton Container)
>> > 08.11.2012 16:59:02
>> org.apache.openejb.assembler.classic.Assembler
>> > createApplication
>> > INFO: Started Ejb(deployment-id=SchedulerBeanPersisted,
>> > ejb-name=SchedulerBeanPersisted, container=My Singleton Container)
>> > 08.11.2012 16:59:02
>> org.apache.openejb.assembler.classic.Assembler
>> > createApplication
>> > INFO: Deployed
>> >
>> >
>> Application(path=C:\Java\tomee-examples\tomee-timerPersisted\webapps\timerPersisted)
>>
>> > 08.11.2012 16:59:02 timerPersisted.server.SchedulerBeanPersisted
>> > programmaticTimeout
>> > INFO: Programmatic timeout occurred.
>> >
>> > 3) Having a look into the quartz database tables, I can see that
>> JOB_DATA
>> > column of table QRTZ_TRIGGERS includes the, let me call it timer
>> context.
>> > This timer context includes serialized objects.
>> > What I am wondering about is how you can garantee that the timer
>> events
>> > can be executed with an updated TomEE version that may include an
>> update of
>> > the serialzed objects?
>> >
>> > Best regards,
>> > Thomas
>> >
>> >
>> >
>> > --
>> > View this message in context:
>> >
>> http://openejb.979440.n4.nabble.com/Use-external-database-for-persistent-timer-service-tp4658321p4658484.html
>> > Sent from the OpenEJB User mailing list archive at Nabble.com.
>> >
>>
>> ________________________________
>> If you reply to this email, your message will be added to the discussion
>> below:
>>
>> http://openejb.979440.n4.nabble.com/Use-external-database-for-persistent-timer-service-tp4658321p4658490.html
>> To unsubscribe from Use external database for persistent timer service,
>> click here<
>> >.
>> NAML<
>> http://openejb.979440.n4.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml
>> >
>>
>>
>>
>>
>> --
>> View this message in context:
>> http://openejb.979440.n4.nabble.com/Use-external-database-for-persistent-timer-service-tp4658321p4658495.html
>> Sent from the OpenEJB User mailing list archive at Nabble.com.
>
>
________________________________________
If you reply to this email, your message will be added to the discussion below:
http://openejb.979440.n4.nabble.com/Use-external-database-for-persistent-timer-service-tp4658321p4658507.html
To unsubscribe from Use external database for persistent timer service, click
here.
NAML
--
View this message in context:
http://openejb.979440.n4.nabble.com/Use-external-database-for-persistent-timer-service-tp4658321p4658607.html
Sent from the OpenEJB User mailing list archive at Nabble.com.