djencks 2004/07/18 18:32:25
Modified: modules/core/src/java/org/openejb/slsb
StatelessContainerBuilder.java
StatelessInstanceContext.java
StatelessInstanceContextFactory.java
StatelessInterceptorBuilder.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.9 +19 -2
openejb/modules/core/src/java/org/openejb/slsb/StatelessContainerBuilder.java
Index: StatelessContainerBuilder.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/slsb/StatelessContainerBuilder.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- StatelessContainerBuilder.java 7 Jul 2004 22:17:35 -0000 1.8
+++ StatelessContainerBuilder.java 18 Jul 2004 22:32:25 -0000 1.9
@@ -50,14 +50,22 @@
import java.lang.reflect.Method;
import java.util.LinkedHashMap;
+import javax.ejb.TimedObject;
+import javax.ejb.Timer;
+import javax.management.ObjectName;
+
import org.openejb.AbstractContainerBuilder;
import org.openejb.EJBComponentType;
import org.openejb.InterceptorBuilder;
+import org.openejb.transaction.TransactionPolicy;
+import org.openejb.transaction.ContainerPolicy;
+import org.openejb.timer.TimerServiceImpl;
import org.openejb.cache.InstancePool;
import org.openejb.dispatch.InterfaceMethodSignature;
import org.openejb.dispatch.MethodHelper;
import org.openejb.dispatch.MethodSignature;
import org.openejb.dispatch.VirtualOperation;
+import org.openejb.dispatch.EJBTimeoutOperation;
import org.openejb.slsb.dispatch.EJBActivateOperation;
import org.openejb.slsb.dispatch.EJBPassivateOperation;
import org.openejb.slsb.dispatch.SetSessionContextOperation;
@@ -90,10 +98,13 @@
// build the pool
InstancePool pool = createInstancePool(instanceFactory);
+ ObjectName timerName = getTimerName(beanClass);
+
if (buildContainer) {
+ //TODO add timer to sig.
return createContainer(signatures, contextFactory, interceptorBuilder,
pool);
} else {
- return createConfiguration(classLoader, signatures, contextFactory,
interceptorBuilder, pool);
+ return createConfiguration(classLoader, signatures, contextFactory,
interceptorBuilder, pool, timerName);
}
}
@@ -119,6 +130,12 @@
continue;
}
String name = beanMethod.getName();
+ if (TimedObject.class.isAssignableFrom(beanClass)) {
+ MethodSignature signature = new MethodSignature("ejbTimeout", new
Class[]{Timer.class});
+ vopMap.put(
+ MethodHelper.translateToInterface(signature)
+ , EJBTimeoutOperation.INSTANCE);
+ }
MethodSignature signature = new MethodSignature(beanMethod);
if (name.equals("ejbActivate")) {
vopMap.put(
1.6 +5 -3
openejb/modules/core/src/java/org/openejb/slsb/StatelessInstanceContext.java
Index: StatelessInstanceContext.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/slsb/StatelessInstanceContext.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- StatelessInstanceContext.java 7 Jul 2004 22:17:35 -0000 1.5
+++ StatelessInstanceContext.java 18 Jul 2004 22:32:25 -0000 1.6
@@ -55,6 +55,7 @@
import org.apache.geronimo.transaction.UserTransactionImpl;
import org.openejb.AbstractInstanceContext;
import org.openejb.EJBOperation;
+import org.openejb.timer.TimerServiceImpl;
import org.openejb.dispatch.SystemMethodIndices;
import org.openejb.proxy.EJBProxyFactory;
@@ -67,8 +68,8 @@
private final Object containerId;
private final StatelessSessionContext sessionContext;
- public StatelessInstanceContext(Object containerId, SessionBean instance,
EJBProxyFactory proxyFactory, UserTransactionImpl userTransaction, SystemMethodIndices
systemMethodIndices, Interceptor systemChain, Set unshareableResources, Set
applicationManagedSecurityResources) {
- super(systemMethodIndices, systemChain, unshareableResources,
applicationManagedSecurityResources, instance, proxyFactory);
+ public StatelessInstanceContext(Object containerId, SessionBean instance,
EJBProxyFactory proxyFactory, UserTransactionImpl userTransaction, SystemMethodIndices
systemMethodIndices, Interceptor systemChain, Set unshareableResources, Set
applicationManagedSecurityResources, TimerServiceImpl timerService) {
+ super(systemMethodIndices, systemChain, unshareableResources,
applicationManagedSecurityResources, instance, proxyFactory, timerService);
this.containerId = containerId;
this.sessionContext = new StatelessSessionContext(this, userTransaction);
setContextInvocation = systemMethodIndices.getSetContextInvocation(this,
sessionContext);
@@ -98,4 +99,5 @@
public void setOperation(EJBOperation operation) {
sessionContext.setState(operation);
}
+
}
1.7 +11 -4
openejb/modules/core/src/java/org/openejb/slsb/StatelessInstanceContextFactory.java
Index: StatelessInstanceContextFactory.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/slsb/StatelessInstanceContextFactory.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- StatelessInstanceContextFactory.java 7 Jul 2004 22:17:35 -0000 1.6
+++ StatelessInstanceContextFactory.java 18 Jul 2004 22:32:25 -0000 1.7
@@ -58,6 +58,7 @@
import org.openejb.EJBInstanceFactory;
import org.openejb.EJBInstanceFactoryImpl;
import org.openejb.InstanceContextFactory;
+import org.openejb.timer.TimerServiceImpl;
import org.openejb.dispatch.InterfaceMethodSignature;
import org.openejb.dispatch.SystemMethodIndices;
import org.openejb.proxy.EJBProxyFactory;
@@ -74,8 +75,9 @@
private final Set unshareableResources;
private final Set applicationManagedSecurityResources;
private EJBProxyFactory proxyFactory;
- private SystemMethodIndices systemMethodIndices;
+ private transient SystemMethodIndices systemMethodIndices;
private Interceptor systemChain;
+ private transient TimerServiceImpl timerService;
public StatelessInstanceContextFactory(Object containerId, Class beanClass,
UserTransactionImpl userTransaction, Set unshareableResources, Set
applicationManagedSecurityResources) {
this.containerId = containerId;
@@ -93,8 +95,13 @@
this.systemChain = systemChain;
}
- public void setSignatures(InterfaceMethodSignature[] signatures) {
+ public SystemMethodIndices setSignatures(InterfaceMethodSignature[] signatures)
{
systemMethodIndices =
SystemMethodIndices.createSystemMethodIndices(signatures, "setSessionContext",
SessionContext.class.getName(), "unsetSessionContext");
+ return systemMethodIndices;
+ }
+
+ public void setTimerService(TimerServiceImpl timerService) {
+ this.timerService = timerService;
}
public InstanceContext newInstance() throws Exception {
@@ -107,6 +114,6 @@
proxyFactory,
userTransaction,
systemMethodIndices, systemChain, unshareableResources,
- applicationManagedSecurityResources);
+ applicationManagedSecurityResources, timerService);
}
}
1.5 +3 -3
openejb/modules/core/src/java/org/openejb/slsb/StatelessInterceptorBuilder.java
Index: StatelessInterceptorBuilder.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/slsb/StatelessInterceptorBuilder.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- StatelessInterceptorBuilder.java 7 Jul 2004 22:17:35 -0000 1.4
+++ StatelessInterceptorBuilder.java 18 Jul 2004 22:32:25 -0000 1.5
@@ -67,7 +67,7 @@
public class StatelessInterceptorBuilder extends AbstractInterceptorBuilder {
public TwoChains buildInterceptorChains() {
- if (transactionManager == null) {
+ if (transactionContextManager == null) {
throw new IllegalStateException("Transaction manager must be set before
building the interceptor chain");
}
if (instancePool == null) {
@@ -84,7 +84,7 @@
firstInterceptor = new ConnectionTrackingInterceptor(firstInterceptor,
trackedConnectionAssociator);
}
Interceptor systemChain = firstInterceptor;
- firstInterceptor = new TransactionContextInterceptor(firstInterceptor,
transactionManager, transactionPolicyManager);
+ firstInterceptor = new TransactionContextInterceptor(firstInterceptor,
transactionContextManager, transactionPolicyManager);
if (securityEnabled) {
firstInterceptor = new EJBSecurityInterceptor(firstInterceptor,
containerId, permissionManager);
}