User: sparre
Date: 01/06/20 22:14:31
Modified: src/main/org/jboss/ejb EnterpriseContext.java
MessageDrivenEnterpriseContext.java
StatefulSessionEnterpriseContext.java
StatelessSessionEnterpriseContext.java
Log:
A little UserTransaction cleanup.
Revision Changes Path
1.34 +53 -35 jboss/src/main/org/jboss/ejb/EnterpriseContext.java
Index: EnterpriseContext.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/EnterpriseContext.java,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- EnterpriseContext.java 2001/06/19 09:55:00 1.33
+++ EnterpriseContext.java 2001/06/21 05:14:31 1.34
@@ -21,6 +21,7 @@
import javax.transaction.Status;
import javax.transaction.Transaction;
import javax.transaction.UserTransaction;
+import javax.transaction.TransactionManager;
import javax.transaction.Synchronization;
import javax.transaction.NotSupportedException;
import javax.transaction.SystemException;
@@ -42,7 +43,8 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Marc Fleury</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Juha Lindfors</a>
- * @version $Revision: 1.33 $
+ * @author <a href="mailto:[EMAIL PROTECTED]">Ole Husgaard</a>
+ * @version $Revision: 1.34 $
*/
public abstract class EnterpriseContext
{
@@ -177,10 +179,17 @@
// Private -------------------------------------------------------
// Inner classes -------------------------------------------------
+
protected class EJBContextImpl
implements EJBContext
{
/**
+ * A per-bean instance UserTransaction instance cached after the
+ * first call to <code>getUserTransaction()</code>.
+ */
+ private UserTransactionImpl userTransaction = null;
+
+ /**
* @deprecated
*/
public Identity getCallerIdentity()
@@ -265,11 +274,13 @@
public boolean getRollbackOnly()
{
- try
- {
+ // EJB1.1 11.6.1: Must throw IllegalStateException if BMT
+ if (con.getBeanMetaData().isBeanManagedTx())
+ throw new IllegalStateException("ctx.setRollbackOnly() not allowed for
BMT beans.");
+
+ try {
return con.getTransactionManager().getStatus() ==
Status.STATUS_MARKED_ROLLBACK;
- } catch (SystemException e)
- {
+ } catch (SystemException e) {
//DEBUG Logger.debug(e);
return true;
}
@@ -277,6 +288,10 @@
public void setRollbackOnly()
{
+ // EJB1.1 11.6.1: Must throw IllegalStateException if BMT
+ if (con.getBeanMetaData().isBeanManagedTx())
+ throw new IllegalStateException("ctx.setRollbackOnly() not allowed for
BMT beans.");
+
try {
con.getTransactionManager().setRollbackOnly();
} catch (IllegalStateException e) {
@@ -329,38 +344,41 @@
return con.getRealmMapping().doesUserHaveRole( principal, set );
}
- // TODO - how to handle this best?
public UserTransaction getUserTransaction()
{
- // If not BMT, throw exception.
- // We default to the exception here, and override this method for
- // contexts of bean types that may be able to handle their own
- // transaction demarcation.
- throw new IllegalStateException("Not a BMT bean.");
+ if (userTransaction == null) {
+ if (con.getBeanMetaData().isContainerManagedTx())
+ throw new IllegalStateException("CMT beans are not allowed to get a
UserTransaction");
+ userTransaction = new UserTransactionImpl();
+ }
+ return userTransaction;
}
}
// Inner classes -------------------------------------------------
-
-
- // SA MF FIXME: the usertransaction is only used for session beans with BMT.
- // This does not belong here (getUserTransaction is properly implemented in
subclasses)
-
- class UserTransactionImpl
+
+ protected class UserTransactionImpl
implements UserTransaction
{
+ /**
+ * Timeout value in seconds for new transactions started
+ * by this bean instance.
+ */
+ private int timeout = 0;
+
public void begin()
- throws NotSupportedException,SystemException
+ throws NotSupportedException, SystemException
{
- con.getTransactionManager().begin();
-
- // keep track of the transaction in enterprise context for BMT
- setTransaction(con.getTransactionManager().getTransaction());
-
-
- // DEBUG Logger.debug("UserTransactionImpl.begin " + transaction.hashCode()
+ " in UserTransactionImpl " + this.hashCode());
-//DEBUG Logger.debug("UserTransactionImpl.begin " + transaction.hashCode() +
" in UserTransactionImpl " + this.hashCode());
-
+ TransactionManager tm = con.getTransactionManager();
+
+ // Set the timeout value
+ tm.setTransactionTimeout(timeout);
+
+ // Start the transaction
+ tm.begin();
+
+ // keep track of the transaction in enterprise context for BMT
+ setTransaction(tm.getTransaction());
}
public void commit()
@@ -371,9 +389,7 @@
java.lang.IllegalStateException,
SystemException
{
-//DEBUG Logger.debug("UserTransactionImpl.commit " + transaction.hashCode()
+ " in UserTransactionImpl " + this.hashCode());
-
- con.getTransactionManager().commit();
+ con.getTransactionManager().commit();
}
public void rollback()
@@ -381,9 +397,7 @@
java.lang.SecurityException,
SystemException
{
-//DEBUG Logger.debug("UserTransactionImpl.rollback " +
transaction.hashCode() + " in UserTransactionImpl " + this.hashCode());
-
- con.getTransactionManager().rollback();
+ con.getTransactionManager().rollback();
}
public void setRollbackOnly()
@@ -397,11 +411,15 @@
{
return con.getTransactionManager().getStatus();
}
-
+
+ /**
+ * Set the transaction timeout value for new transactions
+ * started by this instance.
+ */
public void setTransactionTimeout(int seconds)
throws SystemException
{
- con.getTransactionManager().setTransactionTimeout(seconds);
+ timeout = seconds;
}
}
}
1.6 +1 -11 jboss/src/main/org/jboss/ejb/MessageDrivenEnterpriseContext.java
Index: MessageDrivenEnterpriseContext.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/MessageDrivenEnterpriseContext.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- MessageDrivenEnterpriseContext.java 2001/06/19 09:55:00 1.5
+++ MessageDrivenEnterpriseContext.java 2001/06/21 05:14:31 1.6
@@ -38,7 +38,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Antman</a>.
* @author <a href="mailto:[EMAIL PROTECTED]">Rickard �berg</a>
* @author <a href="[EMAIL PROTECTED]">Sebastien Alborini</a>
- * @version $Revision: 1.5 $
+ * @version $Revision: 1.6 $
*/
public class MessageDrivenEnterpriseContext
extends EnterpriseContext
@@ -165,16 +165,6 @@
super.setRollbackOnly();
}
- }
-
- public UserTransaction getUserTransaction()
- {
- if (((MessageDrivenMetaData)con.getBeanMetaData()).isContainerManagedTx() )
{
- // NO transaction
- Logger.log("MessageDriven bean is not allowed to get a UserTransactio:
transaction is containeremanaged");
- throw new IllegalStateException("MessageDriven bean is not allowed to
get a UserTransactio: transaction is containeremanaged");
- } else
- return new UserTransactionImpl();
}
}
}
1.13 +1 -8
jboss/src/main/org/jboss/ejb/StatefulSessionEnterpriseContext.java
Index: StatefulSessionEnterpriseContext.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/StatefulSessionEnterpriseContext.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- StatefulSessionEnterpriseContext.java 2001/06/19 09:55:00 1.12
+++ StatefulSessionEnterpriseContext.java 2001/06/21 05:14:31 1.13
@@ -28,7 +28,7 @@
* @see <related>
* @author <a href="mailto:[EMAIL PROTECTED]">Rickard �berg</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Daniel OConnor</a>
- * @version $Revision: 1.12 $
+ * @version $Revision: 1.13 $
*/
public class StatefulSessionEnterpriseContext
extends EnterpriseContext
@@ -142,13 +142,6 @@
public Object getPrimaryKey()
{
return id;
- }
-
- public UserTransaction getUserTransaction()
- {
- if (((SessionMetaData)con.getBeanMetaData()).isContainerManagedTx())
- throw new IllegalStateException("Not a BMT bean.");
- return new UserTransactionImpl();
}
}
}
1.11 +1 -8
jboss/src/main/org/jboss/ejb/StatelessSessionEnterpriseContext.java
Index: StatelessSessionEnterpriseContext.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/StatelessSessionEnterpriseContext.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- StatelessSessionEnterpriseContext.java 2001/06/19 09:55:00 1.10
+++ StatelessSessionEnterpriseContext.java 2001/06/21 05:14:31 1.11
@@ -30,7 +30,7 @@
* @see <related>
* @author <a href="mailto:[EMAIL PROTECTED]">Rickard �berg</a>
* @author <a href="[EMAIL PROTECTED]">Sebastien Alborini</a>
- * @version $Revision: 1.10 $
+ * @version $Revision: 1.11 $
*/
public class StatelessSessionEnterpriseContext
extends EnterpriseContext
@@ -127,13 +127,6 @@
ejbLocalObject =
((StatelessSessionContainer)con).getLocalContainerInvoker().getStatelessSessionEJBLocalObject();
}
return ejbLocalObject;
- }
-
- public UserTransaction getUserTransaction()
- {
- if (((SessionMetaData)con.getBeanMetaData()).isContainerManagedTx())
- throw new IllegalStateException("Not a BMT bean.");
- return new UserTransactionImpl();
}
}
}
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development