0 Replies Latest reply on Sep 15, 2006 11:11 AM by Galo

    Entities not synchronizing

    Galo Newbie

      I have some problems synchronizing Entities between different parts of my application.

      Basically, I have one thread waking up once in a while, it loads a few entity beans, performs actions, and goes back to sleep.

      @Service(objectName="jboss:custom=NOCManagerService")
      public class NOCManagerService implements Runnable, NOCManagementService {
      
       /*
       @Resource
       private SessionContext ctx;
       */
       @EJB(beanName="NOCAccessBean")
       private NOCAccess nocAccessBean;
      
       public void start() throws Exception {
       Thread thread = new Thread(this);
       thread.start();
       }
      
       public void run() {
       running=true;
       while(this.running) {
       loadNOCs();
       if(nocs!=null) {
       for(NOC noc:nocs) {
       this.nocPhaseProcessor.process(noc);
       }
       }
       try {
       synchronized (this) {
       nextRun=System.currentTimeMillis() + this.processingInterval;
       wait(this.processingInterval);
       }
       } catch (Exception e) {
       }
       }
       }
      [...]
      }
      


      The following EJB is called for each of those entities and is the one that performs some updates

      @Stateless
      @TransactionAttribute (TransactionAttributeType.REQUIRES_NEW)
      public class NOCPhaseProcessorBean implements NOCPhaseProcessor {
      
       @PersistenceContext(unitName="NOCBeans")
       private EntityManager em;
      
       /**
       * Interceptors plug into this method and send the NOC to queues or do whatever
       * they have to do with them
       */
       @Interceptors({NOCCommonFilter.class, Phase2Filter.class})
       public void process(NOC noc) {
       System.out.println("Processing" + noc.toString());
       try {
       /* [do stuff] */
       em.merge(noc);
       } catch (Exception e) {
       NOCManagerService.getLog().error(e.getMessage());
       }
       }
      }
      
      


      I'm using this bean to access my Entities, save them etc.

      
      @Stateful
      @TransactionAttribute (TransactionAttributeType.NOT_SUPPORTED)
      public class NOCAccessBean implements NOCAccess {
       @PersistenceContext(unitName="NOCBeans", type=PersistenceContextType.EXTENDED)
       private EntityManager em;
      
       public List<NOC> listNoCs() {
       List<NOC> nocs = em.createNamedQuery("findAllNOCs").getResultList();
       for(NOC noc:nocs) {
       NOCManagerService.getLog().info("LOADED " + noc);
       }
       return nocs;
       }
      
       @TransactionAttribute (TransactionAttributeType.REQUIRED)
       public boolean saveNOC(NOC noc) {
       noc.setDtTmStp(new Date());
       em.merge(noc);
       em.flush();
       return true;
       }
      [...]
      }
      



      OK, I have a web interface that uses that NOCAccessBean and allows me to edit those Entities (via saveNOC in the AccessBean). If change some of the properties, I can see the values are saved in my database, and my web interface is synchronized showing all the new values. Also, when the thread kicks in and performs some updates, the web pages also shows them.

      BUT! if I do some updates on the Entities from the webpage, the next time service kicks in it still has the OLD versions of my entities.

      I would expect that I don't even need to reload the list of entities, but even doing it the entities are NOT updated. I've tried running em.refresh() for each Entity in the ProcessorBean but still doesn't work.

      May anybody illuminate me?