4 Replies Latest reply on Aug 11, 2007 10:10 PM by gus888

    em is always null in my quartz scheduler, plz help.

    statelessbean

      Hello,
      I implemented my opensymphony quartz in Seam 1.6.1 GA app using JBoss 4.0.5. For some reasons I don't want to use Seam asynchronous.
      My problem is I always get em injected as null, why?

      here is my copomenents.xml

      <core:managed-persistence-context name="em"
      auto-create="true" persistence-unit-jndi-name="java:/sguEntityManagerFactory" />
      


      Scheduler listener

      public class StartupListener implements ServletContextListener {
      
       public void contextInitialized(ServletContextEvent contextEvent) {
       SchedulerSystem obiektKlasyW = new SchedulerSystem();
      
       Thread watekPrzeliczniaCennika = new Thread(obiektKlasyW);
      
       watekPrzeliczniaCennika.start();
      
       }
      
       public void contextDestroyed(ServletContextEvent arg0) {}
      }
      


      public class SchedulerSystem implements Runnable {
      
       public void run() {
       SchedulerFactory schedFact = new rg.quartz.impl.StdSchedulerFactory();
      
       Scheduler sched = null;
       try {
       sched = schedFact.getScheduler();
       } catch (SchedulerException e) {
       e.printStackTrace();
       }
      
       try {
       sched.start();
       } catch (SchedulerException e) {
       e.printStackTrace();
       }
      
       //JobDetail jobDetail = new JobDetail("CennikJob", "groupCeniki", JobPrzeliczanieCennika.class);
       JobDetail jobDetail = new JobDetail("CennikJob", "groupCeniki", SchedulerJobs.class);
      
       Trigger trigger = TriggerUtils.makeSecondlyTrigger(2);
       trigger.setName("CennikiTrigger");
       trigger.setGroup("groupCeniki");
       trigger.setStartTime(new Date());
      
      
       try {
       sched.scheduleJob(jobDetail, trigger);
       } catch (SchedulerException e) {
       e.printStackTrace();
       }
      
       }//run()
      
      }
      


      and my job

      public class SchedulerJobs implements Job {
       public SchedulerJobs() {}
      
       @In(create=true)
       protected EntityManager em;
      
       public void execute(JobExecutionContext kontekst) {
       Date date = new Date();
       //HERE i GET NULL my EM
      
       }
      }
      


      Can anyone help me, hot to create/inject well my em?

        • 1. Re: em is always null in my quartz scheduler, plz help.
          pmuir

          Probably because it's not a Seam component (needs @Name)

          • 2. Re: em is always null in my quartz scheduler, plz help.
            statelessbean

            This didn't helped. I added @Name("simpleJob") to my jobs class and other annotations to all classes :
            @Name("schedulerSystem") and @Name("schedulerJobs") and in
            listener is em, in schedulerJobs also is em implemented, but in my thread "simpleJob" em is null.

            In seam pay example that i previosly used simple asynchronous thread had em.

            Is any way to inject/implement my em into thread manually?

            • 3. Re: em is always null in my quartz scheduler, plz help.
              pmuir

              If you want to access Seam outside a managed request (ejb3, jsf, async, ws) then you'll need to set up the contexts yourself - various Seam components do this. Much much easier to use Seam async.

              • 4. Re: em is always null in my quartz scheduler, plz help.
                gus888

                Hi Pete,

                I have the same problem. I created a subClass @override schedule method, which loads schedules from database. When I inject @In entityManager, it also got null. I don't have any idea how to deal with this situation. Could you please give some guidance? Thank you very much in advance.

                @Override
                 protected Collection loadEntries(Date startDate, Date endDate) {
                 List selection = em.createQuery(
                 "select ea.event from EventAttendee ea " +
                 "where ea.attendee = :person")
                 .setParameter("person", user)
                 .getResultList();
                 System.out.println("event size ===" + selection.size());
                 return selection;
                 }


                Best wishes,

                Gus