Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 13 Next »

Integrating BTM with Hibernate

Hibernate can be integrated straight with any JTA transaction manager.

The biggest added value (omitting the fact that you can use Hibernate and two databases) is Hibernate's Current Session context management. You do not have to take care about opening nor closing Session as Hibernate will automatically bind them to the JTA transaction's lifecycle. You just have to make sure JTA transactions are properly started and ended.

Contents

JTA datasources

Hibernate cannot directly create a BTM PoolingDataSource. You will have to create them yourself (either via the API or the Resource Loader) then bind them to a JNDI server.

Creating the datasources

As you can expect, you will need to create one PoolingDataSource per database. Say that you want to use two Embedded Derby databases, and configure them via the BTM API. Here is what your code would look like:

Binding the datasources to JNDI

You have to bind the datasources to some JNDI server. You can use any one you wish, including the one embedded in your application server.

In the case you want to run Hibernate in a standalone application, you can use Tomcat's JNDI server as it is very easy to use it in a standalone J2SE application.

Just create a jndi.properties file at the root of your classpath. It should only contain this line:

Then add these two jar files to your classpath:

They are available in any Tomcat 5.5 distribution, just look into the TOMCAT_HOME/common/lib folder.

This will configure Tomcat's JNDI server as the default implementation. It is a simple intra-VM server that implements the most important JNDI features. You can now just create a InitialContext with the no-args constructor to have access to it.

Finally, here is the code to bind the datasources:

Hibernate Session factories

You need to configure exactly one SessionFactory per datasource.

Datasource location

You have to tell Hibernate where to get the BTM datasource via JNDI. Add a connection.datasource property and set its value to the JNDI location of your datasource:

Current session context

You have to set current_session_context_class to jta. (see http://www.hibernate.org/hib_docs/reference/en/html/session-configuration.html#configuration-misc-properties)

Transaction factory class

You have to set transaction.factory_class to org.hibernate.transaction.JTATransactionFactory (see http://www.hibernate.org/hib_docs/reference/en/html/session-configuration.html#configuration-transaction-properties)

Transaction manager lookup class

You have to set transaction.manager_lookup_class to an implementation of TransactionManagerLookup that you have to create yourself. Here is an example implementation if this interface:

Then add this property:

Outcome

Here is what the hibernate.cfg.xml file will look like. Some other mandatory properties also have to be added, like the dialect, cache.provider_class and of course the required object mappings.

  • No labels