2 Replies Latest reply on Jul 8, 2007 12:51 PM by Pierre De Paepe

    @Asynchronous @Observer - Poll & raising

    Pierre De Paepe Newbie

      Hello,

      How raising an Event from an Asynchronous method?
      Basically:

      newSessionBean.java

      ...
       public String step1()
       {
       sessionVisu = new SessionVisu(sessionVisu, user);
       sessionVisu.setStatus("description");
       computeHandler.processGetComputes(sessionVisu);
       return "/sessions.xhtml";
       }
      ...
      


      ComputeHandlerBean.java

      ...
      @Asynchronous
      public void processGetComputes(SessionVisu sessionVisu){
       try {SECONDS.sleep(30);}
       catch(InterruptedException ignore){}
       sessionVisu = entityManager.merge(sessionVisu);
       sessionVisu.setStatus("compute");
       entityManager.persist(sessionVisu);
       events.raiseTransactionSuccessEvent("flushComputeSessionVisus");
       }
      ...
      


      SessionVisuListBean.java

      ...
       @Factory
       @Observer("flushComputeSessionVisus")
       public void getComputeSessionVisus()
       {
       computeSessionVisus = entityManager.createQuery("select s from SessionVisu s where s.user.username = :username and s.status = :status")
       .setParameter("username", user.getUsername())
       .setParameter("status", "compute")
       .getResultList();
       }
      ...
      


      The idea is to have a portlet "polled" by Ajax4jsf.
      I used in my componentd.xml

      <framework:entity-query name="sessionVisuCompute">
       <framework:ejbql>from SessionVisu s</framework:ejbql>
       <framework:restrictions>
       <value>user_id = #{userComp.id}</value>
       <value>status = #{sessComp.status}</value>
       </framework:restrictions>
       </framework:entity-query>
      
       <component name="userComp" class="User">
       <property name="id">#{user.id}</property>
       </component>
       <component name="sessComp" class="SessionVisu">
       <property name="status">compute</property>
       </component>


      But i really wish to use the event/observer mechanism.

      Any idea?

      Thank you