= Hibernate
:index-group: Unrevised
:jbake-date: 2018-12-05
:jbake-type: page
:jbake-status: published

= Sample persistence.xml

For a unit called "movie-unit" using two datasources called
"movieDatabase" and "movieDatabaseUnmanaged" the following
persistence.xml would work.

[source,xml]
----
<persistence version="1.0"
       xmlns="http://java.sun.com/xml/ns/persistence"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
       http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

  <persistence-unit name="movie-unit">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>movieDatabase</jta-data-source>
    <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>

    <properties>
      <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
      <property name="hibernate.transaction.manager_lookup_class"
                value="org.apache.openejb.hibernate.TransactionManagerLookup"/>
    </properties>
  </persistence-unit>
</persistence>
----

Note that as of OpenEJB 3.1 you do not need to set the
`hibernate.transaction.manager_lookup_class` as it will be set for you
automatically and will overwrite any "org.hibernate.transaction."
strategy class already set while leaving any custom strategy class you
may have implemented untouched.

The result is that you can leave your
`hibernate.transaction.manager_lookup_class` property configured to your
production environment and OpenEJB will update it just for the scope
testing. On the other hand if you have implemented a custom
`org.hibernate.transaction.TransactionManagerLookup` strategy it will
always be used and never replaced by OpenEJB.

Note that if you need more functionality in this area we are always
happy to add it.

== Not using OpenEJB in production?

If you're using OpenEJB 3.0 which does not support the dynamic switching
of the `hibernate.transaction.manager_lookup_class` this is one way to
achieve it.

A custom implementation of Hibernate's _TransactionManagerLookup_
strategy like the following will do the trick. This
"DynamicTransactionManagerLookup" class can be packed in your jar and
deployed with your app.

[source,java]
----
import org.hibernate.HibernateException;
import org.hibernate.transaction.TransactionManagerLookup;
import javax.transaction.TransactionManager;
import java.util.Properties;

public class DynamicTransactionManagerLookup implements TransactionManagerLookup {

    private TransactionManagerLookup impl;

    public DynamicTransactionManagerLookup() {
        String[] strategies = {
                "org.apache.openejb.hibernate.TransactionManagerLookup",
                "org.hibernate.transaction.JBossTransactionManagerLookup"
        };

        for (String className : strategies) {
            try {
                Class<?> clazz = this.getClass().getClassLoader().loadClass(className);
                impl = (TransactionManagerLookup) clazz.newInstance();
                break;
            } catch (Exception e) {
            }
        }

        if (impl == null) throw new IllegalStateException("No TransactionManagerLookup available");
    }

    public TransactionManager getTransactionManager(Properties properties) throws HibernateException {
        return impl.getTransactionManager(properties);
    }

    public String getUserTransactionName() {
        return impl.getUserTransactionName();
    }
}
----

Then set the Hibernate specific configuration property
_hibernate.transaction.manager_lookup_class_ to the name of the factory
that you just created.
