org.jboss.seam.transaction.Transaction Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jboss-seam Show documentation
Show all versions of jboss-seam Show documentation
Seam core module for Seam framework integrated with JSF2
package org.jboss.seam.transaction;
import static org.jboss.seam.annotations.Install.BUILT_IN;
import javax.naming.InitialContext;
import javax.naming.NameNotFoundException;
import javax.naming.NamingException;
import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Unwrap;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.util.EJB;
import org.jboss.seam.util.Naming;
/**
* Supports injection of a Seam UserTransaction object that
* wraps the current JTA transaction or EJB container managed
* transaction.
*
* @author Mike Youngstrom
* @author Gavin King
*
*/
@Name("org.jboss.seam.transaction.transaction")
@Scope(ScopeType.EVENT)
@Install(precedence = BUILT_IN)
@BypassInterceptors
public class Transaction {
// Event keys
public static final String TRANSACTION_FAILED = "org.jboss.seam.transaction.transactionFailed";
public Transaction() {
super();
}
public static UserTransaction instance() {
return (UserTransaction) Component.getInstance(Transaction.class, ScopeType.EVENT);
}
@Unwrap
public UserTransaction getTransaction() throws NamingException {
try {
return createUTTransaction();
} catch (NameNotFoundException nnfe) {
try {
return createCMTTransaction();
} catch (NameNotFoundException nnfe2) {
return createNoTransaction();
}
}
}
protected UserTransaction createNoTransaction() {
return new NoTransaction();
}
protected UserTransaction createCMTTransaction() throws NamingException {
return new CMTTransaction(EJB.getEJBContext());
}
protected UserTransaction createUTTransaction() throws NamingException {
return new UTTransaction(getUserTransaction());
}
protected javax.transaction.UserTransaction getUserTransaction() throws NamingException {
InitialContext context = Naming.getInitialContext();
try {
return (javax.transaction.UserTransaction) context.lookup("java:comp/UserTransaction");
} catch (NamingException ne) {
try {
//Embedded JBoss has no java:comp/UserTransaction
javax.transaction.UserTransaction ut = (javax.transaction.UserTransaction) context.lookup("UserTransaction");
ut.getStatus(); //for glassfish, which can return an unusable UT
return ut;
} catch (NamingException nnfe2) {
// Try the other JBoss location in JBoss AS7
return (javax.transaction.UserTransaction) context.lookup("java:jboss/UserTransaction");
} catch (Exception e) {
throw ne;
}
}
}
}