3 Replies Latest reply on Jul 19, 2007 6:29 AM by rapowder

    Single EntityManager

    yoav200

      Hello,

      i have a webapp build with seam,ejb3 and jsf.
      in the application i have several different action to manipulate the DB.
      not only from the webclient (browser) but from web services.

      my broblem is that if a web service changed some thing it doesn't reflect on the web (the DB has chaged).

      i have printed the id of the entetyManager (hashcode) and i'm getting a different one for each request.
      my entityManager is injected using seam.
      this is a big issue for me since i have wrong data in my web.

      here is my persistence.xml:

      <?xml version="1.0" encoding="UTF-8"?>
      <persistence xmlns="http://java.sun.com/xml/ns/persistence"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"
       xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
      
       <persistence-unit name="account">
       <jta-data-source>java:/jdbc/wml</jta-data-source>
       <properties>
       <property name="jboss.entity.manager.factory.jndi.name"
       value="java:/wmlEntityManagerFactory" />
       <property name="hibernate.dialect"
       value="org.hibernate.dialect.MySQLInnoDBDialect" />
       </properties>
       </persistence-unit>
      
      </persistence>
      

      and here is my components.xml:
      ....
      <component name="wmlEntityManager"
       class="org.jboss.seam.core.ManagedPersistenceContext" auto-create="true">
       <property name="persistenceUnitJndiName">java:/wmlEntityManagerFactory</property>
       </component>
      .....
      

      and the DAO:
      ....
      @Name("genericDao")
      public abstract class GenericDaoImpl<T> implements GenericDao<T> {
      
       @In(value="wmlEntityManager")
       EntityManager em;
      
       public T get(Serializable id) {
       return em.find(getPersistentClass(), id);
       }
      ......
      



        • 1. Re: Single EntityManager
          gavin.king

          The Seam-managed persistence context caches entities in the conversation context (this is what you want to happen). To see the changes made by some other transaction, you need to end the conversation.

          • 2. Re: Single EntityManager
            yoav200

            thanks,
            you are right my problem is with the seam conversation management.

            • 3. Re: Single EntityManager
              rapowder

              Gavin, isn't there anyway to trigger global events? I mean something like

              Events.instance().raiseEvent(EVENT_NAME)

              in the Application scope and capture it in the same way @Observer methods do? (I am using Seam 1.2.1.GA)

              Thank you!