Here you go, just the package name is left out, adjust as you see fit.
Code is tested using Orion, OC4J, JBoss and WebSphere 5.1
-markus
| import org.apache.log4j.Logger;
| import org.jboss.cache.TransactionManagerLookup;
| import org.jboss.cache.transaction.DummyTransactionManager;
|
| import javax.naming.InitialContext;
| import javax.naming.NamingException;
| import javax.transaction.TransactionManager;
| import java.lang.reflect.Method;
|
| /**
| * A generic class that chooses the best-fit TransactionManager
| */
| public class GenericTransactionManagerLookup implements TransactionManagerLookup {
|
| /**
| * our logger
| */
| private static Logger log = Logger.getLogger(
GenericTransactionManagerLookup.class );
|
| /**
| * lookups performed?
| */
| private static boolean lookupDone = false;
|
| /**
| * no lookup available?
| */
| private static boolean lookupFailed = false;
|
| /**
| * the (final) used TransactionManager
| */
| private static TransactionManager tm = null;
|
| /**
| * JNDI locations for TransactionManagers we know of
| */
| private static String[][] knownJNDIManagers = {
| {"java:comp/UserTransaction", "Resin, Orion, JOnAS (JOTM)"},
| {"java:/TransactionManager", "JBoss, JRun4"},
| {"javax.transaction.TransactionManager", "BEA WebLogic"}
| };
|
| /**
| * WebSphere 5.1 TransactionManagerFactory
| */
| private static final String WS_FACTORY_CLASS_5_1 =
"com.ibm.ws.Transaction.TransactionManagerFactory";
|
| /**
| * WebSphere 5.0 TransactionManagerFactory
| */
| private static final String WS_FACTORY_CLASS_5_0 =
"com.ibm.ejs.jts.jta.TransactionManagerFactory";
|
| /**
| * WebSphere 4.0 TransactionManagerFactory
| */
| private static final String WS_FACTORY_CLASS_4 = "com.ibm.ejs.jts.jta.JTSXA";
|
| /**
| * Get the systemwide used TransactionManager
| *
| * @return TransactionManager
| */
| public TransactionManager getTransactionManager() {
| if( !lookupDone )
| doLookups();
| if( tm != null )
| return tm;
| if( lookupFailed ) {
| //fall back to a dummy from JBossCache
| tm = DummyTransactionManager.getInstance();
| log.warn( "Falling back to DummyTransactionManager from
JBossCache" );
| }
| return tm;
| }
|
|
| /**
| * Try to figure out which TransactionManager to use
| */
| private static void doLookups() {
| if( lookupFailed )
| return;
| InitialContext ctx;
| try {
| ctx = new InitialContext();
| } catch( NamingException e ) {
| log.error( "Could not create an initial JNDI context!", e );
| lookupFailed = true;
| return;
| }
| //probe jndi lookups first
| Object jndiObject = null;
| for( int i = 0; i < knownJNDIManagers.length; i++ ) {
| try {
| if( log.isDebugEnabled() ) log.debug( "Trying to
lookup TransactionManager for " + knownJNDIManagers[1] );
| jndiObject = ctx.lookup( knownJNDIManagers[0] );
| } catch( NamingException e ) {
| log.info( "Failed to perform a lookup for [" +
knownJNDIManagers[0] + " (" + knownJNDIManagers[1] + ")]" );
| }
| if( jndiObject instanceof TransactionManager ) {
| tm = (TransactionManager) jndiObject;
| log.info( "Found TransactionManager for " +
knownJNDIManagers[1] );
| return;
| }
| }
| //try to find websphere lookups since we came here
| Class clazz;
| try {
| log.debug( "Trying WebSphere 5.1: " + WS_FACTORY_CLASS_5_1 );
| clazz = Class.forName( WS_FACTORY_CLASS_5_1 );
| log.info( "Found WebSphere 5.1: " + WS_FACTORY_CLASS_5_1 );
| } catch( ClassNotFoundException ex ) {
| try {
| log.debug( "Trying WebSphere 5.0: " +
WS_FACTORY_CLASS_5_0 );
| clazz = Class.forName( WS_FACTORY_CLASS_5_0 );
| log.info( "Found WebSphere 5.0: " +
WS_FACTORY_CLASS_5_0 );
| } catch( ClassNotFoundException ex2 ) {
| try {
| log.debug( "Trying WebSphere 4: " +
WS_FACTORY_CLASS_4 );
| clazz = Class.forName( WS_FACTORY_CLASS_4 );
| log.info( "Found WebSphere 4: " +
WS_FACTORY_CLASS_4 );
| } catch( ClassNotFoundException ex3 ) {
| log.info( "Couldn't find any WebSphere
TransactionManager factory class, neither for WebSphere version 5.1 nor 5.0 nor 4" );
| lookupFailed = true;
| return;
| }
| }
| }
| try {
| Method method = clazz.getMethod( "getTransactionManager"/*
java 1.4: , null*/ );
| tm = (TransactionManager) method.invoke( null /* java 1.4:
,null*/ );
| } catch( Exception ex ) {
| log.error( "Found WebSphere TransactionManager factory class
[" + clazz.getName() +
| "], but couldn't invoke its static 'getTransactionManager'
method", ex );
| }
| }
| }
|
View the original post :
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3841977#3841977
Reply to the post :
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3841977
-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 -
digital self defense, top technical experts, no vendor pitches,
unmatched networking opportunities. Visit www.blackhat.com
_______________________________________________
JBoss-Development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development