You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by ad...@apache.org on 2007/02/20 02:33:00 UTC

svn commit: r509405 - in /incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core: ./ cmp/ entity/ ivm/naming/ mdb/ stateful/ stateless/

Author: adc
Date: Mon Feb 19 17:32:57 2007
New Revision: 509405

URL: http://svn.apache.org/viewvc?view=rev&rev=509405
Log:
New context integrated

Removed:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/OldEntityContext.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/OldMdbContext.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/OldStatefulContext.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/OldStatelessContext.java
Modified:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseContext.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEncReference.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityInstanceManager.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/EncReference.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContext.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbEncReference.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbEncUserTransaction.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContext.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEncReference.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEncUserTransaction.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEncReference.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEncUserTransaction.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseContext.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseContext.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseContext.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseContext.java Mon Feb 19 17:32:57 2007
@@ -44,8 +44,6 @@
     private final UserTransaction userTransaction;
     private final SecurityService securityService;
     private final TransactionManager transactionManager;
-    private State state;
-    protected final static State[] states = new State[Operation.values().length];
 
     public BaseContext(TransactionManager transactionManager, SecurityService securityService) {
         this.transactionManager = transactionManager;
@@ -59,100 +57,86 @@
         this.userTransaction = userTransaction;
     }
 
-    public void setOperation(Operation operation) {
-        State state = states[operation.ordinal()];
-
-        if (state == null) throw new IllegalArgumentException("Invalid operation for this context");
-
-        setState(state);
-    }
-
-    protected State getState() {
-        return state;
-    }
-
-    protected void setState(State state) {
-        this.state = state;
-    }
+    protected abstract State getState();
 
     public EJBHome getEJBHome() {
-        return state.getEJBHome();
+        return getState().getEJBHome();
     }
 
     public EJBLocalHome getEJBLocalHome() {
-        return state.getEJBLocalHome();
+        return getState().getEJBLocalHome();
     }
 
     public Properties getEnvironment() {
-        return state.getEnvironment();
+        return getState().getEnvironment();
     }
 
     public Identity getCallerIdentity() {
-        return state.getCallerIdentity();
+        return getState().getCallerIdentity();
     }
 
     public Principal getCallerPrincipal() {
-        return state.getCallerPrincipal(securityService);
+        return getState().getCallerPrincipal(securityService);
     }
 
     public boolean isCallerInRole(Identity identity) {
-        return state.isCallerInRole(identity);
+        return getState().isCallerInRole(identity);
     }
 
     public boolean isCallerInRole(String roleName) {
-        return state.isCallerInRole(securityService, roleName);
+        return getState().isCallerInRole(securityService, roleName);
     }
 
     public UserTransaction getUserTransaction() throws IllegalStateException {
-        return state.getUserTransaction(userTransaction);
+        return getState().getUserTransaction(userTransaction);
     }
 
     public void setRollbackOnly() throws IllegalStateException {
-        state.setRollbackOnly(transactionManager);
+        getState().setRollbackOnly(transactionManager);
     }
 
     public boolean getRollbackOnly() throws IllegalStateException {
-        return state.getRollbackOnly(transactionManager);
+        return getState().getRollbackOnly(transactionManager);
     }
 
     public TimerService getTimerService() throws IllegalStateException {
-        return state.getTimerService();
+        return getState().getTimerService();
     }
 
     public Object lookup(String name) {
-        return state.lookup(name);
+        return getState().lookup(name);
     }
 
     public boolean isUserTransactionAccessAllowed() {
-        return state.isUserTransactionAccessAllowed();
+        return getState().isUserTransactionAccessAllowed();
     }
 
     public boolean isMessageContextAccessAllowed() {
-        return state.isMessageContextAccessAllowed();
+        return getState().isMessageContextAccessAllowed();
     }
 
     public boolean isJNDIAccessAllowed() {
-        return state.isJNDIAccessAllowed();
+        return getState().isJNDIAccessAllowed();
     }
 
     public boolean isResourceManagerAccessAllowed() {
-        return state.isResourceManagerAccessAllowed();
+        return getState().isResourceManagerAccessAllowed();
     }
 
     public boolean isEnterpriseBeanAccessAllowed() {
-        return state.isEnterpriseBeanAccessAllowed();
+        return getState().isEnterpriseBeanAccessAllowed();
     }
 
     public boolean isEntityManagerFactoryAccessAllowed() {
-        return state.isEntityManagerFactoryAccessAllowed();
+        return getState().isEntityManagerFactoryAccessAllowed();
     }
 
     public boolean isEntityManagerAccessAllowed() {
-        return state.isEntityManagerAccessAllowed();
+        return getState().isEntityManagerAccessAllowed();
     }
 
     public boolean isTimerAccessAllowed() {
-        return state.isTimerAccessAllowed();
+        return getState().isTimerAccessAllowed();
     }
 
     protected static class State {

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java Mon Feb 19 17:32:57 2007
@@ -26,6 +26,7 @@
     private static final Logger log = Logger.getInstance("OpenEJB", "org.apache.openejb.util.resources");
     private static final ThreadLocal<ThreadContext> threadStorage = new ThreadLocal<ThreadContext>();
     private static final List<ThreadContextListener> listeners = new CopyOnWriteArrayList<ThreadContextListener>();
+    private static final ThreadLocal<Operation> currentOperation = new ThreadLocal<Operation>();
 
     public static ThreadContext getThreadContext() {
         ThreadContext threadContext = threadStorage.get();
@@ -92,9 +93,9 @@
     private final CoreDeploymentInfo deploymentInfo;
     private final Object primaryKey;
     private final Object securityIdentity;
-    private Operation currentOperation;
     private final HashMap<Class, Object> data = new HashMap<Class, Object>();
     private ClassLoader oldClassLoader;
+    private BaseContext beanContext;
 
     public ThreadContext(CoreDeploymentInfo deploymentInfo, Object primaryKey, Object securityIdentity) {
         if (deploymentInfo == null) {
@@ -105,6 +106,15 @@
         this.securityIdentity = securityIdentity;
     }
 
+    public ThreadContext(ThreadContext that) {
+        this.deploymentInfo = that.deploymentInfo;
+        this.primaryKey = that.primaryKey;
+        this.securityIdentity = that.securityIdentity;
+        this.data.putAll(that.data);
+        this.oldClassLoader = that.oldClassLoader;
+        this.beanContext = that.beanContext;
+    }
+
     public CoreDeploymentInfo getDeploymentInfo() {
         return deploymentInfo;
     }
@@ -117,12 +127,20 @@
         return securityIdentity;
     }
 
-    public Operation getCurrentOperation() {
-        return currentOperation;
+    public BaseContext getBeanContext() {
+        return beanContext;
+    }
+
+    public void setBeanContext(BaseContext beanContext) {
+        this.beanContext = beanContext;
+    }
+
+    public static Operation getCurrentOperation() {
+        return currentOperation.get();
     }
 
-    public void setCurrentOperation(Operation op) {
-        currentOperation = op;
+    public static void setCurrentOperation(Operation operation) {
+        currentOperation.set(operation);
     }
 
     @SuppressWarnings({"unchecked"})

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java Mon Feb 19 17:32:57 2007
@@ -48,7 +48,7 @@
 import org.apache.openejb.core.CoreDeploymentInfo;
 import org.apache.openejb.core.Operation;
 import org.apache.openejb.core.ThreadContext;
-import org.apache.openejb.core.entity.OldEntityContext;
+import org.apache.openejb.core.entity.EntityContext;
 import org.apache.openejb.core.transaction.TransactionContainer;
 import org.apache.openejb.core.transaction.TransactionContext;
 import org.apache.openejb.core.transaction.TransactionPolicy;
@@ -304,7 +304,7 @@
 
         ThreadContext oldCallContext = ThreadContext.enter(callContext);
         try {
-            entityBean.setEntityContext(new OldEntityContext(transactionManager, securityService));
+            entityBean.setEntityContext(new EntityContext(transactionManager, securityService));
         } catch (RemoteException e) {
             throw new EJBException(e);
         } finally {

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java Mon Feb 19 17:32:57 2007
@@ -41,6 +41,8 @@
  */
 public class EntityContext extends BaseContext implements javax.ejb.EntityContext {
 
+    protected final static State[] states = new State[Operation.values().length];
+
     public EntityContext(TransactionManager transactionManager, SecurityService securityService) {
         super(transactionManager, securityService);
     }
@@ -49,16 +51,25 @@
         super(transactionManager, securityService, userTransaction);
     }
 
+    protected State getState() {
+        Operation operation = ThreadContext.getCurrentOperation();
+        State state = states[operation.ordinal()];
+
+        if (state == null) throw new IllegalArgumentException("Invalid operation " + operation + " for this context");
+
+        return state;
+    }
+
     public EJBLocalObject getEJBLocalObject() throws IllegalStateException {
-        return ((javax.ejb.EntityContext) getState()).getEJBLocalObject();
+        return ((EntityState) getState()).getEJBLocalObject();
     }
 
     public EJBObject getEJBObject() throws IllegalStateException {
-        return ((javax.ejb.EntityContext) getState()).getEJBObject();
+        return ((EntityState) getState()).getEJBObject();
     }
 
     public Object getPrimaryKey() throws IllegalStateException {
-        return ((javax.ejb.EntityContext) getState()).getPrimaryKey();
+        return ((EntityState) getState()).getPrimaryKey();
     }
 
     private static class EntityState extends State {

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEncReference.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEncReference.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEncReference.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEncReference.java Mon Feb 19 17:32:57 2007
@@ -18,9 +18,11 @@
 
 import javax.naming.NameNotFoundException;
 
+import org.apache.openejb.core.BaseContext;
+import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.ThreadContext;
 import org.apache.openejb.core.ivm.naming.EncReference;
 import org.apache.openejb.core.ivm.naming.Reference;
-import org.apache.openejb.core.Operation;
 
 
 /**
@@ -41,15 +43,9 @@
      * method ensures that the entity bean is in the correct state before the super
      * class can return the requested reference object.
      */
-    public void checkOperation(Operation operation) throws NameNotFoundException {
-
-        /*        if( operation == Operations.SET_CONTEXT ||
-            operation == Operations.UNSET_CONTEXT ||
-            operation == Operations.PASSIVATE ||
-            operation == Operations.ACTIVATE ){
-                throw new NameNotFoundException("Operation Not Allowed");
-        }
-*/
+    public void checkOperation(BaseContext context) throws NameNotFoundException {
+        if (!context.isEnterpriseBeanAccessAllowed())
+            throw new NameNotFoundException("Operation Not Allowed");
     }
 
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityInstanceManager.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityInstanceManager.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityInstanceManager.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityInstanceManager.java Mon Feb 19 17:32:57 2007
@@ -294,8 +294,8 @@
         return bean;
     }
 
-    private org.apache.openejb.core.entity.OldEntityContext createEntityContext() {
-        return new OldEntityContext(transactionManager, securityService);
+    private EntityContext createEntityContext() {
+        return new EntityContext(transactionManager, securityService);
     }
 
     public void poolInstance(ThreadContext callContext, EntityBean bean)

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/EncReference.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/EncReference.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/EncReference.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/EncReference.java Mon Feb 19 17:32:57 2007
@@ -18,8 +18,8 @@
 
 import javax.naming.NameNotFoundException;
 
+import org.apache.openejb.core.BaseContext;
 import org.apache.openejb.core.ThreadContext;
-import org.apache.openejb.core.Operation;
 
 
 /**
@@ -45,16 +45,20 @@
         checking = value;
     }
 
-    /*
-    * Obtains the referenced object.
-    */
+    /**
+     * Obtains the referenced object.
+     * TODO: I think that once the bean context is properly hooked up
+     * throughout the server, then we can remove the check for a null
+     * bean context.
+     */
     public Object getObject() throws javax.naming.NamingException {
         ThreadContext callContext = ThreadContext.getThreadContext();
         if (callContext != null) {
-            checkOperation(callContext.getCurrentOperation());
+            BaseContext beanContext = callContext.getBeanContext();
+            if (beanContext != null) checkOperation(beanContext);
         }
         return ref.getObject();
     }
 
-    public abstract void checkOperation(Operation opertionType) throws NameNotFoundException;
+    public abstract void checkOperation(BaseContext beanContext) throws NameNotFoundException;
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContext.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContext.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContext.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContext.java Mon Feb 19 17:32:57 2007
@@ -26,6 +26,7 @@
 
 import org.apache.openejb.core.BaseContext;
 import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.ThreadContext;
 import org.apache.openejb.spi.SecurityService;
 
 
@@ -34,12 +35,23 @@
  */
 public class MdbContext extends BaseContext implements MessageDrivenContext {
 
+    protected final static State[] states = new State[Operation.values().length];
+
     public MdbContext(TransactionManager transactionManager, SecurityService securityService) {
         super(transactionManager, securityService);
     }
 
     protected MdbContext(TransactionManager transactionManager, SecurityService securityService, UserTransaction userTransaction) {
         super(transactionManager, securityService, userTransaction);
+    }
+
+    protected State getState() {
+        Operation operation = ThreadContext.getCurrentOperation();
+        State state = states[operation.ordinal()];
+
+        if (state == null) throw new IllegalArgumentException("Invalid operation " + operation + " for this context");
+
+        return state;
     }
 
     /**

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbEncReference.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbEncReference.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbEncReference.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbEncReference.java Mon Feb 19 17:32:57 2007
@@ -21,6 +21,7 @@
 import org.apache.openejb.core.ivm.naming.EncReference;
 import org.apache.openejb.core.ivm.naming.Reference;
 import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.BaseContext;
 
 
 public class MdbEncReference extends EncReference {
@@ -29,12 +30,8 @@
         super(ref);
     }
 
-    public void checkOperation(Operation operation) throws NameNotFoundException {
-
-/*
-        if( operation != Operations.BUSINESS ){
+    public void checkOperation(BaseContext context) throws NameNotFoundException {
+        if (!context.isEnterpriseBeanAccessAllowed())
             throw new NameNotFoundException("Operation Not Allowed");
-        }        
-*/
     }
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbEncUserTransaction.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbEncUserTransaction.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbEncUserTransaction.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbEncUserTransaction.java Mon Feb 19 17:32:57 2007
@@ -20,6 +20,7 @@
 
 import org.apache.openejb.core.CoreUserTransaction;
 import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.BaseContext;
 import org.apache.openejb.core.ivm.naming.EncReference;
 import org.apache.openejb.core.ivm.naming.ObjectReference;
 
@@ -44,10 +45,9 @@
      * method ensures that the message driven bean is in the correct state before the super
      * class can return the requested reference object.
      */
-    public void checkOperation(Operation operation) throws NameNotFoundException {
-        if (operation == Operation.SET_CONTEXT) {
+    public void checkOperation(BaseContext context) throws NameNotFoundException {
+        if (!context.isUserTransactionAccessAllowed())
             throw new NameNotFoundException("Operation Not Allowed");
-        }
     }
 
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java Mon Feb 19 17:32:57 2007
@@ -166,11 +166,11 @@
         try {
             Context ctx = deploymentInfo.getJndiEnc();
             // construct the bean instance
-            OldMdbContext mdbContext = null;
+            MdbContext mdbContext = null;
             try {
-                mdbContext = (OldMdbContext) ctx.lookup("java:comp/EJBContext");
+                mdbContext = (MdbContext) ctx.lookup("java:comp/EJBContext");
             } catch (NamingException e) {
-                mdbContext = new OldMdbContext(transactionManager, securityService);
+                mdbContext = new MdbContext(transactionManager, securityService);
                 ctx.bind("java:comp/EJBContext",mdbContext);
             }
             // only in this case should the callback be used

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java Mon Feb 19 17:32:57 2007
@@ -247,7 +247,7 @@
 
 
         ThreadContext createContext = new ThreadContext(deploymentInfo, primaryKey, securityIdentity);
-        createContext.setCurrentOperation(Operation.CREATE);
+        createContext.setCurrentOperation(Operation.LIFECYCLE);
         ThreadContext oldCallContext = ThreadContext.enter(createContext);
         try {
             checkAuthorization(deploymentInfo, callMethod, securityIdentity);

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContext.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContext.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContext.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContext.java Mon Feb 19 17:32:57 2007
@@ -18,9 +18,11 @@
 
 import javax.transaction.TransactionManager;
 import javax.transaction.UserTransaction;
+import javax.xml.rpc.handler.MessageContext;
 
 import org.apache.openejb.core.BaseSessionContext;
 import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.ThreadContext;
 import org.apache.openejb.spi.SecurityService;
 
 
@@ -29,6 +31,8 @@
  */
 public class StatefulContext extends BaseSessionContext {
 
+    protected final static State[] states = new State[Operation.values().length];
+
     public StatefulContext(TransactionManager transactionManager, SecurityService securityService) {
         super(transactionManager, securityService);
     }
@@ -37,10 +41,39 @@
         super(transactionManager, securityService, userTransaction);
     }
 
+    protected State getState() {
+        Operation operation = ThreadContext.getCurrentOperation();
+        State state = states[operation.ordinal()];
+
+        if (state == null) throw new IllegalArgumentException("Invalid operation " + operation + " for this context");
+
+        return state;
+    }
+
     static {
         states[Operation.INJECTION.ordinal()] = new InjectionStatelessState();
         states[Operation.LIFECYCLE.ordinal()] = new LifecycleStatelessState();
         states[Operation.BUSINESS.ordinal()] = new BusinessStatelessState();
+        states[Operation.AFTER_BEGIN.ordinal()] = new BeforeCommitState();
         states[Operation.TIMEOUT.ordinal()] = new TimeoutStatelessState();
+    }
+
+    /**
+     * afterBegin
+     * beforeCompletion State
+     */
+    public static class BeforeCommitState extends StatelessState {
+
+        public Class getInvokedBusinessInterface() {
+            throw new IllegalStateException();
+        }
+
+        public MessageContext getMessageContext() throws IllegalStateException {
+            throw new IllegalStateException();
+        }
+
+        public boolean isMessageContextAccessAllowed() {
+            return false;
+        }
     }
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEncReference.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEncReference.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEncReference.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEncReference.java Mon Feb 19 17:32:57 2007
@@ -19,6 +19,7 @@
 import javax.naming.NameNotFoundException;
 
 import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.BaseContext;
 import org.apache.openejb.core.ivm.naming.EncReference;
 import org.apache.openejb.core.ivm.naming.Reference;
 
@@ -29,10 +30,8 @@
         super(ref);
     }
 
-    public void checkOperation(Operation operation) throws NameNotFoundException {
-
-        if (operation == Operation.AFTER_COMPLETION) {
+    public void checkOperation(BaseContext context) throws NameNotFoundException {
+        if (!context.isEnterpriseBeanAccessAllowed())
             throw new NameNotFoundException("Operation Not Allowed");
-        }
     }
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEncUserTransaction.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEncUserTransaction.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEncUserTransaction.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEncUserTransaction.java Mon Feb 19 17:32:57 2007
@@ -20,6 +20,7 @@
 import javax.transaction.UserTransaction;
 
 import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.BaseContext;
 import org.apache.openejb.core.ivm.naming.EncReference;
 import org.apache.openejb.core.ivm.naming.ObjectReference;
 import org.apache.openejb.persistence.JtaEntityManagerRegistry;
@@ -47,9 +48,8 @@
      * method ensures that the stateful bean is in the correct state before the super
      * class can return the requested reference object.
      */
-    public void checkOperation(Operation operation) throws NameNotFoundException {
-        if (operation == Operation.SET_CONTEXT || operation == Operation.AFTER_COMPLETION || operation == Operation.BEFORE_COMPLETION) {
+    public void checkOperation(BaseContext context) throws NameNotFoundException {
+        if (!context.isUserTransactionAccessAllowed())
             throw new NameNotFoundException("Operation Not Allowed");
-        }
     }
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java Mon Feb 19 17:32:57 2007
@@ -131,7 +131,7 @@
                 ctx.bind("java:comp/EJBContext", sessionContext);
             }
             if(javax.ejb.SessionBean.class.isAssignableFrom(beanClass) || hasSetSessionContext(beanClass)) {
-                callContext.setCurrentOperation(Operation.SET_CONTEXT);
+                callContext.setCurrentOperation(Operation.INJECTION);
                 objectRecipe.setProperty("sessionContext", new StaticRecipe(sessionContext));
             }
             for (Injection injection : deploymentInfo.getInjections()) {
@@ -189,7 +189,7 @@
 
     private SessionContext createSessionContext() {
         StatefulUserTransaction userTransaction = new StatefulUserTransaction(new CoreUserTransaction(transactionManager), jtaEntityManagerRegistry);
-        return new OldStatefulContext(transactionManager, securityService, userTransaction);
+        return new StatefulContext(transactionManager, securityService, userTransaction);
     }
 
     public Object obtainInstance(Object primaryKey, ThreadContext callContext) throws OpenEJBException {

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java Mon Feb 19 17:32:57 2007
@@ -21,6 +21,7 @@
 
 import org.apache.openejb.core.BaseSessionContext;
 import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.ThreadContext;
 import org.apache.openejb.spi.SecurityService;
 
 
@@ -29,12 +30,23 @@
  */
 public class StatelessContext extends BaseSessionContext {
 
+    protected final static State[] states = new State[Operation.values().length];
+
     public StatelessContext(TransactionManager transactionManager, SecurityService securityService) {
         super(transactionManager, securityService);
     }
 
     public StatelessContext(TransactionManager transactionManager, SecurityService securityService, UserTransaction userTransaction) {
         super(transactionManager, securityService, userTransaction);
+    }
+
+    protected State getState() {
+        Operation operation = ThreadContext.getCurrentOperation();
+        State state = states[operation.ordinal()];
+
+        if (state == null) throw new IllegalArgumentException("Invalid operation " + operation + " for this context");
+
+        return state;
     }
 
     /**

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEncReference.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEncReference.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEncReference.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEncReference.java Mon Feb 19 17:32:57 2007
@@ -21,6 +21,7 @@
 import org.apache.openejb.core.ivm.naming.EncReference;
 import org.apache.openejb.core.ivm.naming.Reference;
 import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.BaseContext;
 
 
 public class StatelessEncReference extends EncReference {
@@ -29,12 +30,9 @@
         super(ref);
     }
 
-    public void checkOperation(Operation operation) throws NameNotFoundException {
-/*
-        if( operation != Operations.BUSINESS ){
+    public void checkOperation(BaseContext context) throws NameNotFoundException {
+        if (!context.isEnterpriseBeanAccessAllowed())
             throw new NameNotFoundException("Operation Not Allowed");
-        }        
-*/
     }
 
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEncUserTransaction.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEncUserTransaction.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEncUserTransaction.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEncUserTransaction.java Mon Feb 19 17:32:57 2007
@@ -20,6 +20,7 @@
 
 import org.apache.openejb.core.CoreUserTransaction;
 import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.BaseContext;
 import org.apache.openejb.core.ivm.naming.EncReference;
 import org.apache.openejb.core.ivm.naming.ObjectReference;
 
@@ -45,10 +46,9 @@
      * method ensures that the stateless bean is in the correct state before the super
      * class can return the requested reference object.
      */
-    public void checkOperation(Operation operation) throws NameNotFoundException {
-        if (operation == Operation.SET_CONTEXT) {
+    public void checkOperation(BaseContext context) throws NameNotFoundException {
+        if (!context.isUserTransactionAccessAllowed())
             throw new NameNotFoundException("Operation Not Allowed");
-        }
     }
 
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java?view=diff&rev=509405&r1=509404&r2=509405
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java Mon Feb 19 17:32:57 2007
@@ -108,7 +108,7 @@
                     ctx.bind("java:comp/EJBContext", sessionContext);
                 }
                 if(javax.ejb.SessionBean.class.isAssignableFrom(beanClass) || hasSetSessionContext(beanClass)) {
-                    callContext.setCurrentOperation(Operation.SET_CONTEXT);
+                    callContext.setCurrentOperation(Operation.INJECTION);
                     objectRecipe.setProperty("sessionContext", new StaticRecipe(sessionContext));
                 }
                 for (Injection injection : deploymentInfo.getInjections()) {
@@ -127,6 +127,7 @@
                         logger.warn("Injection data not found in enc: jndiName='"+injection.getJndiName()+"', target="+injection.getTarget()+"/"+injection.getName());
                     }
                 }
+
                 bean = objectRecipe.create(beanClass.getClassLoader());
                 Map unsetProperties = objectRecipe.getUnsetProperties();
                 if (unsetProperties.size() > 0){
@@ -134,7 +135,7 @@
                         logger.warn("Injection: No such property '"+property+"' in class "+beanClass.getName());
                     }
                 }
-                callContext.setCurrentOperation(Operation.CREATE);
+                callContext.setCurrentOperation(Operation.LIFECYCLE);
 
                 Method postConstruct = deploymentInfo.getPostConstruct();
                 if (postConstruct != null){
@@ -164,7 +165,7 @@
     }
 
     private SessionContext createSessionContext() {
-        return (SessionContext) new OldStatelessContext(transactionManager, securityService);
+        return new StatelessContext(transactionManager, securityService);
     }
 
     public void poolInstance(ThreadContext callContext, Object bean) throws OpenEJBException {