Seam2 bug with Quartz?
nakhnoukh Nov 21, 2007 12:24 PMSeam 2.0.0.GA, JBoss 4.2.1
Hi, I'm fairly sure this is a Seam bug.
I've set up an ObserveInitilization class as suggested by Pete Muir here: http://in.relation.to/Bloggers/DoingSomethingAtStartupWithSeam
It looks like this:
@Name("observeInitialization") public class ObserveInitialization { @In(create=true) Updater updater; @Observer("org.jboss.seam.postInitialization") public void start() { initialize(30 * 1000l); } @Asynchronous public void initialize(@Duration long durationInMilliseconds) { updater.update(new Date(), "0 0/3 * * * ?"); } }
The Updater class looks like this:
@Name("updater") public class Updater { @In private EntityManager entityManager; @Logger private Log log; @Asynchronous public void update(@Expiration Date start, @IntervalCron String cron) { //... } }
The issue is this code calls ThreadPoolDispatcher.scheduleWithExecutorService, which casts the return value of createSchedule to a TimerSchedule.
Because I'm using an @IntervalCron the return value of createSchedule is a CronSchedule which extends Schedule, but not TimerSchedule, so I get a ClassCastException
09:14:59,387 ERROR [[/admin]] Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener java.lang.ClassCastException: org.jboss.seam.async.CronSchedule at org.jboss.seam.async.ThreadPoolDispatcher.scheduleInvocation(ThreadPoolDispatcher.java:47) at org.jboss.seam.async.ThreadPoolDispatcher.scheduleInvocation(ThreadPoolDispatcher.java:29) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.seam.util.Reflections.invoke(Reflections.java:21) at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:31) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56) at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:31) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:42) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:106) at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:155) at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:91) at org.jboss.seam.async.ThreadPoolDispatcher_$$_javassist_6.scheduleInvocation(ThreadPoolDispatcher_$$_javassist_6.java) at org.jboss.seam.async.AsynchronousInterceptor.aroundInvoke(AsynchronousInterceptor.java:38) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:106) at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:155) at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:91) at com.company.Updater_$$_javassist_5.update(Updater_$$_javassist_5.java) at com.company.ObserveInitialization.initialize(ObserveInitialization.java:29)
I compared this to the Quartz example packaged with Seam.
That example also calls createSchedule but as a parameter to QuartzDispatcher.scheduleWithQuartzService which accepts a Schedule, thus no ClassCastException.
Has anyone else run into this?