You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2004/12/04 07:08:06 UTC

svn commit: r109778 - /incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/EveJndiProvider.java /incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/Invocation.java

Author: akarasulu
Date: Fri Dec  3 22:08:06 2004
New Revision: 109778

URL: http://svn.apache.org/viewcvs?view=rev&rev=109778
Log:
Changes ...

 o added boolean bypass property to an invocation
 o made framework take bypass property into account by not calling the target
   method on the proxied object

Notes ...

 o change is being made to be able to implement the following fix:

    http://nagoya.apache.org/jira/browse/DIREVE-101

 o this change would be required by several dynamic entry generation and 
   transformation services critical for implementing views.


Modified:
   incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/EveJndiProvider.java
   incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/Invocation.java

Modified: incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/EveJndiProvider.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/EveJndiProvider.java?view=diff&rev=109778&p1=incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/EveJndiProvider.java&r1=109777&p2=incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/EveJndiProvider.java&r2=109778
==============================================================================
--- incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/EveJndiProvider.java	(original)
+++ incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/EveJndiProvider.java	Fri Dec  3 22:08:06 2004
@@ -208,8 +208,22 @@
 
             try
             {
-                Object retVal = method.invoke( nexus, invocation.getParameters() );
-                invocation.setReturnValue( retVal );
+                /*
+                 * If the invocation is not bypassed, we invoke on the proxied
+                 * object and set the return value on invocation.  If we do
+                 * bypass, its because a before chain service set the bypass
+                 * flag.  If the invoked method has a return value it's the
+                 * responsibility of the bypass triggering interceptor to set
+                 * the value to return.
+                 */
+
+                if ( ! invocation.doBypass() )
+                {
+                    Object retVal = method.invoke( nexus, invocation.getParameters() );
+                    invocation.setReturnValue( retVal );
+                }
+
+                // even if invocation is bypassed state is now post invocation 
                 invocation.setState( InvocationStateEnum.POSTINVOCATION );
             }
             catch ( InvocationTargetException ite )
@@ -231,7 +245,7 @@
                     target = new NamingException();
                     target.setRootCause( ite );
                 }
-                
+
                 invocation.setThrowable( target );
                 invocation.setState( InvocationStateEnum.FAILUREHANDLING );
             }
@@ -254,12 +268,12 @@
 
 
         /*
-         * If we have gotten this far then the before pipeline succeeded.  If 
-         * the target invocation succeeded then we should be in the 
+         * If we have gotten this far then the before pipeline succeeded.  If
+         * the target invocation succeeded then we should be in the
          * POSTINVOCATION state in which case we invoke the after pipeline.
-         * 
+         *
          * If the target invocation failed then we should run the after failure
-         * pipeline since we will be in the FAILUREHANDLINE state and after 
+         * pipeline since we will be in the FAILUREHANDLINE state and after
          * doing so we throw the original throwable raised by the target.
          */
         if ( invocation.getState() == InvocationStateEnum.POSTINVOCATION )

Modified: incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/Invocation.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/Invocation.java?view=diff&rev=109778&p1=incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/Invocation.java&r1=109777&p2=incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/Invocation.java&r2=109778
==============================================================================
--- incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/Invocation.java	(original)
+++ incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/Invocation.java	Fri Dec  3 22:08:06 2004
@@ -53,7 +53,12 @@
      * The invokation state: when call has completed isCompleted will be true
      */
     private boolean isComplete = false;
-    
+
+    /**
+     * When set to true the invocation on the target is bypassed.
+     */
+    private boolean bypass = false;
+
     /**
      * Thrown by the first interceptor to fail within the before invocation
      * InterceptorPipeline which is fail fast.
@@ -131,10 +136,10 @@
 
 
     /**
-     * Gets the completion state of this invokation.  
+     * Gets the completion state of this invokation.
      *
-     * @return true if the call on the proxied object has returned, false 
-     * otherwise 
+     * @return true if the call on the proxied object has returned, false
+     * otherwise
      */
     public boolean isComplete()
     {
@@ -153,7 +158,30 @@
     {
         this.isComplete = isComplete;
     }
-    
+
+
+    /**
+     * Gets whether or not this invokation is to be bypassed.
+     *
+     * @return true if the call on the proxied object is to be bypassed, false
+     * otherwise
+     */
+    public boolean doBypass()
+    {
+        return bypass;
+    }
+
+
+    /**
+     * Sets the whether or not the invocation on the proxied object is bypassed.
+     *
+     * @param bypass whether or not the call on the proxied object is bypassed
+     */
+    void setBypass( boolean bypass )
+    {
+        this.bypass = bypass;
+    }
+
 
     /**
      * Lists the Throwables thrown by interceptors within the failure pipeline