1 Reply Latest reply on Nov 27, 2006 5:35 PM by stu2

    Configuring persistenceUnit in EntityManagerFactory when emb

    stu2

      I'm working with CR2, focusing on unit test mode. I've included the embedded-ejb stuff in my classpath. When I run a unit test, SeamTest's init() method fails, because the persistenceUnit property on the EntityManagerFactory hasn't been set (and so defaults to the component's name, which doesn't match the persistence.xml).

      In the debugger if I set the persistenceUnit property of EntityManagerFactory to the correct name (feedbuilders in this case) the test runs correctly. Section 3.3.2 of the docs discusses configuring components through the components.xml, but I'm not sure how this default value should be set correctly. The examples seem to run, so obviously I'm missing something. Any suggestions?

      Here's the exception I'm seeing:

      javax.persistence.PersistenceException: No Persistence provider for EntityManager named org.jboss.seam.core.EntityManagerFactory
       at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:41)
       at org.jboss.seam.core.EntityManagerFactory.startup(EntityManagerFactory.java:74)
       at org.jboss.seam.util.Reflections.invoke(Reflections.java:18)
       at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:102)
       at org.jboss.seam.Component.callComponentMethod(Component.java:1774)
       at org.jboss.seam.Component.callCreateMethod(Component.java:1714)
       at org.jboss.seam.Component.newInstance(Component.java:1703)
       at org.jboss.seam.contexts.Lifecycle.startup(Lifecycle.java:153)
       at org.jboss.seam.contexts.Lifecycle.endInitialization(Lifecycle.java:127)
       at org.jboss.seam.init.Initialization.init(Initialization.java:430)
       at org.jboss.seam.mock.SeamTest.init(SeamTest.java:686)
      


      Here's the first bit from my unit test. em() never gets called though since it's failing in super.init()

      public class FeedDataTest extends SeamTest
      {
       EntityManager em() {
       EntityManagerFactory emf = Persistence.createEntityManagerFactory("feedbuilders");
       EntityManager em = emf.createEntityManager();
       assertNotNull("entity manager", em);
       assertTrue("entity manager open", em.isOpen());
       return em;
       }
      


      Here's the meat of my components.xml:

      <core:init debug="true" jndi-pattern="#{ejbName}/local"/>
      
      <!-- 120 second conversation timeout -->
      <core:manager conversation-timeout="120000"/>
      
      <core:ejb installed="true"/>
      
      <core:entity-manager-factory jndi-name="java:/feedbuildersEntityManagerFactory" />
      


      And here's persistence.xml, which defines the "feedbuilders" unit name (that doesn't get set in the EntityManagerFactory during init():

      <persistence>
       <persistence-unit name="feedbuilders">
       <provider>org.hibernate.ejb.HibernatePersistence</provider>
       <jta-data-source>java:/feedbuildersDatasource</jta-data-source>
       <properties>
       <property name="hibernate.hbm2ddl.auto" value="create"/>
       <property name="hibernate.cache.use_query_cache" value="true"/>
       <property name="hibernate.show_sql" value="true"/>
       <property name="jboss.entity.manager.factory.jndi.name" value="java:/feedbuildersEntityManagerFactory"/>
       </properties>
       </persistence-unit>
      </persistence>