dain 2005/01/26 18:27:59
Modified: modules/core/src/java/org/openejb
AbstractInterceptorBuilder.java
EJBContainerConfiguration.java
GenericEJBContainer.java InterceptorBuilder.java
Log:
ENC is now passed around as a Map instead of a jndi Context. This allows the
ejb container to modify it and inject the kernel and class loader into
references.
Changed Stateless and MDB containers to use system chain for ejbCreate and
ejbRemove invocations.
Added test to verify that ejbRemove is propertly called from the cache code.
Revision Changes Path
1.11 +4 -12
openejb/modules/core/src/java/org/openejb/AbstractInterceptorBuilder.java
Index: AbstractInterceptorBuilder.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/AbstractInterceptorBuilder.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- AbstractInterceptorBuilder.java 21 Jan 2005 04:52:12 -0000 1.10
+++ AbstractInterceptorBuilder.java 26 Jan 2005 23:27:58 -0000 1.11
@@ -48,11 +48,10 @@
package org.openejb;
import javax.security.auth.Subject;
+import javax.naming.Context;
-import org.apache.geronimo.naming.java.ReadOnlyContext;
import org.apache.geronimo.transaction.TrackedConnectionAssociator;
import org.apache.geronimo.transaction.context.TransactionContextManager;
-import org.apache.geronimo.kernel.Kernel;
import org.openejb.cache.InstanceCache;
import org.openejb.cache.InstanceFactory;
import org.openejb.cache.InstancePool;
@@ -70,7 +69,7 @@
protected String ejbName;
protected VirtualOperation[] vtable;
protected Subject runAs;
- protected ReadOnlyContext componentContext;
+ protected Context componentContext;
protected TransactionPolicyManager transactionPolicyManager;
protected PermissionManager permissionManager;
protected boolean doAsCurrentCaller = false;
@@ -82,13 +81,6 @@
protected InstanceCache instanceCache;
protected InstanceFactory instanceFactory;
- public void setKernel(Kernel kernel) {
- componentContext.setKernel(kernel);
- }
-
- public void setClassLoader(ClassLoader classLoader) {
- componentContext.setClassLoader(classLoader);
- }
public void setContainerId(Object containerId) {
assert (containerId != null) : "containerId is null";
this.containerId = containerId;
@@ -108,7 +100,7 @@
this.runAs = runAs;
}
- public void setComponentContext(ReadOnlyContext componentContext) {
+ public void setComponentContext(Context componentContext) {
assert (componentContext != null) : "componentContext is null";
this.componentContext = componentContext;
}
1.4 +3 -5
openejb/modules/core/src/java/org/openejb/EJBContainerConfiguration.java
Index: EJBContainerConfiguration.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/EJBContainerConfiguration.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- EJBContainerConfiguration.java 28 Oct 2004 21:21:25 -0000 1.3
+++ EJBContainerConfiguration.java 26 Jan 2005 23:27:58 -0000 1.4
@@ -50,14 +50,12 @@
import java.util.Set;
import javax.security.auth.Subject;
+import javax.naming.Context;
-import org.apache.geronimo.naming.java.ReadOnlyContext;
import org.apache.geronimo.transaction.UserTransactionImpl;
import org.openejb.transaction.TransactionPolicySource;
/**
- *
- *
* @version $Revision$ $Date$
*/
public class EJBContainerConfiguration {
@@ -72,7 +70,7 @@
public String messageEndpointInterfaceName;
public TransactionDemarcation txnDemarcation;
public UserTransactionImpl userTransaction;
- public ReadOnlyContext componentContext;
+ public Context componentContext;
public Set unshareableResources;
public TransactionPolicySource transactionPolicySource;
public String contextId;
1.32 +26 -3
openejb/modules/core/src/java/org/openejb/GenericEJBContainer.java
Index: GenericEJBContainer.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/GenericEJBContainer.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- GenericEJBContainer.java 24 Jan 2005 21:16:48 -0000 1.31
+++ GenericEJBContainer.java 26 Jan 2005 23:27:58 -0000 1.32
@@ -52,6 +52,7 @@
import java.security.Permissions;
import java.util.Iterator;
import java.util.Set;
+import java.util.Map;
import javax.ejb.EJBHome;
import javax.ejb.EJBLocalHome;
import javax.ejb.EJBLocalObject;
@@ -62,6 +63,7 @@
import javax.security.jacc.PolicyConfiguration;
import javax.security.jacc.PolicyConfigurationFactory;
import javax.security.jacc.PolicyContextException;
+import javax.naming.Context;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -80,6 +82,9 @@
import org.apache.geronimo.transaction.TrackedConnectionAssociator;
import org.apache.geronimo.transaction.UserTransactionImpl;
import org.apache.geronimo.transaction.context.TransactionContextManager;
+import org.apache.geronimo.naming.java.SimpleReadOnlyContext;
+import org.apache.geronimo.naming.reference.KernelAwareReference;
+import org.apache.geronimo.naming.reference.ClassLoaderAwareReference;
import org.openejb.cache.InstancePool;
import org.openejb.client.EJBObjectHandler;
import org.openejb.client.EJBObjectProxy;
@@ -123,6 +128,7 @@
InstanceContextFactory contextFactory,
InterceptorBuilder interceptorBuilder,
InstancePool pool,
+ Map componentContext,
UserTransactionImpl userTransaction,
String[] jndiNames,
String[] localJndiNames,
@@ -137,6 +143,7 @@
assert (containerId != null);
assert (ejbName != null && ejbName.length() > 0);
+ assert (componentContext != null);
assert (signatures != null);
assert (interceptorBuilder != null);
assert (jndiNames != null);
@@ -156,14 +163,28 @@
this.proxyInfo = proxyInfo;
this.proxyFactory = new EJBProxyFactory(this);
+ // create ReadOnlyContext
+ Context enc = null;
+ if (componentContext != null) {
+ for (Iterator iterator = componentContext.values().iterator();
iterator.hasNext();) {
+ Object value = iterator.next();
+ if (value instanceof KernelAwareReference) {
+ ((KernelAwareReference) value).setKernel(kernel);
+ }
+ if (value instanceof ClassLoaderAwareReference) {
+ ((ClassLoaderAwareReference)
value).setClassLoader(classLoader);
+ }
+ }
+ enc = new SimpleReadOnlyContext(componentContext);
+ }
+ interceptorBuilder.setComponentContext(enc);
+
// give the contextFactory a reference to the proxyFactory
// after this there is no reason to hold on to a reference to the
contextFactory
contextFactory.setProxyFactory(proxyFactory);
SystemMethodIndices systemMethodIndices =
contextFactory.setSignatures(getSignatures());
// build the interceptor chain
- interceptorBuilder.setKernel(kernel);
- interceptorBuilder.setClassLoader(classLoader);
interceptorBuilder.setTransactionContextManager(transactionContextManager);
interceptorBuilder.setTrackedConnectionAssociator(trackedConnectionAssociator);
interceptorBuilder.setInstancePool(pool);
@@ -430,6 +451,7 @@
infoFactory.addAttribute("ContextFactory",
InstanceContextFactory.class, true);
infoFactory.addAttribute("InterceptorBuilder",
InterceptorBuilder.class, true);
infoFactory.addAttribute("Pool", InstancePool.class, true);
+ infoFactory.addAttribute("componentContext", Map.class, true);
infoFactory.addAttribute("UserTransaction",
UserTransactionImpl.class, true);
infoFactory.addAttribute("JndiNames", String[].class, true);
infoFactory.addAttribute("LocalJndiNames", String[].class, true);
@@ -466,6 +488,7 @@
"ContextFactory",
"InterceptorBuilder",
"Pool",
+ "componentContext",
"UserTransaction",
"JndiNames",
"LocalJndiNames",
1.10 +3 -8
openejb/modules/core/src/java/org/openejb/InterceptorBuilder.java
Index: InterceptorBuilder.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/InterceptorBuilder.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- InterceptorBuilder.java 21 Jan 2005 04:52:13 -0000 1.9
+++ InterceptorBuilder.java 26 Jan 2005 23:27:58 -0000 1.10
@@ -17,12 +17,11 @@
package org.openejb;
import javax.security.auth.Subject;
+import javax.naming.Context;
import java.io.Serializable;
-import org.apache.geronimo.naming.java.ReadOnlyContext;
import org.apache.geronimo.transaction.TrackedConnectionAssociator;
import org.apache.geronimo.transaction.context.TransactionContextManager;
-import org.apache.geronimo.kernel.Kernel;
import org.openejb.cache.InstanceCache;
import org.openejb.cache.InstanceFactory;
@@ -36,10 +35,6 @@
* @version $Revision$ $Date$
*/
public interface InterceptorBuilder extends Serializable {
- void setKernel(Kernel kernel);
-
- void setClassLoader(ClassLoader classLoader);
-
void setContainerId(Object contextId);
void setEJBName(String ejbName);
@@ -48,7 +43,7 @@
void setRunAs(Subject runAs);
- void setComponentContext(ReadOnlyContext componentContext);
+ void setComponentContext(Context componentContext);
void setTransactionPolicyManager(TransactionPolicyManager
transactionPolicyManager);