You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2011/08/08 01:36:47 UTC

svn commit: r1154801 - in /myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request: CodiFacesContextWrapper.java DefaultErrorViewExceptionHandler.java

Author: gpetracek
Date: Sun Aug  7 23:36:46 2011
New Revision: 1154801

URL: http://svn.apache.org/viewvc?rev=1154801&view=rev
Log:
EXTCDI-208 lazy injection in ExceptionHandler

Modified:
    myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/CodiFacesContextWrapper.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/DefaultErrorViewExceptionHandler.java

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/CodiFacesContextWrapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/CodiFacesContextWrapper.java?rev=1154801&r1=1154800&r2=1154801&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/CodiFacesContextWrapper.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/CodiFacesContextWrapper.java Sun Aug  7 23:36:46 2011
@@ -31,7 +31,6 @@ import org.apache.myfaces.extensions.cdi
 import javax.faces.application.FacesMessage;
 import javax.faces.application.Application;
 import javax.faces.context.ExceptionHandler;
-import javax.faces.context.ExceptionHandlerWrapper;
 import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
 import javax.faces.context.FacesContextWrapper;
@@ -78,9 +77,9 @@ class CodiFacesContextWrapper extends Fa
 
         if(this.defaultErrorViewExceptionHandlerActivated)
         {
-            exceptionHandler = new DefaultErrorViewExceptionHandler(exceptionHandler);
+            exceptionHandler = new DefaultErrorViewExceptionHandler(
+                    exceptionHandler, this.advancedQualifierRequiredForDependencyInjection);
         }
-        tryToInjectFields(exceptionHandler);
         return exceptionHandler;
     }
 
@@ -154,16 +153,6 @@ class CodiFacesContextWrapper extends Fa
         }
     }
 
-    private void tryToInjectFields(ExceptionHandler exceptionHandler)
-    {
-        CodiUtils.injectFields(exceptionHandler, this.advancedQualifierRequiredForDependencyInjection);
-
-        if(exceptionHandler instanceof ExceptionHandlerWrapper)
-        {
-            tryToInjectFields(((ExceptionHandlerWrapper) exceptionHandler).getWrapped());
-        }
-    }
-
     /**
      * {@inheritDoc}
      */

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/DefaultErrorViewExceptionHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/DefaultErrorViewExceptionHandler.java?rev=1154801&r1=1154800&r2=1154801&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/DefaultErrorViewExceptionHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/DefaultErrorViewExceptionHandler.java Sun Aug  7 23:36:46 2011
@@ -18,10 +18,10 @@
  */
 package org.apache.myfaces.extensions.cdi.jsf2.impl.listener.request;
 
-import org.apache.myfaces.extensions.cdi.core.api.Advanced;
 import org.apache.myfaces.extensions.cdi.core.api.config.view.DefaultErrorView;
 import org.apache.myfaces.extensions.cdi.core.api.navigation.ViewNavigationHandler;
 import org.apache.myfaces.extensions.cdi.core.impl.projectstage.ProjectStageProducer;
+import org.apache.myfaces.extensions.cdi.core.impl.util.CodiUtils;
 
 import javax.enterprise.context.ContextNotActiveException;
 import javax.faces.FacesException;
@@ -34,18 +34,16 @@ import javax.faces.context.FacesContext;
 import javax.faces.context.Flash;
 import javax.faces.event.ExceptionQueuedEvent;
 import javax.faces.event.ExceptionQueuedEventContext;
-import javax.inject.Inject;
 import java.util.Iterator;
 
 /**
  * @author Gerhard Petracek
  */
-@Advanced
 class DefaultErrorViewExceptionHandler extends ExceptionHandlerWrapper
 {
     private ExceptionHandler wrapped;
+    private boolean advancedQualifierRequiredForDependencyInjection;
 
-    @Inject
     private ViewNavigationHandler viewNavigationHandler;
 
     /**
@@ -55,9 +53,10 @@ class DefaultErrorViewExceptionHandler e
     {
     }
 
-    DefaultErrorViewExceptionHandler(ExceptionHandler wrapped)
+    DefaultErrorViewExceptionHandler(ExceptionHandler wrapped, boolean advancedQualifierRequiredForDependencyInjection)
     {
         this.wrapped = wrapped;
+        this.advancedQualifierRequiredForDependencyInjection = advancedQualifierRequiredForDependencyInjection;
     }
 
     /**
@@ -66,6 +65,7 @@ class DefaultErrorViewExceptionHandler e
     @Override
     public void handle() throws FacesException
     {
+        lazyInit();
         Iterator<ExceptionQueuedEvent> exceptionQueuedEventIterator = getUnhandledExceptionQueuedEvents().iterator();
 
         while (exceptionQueuedEventIterator.hasNext())
@@ -132,11 +132,31 @@ class DefaultErrorViewExceptionHandler e
         this.wrapped.handle();
     }
 
+    private void lazyInit()
+    {
+        if(this.viewNavigationHandler == null)
+        {
+            tryToInjectFields(this.wrapped);
+            this.viewNavigationHandler = CodiUtils.getContextualReferenceByClass(ViewNavigationHandler.class);
+        }
+    }
+
+    private void tryToInjectFields(ExceptionHandler exceptionHandler)
+    {
+        CodiUtils.injectFields(exceptionHandler, this.advancedQualifierRequiredForDependencyInjection);
+
+        if(exceptionHandler instanceof ExceptionHandlerWrapper)
+        {
+            tryToInjectFields(((ExceptionHandlerWrapper) exceptionHandler).getWrapped());
+        }
+    }
+
     /**
      * {@inheritDoc}
      */
     public ExceptionHandler getWrapped()
     {
+        lazyInit();
         return wrapped;
     }
 }