On Mar 19, 2009, at 8:29 AM, <[email protected]> <[email protected] > wrote:

Hi David,

we have a little success :-) The database error is gone now. You are right it has to be <property name="hibernate.connection.datasource">java:comp/env/ TestDS</property>
in the hibernate.cfg.xml file and
<res-ref-name>TestDS</res-ref-name>
in the ejb-jar.xml.

But now I end up in the next error that the UserTransaction cannot be found:

Caused by: javax.naming.NameNotFoundException: Name "java:/ TransactionManager" not found. at org .apache.openejb.core.ivm.naming.IvmContext.federate(IvmContext.java: 172) at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java: 129)
       at javax.naming.InitialContext.lookup(InitialContext.java:351)
at org .hibernate .transaction .JNDITransactionManagerLookup .getTransactionManager(JNDITransactionManagerLookup.java:23)

       ... 72 more

I don't know if this error is related to a similar error I had once and Jean-Louis helped me out, that you sometime have to call new InitialContext() twice [1]. But here, within the hibernate code, I cannot call new InitialContext() twice.

Any further hints?

I suspect the issue is related to the Hibernate transaction manager lookup strategy. Give this a try:

    <!-- JTA transaction properties (begin) -->
<property name = "hibernate .transaction .factory_class">org.hibernate.transaction.JTATransactionFactory</ property> <property name = "hibernate .transaction .manager_lookup_class ">org.apache.openejb.hibernate.TransactionManagerLookup</property>
    <!-- JTA transaction properties (end) -->

    <!-- CMT transaction properties (begin) ===
<property name = "hibernate .transaction .factory_class">org.hibernate.transaction.CMTTransactionFactory</ property> <property name = "hibernate .transaction .manager_lookup_class ">org.apache.openejb.hibernate.TransactionManagerLookup</property>
    ==== CMT transaction properties (end) -->

If you need something a bit more dynamic -- if you're using jboss in production and don't want different settings -- then this page has a good suggestion on how to more dynamically do the transaction manager lookup:

 http://openejb.apache.org/3.0/hibernate.html

Hope that helps!


-David


-----Ursprüngliche Nachricht-----
Von: David Blevins [mailto:[email protected]]
Gesendet: Donnerstag, 19. März 2009 00:54
An: [email protected]
Betreff: Re: AW: AW: AW: How to use JBPM with openEJB?


On Mar 17, 2009, at 5:11 AM, <[email protected]> <[email protected] > wrote:

Hi David,

I send you my ejb-jar.xml and hibernate.cfg.xml.

The ejb-jar.xml is based on the ejb-jar.xml from the jbpm-
enterprise.jar. I only add the messaging-type and changed some JNDI
names. The hibernate.cfg.xml is also based on default configuration
from jbpm. I only add the hibernate.connection.datasource property.
I also add the jbpm.cfg.xml defining the
JtaDbPersistenceServiceFactory, as mentioned in the documentation.

I hope the files helps to get more light in this problem.

I think I see something.  Looking at this section of the ejb-jar.xml

      <resource-ref>
        <description>
Logical name of the data source that provides connections to the persistence service. Must match the hibernate.connection.datasource property in the Hibernate configuration file.
        </description>
        <!-- CHANGES <res-ref-name>jdbc/JbpmDataSource</res-ref-name>
-->
        <res-ref-name>TestDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
      </resource-ref>

Based on that comment, the hibernate.connection.datasource should be configured like so:

    <!-- DataSource properties (begin) -->
    <property name="hibernate.connection.datasource">java:comp/env/
TestDS</property>
    <!-- DataSource properties (end) -->

Also, I'm not too sure about this last comment but it seems strange to have the "hibernate.connection.driver_class" and other JDBC related properties set in addition to using a container supplied datasource. I'm used to seeing this as a one or the other kind of thing: either you're in a managed environment and use a datasource or in a non- managed environment and create connections yourself. I know that when doing the same with OpenJPA it will cause problems, not sure if the same applies with Hibernate.

-David




Reply via email to