forhas
forhas

Reputation: 12001

Exception while creating EntityManagerFactory - Lookup failed for 'persistence/myPU' in SerialContext

I'm working with Glassfish application server and trying to connect my spring-hibernate web application to my db, I have the following configurations:

In Glassfish I have added a jdbc connection and send a successful ping to the DB.

I also added a JDBC resource (in glassfish) with jndi name: jdbc/myResource. This resource is under the connection pool in which I have created and tested (in step 1).

My EntityManaget is annotated with @PersistenceContext:

@PersistenceContext(unitName = "myPU")
protected EntityManager entityManager;

Under \src\main\resources\META-INF\ I created my persistence.xml file:

<persistence-unit name="myPU">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/myResource</jta-data-source>
    <properties>
        <!-- Glassfish transaction manager lookup -->
        <property name="hibernate.transaction.manager_lookup_class"
            value="org.hibernate.transaction.SunONETransactionManagerLookup" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"></property>
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.default_schema" value="PUBLIC" />
        <property name="hibernate.format_sql" value="true" />
        <!-- Validates the existing schema with the current entities configuration -->
        <property name="hibernate.hbm2ddl.auto" value="validate" />
    </properties>
</persistence-unit>

This is how my applicationContext looks like:

bean id="txManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
</bean>

<tx:annotation-driven transaction-manager="txManager" />

<jee:jndi-lookup id="emf" jndi-name="persistence/myPU" />

<!-- In order to enable EntityManager injection -->
<bean
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
    <property name="persistenceUnits">
        <map>
            <entry key="myPU" value="persistence/myPU" />
        </map>
    </property>
</bean>

In my web.xml I have:

<persistence-unit-ref>
<persistence-unit-ref-name>persistence/myPU</persistence-unit-ref-name>
<persistence-unit-name>myPU</persistence-unit-name>

When I publish I keep getting:

No bean named 'myPU' is defined. Please see server.log for more details.

Why is it looking for the persistence unit as a bean?
Any ideas what am I doing wrong?

Thanks in advance

Upvotes: 2

Views: 1852

Answers (1)

forhas
forhas

Reputation: 12001

Resolved - I added transaction-type="JTA" to my persistence.xml. For some reason I was under the impression that if I'm specifying a jta-data-source in my persistence.xml the default transaction-type should be "JTA", maybe it isn't. I don't really understand the relation of the exception I had to this solution but at the moment my persistence.xml has the following line:

<persistence-unit name="myPU" transaction-type="JTA">

And it works like a charm.

Upvotes: 2

Related Questions