djencks 2005/02/14 13:32:31
Modified: modules/core/src/java/org/openejb/mdb MDBContainer.java
MDBContext.java MDBInstanceContext.java
Log:
implement the amazing rules on when getTimerService() and the TimerService
and Timer methods are available
Revision Changes Path
1.24 +4 -4
openejb/modules/core/src/java/org/openejb/mdb/MDBContainer.java
Index: MDBContainer.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/mdb/MDBContainer.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- MDBContainer.java 1 Feb 2005 22:26:03 -0000 1.23
+++ MDBContainer.java 14 Feb 2005 18:32:30 -0000 1.24
@@ -83,7 +83,7 @@
import org.openejb.cache.InstancePool;
import org.openejb.dispatch.InterfaceMethodSignature;
import org.openejb.dispatch.SystemMethodIndices;
-import org.openejb.timer.BasicTimerService;
+import org.openejb.timer.BasicTimerServiceImpl;
/**
* @version $Revision$ $Date$
@@ -100,7 +100,7 @@
private final boolean[] deliveryTransacted;
private final TransactionContextManager transactionContextManager;
private final Map methodIndexMap;
- private final BasicTimerService timerService;
+ private final BasicTimerServiceImpl timerService;
public MDBContainer(String containerId,
String ejbName,
@@ -167,7 +167,7 @@
contextFactory.setSystemChain(chains.getSystemChain());
contextFactory.setTransactionContextManager(transactionContextManager);
if (timer != null) {
- timerService = new BasicTimerService(systemMethodIndices,
interceptor, timer, objectName, kernel.getKernelName(),
ObjectName.getInstance(objectName), transactionContextManager, classLoader);
+ timerService = new BasicTimerServiceImpl(systemMethodIndices,
interceptor, timer, objectName, kernel.getKernelName(),
ObjectName.getInstance(objectName), transactionContextManager, classLoader);
contextFactory.setTimerService(timerService);
} else {
timerService = null;
1.7 +27 -1
openejb/modules/core/src/java/org/openejb/mdb/MDBContext.java
Index: MDBContext.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/mdb/MDBContext.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- MDBContext.java 1 Feb 2005 22:27:50 -0000 1.6
+++ MDBContext.java 14 Feb 2005 18:32:30 -0000 1.7
@@ -62,6 +62,7 @@
import org.openejb.EJBContextImpl;
import org.openejb.EJBInstanceContext;
import org.openejb.EJBOperation;
+import org.openejb.timer.TimerState;
/**
* Implementation of MessageDrivenContext using the State pattern to
determine
@@ -87,6 +88,13 @@
userTransaction.setOnline(false);
}
}
+
context.setTimerServiceAvailable(timerServiceAvailable[operation.getOrdinal()]);
+ }
+
+ public boolean setTimerState(EJBOperation operation) {
+ boolean oldTimerState = TimerState.getTimerState();
+
TimerState.setTimerState(timerMethodsAvailable[operation.getOrdinal()]);
+ return oldTimerState;
}
public MessageContext getMessageContext() throws IllegalStateException {
@@ -239,4 +247,22 @@
states[EJBOperation.ENDPOINT.getOrdinal()] = BIZ_WSENDPOINT;
states[EJBOperation.TIMEOUT.getOrdinal()] = EJBTIMEOUT;
}
+ //spec p 344
+ private static final boolean timerServiceAvailable[] = new
boolean[EJBOperation.MAX_ORDINAL];
+
+ static {
+ timerServiceAvailable[EJBOperation.EJBCREATE.getOrdinal()] = true;
+ timerServiceAvailable[EJBOperation.EJBREMOVE.getOrdinal()] = true;
+ timerServiceAvailable[EJBOperation.BIZMETHOD.getOrdinal()] = true;
+ timerServiceAvailable[EJBOperation.ENDPOINT.getOrdinal()] = true;
+ timerServiceAvailable[EJBOperation.TIMEOUT.getOrdinal()] = true;
+ }
+
+ private static final boolean timerMethodsAvailable[] = new
boolean[EJBOperation.MAX_ORDINAL];
+
+ static {
+ timerMethodsAvailable[EJBOperation.BIZMETHOD.getOrdinal()] = true;
+ timerMethodsAvailable[EJBOperation.TIMEOUT.getOrdinal()] = true;
+ }
+
}
1.11 +5 -1
openejb/modules/core/src/java/org/openejb/mdb/MDBInstanceContext.java
Index: MDBInstanceContext.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/mdb/MDBInstanceContext.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- MDBInstanceContext.java 5 Feb 2005 02:36:25 -0000 1.10
+++ MDBInstanceContext.java 14 Feb 2005 18:32:31 -0000 1.11
@@ -105,6 +105,10 @@
mdbContext.setState(operation);
}
+ public boolean setTimerState(EJBOperation operation) {
+ return mdbContext.setTimerState(operation);
+ }
+
public void ejbCreate() throws Throwable {
assert(getInstance() != null);
systemChain.invoke(ejbCreateInvocation);