package org.jboss.tm.iiop.client;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.Name;
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.naming.spi.ObjectFactory;
import javax.transaction.UserTransaction;
import org.omg.CORBA.BAD_PARAM;
import org.jboss.logging.Logger;
import org.jboss.tm.iiop.TransactionFactoryExtHelper;
import org.jboss.tm.usertx.client.ServerVMClientUserTransaction;
public class IIOPClientUserTransactionObjectFactory
implements ObjectFactory
{
private static final Logger log =
Logger.getLogger(IIOPClientUserTransactionObjectFactory.class);
private static final boolean traceEnabled = log.isTraceEnabled();
private static UserTransaction userTransaction = null;
private static UserTransaction getUserTransaction()
{
if (userTransaction == null)
{
try
{
new InitialContext().lookup("java:/TransactionManager");
userTransaction = ServerVMClientUserTransaction.getSingleton();
}
catch (NamingException ex)
{
userTransaction = IIOPClientUserTransaction.getSingleton();
}
}
return userTransaction;
}
public Object getObjectInstance(Object obj, Name name,
Context nameCtx, Hashtable environment)
throws Exception
{
if (traceEnabled)
log.trace("getObjectInstance: obj=" + obj +
"\n name=" + name +
"\n nameCtx= " + nameCtx);
if (!name.toString().equals("UserTransaction"))
return null;
try
{
TransactionFactoryExtHelper.narrow(obj);
}
catch (BAD_PARAM e)
{
return null;
}
return getUserTransaction();
}
}