djencks 2004/07/18 18:32:26
Modified: modules/core/src/java/org/openejb/transaction
BeanPolicy.java ContainerPolicy.java
TransactionContextInterceptor.java
TransactionPolicy.java
TransactionPolicyManager.java
Log:
Add timer support to session and mdbs. (entities still todo). Adapt to
TransactionContextManager. Adapt to deploying with external plan.
Revision Changes Path
1.4 +17 -24
openejb/modules/core/src/java/org/openejb/transaction/BeanPolicy.java
Index: BeanPolicy.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/transaction/BeanPolicy.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- BeanPolicy.java 13 Apr 2004 20:18:49 -0000 1.3
+++ BeanPolicy.java 18 Jul 2004 22:32:26 -0000 1.4
@@ -47,15 +47,12 @@
*/
package org.openejb.transaction;
-import javax.transaction.TransactionManager;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.geronimo.core.service.Interceptor;
import org.apache.geronimo.core.service.InvocationResult;
-import org.apache.geronimo.transaction.TransactionContext;
-import org.apache.geronimo.transaction.UnspecifiedTransactionContext;
-
+import org.apache.geronimo.transaction.context.TransactionContext;
+import org.apache.geronimo.transaction.context.TransactionContextManager;
import org.openejb.EJBInvocation;
/**
@@ -67,27 +64,25 @@
private static final Log log = LogFactory.getLog(BeanPolicy.class);
public static final TransactionPolicy Stateless = new TransactionPolicy() {
- public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionManager txnManager) throws Throwable {
- TransactionContext clientContext = TransactionContext.getContext();
+ public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
+ TransactionContext clientContext =
transactionContextManager.getContext();
if (clientContext != null) {
clientContext.suspend();
}
try {
- TransactionContext beanContext = new
UnspecifiedTransactionContext();
- TransactionContext.setContext(beanContext);
- beanContext.begin();
+ TransactionContext beanContext =
transactionContextManager.newUnspecifiedTransactionContext();
ejbInvocation.setTransactionContext(beanContext);
try {
InvocationResult result = interceptor.invoke(ejbInvocation);
- if (beanContext != TransactionContext.getContext()) {
+ if (beanContext != transactionContextManager.getContext()) {
throw new UncommittedTransactionException();
}
beanContext.commit();
return result;
} catch (Throwable t) {
try {
- if (beanContext != TransactionContext.getContext()) {
- TransactionContext.getContext().rollback();
+ if (beanContext != transactionContextManager.getContext()) {
+ transactionContextManager.getContext().rollback();
}
} catch (Exception e) {
log.warn("Unable to roll back", e);
@@ -101,7 +96,7 @@
}
} finally {
ejbInvocation.setTransactionContext(clientContext);
- TransactionContext.setContext(clientContext);
+ transactionContextManager.setContext(clientContext);
if (clientContext != null) {
clientContext.resume();
}
@@ -113,27 +108,25 @@
};
public static final TransactionPolicy Stateful = new TransactionPolicy() {
- public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionManager txnManager) throws Throwable {
- TransactionContext clientContext = TransactionContext.getContext();
+ public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
+ TransactionContext clientContext =
transactionContextManager.getContext();
if (clientContext != null) {
clientContext.suspend();
}
try {
- TransactionContext beanContext = new
UnspecifiedTransactionContext();
- TransactionContext.setContext(beanContext);
- beanContext.begin();
+ TransactionContext beanContext =
transactionContextManager.newUnspecifiedTransactionContext();
ejbInvocation.setTransactionContext(beanContext);
try {
InvocationResult result = interceptor.invoke(ejbInvocation);
- if (beanContext != TransactionContext.getContext()) {
+ if (beanContext != transactionContextManager.getContext()) {
throw new UncommittedTransactionException("Support for
transactions held between invocations is not supported");
}
beanContext.commit();
return result;
} catch (Throwable t) {
try {
- if (beanContext != TransactionContext.getContext()) {
- TransactionContext.getContext().rollback();
+ if (beanContext != transactionContextManager.getContext()) {
+ transactionContextManager.getContext().rollback();
}
} catch (Exception e) {
log.warn("Unable to roll back", e);
@@ -147,7 +140,7 @@
}
} finally {
ejbInvocation.setTransactionContext(clientContext);
- TransactionContext.setContext(clientContext);
+ transactionContextManager.setContext(clientContext);
if (clientContext != null) {
clientContext.resume();
}
1.4 +33 -48
openejb/modules/core/src/java/org/openejb/transaction/ContainerPolicy.java
Index: ContainerPolicy.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/transaction/ContainerPolicy.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ContainerPolicy.java 14 Apr 2004 05:57:27 -0000 1.3
+++ ContainerPolicy.java 18 Jul 2004 22:32:26 -0000 1.4
@@ -48,7 +48,6 @@
package org.openejb.transaction;
import javax.ejb.TransactionRequiredLocalException;
-import javax.transaction.TransactionManager;
import javax.transaction.TransactionRequiredException;
import org.apache.commons.logging.Log;
@@ -56,11 +55,9 @@
import org.apache.geronimo.core.service.Interceptor;
import org.apache.geronimo.core.service.InvocationResult;
import org.apache.geronimo.core.service.SimpleInvocationResult;
-import org.apache.geronimo.transaction.TransactionContext;
-import org.apache.geronimo.transaction.UnspecifiedTransactionContext;
-import org.apache.geronimo.transaction.InheritableTransactionContext;
-import org.apache.geronimo.transaction.ContainerTransactionContext;
-
+import org.apache.geronimo.transaction.context.InheritableTransactionContext;
+import org.apache.geronimo.transaction.context.TransactionContext;
+import org.apache.geronimo.transaction.context.TransactionContextManager;
import org.openejb.EJBInvocation;
/**
@@ -79,17 +76,15 @@
public static final TransactionPolicy Never = new TxNever();
public static final TransactionPolicy BeforeDelivery = new TxBeforeDelivery();
public static final TransactionPolicy AfterDelivery = new TxAfterDelivery();
-
+
private static final class TxNotSupported implements TransactionPolicy {
- public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionManager txnManager) throws Throwable {
- TransactionContext clientContext = TransactionContext.getContext();
+ public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
+ TransactionContext clientContext =
transactionContextManager.getContext();
if (clientContext != null) {
clientContext.suspend();
}
try {
- TransactionContext beanContext = new
UnspecifiedTransactionContext();
- TransactionContext.setContext(beanContext);
- beanContext.begin();
+ TransactionContext beanContext =
transactionContextManager.newUnspecifiedTransactionContext();
ejbInvocation.setTransactionContext(beanContext);
try {
InvocationResult result = interceptor.invoke(ejbInvocation);
@@ -105,7 +100,7 @@
}
} finally {
ejbInvocation.setTransactionContext(clientContext);
- TransactionContext.setContext(clientContext);
+ transactionContextManager.setContext(clientContext);
if (clientContext != null) {
clientContext.resume();
}
@@ -120,8 +115,8 @@
}
}
private static final class TxRequired implements TransactionPolicy {
- public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionManager txnManager) throws Throwable {
- TransactionContext clientContext = TransactionContext.getContext();
+ public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
+ TransactionContext clientContext =
transactionContextManager.getContext();
if (clientContext instanceof InheritableTransactionContext) {
try {
ejbInvocation.setTransactionContext(clientContext);
@@ -135,9 +130,7 @@
clientContext.suspend();
}
try {
- TransactionContext beanContext = new
ContainerTransactionContext(txnManager);
- TransactionContext.setContext(beanContext);
- beanContext.begin();
+ TransactionContext beanContext =
transactionContextManager.newContainerTransactionContext();
ejbInvocation.setTransactionContext(beanContext);
try {
InvocationResult result = interceptor.invoke(ejbInvocation);
@@ -153,7 +146,7 @@
}
} finally {
ejbInvocation.setTransactionContext(clientContext);
- TransactionContext.setContext(clientContext);
+ transactionContextManager.setContext(clientContext);
if (clientContext != null) {
clientContext.resume();
}
@@ -168,8 +161,8 @@
}
}
private static final class TxSupports implements TransactionPolicy {
- public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionManager txnManager) throws Throwable {
- TransactionContext clientContext = TransactionContext.getContext();
+ public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
+ TransactionContext clientContext =
transactionContextManager.getContext();
if (clientContext != null) {
try {
ejbInvocation.setTransactionContext(clientContext);
@@ -180,9 +173,7 @@
}
try {
- TransactionContext beanContext = new
UnspecifiedTransactionContext();
- TransactionContext.setContext(beanContext);
- beanContext.begin();
+ TransactionContext beanContext =
transactionContextManager.newUnspecifiedTransactionContext();
ejbInvocation.setTransactionContext(beanContext);
try {
InvocationResult result = interceptor.invoke(ejbInvocation);
@@ -198,7 +189,7 @@
}
} finally {
ejbInvocation.setTransactionContext(null);
- TransactionContext.setContext(null);
+ transactionContextManager.setContext(null);
}
}
public String toString() {
@@ -210,16 +201,14 @@
}
}
private static final class TxRequiresNew implements TransactionPolicy {
- public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionManager txnManager) throws Throwable {
- TransactionContext clientContext = TransactionContext.getContext();
+ public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
+ TransactionContext clientContext =
transactionContextManager.getContext();
if (clientContext != null) {
clientContext.suspend();
}
try {
- TransactionContext beanContext = new
ContainerTransactionContext(txnManager);
- TransactionContext.setContext(beanContext);
- beanContext.begin();
+ TransactionContext beanContext =
transactionContextManager.newContainerTransactionContext();
ejbInvocation.setTransactionContext(beanContext);
try {
InvocationResult result = interceptor.invoke(ejbInvocation);
@@ -235,7 +224,7 @@
}
} finally {
ejbInvocation.setTransactionContext(clientContext);
- TransactionContext.setContext(clientContext);
+ transactionContextManager.setContext(clientContext);
if (clientContext != null) {
clientContext.resume();
}
@@ -250,8 +239,8 @@
}
}
private static final class TxMandatory implements TransactionPolicy {
- public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionManager txnManager) throws Throwable {
- TransactionContext clientContext = TransactionContext.getContext();
+ public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
+ TransactionContext clientContext =
transactionContextManager.getContext();
if (clientContext instanceof InheritableTransactionContext) {
try {
ejbInvocation.setTransactionContext(clientContext);
@@ -276,8 +265,8 @@
}
}
private static final class TxNever implements TransactionPolicy {
- public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionManager txnManager) throws Throwable {
- TransactionContext clientContext = TransactionContext.getContext();
+ public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
+ TransactionContext clientContext =
transactionContextManager.getContext();
if (clientContext instanceof InheritableTransactionContext) {
throw new TransactionNotSupportedException();
@@ -293,9 +282,7 @@
}
try {
- TransactionContext beanContext = new
UnspecifiedTransactionContext();
- TransactionContext.setContext(beanContext);
- beanContext.begin();
+ TransactionContext beanContext =
transactionContextManager.newUnspecifiedTransactionContext();
ejbInvocation.setTransactionContext(beanContext);
try {
InvocationResult result = interceptor.invoke(ejbInvocation);
@@ -311,7 +298,7 @@
}
} finally {
ejbInvocation.setTransactionContext(null);
- TransactionContext.setContext(null);
+ transactionContextManager.setContext(null);
}
}
public String toString() {
@@ -324,8 +311,8 @@
}
//TODO INCOMPLETE: XAResource is not enlisted in new tx. Method tx attr. is not
checked. clientContext is not saved.
private static final class TxBeforeDelivery implements TransactionPolicy {
- public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionManager txnManager) throws Throwable {
- TransactionContext clientContext = TransactionContext.getContext();
+ public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
+ TransactionContext clientContext =
transactionContextManager.getContext();
if (clientContext instanceof InheritableTransactionContext) {
try {
ejbInvocation.setTransactionContext(clientContext);
@@ -339,9 +326,7 @@
clientContext.suspend();
}
try {
- TransactionContext beanContext = new
ContainerTransactionContext(txnManager);
- TransactionContext.setContext(beanContext);
- beanContext.begin();
+ TransactionContext beanContext =
transactionContextManager.newContainerTransactionContext();
ejbInvocation.setTransactionContext(beanContext);
return new SimpleInvocationResult(true, null);
} catch (Exception e) {
@@ -358,8 +343,8 @@
}
//TODO really broken. possible (imported) tx context is not restored.
XAResource is not delisted.
private static final class TxAfterDelivery implements TransactionPolicy {
- public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionManager txnManager) throws Throwable {
- TransactionContext beanContext = TransactionContext.getContext();
+ public InvocationResult invoke(Interceptor interceptor, EJBInvocation
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
+ TransactionContext beanContext = transactionContextManager.getContext();
try {
try {
beanContext.commit();
@@ -374,7 +359,7 @@
}
} finally {
ejbInvocation.setTransactionContext(null);
- TransactionContext.setContext(null);
+ transactionContextManager.setContext(null);
}
}
public String toString() {
1.3 +6 -8
openejb/modules/core/src/java/org/openejb/transaction/TransactionContextInterceptor.java
Index: TransactionContextInterceptor.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/transaction/TransactionContextInterceptor.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TransactionContextInterceptor.java 21 Mar 2004 21:26:37 -0000 1.2
+++ TransactionContextInterceptor.java 18 Jul 2004 22:32:26 -0000 1.3
@@ -47,12 +47,10 @@
*/
package org.openejb.transaction;
-import javax.transaction.TransactionManager;
-
import org.apache.geronimo.core.service.Interceptor;
import org.apache.geronimo.core.service.Invocation;
import org.apache.geronimo.core.service.InvocationResult;
-
+import org.apache.geronimo.transaction.context.TransactionContextManager;
import org.openejb.EJBInterfaceType;
import org.openejb.EJBInvocation;
@@ -61,12 +59,12 @@
*/
public class TransactionContextInterceptor implements Interceptor {
private final Interceptor next;
- private final TransactionManager txnManager;
+ private final TransactionContextManager transactionContextManager;
private final TransactionPolicyManager transactionPolicyManager;
- public TransactionContextInterceptor(Interceptor next, TransactionManager
txnManager, TransactionPolicyManager transactionPolicyManager) {
+ public TransactionContextInterceptor(Interceptor next,
TransactionContextManager transactionContextManager, TransactionPolicyManager
transactionPolicyManager) {
this.next = next;
- this.txnManager = txnManager;
+ this.transactionContextManager = transactionContextManager;
this.transactionPolicyManager = transactionPolicyManager;
}
@@ -79,6 +77,6 @@
TransactionPolicy policy =
transactionPolicyManager.getTransactionPolicy(invocationType, methodIndex);
assert policy != null: "transaction policy array was not set up correctly,
no policy for " + invocation;
- return policy.invoke(next, ejbInvocation, txnManager);
+ return policy.invoke(next, ejbInvocation, transactionContextManager);
}
}
1.3 +3 -4
openejb/modules/core/src/java/org/openejb/transaction/TransactionPolicy.java
Index: TransactionPolicy.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/transaction/TransactionPolicy.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TransactionPolicy.java 3 Apr 2004 22:20:11 -0000 1.2
+++ TransactionPolicy.java 18 Jul 2004 22:32:26 -0000 1.3
@@ -48,11 +48,10 @@
package org.openejb.transaction;
import java.io.Serializable;
-import javax.transaction.TransactionManager;
import org.apache.geronimo.core.service.Interceptor;
import org.apache.geronimo.core.service.InvocationResult;
-
+import org.apache.geronimo.transaction.context.TransactionContextManager;
import org.openejb.EJBInvocation;
/**
@@ -61,5 +60,5 @@
* @version $Revision$ $Date$
*/
public interface TransactionPolicy extends Serializable {
- InvocationResult invoke(Interceptor interceptor, EJBInvocation ejbInvocation,
TransactionManager txnManager) throws Throwable;
+ InvocationResult invoke(Interceptor interceptor, EJBInvocation ejbInvocation,
TransactionContextManager transactionContextManager) throws Throwable;
}
1.4 +4 -1
openejb/modules/core/src/java/org/openejb/transaction/TransactionPolicyManager.java
Index: TransactionPolicyManager.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/transaction/TransactionPolicyManager.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TransactionPolicyManager.java 3 Apr 2004 22:20:11 -0000 1.3
+++ TransactionPolicyManager.java 18 Jul 2004 22:32:26 -0000 1.4
@@ -48,6 +48,7 @@
package org.openejb.transaction;
import java.io.Serializable;
+import java.util.Arrays;
import org.openejb.EJBInterfaceType;
import org.openejb.deployment.TransactionPolicySource;
@@ -65,6 +66,8 @@
transactionPolicy[EJBInterfaceType.LOCALHOME.getOrdinal()] =
mapPolicies("LocalHome", signatures, transactionPolicySource);
transactionPolicy[EJBInterfaceType.LOCAL.getOrdinal()] =
mapPolicies("Local", signatures, transactionPolicySource);
transactionPolicy[EJBInterfaceType.WEB_SERVICE.getOrdinal()] =
mapPolicies("ServiceEndpoint", signatures, transactionPolicySource);
+ transactionPolicy[EJBInterfaceType.TIMEOUT.getOrdinal()] = new
TransactionPolicy[signatures.length];
+ Arrays.fill(transactionPolicy[EJBInterfaceType.TIMEOUT.getOrdinal()],
ContainerPolicy.Supports); //we control the transaction from the top of the stack.
}
public TransactionPolicy getTransactionPolicy(EJBInterfaceType invocationType,
int operationIndex) {