Uploaded image for project: 'Seam 2'
  1. Seam 2
  2. JBSEAM-2306

Can't create Quartz Cron job at startup

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Major
    • Resolution: Done
    • Affects Version/s: 2.0.0.GA
    • Fix Version/s: 2.0.2.CR1, 2.1.0.BETA1
    • Component/s: Async
    • Labels:
      None
    • Environment:

      Windows, JBoss 4.2.1 GA

      Description

      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 cl
      ass 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.

        Gliffy Diagrams

          Attachments

            Activity

              People

              • Assignee:
                pmuir Pete Muir
                Reporter:
                nakhnoukh Nade Andrews
              • Votes:
                5 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: