You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jb...@apache.org on 2003/08/27 00:11:24 UTC

cvs commit: incubator-geronimo/modules/core/src/java/org/apache/geronimo/remoting/transport FragmentBasedInterceptorRouter.java NullTransportInterceptor.java RemoteTransportInterceptor.java

jboynes     2003/08/26 15:11:24

  Modified:    modules/core/src/java/org/apache/geronimo/client
                        MainInvokerInterceptor.java
               modules/core/src/java/org/apache/geronimo/common
                        AbstractInterceptor.java AbstractRPCContainer.java
                        Interceptor.java InvocationResult.java
                        RPCContainer.java SimpleInvocationResult.java
               modules/core/src/java/org/apache/geronimo/ejb
                        CallbackInterceptor.java
                        StatelessLifeCycleInterceptor.java
               modules/core/src/java/org/apache/geronimo/ejb/cache
                        EntityCreationInterceptor.java
                        EntitySynchronizationInterceptor.java
                        StatefulInstanceInterceptor.java
                        StatefulSessionSynchronizationInterceptor.java
                        StatelessInstanceInterceptor.java
               modules/core/src/java/org/apache/geronimo/ejb/context
                        CMTInterceptor.java
                        ExecutionContextInterceptor.java
                        StatefulBMTInterceptor.java
                        StatelessBMTInterceptor.java
                        TransactionInterceptor.java
               modules/core/src/java/org/apache/geronimo/lock
                        LockInterceptor.java
               modules/core/src/java/org/apache/geronimo/naming/java
                        ComponentContextInterceptor.java
               modules/core/src/java/org/apache/geronimo/proxy
                        ReflexiveInterceptor.java SimpleRPCContainer.java
               modules/core/src/java/org/apache/geronimo/remoting
                        DeMarshalingInterceptor.java
                        InterVMRoutingInterceptor.java
                        IntraVMRoutingInterceptor.java
                        MarshalingInterceptor.java
               modules/core/src/java/org/apache/geronimo/remoting/transport
                        FragmentBasedInterceptorRouter.java
                        NullTransportInterceptor.java
                        RemoteTransportInterceptor.java
  Log:
  Change InvocationResult to that it contains application exceptions (as discussed on list)
  Now, both normal return and normal application exceptions flow up the main interceptor chain
  Only system exceptions (RuntimeEx, Error or container thrown exceptions) are thown up the chain
  As a result, Interceptor.invoke now explicitly throws Throwable not Exception
  
  Revision  Changes    Path
  1.2       +6 -3      incubator-geronimo/modules/core/src/java/org/apache/geronimo/client/MainInvokerInterceptor.java
  
  Index: MainInvokerInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/client/MainInvokerInterceptor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MainInvokerInterceptor.java	23 Aug 2003 22:14:20 -0000	1.1
  +++ MainInvokerInterceptor.java	26 Aug 2003 22:11:23 -0000	1.2
  @@ -76,14 +76,17 @@
           this.mainMethod = mainMethod;
       }
   
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           assert (mainMethod.equals(ProxyInvocation.getMethod(invocation)));
           Object[] args = ProxyInvocation.getArguments(invocation);
           try {
               mainMethod.invoke(null, args);
           } catch (InvocationTargetException e) {
               Throwable cause = e.getCause();
  -            return new SimpleInvocationResult(cause);
  +            if (cause instanceof Exception && cause instanceof RuntimeException == false) {
  +                return new SimpleInvocationResult((Exception)cause);
  +            }
  +            throw cause;
           }
           return new SimpleInvocationResult(null);
       }
  
  
  
  1.8       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/common/AbstractInterceptor.java
  
  Index: AbstractInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/common/AbstractInterceptor.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- AbstractInterceptor.java	23 Aug 2003 22:09:39 -0000	1.7
  +++ AbstractInterceptor.java	26 Aug 2003 22:11:23 -0000	1.8
  @@ -85,5 +85,5 @@
           next = nextInterceptor;
       }
   
  -    public abstract InvocationResult invoke(Invocation invocation) throws Exception;
  +    public abstract InvocationResult invoke(Invocation invocation) throws Throwable;
   }
  
  
  
  1.8       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/common/AbstractRPCContainer.java
  
  Index: AbstractRPCContainer.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/common/AbstractRPCContainer.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- AbstractRPCContainer.java	23 Aug 2003 22:09:39 -0000	1.7
  +++ AbstractRPCContainer.java	26 Aug 2003 22:11:23 -0000	1.8
  @@ -82,7 +82,7 @@
           super.postDeregister();
       }
   
  -    public final InvocationResult invoke(Invocation invocation) throws Exception {
  +    public final InvocationResult invoke(Invocation invocation) throws Throwable {
           if (getStateInstance() != State.RUNNING) {
               throw new IllegalStateException("invoke can only be called after the Container has started");
           }
  
  
  
  1.4       +4 -4      incubator-geronimo/modules/core/src/java/org/apache/geronimo/common/Interceptor.java
  
  Index: Interceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/common/Interceptor.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Interceptor.java	22 Aug 2003 02:08:41 -0000	1.3
  +++ Interceptor.java	26 Aug 2003 22:11:23 -0000	1.4
  @@ -84,8 +84,8 @@
        * in the chain.
        *
        * @param invocation the invocation for which work will be done
  -     * @return the result of the invocation
  -     * @throws Exception if an exception occures while doing the work
  +     * @return the result of the invocation (includes return or application Exception)
  +     * @throws Throwable if a system exception occures while doing the work
        */
  -    InvocationResult invoke(Invocation invocation) throws Exception;
  +    InvocationResult invoke(Invocation invocation) throws Throwable;
   }
  
  
  
  1.3       +39 -4     incubator-geronimo/modules/core/src/java/org/apache/geronimo/common/InvocationResult.java
  
  Index: InvocationResult.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/common/InvocationResult.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- InvocationResult.java	11 Aug 2003 17:59:10 -0000	1.2
  +++ InvocationResult.java	26 Aug 2003 22:11:23 -0000	1.3
  @@ -56,13 +56,48 @@
   package org.apache.geronimo.common;
   
   /**
  - *
  - *
  + * The result of an Invocation.
  + * There are two types of result:
  + * <ul>
  + * <li>normal - indicating the operation completed normally (e.g. the method returned)</li>
  + * <li>exception - indicating the operation completed abnormally (e.g. the method threw a checked exception)</li>
  + * </ul>
  + * <p>Note that these should both be considered a normal completion of the operation by the container. Abnormal
  + * completions, such as a RuntimeException or Error from the invocation, or any problem in the interceptor
  + * chain itself, should result in a Throwable being thrown up the chain rather than being contained in this
  + * result.</p>
  + * <p>This distinction mirrors the semantics for EJB invocations, where a business method is considered to have
  + * completed successfuly even if it throws declared Exception - the Exception there is indicating a business level
  + * issue and not a system problem.</p>
    *
    * @version $Revision$ $Date$
    */
   public interface InvocationResult {
  +    /**
  +     * Was this a normal completion (return)?
  +     * @return true if the invocation returned; false if a declared exception was thrown
  +     */
  +    boolean isNormal();
  +
  +    /**
  +     * Get the return value from the invocation.
  +     * It is an error to call this method if the invocation is not complete normally.
  +     * @return the return value from the invocation; null if the operation was void
  +     */
       Object getResult();
   
  -    void setResult(Object result);
  +    /**
  +     * Was an application exception raised by the invocation?
  +     * Note, this indicates a checked application exception was thrown; this will never contain
  +     * a system exception
  +     * @return true if a declared exception was thrown; false if the invocation returned
  +     */
  +    boolean isException();
  +
  +    /**
  +     * Get the application exception raised by the invocation.
  +     * It is an error to call this method if the invocation did not raise an exception
  +     * @return the checked Exception raised by the application
  +     */
  +    Exception getException();
   }
  
  
  
  1.2       +3 -3      incubator-geronimo/modules/core/src/java/org/apache/geronimo/common/RPCContainer.java
  
  Index: RPCContainer.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/common/RPCContainer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- RPCContainer.java	15 Aug 2003 14:11:26 -0000	1.1
  +++ RPCContainer.java	26 Aug 2003 22:11:23 -0000	1.2
  @@ -71,12 +71,12 @@
       //
       //  Main entry point
       //
  -    InvocationResult invoke(Invocation invocation) throws Exception;
  +    InvocationResult invoke(Invocation invocation) throws Throwable;
   
   
       /**
        * Add an interceptor to the interceptor stack
  -     * @param Interceptor
  +     * @param interceptor
        */
       void addInterceptor (Interceptor interceptor);
   
  
  
  
  1.4       +21 -7     incubator-geronimo/modules/core/src/java/org/apache/geronimo/common/SimpleInvocationResult.java
  
  Index: SimpleInvocationResult.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/common/SimpleInvocationResult.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SimpleInvocationResult.java	22 Aug 2003 02:08:41 -0000	1.3
  +++ SimpleInvocationResult.java	26 Aug 2003 22:11:23 -0000	1.4
  @@ -64,20 +64,34 @@
    * @version $Revision$ $Date$
    */
   public class SimpleInvocationResult implements InvocationResult, Serializable {
  -    private Object result;
  -
  -    public SimpleInvocationResult() {
  -    }
  +    private final Object result;
  +    private final boolean normal;
   
       public SimpleInvocationResult(Object result) {
           this.result = result;
  +        normal = true;
  +    }
  +
  +    public SimpleInvocationResult(Exception appException) {
  +        this.result = appException;
  +        this.normal = false;
  +    }
  +
  +    public boolean isNormal() {
  +        return normal;
  +    }
  +
  +    public boolean isException() {
  +        return !normal;
       }
   
       public Object getResult() {
  +        assert (normal == true);
           return result;
       }
   
  -    public void setResult(Object result) {
  -        this.result = result;
  +    public Exception getException() {
  +        assert (normal == false);
  +        return (Exception) result;
       }
   }
  
  
  
  1.6       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/CallbackInterceptor.java
  
  Index: CallbackInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/CallbackInterceptor.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- CallbackInterceptor.java	23 Aug 2003 22:09:39 -0000	1.5
  +++ CallbackInterceptor.java	26 Aug 2003 22:11:23 -0000	1.6
  @@ -77,7 +77,7 @@
    * @version $Revision$ $Date$
    */
   public final class CallbackInterceptor extends AbstractInterceptor {
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           // Instance
           EnterpriseContext ctx = EJBInvocationUtil.getEnterpriseContext(invocation);
           if (ctx == null) {
  
  
  
  1.7       +3 -3      incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/StatelessLifeCycleInterceptor.java
  
  Index: StatelessLifeCycleInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/StatelessLifeCycleInterceptor.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- StatelessLifeCycleInterceptor.java	23 Aug 2003 22:09:39 -0000	1.6
  +++ StatelessLifeCycleInterceptor.java	26 Aug 2003 22:11:23 -0000	1.7
  @@ -107,7 +107,7 @@
           createLocal = null;
       }
   
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           Method method = EJBInvocationUtil.getMethod(invocation);
           if (method == null) {
               return getNext().invoke(invocation);
  @@ -115,7 +115,7 @@
   
           if (method.equals(removeRemote) || method.equals(removeLocal)) {
               // remove for a stateless bean does nothing
  -            return new SimpleInvocationResult();
  +            return new SimpleInvocationResult(null);
           } else if (method.equals(createRemote)) {
               EJBProxyFactoryManager ejbProxyFactoryManager = EJBPlugins.getEJBProxyFactoryManager(getContainer());
               EJBProxyFactory ejbProxyFactory = ejbProxyFactoryManager.getThreadEJBProxyFactory();
  
  
  
  1.4       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/cache/EntityCreationInterceptor.java
  
  Index: EntityCreationInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/cache/EntityCreationInterceptor.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- EntityCreationInterceptor.java	11 Aug 2003 17:59:11 -0000	1.3
  +++ EntityCreationInterceptor.java	26 Aug 2003 22:11:23 -0000	1.4
  @@ -72,7 +72,7 @@
    * @version $Revision$ $Date$
    */
   public final class EntityCreationInterceptor extends AbstractInterceptor {
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           InvocationResult result = getNext().invoke(invocation);
   
           InvocationType type = InvocationType.getType(invocation);
  
  
  
  1.4       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/cache/EntitySynchronizationInterceptor.java
  
  Index: EntitySynchronizationInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/cache/EntitySynchronizationInterceptor.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- EntitySynchronizationInterceptor.java	11 Aug 2003 17:59:11 -0000	1.3
  +++ EntitySynchronizationInterceptor.java	26 Aug 2003 22:11:23 -0000	1.4
  @@ -72,7 +72,7 @@
       // todo find a home for me... should be a JMX object
       private static final SynchronizationRegistry synchronizationRegistry = new SynchronizationRegistry();
   
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           // register the context for synchronization
           EnterpriseContext ctx = EJBInvocationUtil.getEnterpriseContext(invocation);
           Object id = EJBInvocationUtil.getId(invocation);
  
  
  
  1.8       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/cache/StatefulInstanceInterceptor.java
  
  Index: StatefulInstanceInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/cache/StatefulInstanceInterceptor.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- StatefulInstanceInterceptor.java	23 Aug 2003 22:09:39 -0000	1.7
  +++ StatefulInstanceInterceptor.java	26 Aug 2003 22:11:23 -0000	1.8
  @@ -96,7 +96,7 @@
           pool = null;
       }
   
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           EnterpriseContext ctx;
           Object id = null;
   
  
  
  
  1.7       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/cache/StatefulSessionSynchronizationInterceptor.java
  
  Index: StatefulSessionSynchronizationInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/cache/StatefulSessionSynchronizationInterceptor.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- StatefulSessionSynchronizationInterceptor.java	23 Aug 2003 22:09:39 -0000	1.6
  +++ StatefulSessionSynchronizationInterceptor.java	26 Aug 2003 22:11:23 -0000	1.7
  @@ -102,7 +102,7 @@
           tm = null;
       }
   
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           if (InvocationType.getType(invocation).isHomeInvocation()) {
               // Home invocation's don't have state so they don't need to be synchronized
               return getNext().invoke(invocation);
  
  
  
  1.7       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/cache/StatelessInstanceInterceptor.java
  
  Index: StatelessInstanceInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/cache/StatelessInstanceInterceptor.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- StatelessInstanceInterceptor.java	23 Aug 2003 22:09:39 -0000	1.6
  +++ StatelessInstanceInterceptor.java	26 Aug 2003 22:11:23 -0000	1.7
  @@ -86,7 +86,7 @@
           pool = null;
       }
   
  -    public InvocationResult invoke(final Invocation invocation) throws Exception {
  +    public InvocationResult invoke(final Invocation invocation) throws Throwable {
           if (InvocationType.getType(invocation).isHomeInvocation()) {
               // Stateless home invocations don't call on an instance
               return getNext().invoke(invocation);
  
  
  
  1.7       +23 -53    incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/context/CMTInterceptor.java
  
  Index: CMTInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/context/CMTInterceptor.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- CMTInterceptor.java	23 Aug 2003 09:07:11 -0000	1.6
  +++ CMTInterceptor.java	26 Aug 2003 22:11:23 -0000	1.7
  @@ -68,7 +68,6 @@
   import org.apache.geronimo.common.Invocation;
   import org.apache.geronimo.common.InvocationResult;
   import org.apache.geronimo.common.InvocationType;
  -import org.apache.geronimo.common.RPCContainer;
   import org.apache.geronimo.ejb.EJBInvocationUtil;
   import org.apache.geronimo.ejb.container.EJBPlugins;
   import org.apache.geronimo.ejb.metadata.EJBMetadata;
  @@ -87,7 +86,7 @@
   
       protected void doStart() throws Exception {
           super.doStart();
  -        ejbMetadata = EJBPlugins.getEJBMetadata((RPCContainer)getContainer());
  +        ejbMetadata = EJBPlugins.getEJBMetadata(getContainer());
       }
   
       protected void doStop() throws Exception {
  @@ -95,7 +94,7 @@
           super.doStop();
       }
   
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           Method m = EJBInvocationUtil.getMethod(invocation);
           if (m == null) {
               // we are not invoking a method (e.g. its a CMR message) so pass straight through
  @@ -174,7 +173,7 @@
        * @throws Exception from the next interceptor
        * @throws EJBTransactionException if there was a problem interacting with the TransactionManager
        */
  -    private InvocationResult newTxContext(Invocation invocation, Transaction oldTransaction) throws EJBTransactionException, Exception {
  +    private InvocationResult newTxContext(Invocation invocation, Transaction oldTransaction) throws EJBTransactionException, Throwable {
           if (oldTransaction == null) {
               // we have no transaction, start the new one
               return invokeWithNewTx(invocation);
  @@ -194,10 +193,10 @@
        * There must not be a Transaction currently associated with the Thread
        * @param invocation the invocation to pass down
        * @return the result from the interceptor
  -     * @throws Exception from the next interceptor
  +     * @throws Throwable from the next interceptor
        * @throws EJBTransactionException if there was a problem interacting with the TransactionManager
        */
  -    private InvocationResult invokeWithNewTx(Invocation invocation) throws Exception {
  +    private InvocationResult invokeWithNewTx(Invocation invocation) throws Throwable {
           TxExecutionContext newContext = new TxExecutionContext(tm);
           InvocationResult result;
           try {
  @@ -209,37 +208,17 @@
   
           try {
               result = invokeNext(newContext, invocation);
  -        } catch (Error e) {
  -            systemException(newContext, e);
  -            throw e;
  -        } catch (RuntimeException e) {
  -            systemException(newContext, e);
  -            throw e;
  -        } catch (RemoteException e) {
  -            systemException(newContext, e);
  -            throw e;
  -        } catch (Exception e) {
  -            // application exception
               endTransaction(invocation, newContext);
  -            throw e;
  -        }
  -        endTransaction(invocation, newContext);
  -        return result;
  -    }
  -
  -    /**
  -     * Handle a system exception returned by the interceptor chain
  -     * @param newContext the current execution context
  -     * @param t the system exception
  -     */
  -    private void systemException(TxExecutionContext newContext, Throwable t) {
  -        try {
  -            tm.setRollbackOnly();
  -            tm.rollback();
  -        } catch (SystemException e) {
  -            log.error("Unable to roll back after system exception, continuing", e);
  -        } finally {
  +            return result;
  +        } catch (Throwable t) {
  +            try {
  +                tm.setRollbackOnly();
  +                tm.rollback();
  +            } catch (SystemException e) {
  +                log.error("Unable to roll back after system exception, continuing", e);
  +            }
               newContext.abnormalTermination(t);
  +            throw t;
           }
       }
   
  @@ -276,7 +255,7 @@
        * @throws Exception from the next interceptor
        * @throws EJBTransactionException if there was a problem interacting with the TransactionManager
        */
  -    private InvocationResult noTxContext(Invocation invocation, Transaction oldTransaction) throws EJBTransactionException, Exception {
  +    private InvocationResult noTxContext(Invocation invocation, Transaction oldTransaction) throws EJBTransactionException, Throwable {
           if (oldTransaction == null) {
               // we have no transaction, so just invoke
               return invokeWithNoTx(invocation);
  @@ -297,24 +276,15 @@
        * @return the result from the interceptor
        * @throws Exception from the next interceptor
        */
  -    private InvocationResult invokeWithNoTx(Invocation invocation) throws Exception {
  +    private InvocationResult invokeWithNoTx(Invocation invocation) throws Throwable {
           NoTxExecutionContext newContext = new NoTxExecutionContext();
           try {
  -            return invokeNext(newContext, invocation);
  -        } catch (Error e) {
  -            newContext.abnormalTermination(e);
  -            throw e;
  -        } catch (RuntimeException e) {
  -            newContext.abnormalTermination(e);
  -            throw e;
  -        } catch (RemoteException e) {
  -            newContext.abnormalTermination(e);
  -            throw e;
  -        } catch (Exception e) {
  -            newContext.normalTermination();
  -            throw e;
  -        } finally {
  +            InvocationResult result = invokeNext(newContext, invocation);
               newContext.normalTermination();
  +            return result;
  +        } catch (Throwable t) {
  +            newContext.abnormalTermination(t);
  +            throw t;
           }
       }
   
  @@ -327,7 +297,7 @@
        * @throws Exception from the next interceptor
        * @throws EJBTransactionException if we could not register a new TxExecutionContext with the TransactionManager
        */
  -    private InvocationResult sameTxContext(Invocation invocation, Transaction oldTransaction) throws EJBTransactionException, Exception {
  +    private InvocationResult sameTxContext(Invocation invocation, Transaction oldTransaction) throws EJBTransactionException, Throwable {
           TxExecutionContext context = TxExecutionContext.getContext(oldTransaction);
           if (context == null) {
               assert oldTransaction != null;
  
  
  
  1.6       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/context/ExecutionContextInterceptor.java
  
  Index: ExecutionContextInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/context/ExecutionContextInterceptor.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ExecutionContextInterceptor.java	23 Aug 2003 22:09:39 -0000	1.5
  +++ ExecutionContextInterceptor.java	26 Aug 2003 22:11:23 -0000	1.6
  @@ -88,7 +88,7 @@
        * @return the result of the invocation
        * @throws java.lang.Exception any Exception from the next interceptor
        */
  -    protected InvocationResult invokeNext(ExecutionContext context, Invocation invocation) throws Exception {
  +    protected InvocationResult invokeNext(ExecutionContext context, Invocation invocation) throws Throwable {
           ExecutionContext.push(context);
           try {
               return getNext().invoke(invocation);
  
  
  
  1.5       +7 -23     incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/context/StatefulBMTInterceptor.java
  
  Index: StatefulBMTInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/context/StatefulBMTInterceptor.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- StatefulBMTInterceptor.java	23 Aug 2003 09:07:11 -0000	1.4
  +++ StatefulBMTInterceptor.java	26 Aug 2003 22:11:23 -0000	1.5
  @@ -55,7 +55,6 @@
    */
   package org.apache.geronimo.ejb.context;
   
  -import java.rmi.RemoteException;
   import java.util.HashMap;
   import java.util.Map;
   import javax.ejb.EJBException;
  @@ -76,7 +75,7 @@
   public final class StatefulBMTInterceptor extends ExecutionContextInterceptor {
       private final static Map savedTransactions = new HashMap();
   
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           InvocationResult result;
           Object id = EJBInvocationUtil.getId(invocation);
           // suspend any transaction supplied by the client
  @@ -93,30 +92,15 @@
                       suspendInstanceTx(id);
                       assert getTransaction() == null;
                   }
  -            } catch (Error e) {
  -                // system exception
  -                ExecutionContext.pop(noTxContext);
  -                noTxContext.abnormalTermination(e);
  -                throw e;
  -            } catch (RuntimeException e) {
  -                // system exception
                   ExecutionContext.pop(noTxContext);
  -                noTxContext.abnormalTermination(e);
  -                throw e;
  -            } catch (RemoteException e) {
  +                noTxContext.normalTermination();
  +                return result;
  +            } catch (Throwable t) {
                   // system exception
                   ExecutionContext.pop(noTxContext);
  -                noTxContext.abnormalTermination(e);
  -                throw e;
  -            } catch (Exception e) {
  -                // application exception
  -                ExecutionContext.pop(noTxContext);
  -                noTxContext.normalTermination();
  -                throw e;
  +                noTxContext.abnormalTermination(t);
  +                throw t;
               }
  -            ExecutionContext.pop(noTxContext);
  -            noTxContext.normalTermination();
  -            return result;
           } finally {
               if (oldTransaction != null) {
                   // resume original transaction from client
  
  
  
  1.8       +8 -20     incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/context/StatelessBMTInterceptor.java
  
  Index: StatelessBMTInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/context/StatelessBMTInterceptor.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- StatelessBMTInterceptor.java	23 Aug 2003 22:09:39 -0000	1.7
  +++ StatelessBMTInterceptor.java	26 Aug 2003 22:11:23 -0000	1.8
  @@ -64,7 +64,6 @@
   import org.apache.geronimo.common.Invocation;
   import org.apache.geronimo.common.InvocationResult;
   import org.apache.geronimo.common.InvocationType;
  -import org.apache.geronimo.common.RPCContainer;
   import org.apache.geronimo.ejb.container.EJBPlugins;
   
   /**
  @@ -81,7 +80,7 @@
           ejbName = EJBPlugins.getEJBMetadata(getContainer()).getName();
       }
   
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           // suspend any transaction supplied by the client
           Transaction oldTransaction = suspend();
           InvocationResult result;
  @@ -94,26 +93,15 @@
                   } finally {
                       checkStatelessCompletion(noTxContext, invocation);
                   }
  -            } catch (Error e) {
  -                ExecutionContext.pop(noTxContext);
  -                noTxContext.abnormalTermination(e);
  -                throw e;
  -            } catch (RuntimeException e) {
  -                ExecutionContext.pop(noTxContext);
  -                noTxContext.abnormalTermination(e);
  -                throw e;
  -            } catch (RemoteException e) {
  -                ExecutionContext.pop(noTxContext);
  -                noTxContext.abnormalTermination(e);
  -                throw e;
  -            } catch (Exception e) {
                   ExecutionContext.pop(noTxContext);
                   noTxContext.normalTermination();
  -                throw e;
  +                return result;
  +            } catch (Throwable t) {
  +                // system exception
  +                ExecutionContext.pop(noTxContext);
  +                noTxContext.abnormalTermination(t);
  +                throw t;
               }
  -            ExecutionContext.pop(noTxContext);
  -            noTxContext.normalTermination();
  -            return result;
           } finally {
               if (oldTransaction != null) {
                   // resume original transaction from client
  
  
  
  1.12      +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/context/TransactionInterceptor.java
  
  Index: TransactionInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/ejb/context/TransactionInterceptor.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- TransactionInterceptor.java	23 Aug 2003 22:09:39 -0000	1.11
  +++ TransactionInterceptor.java	26 Aug 2003 22:11:23 -0000	1.12
  @@ -88,7 +88,7 @@
           transactionInterceptor = null;
       }
   
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           return transactionInterceptor.invoke(invocation);
       }
   }
  
  
  
  1.8       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/lock/LockInterceptor.java
  
  Index: LockInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/lock/LockInterceptor.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- LockInterceptor.java	23 Aug 2003 22:09:39 -0000	1.7
  +++ LockInterceptor.java	26 Aug 2003 22:11:24 -0000	1.8
  @@ -84,7 +84,7 @@
           lockDomain = null;
       }
   
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           InvocationType type = InvocationType.getType(invocation);
           if (org.apache.geronimo.ejb.Entrancy.isNonEntrant(invocation)) {
               return getNext().invoke(invocation);
  
  
  
  1.2       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/naming/java/ComponentContextInterceptor.java
  
  Index: ComponentContextInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/naming/java/ComponentContextInterceptor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ComponentContextInterceptor.java	23 Aug 2003 22:13:15 -0000	1.1
  +++ ComponentContextInterceptor.java	26 Aug 2003 22:11:24 -0000	1.2
  @@ -78,7 +78,7 @@
           this.compContext = compContext;
       }
   
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           Context oldContext = RootContext.getComponentContext();
           try {
               RootContext.setComponentContext(compContext);
  
  
  
  1.2       +6 -8      incubator-geronimo/modules/core/src/java/org/apache/geronimo/proxy/ReflexiveInterceptor.java
  
  Index: ReflexiveInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/proxy/ReflexiveInterceptor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ReflexiveInterceptor.java	22 Aug 2003 02:23:25 -0000	1.1
  +++ ReflexiveInterceptor.java	26 Aug 2003 22:11:24 -0000	1.2
  @@ -77,7 +77,7 @@
       /* (non-Javadoc)
        * @see org.apache.geronimo.common.AbstractInterceptor#invoke(org.apache.geronimo.common.Invocation)
        */
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           try {
   
               Method m = ProxyInvocation.getMethod(invocation);
  @@ -86,13 +86,11 @@
               return new SimpleInvocationResult(rc);
   
           } catch (InvocationTargetException e) {
  -            Throwable t = e.getTargetException();
  -            if (t instanceof Exception) {
  -                throw (Exception) t;
  -            } else if (t instanceof Error) {
  -                throw (Error) t;
  +            Throwable t = e.getCause();
  +            if (t instanceof Exception && t instanceof RuntimeException == false) {
  +                return new SimpleInvocationResult((Exception)t);
               } else {
  -                throw new Error("Unexpected Throwable", t);
  +                throw t;
               }
           }
       }
  
  
  
  1.2       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/proxy/SimpleRPCContainer.java
  
  Index: SimpleRPCContainer.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/proxy/SimpleRPCContainer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SimpleRPCContainer.java	22 Aug 2003 02:23:25 -0000	1.1
  +++ SimpleRPCContainer.java	26 Aug 2003 22:11:24 -0000	1.2
  @@ -80,7 +80,7 @@
       /**
       * @see org.apache.geronimo.common.RPCContainer#invoke(org.apache.geronimo.common.Invocation)
       */
  -    public final InvocationResult invoke(Invocation invocation) throws Exception {
  +    public final InvocationResult invoke(Invocation invocation) throws Throwable {
           return firstInterceptor.invoke(invocation);
       }
   
  
  
  
  1.2       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/remoting/DeMarshalingInterceptor.java
  
  Index: DeMarshalingInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/remoting/DeMarshalingInterceptor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DeMarshalingInterceptor.java	22 Aug 2003 02:23:26 -0000	1.1
  +++ DeMarshalingInterceptor.java	26 Aug 2003 22:11:24 -0000	1.2
  @@ -94,7 +94,7 @@
       /**
        * @see org.apache.geronimo.common.AbstractInterceptor#invoke(org.apache.geronimo.common.Invocation)
        */
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           Thread currentThread = Thread.currentThread();
           ClassLoader orig = currentThread.getContextClassLoader();
           try {
  
  
  
  1.2       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/remoting/InterVMRoutingInterceptor.java
  
  Index: InterVMRoutingInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/remoting/InterVMRoutingInterceptor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- InterVMRoutingInterceptor.java	22 Aug 2003 02:23:26 -0000	1.1
  +++ InterVMRoutingInterceptor.java	26 Aug 2003 22:11:24 -0000	1.2
  @@ -77,7 +77,7 @@
       /**
        * @see org.apache.geronimo.common.AbstractInterceptor#invoke(org.apache.geronimo.common.Invocation)
        */
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           return next.invoke(invocation);
       }
   
  
  
  
  1.2       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/remoting/IntraVMRoutingInterceptor.java
  
  Index: IntraVMRoutingInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/remoting/IntraVMRoutingInterceptor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- IntraVMRoutingInterceptor.java	22 Aug 2003 02:23:26 -0000	1.1
  +++ IntraVMRoutingInterceptor.java	26 Aug 2003 22:11:24 -0000	1.2
  @@ -76,7 +76,7 @@
       /**
        * @see org.apache.geronimo.common.AbstractInterceptor#invoke(org.apache.geronimo.common.Invocation)
        */
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           if (next == null)
               resolveNext();
           return next.invoke(invocation);
  
  
  
  1.2       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/remoting/MarshalingInterceptor.java
  
  Index: MarshalingInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/remoting/MarshalingInterceptor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MarshalingInterceptor.java	22 Aug 2003 02:23:26 -0000	1.1
  +++ MarshalingInterceptor.java	26 Aug 2003 22:11:24 -0000	1.2
  @@ -71,7 +71,7 @@
       /**
        * @see org.apache.geronimo.common.AbstractInterceptor#invoke(org.apache.geronimo.common.Invocation)
        */
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
   
           // Marshall the invocation and store it.
           MarshalledObject mo = next.createMarshalledObject();
  
  
  
  1.2       +4 -4      incubator-geronimo/modules/core/src/java/org/apache/geronimo/remoting/transport/FragmentBasedInterceptorRouter.java
  
  Index: FragmentBasedInterceptorRouter.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/remoting/transport/FragmentBasedInterceptorRouter.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- FragmentBasedInterceptorRouter.java	22 Aug 2003 02:23:26 -0000	1.1
  +++ FragmentBasedInterceptorRouter.java	26 Aug 2003 22:11:24 -0000	1.2
  @@ -88,7 +88,7 @@
               msg.pushMarshaledObject((MarshalledObject) result.getResult());
               return msg;
   
  -        } catch (Exception e) {
  +        } catch (Throwable e) {
               e.printStackTrace();
               throw new TransportException(e.getMessage());
           }
  @@ -107,13 +107,13 @@
   
               InvocationResult result = interceptor.invoke(invocation);
   
  -        } catch (Exception e) {
  +        } catch (Throwable e) {
               throw new TransportException(e.getMessage());
           }
       }
   
       /**
  -     * @param string
  +     * @param to
        * @return
        */
       private Interceptor lookupInterceptorFrom(URI to) {
  
  
  
  1.2       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/remoting/transport/NullTransportInterceptor.java
  
  Index: NullTransportInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/remoting/transport/NullTransportInterceptor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- NullTransportInterceptor.java	22 Aug 2003 02:23:26 -0000	1.1
  +++ NullTransportInterceptor.java	26 Aug 2003 22:11:24 -0000	1.2
  @@ -71,7 +71,7 @@
       /**
        * @see org.apache.geronimo.common.AbstractInterceptor#invoke(org.apache.geronimo.common.Invocation)
        */
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
           return getNext().invoke(invocation);
       }
   
  
  
  
  1.2       +2 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/remoting/transport/RemoteTransportInterceptor.java
  
  Index: RemoteTransportInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/remoting/transport/RemoteTransportInterceptor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- RemoteTransportInterceptor.java	22 Aug 2003 02:23:26 -0000	1.1
  +++ RemoteTransportInterceptor.java	26 Aug 2003 22:11:24 -0000	1.2
  @@ -83,7 +83,7 @@
       /**
        * @see org.apache.geronimo.common.AbstractInterceptor#invoke(org.apache.geronimo.common.Invocation)
        */
  -    public InvocationResult invoke(Invocation invocation) throws Exception {
  +    public InvocationResult invoke(Invocation invocation) throws Throwable {
   
           MarshalledObject mo = InvocationSupport.getMarshaledValue(invocation);
           // URI remoteURI = InvocationSupport.getRemoteURI(invocation);