Hi,
I am wondering if is it possibile to use EjbTimer to run in a cluster environment in a way that only one JVM runs a ejbTimeout at scheduled time
I see you are using Quartz,
I'm using Quartz since years with JdbcJobStore, it is possible to synch timers in diffferent JVMs
http://terracotta.org/documentation/quartz-scheduler/installation-guide

I think that the real problem of OpenEJB is that there is now way to deploy the same app in more JVMs in one administration action, so there is no way to "synch" timers because there is no cluster management node (o something like that)

But assuming that we deploy exactly the same App in two (o more) JVMs would it not to be possibile to configure Quartz inside org.apache.openejb.core.timer.EjbTimerServiceImpl.java to use the same JdbcStore ?

Some configuration could be
<Container id="Default EjbTimer Service" type="TIMERSERVICE">
JobStoreType:  jdbc
DataSource: MyQuartzDataSource
LocalSchedulerId: instance1scheduler
</Container>

In GF3.1.2 if you want clustered timers you have to configure a global shared DataSource for the EJBTimerService

The only workaround for me is to:
- use an external ActiveMQ
- use ejbTimer to put at scheduled a message on a queue (with a system property I let only ejbtimeout to something in one jvm) - let a MDB take a message from that queue (only one mdb in the cluter will take that message) it is a very poor solution, there is not way to guarantee that this fake ebjtTimeout whith MDB is not executed twice in parallel

thanks
Enrico



Reply via email to