HHH-6170 Offer ability to customize the default TransactionFactory implementation

Allow to customize implementation used if none is specified specifically by the user programmatically or via configuration
This commit is contained in:
Emmanuel Bernard 2011-04-28 22:46:05 -04:00
parent 8a4b5ccbfc
commit 45ac70b03d
3 changed files with 9 additions and 4 deletions

View File

@ -379,6 +379,11 @@ public final class Environment {
* <tt>TransactionFactory</tt> implementor to use for creating <tt>Transaction</tt>s
*/
public static final String TRANSACTION_STRATEGY = "hibernate.transaction.factory_class";
/**
* If none is explicitly set, default <tt>TransactionFactory</tt> implementor
* to use for creating <tt>Transaction</tt>s
*/
public static final String DEFAULT_TRANSACTION_STRATEGY = "hibernate.transaction.default_factory_class";
/**
* <tt>TransactionManagerLookup</tt> implementor to use for obtaining the <tt>TransactionManager</tt>
*/

View File

@ -55,6 +55,9 @@ public final class TransactionFactoryFactory {
*/
public static TransactionFactory buildTransactionFactory(Properties transactionProps) throws HibernateException {
String strategyClassName = transactionProps.getProperty( Environment.TRANSACTION_STRATEGY );
if ( strategyClassName == null ) {
strategyClassName = transactionProps.getProperty( Environment.DEFAULT_TRANSACTION_STRATEGY );
}
if ( strategyClassName == null ) {
log.info( "Using default transaction strategy (direct JDBC transactions)" );
return new JDBCTransactionFactory();

View File

@ -1284,10 +1284,7 @@ public class Ejb3Configuration implements Serializable, Referenceable {
preparedProperties.setProperty(
Environment.TRANSACTION_STRATEGY, JoinableCMTTransactionFactory.class.getName()
);
}
else if ( ! hasTxStrategy && transactionType == PersistenceUnitTransactionType.RESOURCE_LOCAL ) {
preparedProperties.setProperty( Environment.TRANSACTION_STRATEGY, JDBCTransactionFactory.class.getName() );
}
} //else if RESOURCE_LOCAL, let the default being used.
if ( hasTxStrategy ) {
log.warn(
"Overriding {} is dangerous, this might break the EJB3 specification implementation",