You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by Mathias Brökelmann <mb...@googlemail.com> on 2007/02/24 16:25:25 UTC

Re: svn commit: r511230 - in /myfaces/core/branches/jsf12/impl/src: main/java/org/apache/myfaces/config/ main/java/org/apache/myfaces/config/annotation/ main/java/org/apache/myfaces/el/ main/java/org/apache/myfaces/el/unified/resolver/ test/java/org/

Hi Dennis,

I have a problem with the handling of ManagedBeans in
VariableResolverImpl. According to the spec the VariableResolverImpl
should only delegate to the application elresolver now. The managed
beans where resolved in a new ManagedBeanResolver. We already have an
implementation for this so I ask you to implement this into the
ManagedBeanResolver.

I currently change VariableResolverImpl and ElResolver setup according
to the spec.

Cheers,
Mathias

2007/2/24, dennisbyrne@apache.org <de...@apache.org>:
> Author: dennisbyrne
> Date: Fri Feb 23 22:59:15 2007
> New Revision: 511230
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=511230
> Log:
> implemented sectoin 5.4.1 as far as @PostConstruct is concerned, @PreDestroy is still left
> refactored ManagedBeanBuilder and both Resolvers
>
> Added:
>     myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/
>     myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
>     myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/
>     myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
>     myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
>     myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
>     myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> Modified:
>     myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
>     myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
>     myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
>
> Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
> URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java?view=diff&rev=511230&r1=511229&r2=511230
> ==============================================================================
> --- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java (original)
> +++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java Fri Feb 23 22:59:15 2007
> @@ -15,23 +15,34 @@
>   */
>  package org.apache.myfaces.config;
>
> +import java.lang.reflect.Array;
> +import java.util.ArrayList;
> +import java.util.HashMap;
> +import java.util.Iterator;
> +import java.util.List;
> +import java.util.Map;
> +
>  import javax.el.ELContext;
> +import javax.el.ELException;
>  import javax.el.ELResolver;
>  import javax.el.ExpressionFactory;
>  import javax.el.ValueExpression;
> -import org.apache.myfaces.config.element.*;
> -import org.apache.commons.beanutils.PropertyUtils;
> -import org.apache.commons.logging.Log;
> -import org.apache.commons.logging.LogFactory;
> -
>  import javax.faces.FacesException;
>  import javax.faces.application.Application;
> -import javax.faces.context.FacesContext;
>  import javax.faces.context.ExternalContext;
> +import javax.faces.context.FacesContext;
>  import javax.faces.webapp.UIComponentTag;
> -import java.util.*;
> -import java.lang.reflect.Array;
> -import javax.el.ELException;
> +
> +import org.apache.commons.beanutils.PropertyUtils;
> +import org.apache.commons.logging.Log;
> +import org.apache.commons.logging.LogFactory;
> +import org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler;
> +import org.apache.myfaces.config.element.ListEntries;
> +import org.apache.myfaces.config.element.ListEntry;
> +import org.apache.myfaces.config.element.ManagedBean;
> +import org.apache.myfaces.config.element.ManagedProperty;
> +import org.apache.myfaces.config.element.MapEntries;
> +import org.apache.myfaces.config.element.MapEntry;
>  import org.apache.myfaces.shared_impl.util.ClassUtils;
>
>
> @@ -45,12 +56,22 @@
>  {
>      private static Log log = LogFactory.getLog(ManagedBeanBuilder.class);
>      private RuntimeConfig _runtimeConfig;
> -
> +    public final static String REQUEST = "request";
> +    public final static String APPLICATION = "application";
> +    public final static String SESSION = "session";
> +    public final static String NONE = "none";
>
>      public Object buildManagedBean(FacesContext facesContext, ManagedBean beanConfiguration) throws FacesException
>      {
> -        Object bean = ClassUtils.newInstance(beanConfiguration.getManagedBeanClassName());
> +        final Object bean = ClassUtils.newInstance(beanConfiguration.getManagedBeanClassName());
>
> +        final AnnotatedManagedBeanHandler handler = new AnnotatedManagedBeanHandler(bean, beanConfiguration);
> +
> +        final boolean threwUnchecked = handler.run();
> +
> +        if(threwUnchecked)
> +               return null;
> +
>          switch (beanConfiguration.getInitMode())
>          {
>              case ManagedBean.INIT_MODE_PROPERTIES:
> @@ -240,18 +261,18 @@
>              String valueScope = getScope(facesContext, expression);
>
>              // if the target scope is 'none' value scope has to be 'none', too
> -            if (targetScope == null || targetScope.equalsIgnoreCase("none")) {
> -                if (valueScope != null && !(valueScope.equalsIgnoreCase("none"))) {
> +            if (targetScope == null || targetScope.equalsIgnoreCase(NONE)) {
> +                if (valueScope != null && !(valueScope.equalsIgnoreCase(NONE))) {
>                      return false;
>                  }
>                  return true;
>              }
>
>              // 'application' scope can reference 'application' and 'none'
> -            if (targetScope.equalsIgnoreCase("application")) {
> +            if (targetScope.equalsIgnoreCase(APPLICATION)) {
>                  if (valueScope != null) {
> -                    if (valueScope.equalsIgnoreCase("request") ||
> -                        valueScope.equalsIgnoreCase("session")) {
> +                    if (valueScope.equalsIgnoreCase(REQUEST) ||
> +                        valueScope.equalsIgnoreCase(SESSION)) {
>                          return false;
>                      }
>                  }
> @@ -259,9 +280,9 @@
>              }
>
>              // 'session' scope can reference 'session', 'application', and 'none' but not 'request'
> -            if (targetScope.equalsIgnoreCase("session")) {
> +            if (targetScope.equalsIgnoreCase(SESSION)) {
>                  if (valueScope != null) {
> -                    if (valueScope.equalsIgnoreCase("request")) {
> +                    if (valueScope.equalsIgnoreCase(REQUEST)) {
>                          return false;
>                      }
>                  }
> @@ -269,7 +290,7 @@
>              }
>
>              // 'request' scope can reference any value scope
> -            if (targetScope.equalsIgnoreCase("request")) {
> +            if (targetScope.equalsIgnoreCase(REQUEST)) {
>                  return true;
>              }
>          }
> @@ -282,60 +303,59 @@
>          String beanName = getFirstSegment(expression);
>          ExternalContext externalContext = facesContext.getExternalContext();
>
> -        // check scope objects
> +
> +               // check scope objects
>          if (beanName.equalsIgnoreCase("requestScope")) {
> -            return "request";
> +            return REQUEST;
>          }
> -        if (beanName.equalsIgnoreCase("sessionScope")) {
> -            return "session";
> +               if (beanName.equalsIgnoreCase("sessionScope")) {
> +            return SESSION;
>          }
> -        if (beanName.equalsIgnoreCase("applicationScope")) {
> -            return "application";
> +               if (beanName.equalsIgnoreCase("applicationScope")) {
> +            return APPLICATION;
>          }
>
>             // check implicit objects
>          if (beanName.equalsIgnoreCase("cookie")) {
> -           return "request";
> +               return REQUEST;
>          }
>          if (beanName.equalsIgnoreCase("facesContext")) {
> -            return "request";
> +            return REQUEST;
>          }
>
>          if (beanName.equalsIgnoreCase("header")) {
> -            return "request";
> +            return REQUEST;
>          }
>          if (beanName.equalsIgnoreCase("headerValues")) {
> -            return "request";
> +            return REQUEST;
>          }
>
>          if (beanName.equalsIgnoreCase("initParam")) {
> -           return "application";
> +               return APPLICATION;
>          }
>          if (beanName.equalsIgnoreCase("param")) {
> -            return "request";
> +            return REQUEST;
>          }
>          if (beanName.equalsIgnoreCase("paramValues")) {
> -            return "request";
> +            return REQUEST;
>          }
>          if (beanName.equalsIgnoreCase("view")) {
> -            return "request";
> +            return REQUEST;
>          }
>
> -
>          // not found so far - check all scopes
>          if (externalContext.getRequestMap().get(beanName) != null) {
> -            return "request";
> +            return REQUEST;
>          }
>          if (externalContext.getSessionMap().get(beanName) != null) {
> -            return "session";
> +            return SESSION;
>          }
>          if (externalContext.getApplicationMap().get(beanName) != null) {
> -            return "application";
> +            return APPLICATION;
>          }
>
>          //not found - check mangaged bean config
>
> -
>          ManagedBean mbc = getRuntimeConfig(facesContext).getManagedBean(beanName);
>
>          if (mbc != null) {
> @@ -344,9 +364,6 @@
>
>          return null;
>      }
> -
> -
> -
>
>      /**
>       * Extract the first expression segment, that is the substring up to the first '.' or '['
>
> Added: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
> URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java?view=auto&rev=511230
> ==============================================================================
> --- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java (added)
> +++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java Fri Feb 23 22:59:15 2007
> @@ -0,0 +1,136 @@
> +package org.apache.myfaces.config.annotation;
> +
> +import java.lang.annotation.Annotation;
> +import java.lang.reflect.InvocationTargetException;
> +import java.lang.reflect.Method;
> +
> +import javax.faces.FacesException;
> +
> +import org.apache.commons.logging.Log;
> +import org.apache.commons.logging.LogFactory;
> +import org.apache.myfaces.config.ManagedBeanBuilder;
> +import org.apache.myfaces.config.element.ManagedBean;
> +
> +/**
> + * @see JSF spec 1.2, section 5.4
> + * @warn Do not import javax.annotation.* in this class
> + * @author Dennis Byrne
> + */
> +
> +public class AnnotatedManagedBeanHandler {
> +
> +       private static Log log = LogFactory.getLog(AnnotatedManagedBeanHandler.class);
> +
> +       private Object managedBean;
> +
> +       private ManagedBean beanConfiguration;
> +
> +       public AnnotatedManagedBeanHandler(Object managedBean, ManagedBean beanConfiguration) {
> +
> +               if (managedBean == null) {
> +                       throw new NullPointerException("Object managedBean");
> +               }
> +
> +               if (beanConfiguration == null) {
> +                       throw new NullPointerException("ManagedBean beanConfiguration");
> +               }
> +
> +               this.managedBean = managedBean;
> +               this.beanConfiguration = beanConfiguration;
> +
> +       }
> +
> +       public boolean run() {
> +
> +               boolean threwUnchecked = false;
> +
> +               if (ManagedBeanBuilder.NONE.equals(beanConfiguration.getManagedBeanScope())) {
> +                       ; // this only applies to a, s, and r scope beans
> +               } else {
> +                       threwUnchecked = run(managedBean.getClass().getMethods());
> +               }
> +
> +               return threwUnchecked;
> +       }
> +
> +       private boolean run(Method[] methods) {
> +
> +               boolean threwUnchecked = false;
> +
> +               for (Method method : methods)
> +                       if (run(method)) {
> +                               threwUnchecked = true;
> +                               break;
> +                       }// break if we invoke method ? or invoke all w/ annoation?
> +
> +               return threwUnchecked;
> +       }
> +
> +       private boolean run(Method method) {
> +
> +               Annotation[] annotations = method.getAnnotations();
> +               boolean threwUnchecked = false;
> +
> +               for (Annotation annotation : annotations) {
> +                       if (isPostConstruct(annotation)) {
> +                               if (run(annotation, method)) {
> +                                       threwUnchecked = true;
> +                                       break; // spec says not to call anymore methods on this
> +                               }
> +                       }
> +               }
> +
> +               return threwUnchecked;
> +       }
> +
> +       private boolean run(Annotation annotation, Method method) {
> +
> +               boolean threwUnchecked = true; // start w/ pessimism
> +
> +               try {
> +
> +                       method.invoke(managedBean, null);
> +
> +                       threwUnchecked = false;
> +
> +               } catch (InvocationTargetException ite) { // catch most specific first
> +
> +                       final Throwable cause = ite.getCause();
> +
> +                       handleException(method, cause == null ? ite : cause);
> +
> +               } catch (Exception e) {
> +
> +                       handleException(method, e);
> +               }
> +
> +               return threwUnchecked;
> +       }
> +
> +       private void handleException(Method method, Throwable e) {
> +               final String genericLoggingMessage = getGenericLoggingMessage(method, e);
> +
> +               if (e instanceof RuntimeException) // why did they make RE extend E ?
> +               {
> +                       log.error(genericLoggingMessage + " MyFaces cannot " + " put the bean in "
> +                                       + beanConfiguration.getManagedBeanScope() + " scope " + " ... execution continues. ");
> +               } else {
> +                       throw new FacesException(genericLoggingMessage + " The spec is ambivalent on checked exceptions.");
> +               }
> +       }
> +
> +       private String getGenericLoggingMessage(Method method, Throwable e) {
> +               return "When invoking " + method.getName() + " on a managed bean '" + beanConfiguration.getManagedBeanName()
> +                               + "'," + " an exception " + e.getClass() + "{" + e.getMessage() + "} was thrown. "
> +                               + " See section 5.4.1 of the JSF specification.";
> +       }
> +
> +       private boolean isPostConstruct(Annotation annotation) {
> +
> +               final Class<? extends Annotation> annotationType = annotation.annotationType();
> +               final String name = annotationType.getName();
> +               // use the literal String because we want to avoid ClassDefNotFoundError
> +               return "javax.annotation.PostConstruct".equals(name);
> +
> +       }
> +}
>
> Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
> URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java?view=diff&rev=511230&r1=511229&r2=511230
> ==============================================================================
> --- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java (original)
> +++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java Fri Feb 23 22:59:15 2007
> @@ -29,6 +29,7 @@
>  import org.apache.myfaces.config.ManagedBeanBuilder;
>  import org.apache.myfaces.config.RuntimeConfig;
>  import org.apache.myfaces.config.element.ManagedBean;
> +import org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.Scope;
>
>  import org.apache.commons.logging.Log;
>  import org.apache.commons.logging.LogFactory;
> @@ -313,25 +314,7 @@
>                  beansUnderConstruction.remove(managedBeanName);
>              }
>
> -            // put in scope
> -            String scopeKey = mbc.getManagedBeanScope();
> -
> -            // find the scope handler object
> -            Scope scope = (Scope) _scopes.get(scopeKey);
> -            if (scope == null)
> -            {
> -                log.error("Managed bean '" + name + "' has illegal scope: "
> -                    + scopeKey);
> -            }
> -            else
> -            {
> -                scope.put(externalContext, name, obj);
> -            }
> -
> -            if(obj==null && log.isDebugEnabled())
> -            {
> -                log.debug("Variable '" + name + "' could not be resolved.");
> -            }
> +            putInScope(mbc, externalContext, obj);
>
>              return obj;
>          }
> @@ -344,6 +327,28 @@
>          return null;
>      }
>
> +       private void putInScope(ManagedBean managedBean, ExternalContext extContext, Object obj) {
> +
> +               final String managedBeanName = managedBean.getManagedBeanName();
> +
> +               if (obj == null) {
> +                       if (log.isDebugEnabled())
> +                               log.debug("Variable '" + managedBeanName + "' could not be resolved.");
> +               } else {
> +
> +                       String scopeKey = managedBean.getManagedBeanScope();
> +
> +                       // find the scope handler object
> +                       Scope scope = (Scope) _scopes.get(scopeKey);
> +                       if (scope == null) {
> +                               log.error("Managed bean '" + managedBeanName + "' has illegal scope: " + scopeKey);
> +                       } else {
> +                               scope.put(extContext, managedBeanName, obj);
> +                       }
> +               }
> +
> +       }
> +
>      protected RuntimeConfig getRuntimeConfig(FacesContext facesContext)
>      {
>          if (_runtimeConfig == null)
>
> Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
> URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java?view=diff&rev=511230&r1=511229&r2=511230
> ==============================================================================
> --- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java (original)
> +++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java Fri Feb 23 22:59:15 2007
> @@ -192,22 +192,30 @@
>              beansUnderConstruction.remove(managedBeanName);
>          }
>
> -        // put in scope
> -        String scopeKey = managedBean.getManagedBeanScope();
> +       putInScope(managedBean, extContext, obj);
> +    }
> +
> +       private void putInScope(ManagedBean managedBean, ExternalContext extContext, Object obj) {
>
> -        // find the scope handler object
> -        Scope scope = (Scope) _scopes.get(scopeKey);
> -        if (scope == null) {
> -            log.error("Managed bean '" + managedBeanName + "' has illegal scope: "
> -                + scopeKey);
> -        } else {
> -            scope.put(extContext, managedBeanName, obj);
> -        }
> +               final String managedBeanName = managedBean.getManagedBeanName();
> +
> +               if (obj == null) {
> +                       if (log.isDebugEnabled())
> +                               log.debug("Variable '" + managedBeanName + "' could not be resolved.");
> +               } else {
>
> -        if(obj==null && log.isDebugEnabled()) {
> -            log.debug("Variable '" + managedBeanName + "' could not be resolved.");
> -        }
> -    }
> +                       String scopeKey = managedBean.getManagedBeanScope();
> +
> +                       // find the scope handler object
> +                       Scope scope = (Scope) _scopes.get(scopeKey);
> +                       if (scope == null) {
> +                               log.error("Managed bean '" + managedBeanName + "' has illegal scope: " + scopeKey);
> +                       } else {
> +                               scope.put(extContext, managedBeanName, obj);
> +                       }
> +               }
> +
> +       }
>
>      // get the FacesContext from the ELContext
>      private FacesContext facesContext(ELContext context) {
>
> Added: myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
> URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java?view=auto&rev=511230
> ==============================================================================
> --- myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java (added)
> +++ myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java Fri Feb 23 22:59:15 2007
> @@ -0,0 +1,88 @@
> +package org.apache.myfaces.config.annotation;
> +
> +import org.apache.myfaces.config.ManagedBeanBuilder;
> +import org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler;
> +import org.apache.myfaces.config.impl.digester.elements.ManagedBean;
> +
> +import junit.framework.TestCase;
> +
> +/**
> + * @author Dennis Byrne
> + */
> +
> +public class AnnotatedExceptionManagedBeanHandlerTestCase extends TestCase {
> +
> +       protected AnnotatedManagedBean managedBean;
> +
> +       protected AnnotatedManagedBeanHandler handler;
> +
> +       protected ManagedBean managedBeanConf;
> +
> +       public void setUp() {
> +               managedBean = new AnnotatedManagedBean(new Exception());
> +               managedBeanConf = new ManagedBean();
> +               handler = new AnnotatedManagedBeanHandler(managedBean, managedBeanConf);
> +       }
> +
> +       public void testShouldNotBlowUpForNoneScope() {
> +
> +               managedBeanConf.setScope(ManagedBeanBuilder.NONE);
> +
> +               boolean exceptionThrown = false;
> +
> +               try {
> +                       handler.run();
> +               } catch (Exception e) {
> +                       exceptionThrown = true;
> +               }
> +
> +               assertFalse(managedBean.isPostConstructCalled());
> +               assertFalse(exceptionThrown);
> +       }
> +
> +       public void testShouldBlowUpForRequestScope() {
> +
> +               managedBeanConf.setScope(ManagedBeanBuilder.REQUEST);
> +
> +               boolean exceptionThrown = false;
> +
> +               try {
> +                       handler.run();
> +               } catch (Exception e) {
> +                       exceptionThrown = true;
> +               }
> +
> +               assertTrue(exceptionThrown);
> +       }
> +
> +       public void testShouldBlowUpForSessionScope() {
> +
> +               managedBeanConf.setScope(ManagedBeanBuilder.SESSION);
> +
> +               boolean exceptionThrown = false;
> +
> +               try {
> +                       handler.run();
> +               } catch (Exception e) {
> +                       exceptionThrown = true;
> +               }
> +
> +               assertTrue(exceptionThrown);
> +       }
> +
> +       public void testShouldBlowUpForApplicationScope() {
> +
> +               managedBeanConf.setScope(ManagedBeanBuilder.APPLICATION);
> +
> +               boolean exceptionThrown = false;
> +
> +               try {
> +                       handler.run();
> +               } catch (Exception e) {
> +                       exceptionThrown = true;
> +               }
> +
> +               assertTrue(exceptionThrown);
> +       }
> +
> +}
>
> Added: myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
> URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java?view=auto&rev=511230
> ==============================================================================
> --- myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java (added)
> +++ myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java Fri Feb 23 22:59:15 2007
> @@ -0,0 +1,46 @@
> +package org.apache.myfaces.config.annotation;
> +
> +import javax.annotation.PostConstruct;
> +import javax.annotation.PreDestroy;
> +
> +/**
> + * @author Dennis Byrne
> + */
> +
> +class AnnotatedManagedBean {
> +
> +       private boolean postConstructCalled = false; // using a stub for a mock
> +
> +       private boolean preDestroyCalled = false; // using a stob for a mock here
> +
> +       private Throwable throwable;
> +
> +       public AnnotatedManagedBean(Throwable throwable) {
> +               this.throwable = throwable;
> +       }
> +
> +       @PostConstruct
> +       public void postConstruct() throws Throwable {
> +               postConstructCalled = true;
> +
> +               if (throwable != null)
> +                       throw throwable;
> +       }
> +
> +       @PreDestroy
> +       public void preDestroy() throws Throwable {
> +               preDestroyCalled = true;
> +
> +               if (throwable != null)
> +                       throw throwable;
> +       }
> +
> +       boolean isPostConstructCalled() {
> +               return postConstructCalled;
> +       }
> +
> +       boolean isPreDestroyCalled() {
> +               return preDestroyCalled;
> +       }
> +
> +}
>
> Added: myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
> URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java?view=auto&rev=511230
> ==============================================================================
> --- myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java (added)
> +++ myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java Fri Feb 23 22:59:15 2007
> @@ -0,0 +1,61 @@
> +package org.apache.myfaces.config.annotation;
> +
> +import junit.framework.TestCase;
> +
> +import org.apache.myfaces.config.ManagedBeanBuilder;
> +import org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler;
> +import org.apache.myfaces.config.impl.digester.elements.ManagedBean;
> +
> +/**
> + * @author Dennis Byrne
> + */
> +
> +public class AnnotatedManagedBeanHandlerTestCase extends TestCase {
> +
> +       protected AnnotatedManagedBean managedBean;
> +       protected AnnotatedManagedBeanHandler handler;
> +       protected ManagedBean managedBeanConf;
> +
> +       public void setUp() {
> +               managedBean = new AnnotatedManagedBean(null);
> +               managedBeanConf = new ManagedBean();
> +               handler = new AnnotatedManagedBeanHandler(managedBean, managedBeanConf);
> +       }
> +
> +       public void testShouldNotInvokeForNoneScope() {
> +
> +               managedBeanConf.setScope(ManagedBeanBuilder.NONE);
> +               boolean threwUnchecked = handler.run();
> +
> +               assertFalse(threwUnchecked);
> +               assertFalse(managedBean.isPostConstructCalled());
> +       }
> +
> +       public void testShouldInvokeForRequestScope() {
> +
> +               managedBeanConf.setScope(ManagedBeanBuilder.REQUEST);
> +               boolean threwUnchecked = handler.run();
> +
> +               assertFalse(threwUnchecked);
> +               assertTrue(managedBean.isPostConstructCalled());
> +       }
> +
> +       public void testShouldInvokeForSessionScope() {
> +
> +               managedBeanConf.setScope(ManagedBeanBuilder.SESSION);
> +               boolean threwUnchecked = handler.run();
> +
> +               assertFalse(threwUnchecked);
> +               assertTrue(managedBean.isPostConstructCalled());
> +       }
> +
> +       public void testShouldInvokeForApplicationScope() {
> +
> +               managedBeanConf.setScope(ManagedBeanBuilder.APPLICATION);
> +               boolean threwUnchecked = handler.run();
> +
> +               assertFalse(threwUnchecked);
> +               assertTrue(managedBean.isPostConstructCalled());
> +       }
> +
> +}
>
> Added: myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java?view=auto&rev=511230
> ==============================================================================
> --- myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java (added)
> +++ myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java Fri Feb 23 22:59:15 2007
> @@ -0,0 +1,61 @@
> +package org.apache.myfaces.config.annotation;
> +
> +import junit.framework.TestCase;
> +
> +import org.apache.myfaces.config.ManagedBeanBuilder;
> +import org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler;
> +import org.apache.myfaces.config.impl.digester.elements.ManagedBean;
> +
> +/**
> + * @author Dennis Byrne
> + */
> +
> +public class AnnotatedRuntimeExceptionManagedBeanHandlerTestCase extends TestCase {
> +
> +       protected AnnotatedManagedBean managedBean;
> +       protected AnnotatedManagedBeanHandler handler;
> +       protected ManagedBean managedBeanConf;
> +
> +       public void setUp() {
> +               managedBean = new AnnotatedManagedBean(new RuntimeException());
> +               managedBeanConf = new ManagedBean();
> +               handler = new AnnotatedManagedBeanHandler(managedBean, managedBeanConf);
> +       }
> +
> +       public void testShouldNotInvokeForNoneScope() {
> +
> +               managedBeanConf.setScope(ManagedBeanBuilder.NONE);
> +               boolean threwUnchecked = handler.run();
> +
> +               assertFalse(threwUnchecked);
> +               assertFalse(managedBean.isPostConstructCalled());
> +       }
> +
> +       public void testShouldInvokeForRequestScope() {
> +
> +               managedBeanConf.setScope(ManagedBeanBuilder.REQUEST);
> +               boolean threwUnchecked = handler.run();
> +
> +               assertTrue(threwUnchecked);
> +               assertTrue(managedBean.isPostConstructCalled());
> +       }
> +
> +       public void testShouldInvokeForSessionScope() {
> +
> +               managedBeanConf.setScope(ManagedBeanBuilder.SESSION);
> +               boolean threwUnchecked = handler.run();
> +
> +               assertTrue(threwUnchecked);
> +               assertTrue(managedBean.isPostConstructCalled());
> +       }
> +
> +       public void testShouldInvokeForApplicationScope() {
> +
> +               managedBeanConf.setScope(ManagedBeanBuilder.APPLICATION);
> +               boolean threwUnchecked = handler.run();
> +
> +               assertTrue(threwUnchecked);
> +               assertTrue(managedBean.isPostConstructCalled());
> +       }
> +
> +}
>
>
>


-- 
Mathias

Re: svn commit: r511230 - in /myfaces/core/branches/jsf12/impl/src: main/java/org/apache/myfaces/config/ main/java/org/apache/myfaces/config/annotation/ main/java/org/apache/myfaces/el/ main/java/org/apache/myfaces/el/unified/resolver/ test/java/org/

Posted by Mathias Brökelmann <mb...@googlemail.com>.
sorry - forget it. I have not seen that you have already done that.

2007/2/24, Mathias Brökelmann <mb...@googlemail.com>:
> Hi Dennis,
>
> I have a problem with the handling of ManagedBeans in
> VariableResolverImpl. According to the spec the VariableResolverImpl
> should only delegate to the application elresolver now. The managed
> beans where resolved in a new ManagedBeanResolver. We already have an
> implementation for this so I ask you to implement this into the
> ManagedBeanResolver.
>
> I currently change VariableResolverImpl and ElResolver setup according
> to the spec.
>
> Cheers,
> Mathias
>
> 2007/2/24, dennisbyrne@apache.org <de...@apache.org>:
> > Author: dennisbyrne
> > Date: Fri Feb 23 22:59:15 2007
> > New Revision: 511230
> >
> > URL: http://svn.apache.org/viewvc?view=rev&rev=511230
> > Log:
> > implemented sectoin 5.4.1 as far as @PostConstruct is concerned, @PreDestroy is still left
> > refactored ManagedBeanBuilder and both Resolvers
> >
> > Added:
> >     myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/
> >     myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
> >     myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/
> >     myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
> >     myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
> >     myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
> >     myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> > Modified:
> >     myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
> >     myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
> >     myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
> >
> > Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
> > URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java?view=diff&rev=511230&r1=511229&r2=511230
> > ==============================================================================
> > --- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java (original)
> > +++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java Fri Feb 23 22:59:15 2007
> > @@ -15,23 +15,34 @@
> >   */
> >  package org.apache.myfaces.config;
> >
> > +import java.lang.reflect.Array;
> > +import java.util.ArrayList;
> > +import java.util.HashMap;
> > +import java.util.Iterator;
> > +import java.util.List;
> > +import java.util.Map;
> > +
> >  import javax.el.ELContext;
> > +import javax.el.ELException;
> >  import javax.el.ELResolver;
> >  import javax.el.ExpressionFactory;
> >  import javax.el.ValueExpression;
> > -import org.apache.myfaces.config.element.*;
> > -import org.apache.commons.beanutils.PropertyUtils;
> > -import org.apache.commons.logging.Log;
> > -import org.apache.commons.logging.LogFactory;
> > -
> >  import javax.faces.FacesException;
> >  import javax.faces.application.Application;
> > -import javax.faces.context.FacesContext;
> >  import javax.faces.context.ExternalContext;
> > +import javax.faces.context.FacesContext;
> >  import javax.faces.webapp.UIComponentTag;
> > -import java.util.*;
> > -import java.lang.reflect.Array;
> > -import javax.el.ELException;
> > +
> > +import org.apache.commons.beanutils.PropertyUtils;
> > +import org.apache.commons.logging.Log;
> > +import org.apache.commons.logging.LogFactory;
> > +import org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler;
> > +import org.apache.myfaces.config.element.ListEntries;
> > +import org.apache.myfaces.config.element.ListEntry;
> > +import org.apache.myfaces.config.element.ManagedBean;
> > +import org.apache.myfaces.config.element.ManagedProperty;
> > +import org.apache.myfaces.config.element.MapEntries;
> > +import org.apache.myfaces.config.element.MapEntry;
> >  import org.apache.myfaces.shared_impl.util.ClassUtils;
> >
> >
> > @@ -45,12 +56,22 @@
> >  {
> >      private static Log log = LogFactory.getLog(ManagedBeanBuilder.class);
> >      private RuntimeConfig _runtimeConfig;
> > -
> > +    public final static String REQUEST = "request";
> > +    public final static String APPLICATION = "application";
> > +    public final static String SESSION = "session";
> > +    public final static String NONE = "none";
> >
> >      public Object buildManagedBean(FacesContext facesContext, ManagedBean beanConfiguration) throws FacesException
> >      {
> > -        Object bean = ClassUtils.newInstance(beanConfiguration.getManagedBeanClassName());
> > +        final Object bean = ClassUtils.newInstance(beanConfiguration.getManagedBeanClassName());
> >
> > +        final AnnotatedManagedBeanHandler handler = new AnnotatedManagedBeanHandler(bean, beanConfiguration);
> > +
> > +        final boolean threwUnchecked = handler.run();
> > +
> > +        if(threwUnchecked)
> > +               return null;
> > +
> >          switch (beanConfiguration.getInitMode())
> >          {
> >              case ManagedBean.INIT_MODE_PROPERTIES:
> > @@ -240,18 +261,18 @@
> >              String valueScope = getScope(facesContext, expression);
> >
> >              // if the target scope is 'none' value scope has to be 'none', too
> > -            if (targetScope == null || targetScope.equalsIgnoreCase("none")) {
> > -                if (valueScope != null && !(valueScope.equalsIgnoreCase("none"))) {
> > +            if (targetScope == null || targetScope.equalsIgnoreCase(NONE)) {
> > +                if (valueScope != null && !(valueScope.equalsIgnoreCase(NONE))) {
> >                      return false;
> >                  }
> >                  return true;
> >              }
> >
> >              // 'application' scope can reference 'application' and 'none'
> > -            if (targetScope.equalsIgnoreCase("application")) {
> > +            if (targetScope.equalsIgnoreCase(APPLICATION)) {
> >                  if (valueScope != null) {
> > -                    if (valueScope.equalsIgnoreCase("request") ||
> > -                        valueScope.equalsIgnoreCase("session")) {
> > +                    if (valueScope.equalsIgnoreCase(REQUEST) ||
> > +                        valueScope.equalsIgnoreCase(SESSION)) {
> >                          return false;
> >                      }
> >                  }
> > @@ -259,9 +280,9 @@
> >              }
> >
> >              // 'session' scope can reference 'session', 'application', and 'none' but not 'request'
> > -            if (targetScope.equalsIgnoreCase("session")) {
> > +            if (targetScope.equalsIgnoreCase(SESSION)) {
> >                  if (valueScope != null) {
> > -                    if (valueScope.equalsIgnoreCase("request")) {
> > +                    if (valueScope.equalsIgnoreCase(REQUEST)) {
> >                          return false;
> >                      }
> >                  }
> > @@ -269,7 +290,7 @@
> >              }
> >
> >              // 'request' scope can reference any value scope
> > -            if (targetScope.equalsIgnoreCase("request")) {
> > +            if (targetScope.equalsIgnoreCase(REQUEST)) {
> >                  return true;
> >              }
> >          }
> > @@ -282,60 +303,59 @@
> >          String beanName = getFirstSegment(expression);
> >          ExternalContext externalContext = facesContext.getExternalContext();
> >
> > -        // check scope objects
> > +
> > +               // check scope objects
> >          if (beanName.equalsIgnoreCase("requestScope")) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> > -        if (beanName.equalsIgnoreCase("sessionScope")) {
> > -            return "session";
> > +               if (beanName.equalsIgnoreCase("sessionScope")) {
> > +            return SESSION;
> >          }
> > -        if (beanName.equalsIgnoreCase("applicationScope")) {
> > -            return "application";
> > +               if (beanName.equalsIgnoreCase("applicationScope")) {
> > +            return APPLICATION;
> >          }
> >
> >             // check implicit objects
> >          if (beanName.equalsIgnoreCase("cookie")) {
> > -           return "request";
> > +               return REQUEST;
> >          }
> >          if (beanName.equalsIgnoreCase("facesContext")) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> >
> >          if (beanName.equalsIgnoreCase("header")) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> >          if (beanName.equalsIgnoreCase("headerValues")) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> >
> >          if (beanName.equalsIgnoreCase("initParam")) {
> > -           return "application";
> > +               return APPLICATION;
> >          }
> >          if (beanName.equalsIgnoreCase("param")) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> >          if (beanName.equalsIgnoreCase("paramValues")) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> >          if (beanName.equalsIgnoreCase("view")) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> >
> > -
> >          // not found so far - check all scopes
> >          if (externalContext.getRequestMap().get(beanName) != null) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> >          if (externalContext.getSessionMap().get(beanName) != null) {
> > -            return "session";
> > +            return SESSION;
> >          }
> >          if (externalContext.getApplicationMap().get(beanName) != null) {
> > -            return "application";
> > +            return APPLICATION;
> >          }
> >
> >          //not found - check mangaged bean config
> >
> > -
> >          ManagedBean mbc = getRuntimeConfig(facesContext).getManagedBean(beanName);
> >
> >          if (mbc != null) {
> > @@ -344,9 +364,6 @@
> >
> >          return null;
> >      }
> > -
> > -
> > -
> >
> >      /**
> >       * Extract the first expression segment, that is the substring up to the first '.' or '['
> >
> > Added: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
> > URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java?view=auto&rev=511230
> > ==============================================================================
> > --- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java (added)
> > +++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java Fri Feb 23 22:59:15 2007
> > @@ -0,0 +1,136 @@
> > +package org.apache.myfaces.config.annotation;
> > +
> > +import java.lang.annotation.Annotation;
> > +import java.lang.reflect.InvocationTargetException;
> > +import java.lang.reflect.Method;
> > +
> > +import javax.faces.FacesException;
> > +
> > +import org.apache.commons.logging.Log;
> > +import org.apache.commons.logging.LogFactory;
> > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > +import org.apache.myfaces.config.element.ManagedBean;
> > +
> > +/**
> > + * @see JSF spec 1.2, section 5.4
> > + * @warn Do not import javax.annotation.* in this class
> > + * @author Dennis Byrne
> > + */
> > +
> > +public class AnnotatedManagedBeanHandler {
> > +
> > +       private static Log log = LogFactory.getLog(AnnotatedManagedBeanHandler.class);
> > +
> > +       private Object managedBean;
> > +
> > +       private ManagedBean beanConfiguration;
> > +
> > +       public AnnotatedManagedBeanHandler(Object managedBean, ManagedBean beanConfiguration) {
> > +
> > +               if (managedBean == null) {
> > +                       throw new NullPointerException("Object managedBean");
> > +               }
> > +
> > +               if (beanConfiguration == null) {
> > +                       throw new NullPointerException("ManagedBean beanConfiguration");
> > +               }
> > +
> > +               this.managedBean = managedBean;
> > +               this.beanConfiguration = beanConfiguration;
> > +
> > +       }
> > +
> > +       public boolean run() {
> > +
> > +               boolean threwUnchecked = false;
> > +
> > +               if (ManagedBeanBuilder.NONE.equals(beanConfiguration.getManagedBeanScope())) {
> > +                       ; // this only applies to a, s, and r scope beans
> > +               } else {
> > +                       threwUnchecked = run(managedBean.getClass().getMethods());
> > +               }
> > +
> > +               return threwUnchecked;
> > +       }
> > +
> > +       private boolean run(Method[] methods) {
> > +
> > +               boolean threwUnchecked = false;
> > +
> > +               for (Method method : methods)
> > +                       if (run(method)) {
> > +                               threwUnchecked = true;
> > +                               break;
> > +                       }// break if we invoke method ? or invoke all w/ annoation?
> > +
> > +               return threwUnchecked;
> > +       }
> > +
> > +       private boolean run(Method method) {
> > +
> > +               Annotation[] annotations = method.getAnnotations();
> > +               boolean threwUnchecked = false;
> > +
> > +               for (Annotation annotation : annotations) {
> > +                       if (isPostConstruct(annotation)) {
> > +                               if (run(annotation, method)) {
> > +                                       threwUnchecked = true;
> > +                                       break; // spec says not to call anymore methods on this
> > +                               }
> > +                       }
> > +               }
> > +
> > +               return threwUnchecked;
> > +       }
> > +
> > +       private boolean run(Annotation annotation, Method method) {
> > +
> > +               boolean threwUnchecked = true; // start w/ pessimism
> > +
> > +               try {
> > +
> > +                       method.invoke(managedBean, null);
> > +
> > +                       threwUnchecked = false;
> > +
> > +               } catch (InvocationTargetException ite) { // catch most specific first
> > +
> > +                       final Throwable cause = ite.getCause();
> > +
> > +                       handleException(method, cause == null ? ite : cause);
> > +
> > +               } catch (Exception e) {
> > +
> > +                       handleException(method, e);
> > +               }
> > +
> > +               return threwUnchecked;
> > +       }
> > +
> > +       private void handleException(Method method, Throwable e) {
> > +               final String genericLoggingMessage = getGenericLoggingMessage(method, e);
> > +
> > +               if (e instanceof RuntimeException) // why did they make RE extend E ?
> > +               {
> > +                       log.error(genericLoggingMessage + " MyFaces cannot " + " put the bean in "
> > +                                       + beanConfiguration.getManagedBeanScope() + " scope " + " ... execution continues. ");
> > +               } else {
> > +                       throw new FacesException(genericLoggingMessage + " The spec is ambivalent on checked exceptions.");
> > +               }
> > +       }
> > +
> > +       private String getGenericLoggingMessage(Method method, Throwable e) {
> > +               return "When invoking " + method.getName() + " on a managed bean '" + beanConfiguration.getManagedBeanName()
> > +                               + "'," + " an exception " + e.getClass() + "{" + e.getMessage() + "} was thrown. "
> > +                               + " See section 5.4.1 of the JSF specification.";
> > +       }
> > +
> > +       private boolean isPostConstruct(Annotation annotation) {
> > +
> > +               final Class<? extends Annotation> annotationType = annotation.annotationType();
> > +               final String name = annotationType.getName();
> > +               // use the literal String because we want to avoid ClassDefNotFoundError
> > +               return "javax.annotation.PostConstruct".equals(name);
> > +
> > +       }
> > +}
> >
> > Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
> > URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java?view=diff&rev=511230&r1=511229&r2=511230
> > ==============================================================================
> > --- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java (original)
> > +++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java Fri Feb 23 22:59:15 2007
> > @@ -29,6 +29,7 @@
> >  import org.apache.myfaces.config.ManagedBeanBuilder;
> >  import org.apache.myfaces.config.RuntimeConfig;
> >  import org.apache.myfaces.config.element.ManagedBean;
> > +import org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.Scope;
> >
> >  import org.apache.commons.logging.Log;
> >  import org.apache.commons.logging.LogFactory;
> > @@ -313,25 +314,7 @@
> >                  beansUnderConstruction.remove(managedBeanName);
> >              }
> >
> > -            // put in scope
> > -            String scopeKey = mbc.getManagedBeanScope();
> > -
> > -            // find the scope handler object
> > -            Scope scope = (Scope) _scopes.get(scopeKey);
> > -            if (scope == null)
> > -            {
> > -                log.error("Managed bean '" + name + "' has illegal scope: "
> > -                    + scopeKey);
> > -            }
> > -            else
> > -            {
> > -                scope.put(externalContext, name, obj);
> > -            }
> > -
> > -            if(obj==null && log.isDebugEnabled())
> > -            {
> > -                log.debug("Variable '" + name + "' could not be resolved.");
> > -            }
> > +            putInScope(mbc, externalContext, obj);
> >
> >              return obj;
> >          }
> > @@ -344,6 +327,28 @@
> >          return null;
> >      }
> >
> > +       private void putInScope(ManagedBean managedBean, ExternalContext extContext, Object obj) {
> > +
> > +               final String managedBeanName = managedBean.getManagedBeanName();
> > +
> > +               if (obj == null) {
> > +                       if (log.isDebugEnabled())
> > +                               log.debug("Variable '" + managedBeanName + "' could not be resolved.");
> > +               } else {
> > +
> > +                       String scopeKey = managedBean.getManagedBeanScope();
> > +
> > +                       // find the scope handler object
> > +                       Scope scope = (Scope) _scopes.get(scopeKey);
> > +                       if (scope == null) {
> > +                               log.error("Managed bean '" + managedBeanName + "' has illegal scope: " + scopeKey);
> > +                       } else {
> > +                               scope.put(extContext, managedBeanName, obj);
> > +                       }
> > +               }
> > +
> > +       }
> > +
> >      protected RuntimeConfig getRuntimeConfig(FacesContext facesContext)
> >      {
> >          if (_runtimeConfig == null)
> >
> > Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
> > URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java?view=diff&rev=511230&r1=511229&r2=511230
> > ==============================================================================
> > --- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java (original)
> > +++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java Fri Feb 23 22:59:15 2007
> > @@ -192,22 +192,30 @@
> >              beansUnderConstruction.remove(managedBeanName);
> >          }
> >
> > -        // put in scope
> > -        String scopeKey = managedBean.getManagedBeanScope();
> > +       putInScope(managedBean, extContext, obj);
> > +    }
> > +
> > +       private void putInScope(ManagedBean managedBean, ExternalContext extContext, Object obj) {
> >
> > -        // find the scope handler object
> > -        Scope scope = (Scope) _scopes.get(scopeKey);
> > -        if (scope == null) {
> > -            log.error("Managed bean '" + managedBeanName + "' has illegal scope: "
> > -                + scopeKey);
> > -        } else {
> > -            scope.put(extContext, managedBeanName, obj);
> > -        }
> > +               final String managedBeanName = managedBean.getManagedBeanName();
> > +
> > +               if (obj == null) {
> > +                       if (log.isDebugEnabled())
> > +                               log.debug("Variable '" + managedBeanName + "' could not be resolved.");
> > +               } else {
> >
> > -        if(obj==null && log.isDebugEnabled()) {
> > -            log.debug("Variable '" + managedBeanName + "' could not be resolved.");
> > -        }
> > -    }
> > +                       String scopeKey = managedBean.getManagedBeanScope();
> > +
> > +                       // find the scope handler object
> > +                       Scope scope = (Scope) _scopes.get(scopeKey);
> > +                       if (scope == null) {
> > +                               log.error("Managed bean '" + managedBeanName + "' has illegal scope: " + scopeKey);
> > +                       } else {
> > +                               scope.put(extContext, managedBeanName, obj);
> > +                       }
> > +               }
> > +
> > +       }
> >
> >      // get the FacesContext from the ELContext
> >      private FacesContext facesContext(ELContext context) {
> >
> > Added: myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
> > URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java?view=auto&rev=511230
> > ==============================================================================
> > --- myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java (added)
> > +++ myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java Fri Feb 23 22:59:15 2007
> > @@ -0,0 +1,88 @@
> > +package org.apache.myfaces.config.annotation;
> > +
> > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > +import org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler;
> > +import org.apache.myfaces.config.impl.digester.elements.ManagedBean;
> > +
> > +import junit.framework.TestCase;
> > +
> > +/**
> > + * @author Dennis Byrne
> > + */
> > +
> > +public class AnnotatedExceptionManagedBeanHandlerTestCase extends TestCase {
> > +
> > +       protected AnnotatedManagedBean managedBean;
> > +
> > +       protected AnnotatedManagedBeanHandler handler;
> > +
> > +       protected ManagedBean managedBeanConf;
> > +
> > +       public void setUp() {
> > +               managedBean = new AnnotatedManagedBean(new Exception());
> > +               managedBeanConf = new ManagedBean();
> > +               handler = new AnnotatedManagedBeanHandler(managedBean, managedBeanConf);
> > +       }
> > +
> > +       public void testShouldNotBlowUpForNoneScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.NONE);
> > +
> > +               boolean exceptionThrown = false;
> > +
> > +               try {
> > +                       handler.run();
> > +               } catch (Exception e) {
> > +                       exceptionThrown = true;
> > +               }
> > +
> > +               assertFalse(managedBean.isPostConstructCalled());
> > +               assertFalse(exceptionThrown);
> > +       }
> > +
> > +       public void testShouldBlowUpForRequestScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.REQUEST);
> > +
> > +               boolean exceptionThrown = false;
> > +
> > +               try {
> > +                       handler.run();
> > +               } catch (Exception e) {
> > +                       exceptionThrown = true;
> > +               }
> > +
> > +               assertTrue(exceptionThrown);
> > +       }
> > +
> > +       public void testShouldBlowUpForSessionScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.SESSION);
> > +
> > +               boolean exceptionThrown = false;
> > +
> > +               try {
> > +                       handler.run();
> > +               } catch (Exception e) {
> > +                       exceptionThrown = true;
> > +               }
> > +
> > +               assertTrue(exceptionThrown);
> > +       }
> > +
> > +       public void testShouldBlowUpForApplicationScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.APPLICATION);
> > +
> > +               boolean exceptionThrown = false;
> > +
> > +               try {
> > +                       handler.run();
> > +               } catch (Exception e) {
> > +                       exceptionThrown = true;
> > +               }
> > +
> > +               assertTrue(exceptionThrown);
> > +       }
> > +
> > +}
> >
> > Added: myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
> > URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java?view=auto&rev=511230
> > ==============================================================================
> > --- myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java (added)
> > +++ myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java Fri Feb 23 22:59:15 2007
> > @@ -0,0 +1,46 @@
> > +package org.apache.myfaces.config.annotation;
> > +
> > +import javax.annotation.PostConstruct;
> > +import javax.annotation.PreDestroy;
> > +
> > +/**
> > + * @author Dennis Byrne
> > + */
> > +
> > +class AnnotatedManagedBean {
> > +
> > +       private boolean postConstructCalled = false; // using a stub for a mock
> > +
> > +       private boolean preDestroyCalled = false; // using a stob for a mock here
> > +
> > +       private Throwable throwable;
> > +
> > +       public AnnotatedManagedBean(Throwable throwable) {
> > +               this.throwable = throwable;
> > +       }
> > +
> > +       @PostConstruct
> > +       public void postConstruct() throws Throwable {
> > +               postConstructCalled = true;
> > +
> > +               if (throwable != null)
> > +                       throw throwable;
> > +       }
> > +
> > +       @PreDestroy
> > +       public void preDestroy() throws Throwable {
> > +               preDestroyCalled = true;
> > +
> > +               if (throwable != null)
> > +                       throw throwable;
> > +       }
> > +
> > +       boolean isPostConstructCalled() {
> > +               return postConstructCalled;
> > +       }
> > +
> > +       boolean isPreDestroyCalled() {
> > +               return preDestroyCalled;
> > +       }
> > +
> > +}
> >
> > Added: myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
> > URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java?view=auto&rev=511230
> > ==============================================================================
> > --- myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java (added)
> > +++ myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java Fri Feb 23 22:59:15 2007
> > @@ -0,0 +1,61 @@
> > +package org.apache.myfaces.config.annotation;
> > +
> > +import junit.framework.TestCase;
> > +
> > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > +import org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler;
> > +import org.apache.myfaces.config.impl.digester.elements.ManagedBean;
> > +
> > +/**
> > + * @author Dennis Byrne
> > + */
> > +
> > +public class AnnotatedManagedBeanHandlerTestCase extends TestCase {
> > +
> > +       protected AnnotatedManagedBean managedBean;
> > +       protected AnnotatedManagedBeanHandler handler;
> > +       protected ManagedBean managedBeanConf;
> > +
> > +       public void setUp() {
> > +               managedBean = new AnnotatedManagedBean(null);
> > +               managedBeanConf = new ManagedBean();
> > +               handler = new AnnotatedManagedBeanHandler(managedBean, managedBeanConf);
> > +       }
> > +
> > +       public void testShouldNotInvokeForNoneScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.NONE);
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertFalse(threwUnchecked);
> > +               assertFalse(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +       public void testShouldInvokeForRequestScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.REQUEST);
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertFalse(threwUnchecked);
> > +               assertTrue(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +       public void testShouldInvokeForSessionScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.SESSION);
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertFalse(threwUnchecked);
> > +               assertTrue(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +       public void testShouldInvokeForApplicationScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.APPLICATION);
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertFalse(threwUnchecked);
> > +               assertTrue(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +}
> >
> > Added: myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> > URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java?view=auto&rev=511230
> > ==============================================================================
> > --- myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java (added)
> > +++ myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java Fri Feb 23 22:59:15 2007
> > @@ -0,0 +1,61 @@
> > +package org.apache.myfaces.config.annotation;
> > +
> > +import junit.framework.TestCase;
> > +
> > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > +import org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler;
> > +import org.apache.myfaces.config.impl.digester.elements.ManagedBean;
> > +
> > +/**
> > + * @author Dennis Byrne
> > + */
> > +
> > +public class AnnotatedRuntimeExceptionManagedBeanHandlerTestCase extends TestCase {
> > +
> > +       protected AnnotatedManagedBean managedBean;
> > +       protected AnnotatedManagedBeanHandler handler;
> > +       protected ManagedBean managedBeanConf;
> > +
> > +       public void setUp() {
> > +               managedBean = new AnnotatedManagedBean(new RuntimeException());
> > +               managedBeanConf = new ManagedBean();
> > +               handler = new AnnotatedManagedBeanHandler(managedBean, managedBeanConf);
> > +       }
> > +
> > +       public void testShouldNotInvokeForNoneScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.NONE);
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertFalse(threwUnchecked);
> > +               assertFalse(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +       public void testShouldInvokeForRequestScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.REQUEST);
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertTrue(threwUnchecked);
> > +               assertTrue(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +       public void testShouldInvokeForSessionScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.SESSION);
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertTrue(threwUnchecked);
> > +               assertTrue(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +       public void testShouldInvokeForApplicationScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.APPLICATION);
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertTrue(threwUnchecked);
> > +               assertTrue(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +}
> >
> >
> >
>
>
> --
> Mathias
>


-- 
Mathias

Re: svn commit: r511230 - in /myfaces/core/branches/jsf12/impl/src: main/java/org/apache/myfaces/config/ main/java/org/apache/myfaces/config/annotation/ main/java/org/apache/myfaces/el/ main/java/org/apache/myfaces/el/unified/resolver/ test/java/org/

Posted by Dennis Byrne <de...@dbyrne.net>.
No problem.

Dennis Byrne

On 2/24/07, Mathias Brökelmann <mb...@googlemail.com> wrote:
>
> sorry there is no problem with your implementation of
> ManagedBeanResolver. I was just a little bit confused by your changes
> to VariableResolverImpl. Because the implementation of this class must
> be stripped down for 1.2 and does not handle managed beans any more.
>
> 2007/2/24, Dennis Byrne <de...@dbyrne.net>:
> > Hi Mathias,
> >
> > Can you tell me which section(s)?
> >
> > ManagedBeanResolver calls
> > ManagedBeanBuilder.buildManagedBean().  In
> > ManagedBeanBuilder.buildManagedBean uses
> > AnnotatedManagedBeanHandler, insuring that @PostContruct is
> respected.  You
> > are saying the problem is that this behavior is in *both*
> > ManagedBeanResolver and VariableResolverImpl?
> > >
> > > Dennis Byrne
> > >
> > >
> > >
> > > On 2/24/07, Mathias Brökelmann <mb...@googlemail.com> wrote:
> > > > Hi Dennis,
> > > >
> > > > I have a problem with the handling of ManagedBeans in
> > > > VariableResolverImpl. According to the spec the VariableResolverImpl
> > > > should only delegate to the application elresolver now. The managed
> > > > beans where resolved in a new ManagedBeanResolver. We already have
> an
> > > > implementation for this so I ask you to implement this into the
> > > > ManagedBeanResolver.
> > > >
> > > > I currently change VariableResolverImpl and ElResolver setup
> according
> > > > to the spec.
> > > >
> > > > Cheers,
> > > > Mathias
> > > >
> > > > 2007/2/24, dennisbyrne@apache.org <de...@apache.org>:
> > > > > Author: dennisbyrne
> > > > > Date: Fri Feb 23 22:59:15 2007
> > > > > New Revision: 511230
> > > > >
> > > > > URL: http://svn.apache.org/viewvc?view=rev&rev=511230
> > > > > Log:
> > > > > implemented sectoin 5.4.1 as far as @PostConstruct is concerned,
> > @PreDestroy is still left
> > > > > refactored ManagedBeanBuilder and both Resolvers
> > > > >
> > > > > Added:
> > > > >
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/
> > > > >
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
> > > > >
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/
> > > > >
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
> > > > >
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
> > > > >
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
> > > > >
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> > > > > Modified:
> > > > >
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
> > > > >
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
> > > > >
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
> > > > >
> > > > > Modified:
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
> > > > > URL:
> >
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java?view=diff&rev=511230&r1=511229&r2=511230
> > > > >
> >
> ==============================================================================
> > > > > ---
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
> > (original)
> > > > > +++
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
> > Fri Feb 23 22:59:15 2007
> > > > > @@ -15,23 +15,34 @@
> > > > >   */
> > > > >  package org.apache.myfaces.config;
> > > > >
> > > > > +import java.lang.reflect.Array;
> > > > > +import java.util.ArrayList;
> > > > > +import java.util.HashMap;
> > > > > +import java.util.Iterator;
> > > > > +import java.util.List;
> > > > > +import java.util.Map;
> > > > > +
> > > > >  import javax.el.ELContext;
> > > > > +import javax.el.ELException;
> > > > >  import javax.el.ELResolver;
> > > > >  import javax.el.ExpressionFactory ;
> > > > >  import javax.el.ValueExpression;
> > > > > -import org.apache.myfaces.config.element.*;
> > > > > -import org.apache.commons.beanutils.PropertyUtils;
> > > > > -import org.apache.commons.logging.Log;
> > > > > -import org.apache.commons.logging.LogFactory;
> > > > > -
> > > > >  import javax.faces.FacesException;
> > > > >  import javax.faces.application.Application;
> > > > > -import javax.faces.context.FacesContext;
> > > > >  import javax.faces.context.ExternalContext ;
> > > > > +import javax.faces.context.FacesContext;
> > > > >  import javax.faces.webapp.UIComponentTag;
> > > > > -import java.util.*;
> > > > > -import java.lang.reflect.Array;
> > > > > -import javax.el.ELException;
> > > > > +
> > > > > +import org.apache.commons.beanutils.PropertyUtils;
> > > > > +import org.apache.commons.logging.Log;
> > > > > +import org.apache.commons.logging.LogFactory;
> > > > > +import
> > org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler
> > ;
> > > > > +import
> > org.apache.myfaces.config.element.ListEntries;
> > > > > +import org.apache.myfaces.config.element.ListEntry;
> > > > > +import
> > org.apache.myfaces.config.element.ManagedBean;
> > > > > +import
> > org.apache.myfaces.config.element.ManagedProperty ;
> > > > > +import org.apache.myfaces.config.element.MapEntries;
> > > > > +import org.apache.myfaces.config.element.MapEntry;
> > > > >  import
> > org.apache.myfaces.shared_impl.util.ClassUtils;
> > > > >
> > > > >
> > > > > @@ -45,12 +56,22 @@
> > > > >  {
> > > > >      private static Log log =
> > LogFactory.getLog(ManagedBeanBuilder.class);
> > > > >      private RuntimeConfig _runtimeConfig;
> > > > > -
> > > > > +    public final static String REQUEST = "request";
> > > > > +    public final static String APPLICATION = "application";
> > > > > +    public final static String SESSION = "session";
> > > > > +    public final static String NONE = "none";
> > > > >
> > > > >      public Object buildManagedBean(FacesContext facesContext,
> > ManagedBean beanConfiguration) throws FacesException
> > > > >      {
> > > > > -        Object bean =
> > ClassUtils.newInstance(beanConfiguration.getManagedBeanClassName
> > ());
> > > > > +        final Object bean =
> > ClassUtils.newInstance(beanConfiguration.getManagedBeanClassName());
> > > > >
> > > > > +        final AnnotatedManagedBeanHandler handler = new
> > AnnotatedManagedBeanHandler(bean, beanConfiguration);
> > > > > +
> > > > > +        final boolean threwUnchecked = handler.run();
> > > > > +
> > > > > +        if(threwUnchecked)
> > > > > +               return null;
> > > > > +
> > > > >          switch (beanConfiguration.getInitMode ())
> > > > >          {
> > > > >              case ManagedBean.INIT_MODE_PROPERTIES:
> > > > > @@ -240,18 +261,18 @@
> > > > >              String valueScope = getScope(facesContext,
> expression);
> > > > >
> > > > >              // if the target scope is 'none' value scope has to
> be
> > 'none', too
> > > > > -            if (targetScope == null ||
> > targetScope.equalsIgnoreCase("none")) {
> > > > > -                if (valueScope != null &&
> > !(valueScope.equalsIgnoreCase("none"))) {
> > > > > +            if (targetScope == null ||
> > targetScope.equalsIgnoreCase(NONE)) {
> > > > > +                if (valueScope != null &&
> > !(valueScope.equalsIgnoreCase(NONE))) {
> > > > >                      return false;
> > > > >                  }
> > > > >                  return true;
> > > > >              }
> > > > >
> > > > >              // 'application' scope can reference 'application'
> and
> > 'none'
> > > > > -            if (targetScope.equalsIgnoreCase("application")) {
> > > > > +            if (targetScope.equalsIgnoreCase(APPLICATION)) {
> > > > >                  if (valueScope != null) {
> > > > > -                    if (valueScope.equalsIgnoreCase("request") ||
> > > > > -                         valueScope.equalsIgnoreCase("session"))
> {
> > > > > +                    if (valueScope.equalsIgnoreCase(REQUEST) ||
> > > > > +                        valueScope.equalsIgnoreCase(SESSION)) {
> > > > >                          return false;
> > > > >                      }
> > > > >                  }
> > > > > @@ -259,9 +280,9 @@
> > > > >              }
> > > > >
> > > > >              // 'session' scope can reference 'session',
> > 'application', and 'none' but not 'request'
> > > > > -            if (targetScope.equalsIgnoreCase("session")) {
> > > > > +            if (targetScope.equalsIgnoreCase(SESSION)) {
> > > > >                  if (valueScope != null) {
> > > > > -                    if ( valueScope.equalsIgnoreCase("request"))
> {
> > > > > +                    if (valueScope.equalsIgnoreCase(REQUEST)) {
> > > > >                          return false;
> > > > >                      }
> > > > >                  }
> > > > > @@ -269,7 +290,7 @@
> > > > >              }
> > > > >
> > > > >              // 'request' scope can reference any value scope
> > > > > -            if (targetScope.equalsIgnoreCase("request")) {
> > > > > +            if ( targetScope.equalsIgnoreCase(REQUEST)) {
> > > > >                  return true;
> > > > >              }
> > > > >          }
> > > > > @@ -282,60 +303,59 @@
> > > > >          String beanName = getFirstSegment(expression);
> > > > >          ExternalContext externalContext =
> > facesContext.getExternalContext();
> > > > >
> > > > > -        // check scope objects
> > > > > +
> > > > > +               // check scope objects
> > > > >          if (beanName.equalsIgnoreCase("requestScope")) {
> > > > > -            return "request";
> > > > > +            return REQUEST;
> > > > >          }
> > > > > -        if (beanName.equalsIgnoreCase("sessionScope")) {
> > > > > -            return "session";
> > > > > +               if (beanName.equalsIgnoreCase ("sessionScope")) {
> > > > > +            return SESSION;
> > > > >          }
> > > > > -        if (beanName.equalsIgnoreCase("applicationScope")) {
> > > > > -            return "application";
> > > > > +               if (beanName.equalsIgnoreCase("applicationScope"))
> {
> > > > > +            return APPLICATION;
> > > > >          }
> > > > >
> > > > >             // check implicit objects
> > > > >          if (beanName.equalsIgnoreCase ("cookie")) {
> > > > > -           return "request";
> > > > > +               return REQUEST;
> > > > >          }
> > > > >          if (beanName.equalsIgnoreCase("facesContext")) {
> > > > > -            return "request";
> > > > > +            return REQUEST;
> > > > >          }
> > > > >
> > > > >          if (beanName.equalsIgnoreCase("header")) {
> > > > > -            return "request";
> > > > > +            return REQUEST;
> > > > >          }
> > > > >          if (beanName.equalsIgnoreCase("headerValues")) {
> > > > > -            return "request";
> > > > > +            return REQUEST;
> > > > >          }
> > > > >
> > > > >          if ( beanName.equalsIgnoreCase("initParam")) {
> > > > > -           return "application";
> > > > > +               return APPLICATION;
> > > > >          }
> > > > >          if (beanName.equalsIgnoreCase("param")) {
> > > > > -            return "request";
> > > > > +            return REQUEST;
> > > > >          }
> > > > >          if (beanName.equalsIgnoreCase("paramValues")) {
> > > > > -            return "request";
> > > > > +            return REQUEST;
> > > > >          }
> > > > >          if (beanName.equalsIgnoreCase("view")) {
> > > > > -            return "request";
> > > > > +            return REQUEST;
> > > > >          }
> > > > >
> > > > > -
> > > > >          // not found so far - check all scopes
> > > > >          if (externalContext.getRequestMap().get(beanName) !=
> null) {
> > > > > -            return "request";
> > > > > +            return REQUEST;
> > > > >          }
> > > > >          if (externalContext.getSessionMap().get(beanName) !=
> null) {
> > > > > -            return "session";
> > > > > +            return SESSION;
> > > > >          }
> > > > >          if (
> > externalContext.getApplicationMap().get(beanName) != null)
> > {
> > > > > -            return "application";
> > > > > +            return APPLICATION;
> > > > >          }
> > > > >
> > > > >          //not found - check mangaged bean config
> > > > >
> > > > > -
> > > > >          ManagedBean mbc =
> > getRuntimeConfig(facesContext).getManagedBean(beanName);
> > > > >
> > > > >          if (mbc != null) {
> > > > > @@ -344,9 +364,6 @@
> > > > >
> > > > >          return null;
> > > > >      }
> > > > > -
> > > > > -
> > > > > -
> > > > >
> > > > >      /**
> > > > >       * Extract the first expression segment, that is the
> substring up
> > to the first '.' or '['
> > > > >
> > > > > Added:
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
> > > > > URL:
> >
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java?view=auto&rev=511230
> > > > >
> >
> ==============================================================================
> > > > > ---
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
> > (added)
> > > > > +++
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
> > Fri Feb 23 22:59:15 2007
> > > > > @@ -0,0 +1,136 @@
> > > > > +package org.apache.myfaces.config.annotation ;
> > > > > +
> > > > > +import java.lang.annotation.Annotation;
> > > > > +import java.lang.reflect.InvocationTargetException;
> > > > > +import java.lang.reflect.Method;
> > > > > +
> > > > > +import javax.faces.FacesException;
> > > > > +
> > > > > +import org.apache.commons.logging.Log;
> > > > > +import org.apache.commons.logging.LogFactory;
> > > > > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > > > > +import org.apache.myfaces.config.element.ManagedBean
> > ;
> > > > > +
> > > > > +/**
> > > > > + * @see JSF spec 1.2, section 5.4
> > > > > + * @warn Do not import javax.annotation.* in this class
> > > > > + * @author Dennis Byrne
> > > > > + */
> > > > > +
> > > > > +public class AnnotatedManagedBeanHandler {
> > > > > +
> > > > > +       private static Log log =
> > LogFactory.getLog(AnnotatedManagedBeanHandler.class);
> > > > > +
> > > > > +       private Object managedBean;
> > > > > +
> > > > > +       private ManagedBean beanConfiguration;
> > > > > +
> > > > > +       public AnnotatedManagedBeanHandler(Object
> > managedBean, ManagedBean beanConfiguration) {
> > > > > +
> > > > > +               if (managedBean == null) {
> > > > > +                       throw new NullPointerException("Object
> > managedBean");
> > > > > +               }
> > > > > +
> > > > > +               if (beanConfiguration == null) {
> > > > > +                       throw new
> > NullPointerException("ManagedBean beanConfiguration");
> > > > > +               }
> > > > > +
> > > > > +               this.managedBean = managedBean;
> > > > > +               this.beanConfiguration = beanConfiguration;
> > > > > +
> > > > > +       }
> > > > > +
> > > > > +       public boolean run() {
> > > > > +
> > > > > +               boolean threwUnchecked = false;
> > > > > +
> > > > > +               if
> > (ManagedBeanBuilder.NONE.equals(beanConfiguration.getManagedBeanScope
> ()))
> > {
> > > > > +                       ; // this only applies to a, s, and r
> scope
> > beans
> > > > > +               } else {
> > > > > +                       threwUnchecked =
> > run(managedBean.getClass().getMethods());
> > > > > +               }
> > > > > +
> > > > > +               return threwUnchecked;
> > > > > +       }
> > > > > +
> > > > > +       private boolean run(Method[] methods) {
> > > > > +
> > > > > +               boolean threwUnchecked = false;
> > > > > +
> > > > > +               for (Method method : methods)
> > > > > +                       if (run(method)) {
> > > > > +                               threwUnchecked = true;
> > > > > +                               break;
> > > > > +                       }// break if we invoke method ? or invoke
> all
> > w/ annoation?
> > > > > +
> > > > > +               return threwUnchecked;
> > > > > +       }
> > > > > +
> > > > > +       private boolean run(Method method) {
> > > > > +
> > > > > +               Annotation[] annotations = method.getAnnotations
> ();
> > > > > +               boolean threwUnchecked = false;
> > > > > +
> > > > > +               for (Annotation annotation : annotations) {
> > > > > +                       if (isPostConstruct(annotation)) {
> > > > > +                               if (run(annotation, method)) {
> > > > > +
> > threwUnchecked = true;
> > > > > +                                       break; //
> > spec says not to call anymore methods on this
> > > > > +                               }
> > > > > +                       }
> > > > > +               }
> > > > > +
> > > > > +               return threwUnchecked;
> > > > > +       }
> > > > > +
> > > > > +       private boolean run(Annotation annotation, Method method)
> {
> > > > > +
> > > > > +               boolean threwUnchecked = true; // start w/
> pessimism
> > > > > +
> > > > > +               try {
> > > > > +
> > > > > +                       method.invoke(managedBean, null);
> > > > > +
> > > > > +                       threwUnchecked = false;
> > > > > +
> > > > > +               } catch (InvocationTargetException ite) { // catch
> > most specific first
> > > > > +
> > > > > +                       final Throwable cause = ite.getCause();
> > > > > +
> > > > > +                       handleException(method, cause == null ?
> ite :
> > cause);
> > > > > +
> > > > > +               } catch (Exception e) {
> > > > > +
> > > > > +                       handleException(method, e);
> > > > > +               }
> > > > > +
> > > > > +               return threwUnchecked;
> > > > > +       }
> > > > > +
> > > > > +       private void handleException(Method method, Throwable e) {
> > > > > +               final String genericLoggingMessage =
> > getGenericLoggingMessage(method, e);
> > > > > +
> > > > > +               if (e instanceof RuntimeException) // why did they
> > make RE extend E ?
> > > > > +               {
> > > > > +                       log.error(genericLoggingMessage + "
> MyFaces
> > cannot " + " put the bean in "
> > > > > +                                       +
> > beanConfiguration.getManagedBeanScope() + " scope " + " ...
> > execution continues. ");
> > > > > +               } else {
> > > > > +                       throw new
> > FacesException(genericLoggingMessage + " The spec is
> > ambivalent on checked exceptions.");
> > > > > +               }
> > > > > +       }
> > > > > +
> > > > > +       private String getGenericLoggingMessage(Method method,
> > Throwable e) {
> > > > > +               return "When invoking " + method.getName() + " on
> a
> > managed bean '" + beanConfiguration.getManagedBeanName ()
> > > > > +                               + "'," + " an exception " +
> > e.getClass() + "{" + e.getMessage() + "} was thrown. "
> > > > > +                               + " See section 5.4.1 of the JSF
> > specification.";
> > > > > +       }
> > > > > +
> > > > > +       private boolean isPostConstruct(Annotation annotation) {
> > > > > +
> > > > > +               final Class<? extends Annotation> annotationType =
> > annotation.annotationType();
> > > > > +               final String name = annotationType.getName();
> > > > > +               // use the literal String because we want to avoid
> > ClassDefNotFoundError
> > > > > +               return " javax.annotation.PostConstruct
> ".equals(name);
> > > > > +
> > > > > +       }
> > > > > +}
> > > > >
> > > > > Modified:
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
> > > > > URL:
> >
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java?view=diff&rev=511230&r1=511229&r2=511230
> > > > >
> >
> ==============================================================================
> > > > > ---
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
> > (original)
> > > > > +++
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
> > Fri Feb 23 22:59:15 2007
> > > > > @@ -29,6 +29,7 @@
> > > > >  import org.apache.myfaces.config.ManagedBeanBuilder;
> > > > >  import org.apache.myfaces.config.RuntimeConfig;
> > > > >  import
> > org.apache.myfaces.config.element.ManagedBean;
> > > > > +import
> > org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.Scope;
> > > > >
> > > > >  import org.apache.commons.logging.Log;
> > > > >  import org.apache.commons.logging.LogFactory;
> > > > > @@ -313,25 +314,7 @@
> > > > >                   beansUnderConstruction.remove(managedBeanName);
> > > > >              }
> > > > >
> > > > > -            // put in scope
> > > > > -            String scopeKey = mbc.getManagedBeanScope();
> > > > > -
> > > > > -            // find the scope handler object
> > > > > -            Scope scope = (Scope) _scopes.get(scopeKey);
> > > > > -            if (scope == null)
> > > > > -            {
> > > > > -                log.error("Managed bean '" + name + "' has
> illegal
> > scope: "
> > > > > -                    + scopeKey);
> > > > > -            }
> > > > > -            else
> > > > > -            {
> > > > > -                scope.put(externalContext, name, obj);
> > > > > -            }
> > > > > -
> > > > > -            if(obj==null && log.isDebugEnabled())
> > > > > -            {
> > > > > -                log.debug("Variable '" + name + "' could not be
> > resolved.");
> > > > > -            }
> > > > > +            putInScope(mbc, externalContext, obj);
> > > > >
> > > > >              return obj;
> > > > >          }
> > > > > @@ -344,6 +327,28 @@
> > > > >          return null;
> > > > >      }
> > > > >
> > > > > +       private void putInScope(ManagedBean managedBean,
> > ExternalContext extContext, Object obj) {
> > > > > +
> > > > > +               final String managedBeanName =
> > managedBean.getManagedBeanName();
> > > > > +
> > > > > +               if (obj == null) {
> > > > > +                       if (log.isDebugEnabled())
> > > > > +                               log.debug("Variable '" +
> > managedBeanName + "' could not be resolved.");
> > > > > +               } else {
> > > > > +
> > > > > +                       String scopeKey =
> > managedBean.getManagedBeanScope ();
> > > > > +
> > > > > +                       // find the scope handler object
> > > > > +                       Scope scope = (Scope)
> _scopes.get(scopeKey);
> > > > > +                       if (scope == null) {
> > > > > +                               log.error("Managed bean '" +
> > managedBeanName + "' has illegal scope: " + scopeKey);
> > > > > +                       } else {
> > > > > +                               scope.put(extContext,
> managedBeanName,
> > obj);
> > > > > +                       }
> > > > > +               }
> > > > > +
> > > > > +       }
> > > > > +
> > > > >      protected RuntimeConfig getRuntimeConfig(FacesContext
> > facesContext)
> > > > >      {
> > > > >          if (_runtimeConfig == null)
> > > > >
> > > > > Modified:
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
> > > > > URL:
> >
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java?view=diff&rev=511230&r1=511229&r2=511230
> > > > >
> >
> ==============================================================================
> > > > > ---
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
> > (original)
> > > > > +++
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
> > Fri Feb 23 22:59:15 2007
> > > > > @@ -192,22 +192,30 @@
> > > > >              beansUnderConstruction.remove(managedBeanName);
> > > > >          }
> > > > >
> > > > > -        // put in scope
> > > > > -        String scopeKey = managedBean.getManagedBeanScope ();
> > > > > +       putInScope(managedBean, extContext, obj);
> > > > > +    }
> > > > > +
> > > > > +       private void putInScope(ManagedBean managedBean,
> > ExternalContext extContext, Object obj) {
> > > > >
> > > > > -        // find the scope handler object
> > > > > -        Scope scope = (Scope) _scopes.get(scopeKey);
> > > > > -        if (scope == null) {
> > > > > -            log.error("Managed bean '" + managedBeanName + "' has
> > illegal scope: "
> > > > > -                + scopeKey);
> > > > > -        } else {
> > > > > -            scope.put(extContext, managedBeanName, obj);
> > > > > -        }
> > > > > +               final String managedBeanName =
> > managedBean.getManagedBeanName ();
> > > > > +
> > > > > +               if (obj == null) {
> > > > > +                       if (log.isDebugEnabled())
> > > > > +                               log.debug("Variable '" +
> > managedBeanName + "' could not be resolved.");
> > > > > +               } else {
> > > > >
> > > > > -        if(obj==null && log.isDebugEnabled()) {
> > > > > -            log.debug("Variable '" + managedBeanName + "' could
> not
> > be resolved.");
> > > > > -        }
> > > > > -    }
> > > > > +                       String scopeKey =
> > managedBean.getManagedBeanScope();
> > > > > +
> > > > > +                       // find the scope handler object
> > > > > +                       Scope scope = (Scope)
> _scopes.get(scopeKey);
> > > > > +                       if (scope == null) {
> > > > > +                               log.error("Managed bean '" +
> > managedBeanName + "' has illegal scope: " + scopeKey);
> > > > > +                       } else {
> > > > > +                               scope.put(extContext,
> managedBeanName,
> > obj);
> > > > > +                       }
> > > > > +               }
> > > > > +
> > > > > +       }
> > > > >
> > > > >      // get the FacesContext from the ELContext
> > > > >      private FacesContext facesContext(ELContext context) {
> > > > >
> > > > > Added:
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
> > > > > URL:
> >
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java?view=auto&rev=511230
> > > > >
> >
> ==============================================================================
> > > > > ---
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
> > (added)
> > > > > +++
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
> > Fri Feb 23 22:59:15 2007
> > > > > @@ -0,0 +1,88 @@
> > > > > +package org.apache.myfaces.config.annotation ;
> > > > > +
> > > > > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > > > > +import
> > org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler;
> > > > > +import
> > org.apache.myfaces.config.impl.digester.elements.ManagedBean
> > ;
> > > > > +
> > > > > +import junit.framework.TestCase;
> > > > > +
> > > > > +/**
> > > > > + * @author Dennis Byrne
> > > > > + */
> > > > > +
> > > > > +public class
> > AnnotatedExceptionManagedBeanHandlerTestCase extends
> > TestCase {
> > > > > +
> > > > > +       protected AnnotatedManagedBean managedBean;
> > > > > +
> > > > > +       protected AnnotatedManagedBeanHandler handler;
> > > > > +
> > > > > +       protected ManagedBean managedBeanConf;
> > > > > +
> > > > > +       public void setUp() {
> > > > > +               managedBean = new AnnotatedManagedBean(new
> > Exception());
> > > > > +               managedBeanConf = new ManagedBean();
> > > > > +               handler = new
> > AnnotatedManagedBeanHandler(managedBean, managedBeanConf);
> > > > > +       }
> > > > > +
> > > > > +       public void testShouldNotBlowUpForNoneScope()
> > {
> > > > > +
> > > > > +               managedBeanConf.setScope(ManagedBeanBuilder.NONE);
> > > > > +
> > > > > +               boolean exceptionThrown = false;
> > > > > +
> > > > > +               try {
> > > > > +                       handler.run();
> > > > > +               } catch (Exception e) {
> > > > > +                       exceptionThrown = true;
> > > > > +               }
> > > > > +
> > > > > +
> > assertFalse(managedBean.isPostConstructCalled());
> > > > > +               assertFalse(exceptionThrown);
> > > > > +       }
> > > > > +
> > > > > +       public void testShouldBlowUpForRequestScope()
> > {
> > > > > +
> > > > > +               managedBeanConf.setScope(
> ManagedBeanBuilder.REQUEST);
> > > > > +
> > > > > +               boolean exceptionThrown = false;
> > > > > +
> > > > > +               try {
> > > > > +                       handler.run();
> > > > > +               } catch (Exception e) {
> > > > > +                       exceptionThrown = true;
> > > > > +               }
> > > > > +
> > > > > +               assertTrue(exceptionThrown);
> > > > > +       }
> > > > > +
> > > > > +       public void testShouldBlowUpForSessionScope()
> > {
> > > > > +
> > > > > +               managedBeanConf.setScope(
> ManagedBeanBuilder.SESSION);
> > > > > +
> > > > > +               boolean exceptionThrown = false;
> > > > > +
> > > > > +               try {
> > > > > +                       handler.run();
> > > > > +               } catch (Exception e) {
> > > > > +                       exceptionThrown = true;
> > > > > +               }
> > > > > +
> > > > > +               assertTrue(exceptionThrown);
> > > > > +       }
> > > > > +
> > > > > +       public void
> > testShouldBlowUpForApplicationScope() {
> > > > > +
> > > > > +
> > managedBeanConf.setScope(ManagedBeanBuilder.APPLICATION );
> > > > > +
> > > > > +               boolean exceptionThrown = false;
> > > > > +
> > > > > +               try {
> > > > > +                       handler.run();
> > > > > +               } catch (Exception e) {
> > > > > +                       exceptionThrown = true;
> > > > > +               }
> > > > > +
> > > > > +               assertTrue(exceptionThrown);
> > > > > +       }
> > > > > +
> > > > > +}
> > > > >
> > > > > Added:
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
> > > > > URL:
> >
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java?view=auto&rev=511230
> > > > >
> >
> ==============================================================================
> > > > > ---
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
> > (added)
> > > > > +++
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
> > Fri Feb 23 22:59:15 2007
> > > > > @@ -0,0 +1,46 @@
> > > > > +package org.apache.myfaces.config.annotation ;
> > > > > +
> > > > > +import javax.annotation.PostConstruct;
> > > > > +import javax.annotation.PreDestroy;
> > > > > +
> > > > > +/**
> > > > > + * @author Dennis Byrne
> > > > > + */
> > > > > +
> > > > > +class AnnotatedManagedBean {
> > > > > +
> > > > > +       private boolean postConstructCalled = false; // using a
> stub
> > for a mock
> > > > > +
> > > > > +       private boolean preDestroyCalled = false; // using a stob
> for
> > a mock here
> > > > > +
> > > > > +       private Throwable throwable;
> > > > > +
> > > > > +       public AnnotatedManagedBean(Throwable throwable) {
> > > > > +               this.throwable = throwable;
> > > > > +       }
> > > > > +
> > > > > +       @PostConstruct
> > > > > +       public void postConstruct() throws Throwable {
> > > > > +               postConstructCalled = true;
> > > > > +
> > > > > +               if (throwable != null)
> > > > > +                       throw throwable;
> > > > > +       }
> > > > > +
> > > > > +       @PreDestroy
> > > > > +       public void preDestroy() throws Throwable {
> > > > > +               preDestroyCalled = true;
> > > > > +
> > > > > +               if (throwable != null)
> > > > > +                       throw throwable;
> > > > > +       }
> > > > > +
> > > > > +       boolean isPostConstructCalled() {
> > > > > +               return postConstructCalled;
> > > > > +       }
> > > > > +
> > > > > +       boolean isPreDestroyCalled() {
> > > > > +               return preDestroyCalled;
> > > > > +       }
> > > > > +
> > > > > +}
> > > > >
> > > > > Added:
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
> > > > > URL:
> >
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java?view=auto&rev=511230
> > > > >
> >
> ==============================================================================
> > > > > ---
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
> > (added)
> > > > > +++
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
> > Fri Feb 23 22:59:15 2007
> > > > > @@ -0,0 +1,61 @@
> > > > > +package org.apache.myfaces.config.annotation;
> > > > > +
> > > > > +import junit.framework.TestCase;
> > > > > +
> > > > > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > > > > +import
> > org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler;
> > > > > +import
> > org.apache.myfaces.config.impl.digester.elements.ManagedBean;
> > > > > +
> > > > > +/**
> > > > > + * @author Dennis Byrne
> > > > > + */
> > > > > +
> > > > > +public class AnnotatedManagedBeanHandlerTestCase
> > extends TestCase {
> > > > > +
> > > > > +       protected AnnotatedManagedBean managedBean;
> > > > > +       protected AnnotatedManagedBeanHandler handler;
> > > > > +       protected ManagedBean managedBeanConf;
> > > > > +
> > > > > +       public void setUp() {
> > > > > +               managedBean = new AnnotatedManagedBean(null);
> > > > > +               managedBeanConf = new ManagedBean();
> > > > > +               handler = new
> > AnnotatedManagedBeanHandler(managedBean, managedBeanConf);
> > > > > +       }
> > > > > +
> > > > > +       public void testShouldNotInvokeForNoneScope()
> > {
> > > > > +
> > > > > +               managedBeanConf.setScope(ManagedBeanBuilder.NONE);
> > > > > +               boolean threwUnchecked = handler.run();
> > > > > +
> > > > > +               assertFalse(threwUnchecked);
> > > > > +
> > assertFalse(managedBean.isPostConstructCalled());
> > > > > +       }
> > > > > +
> > > > > +       public void testShouldInvokeForRequestScope()
> > {
> > > > > +
> > > > > +               managedBeanConf.setScope(
> ManagedBeanBuilder.REQUEST);
> > > > > +               boolean threwUnchecked = handler.run();
> > > > > +
> > > > > +               assertFalse(threwUnchecked);
> > > > > +               assertTrue(
> > managedBean.isPostConstructCalled());
> > > > > +       }
> > > > > +
> > > > > +       public void testShouldInvokeForSessionScope()
> > {
> > > > > +
> > > > > +               managedBeanConf.setScope(
> ManagedBeanBuilder.SESSION);
> > > > > +               boolean threwUnchecked = handler.run();
> > > > > +
> > > > > +               assertFalse(threwUnchecked);
> > > > > +
> > assertTrue(managedBean.isPostConstructCalled());
> > > > > +       }
> > > > > +
> > > > > +       public void
> > testShouldInvokeForApplicationScope() {
> > > > > +
> > > > > +
> > managedBeanConf.setScope(ManagedBeanBuilder.APPLICATION);
> > > > > +               boolean threwUnchecked = handler.run ();
> > > > > +
> > > > > +               assertFalse(threwUnchecked);
> > > > > +
> > assertTrue(managedBean.isPostConstructCalled());
> > > > > +       }
> > > > > +
> > > > > +}
> > > > >
> > > > > Added:
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> > > > > URL:
> >
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java?view=auto&rev=511230
> > > > >
> >
> ==============================================================================
> > > > > ---
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> > (added)
> > > > > +++
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> > Fri Feb 23 22:59:15 2007
> > > > > @@ -0,0 +1,61 @@
> > > > > +package org.apache.myfaces.config.annotation;
> > > > > +
> > > > > +import junit.framework.TestCase;
> > > > > +
> > > > > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > > > > +import
> > org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler
> > ;
> > > > > +import
> > org.apache.myfaces.config.impl.digester.elements.ManagedBean;
> > > > > +
> > > > > +/**
> > > > > + * @author Dennis Byrne
> > > > > + */
> > > > > +
> > > > > +public class
> > AnnotatedRuntimeExceptionManagedBeanHandlerTestCase extends
> > TestCase {
> > > > > +
> > > > > +       protected AnnotatedManagedBean managedBean;
> > > > > +       protected AnnotatedManagedBeanHandler handler;
> > > > > +       protected ManagedBean managedBeanConf;
> > > > > +
> > > > > +       public void setUp() {
> > > > > +               managedBean = new AnnotatedManagedBean(new
> > RuntimeException());
> > > > > +               managedBeanConf = new ManagedBean();
> > > > > +               handler = new
> > AnnotatedManagedBeanHandler(managedBean, managedBeanConf);
> > > > > +       }
> > > > > +
> > > > > +       public void testShouldNotInvokeForNoneScope()
> > {
> > > > > +
> > > > > +               managedBeanConf.setScope(ManagedBeanBuilder.NONE);
> > > > > +               boolean threwUnchecked = handler.run();
> > > > > +
> > > > > +               assertFalse(threwUnchecked);
> > > > > +
> > assertFalse(managedBean.isPostConstructCalled());
> > > > > +       }
> > > > > +
> > > > > +       public void testShouldInvokeForRequestScope()
> > {
> > > > > +
> > > > > +               managedBeanConf.setScope(
> ManagedBeanBuilder.REQUEST);
> > > > > +               boolean threwUnchecked = handler.run();
> > > > > +
> > > > > +               assertTrue(threwUnchecked);
> > > > > +               assertTrue(
> > managedBean.isPostConstructCalled());
> > > > > +       }
> > > > > +
> > > > > +       public void testShouldInvokeForSessionScope()
> > {
> > > > > +
> > > > > +               managedBeanConf.setScope(
> ManagedBeanBuilder.SESSION);
> > > > > +               boolean threwUnchecked = handler.run();
> > > > > +
> > > > > +               assertTrue(threwUnchecked);
> > > > > +
> > assertTrue(managedBean.isPostConstructCalled());
> > > > > +       }
> > > > > +
> > > > > +       public void
> > testShouldInvokeForApplicationScope() {
> > > > > +
> > > > > +
> > managedBeanConf.setScope(ManagedBeanBuilder.APPLICATION);
> > > > > +               boolean threwUnchecked = handler.run ();
> > > > > +
> > > > > +               assertTrue(threwUnchecked);
> > > > > +
> > assertTrue(managedBean.isPostConstructCalled());
> > > > > +       }
> > > > > +
> > > > > +}
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > > Mathias
> > > >
> > >
> > >
> > >
> > >
> > --
> > Dennis Byrne
>
>
> --
> Mathias
>



-- 
Dennis Byrne

Re: svn commit: r511230 - in /myfaces/core/branches/jsf12/impl/src: main/java/org/apache/myfaces/config/ main/java/org/apache/myfaces/config/annotation/ main/java/org/apache/myfaces/el/ main/java/org/apache/myfaces/el/unified/resolver/ test/java/org/

Posted by Mathias Brökelmann <mb...@googlemail.com>.
sorry there is no problem with your implementation of
ManagedBeanResolver. I was just a little bit confused by your changes
to VariableResolverImpl. Because the implementation of this class must
be stripped down for 1.2 and does not handle managed beans any more.

2007/2/24, Dennis Byrne <de...@dbyrne.net>:
> Hi Mathias,
>
> Can you tell me which section(s)?
>
> ManagedBeanResolver calls
> ManagedBeanBuilder.buildManagedBean().  In
> ManagedBeanBuilder.buildManagedBean uses
> AnnotatedManagedBeanHandler, insuring that @PostContruct is respected.  You
> are saying the problem is that this behavior is in *both*
> ManagedBeanResolver and VariableResolverImpl?
> >
> > Dennis Byrne
> >
> >
> >
> > On 2/24/07, Mathias Brökelmann <mb...@googlemail.com> wrote:
> > > Hi Dennis,
> > >
> > > I have a problem with the handling of ManagedBeans in
> > > VariableResolverImpl. According to the spec the VariableResolverImpl
> > > should only delegate to the application elresolver now. The managed
> > > beans where resolved in a new ManagedBeanResolver. We already have an
> > > implementation for this so I ask you to implement this into the
> > > ManagedBeanResolver.
> > >
> > > I currently change VariableResolverImpl and ElResolver setup according
> > > to the spec.
> > >
> > > Cheers,
> > > Mathias
> > >
> > > 2007/2/24, dennisbyrne@apache.org <de...@apache.org>:
> > > > Author: dennisbyrne
> > > > Date: Fri Feb 23 22:59:15 2007
> > > > New Revision: 511230
> > > >
> > > > URL: http://svn.apache.org/viewvc?view=rev&rev=511230
> > > > Log:
> > > > implemented sectoin 5.4.1 as far as @PostConstruct is concerned,
> @PreDestroy is still left
> > > > refactored ManagedBeanBuilder and both Resolvers
> > > >
> > > > Added:
> > > >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/
> > > >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
> > > >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/
> > > >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
> > > >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
> > > >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
> > > >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> > > > Modified:
> > > >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
> > > >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
> > > >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
> > > >
> > > > Modified:
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
> > > > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java?view=diff&rev=511230&r1=511229&r2=511230
> > > >
> ==============================================================================
> > > > ---
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
> (original)
> > > > +++
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
> Fri Feb 23 22:59:15 2007
> > > > @@ -15,23 +15,34 @@
> > > >   */
> > > >  package org.apache.myfaces.config;
> > > >
> > > > +import java.lang.reflect.Array;
> > > > +import java.util.ArrayList;
> > > > +import java.util.HashMap;
> > > > +import java.util.Iterator;
> > > > +import java.util.List;
> > > > +import java.util.Map;
> > > > +
> > > >  import javax.el.ELContext;
> > > > +import javax.el.ELException;
> > > >  import javax.el.ELResolver;
> > > >  import javax.el.ExpressionFactory ;
> > > >  import javax.el.ValueExpression;
> > > > -import org.apache.myfaces.config.element.*;
> > > > -import org.apache.commons.beanutils.PropertyUtils;
> > > > -import org.apache.commons.logging.Log;
> > > > -import org.apache.commons.logging.LogFactory;
> > > > -
> > > >  import javax.faces.FacesException;
> > > >  import javax.faces.application.Application;
> > > > -import javax.faces.context.FacesContext;
> > > >  import javax.faces.context.ExternalContext ;
> > > > +import javax.faces.context.FacesContext;
> > > >  import javax.faces.webapp.UIComponentTag;
> > > > -import java.util.*;
> > > > -import java.lang.reflect.Array;
> > > > -import javax.el.ELException;
> > > > +
> > > > +import org.apache.commons.beanutils.PropertyUtils;
> > > > +import org.apache.commons.logging.Log;
> > > > +import org.apache.commons.logging.LogFactory;
> > > > +import
> org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler
> ;
> > > > +import
> org.apache.myfaces.config.element.ListEntries;
> > > > +import org.apache.myfaces.config.element.ListEntry;
> > > > +import
> org.apache.myfaces.config.element.ManagedBean;
> > > > +import
> org.apache.myfaces.config.element.ManagedProperty ;
> > > > +import org.apache.myfaces.config.element.MapEntries;
> > > > +import org.apache.myfaces.config.element.MapEntry;
> > > >  import
> org.apache.myfaces.shared_impl.util.ClassUtils;
> > > >
> > > >
> > > > @@ -45,12 +56,22 @@
> > > >  {
> > > >      private static Log log =
> LogFactory.getLog(ManagedBeanBuilder.class);
> > > >      private RuntimeConfig _runtimeConfig;
> > > > -
> > > > +    public final static String REQUEST = "request";
> > > > +    public final static String APPLICATION = "application";
> > > > +    public final static String SESSION = "session";
> > > > +    public final static String NONE = "none";
> > > >
> > > >      public Object buildManagedBean(FacesContext facesContext,
> ManagedBean beanConfiguration) throws FacesException
> > > >      {
> > > > -        Object bean =
> ClassUtils.newInstance(beanConfiguration.getManagedBeanClassName
> ());
> > > > +        final Object bean =
> ClassUtils.newInstance(beanConfiguration.getManagedBeanClassName());
> > > >
> > > > +        final AnnotatedManagedBeanHandler handler = new
> AnnotatedManagedBeanHandler(bean, beanConfiguration);
> > > > +
> > > > +        final boolean threwUnchecked = handler.run();
> > > > +
> > > > +        if(threwUnchecked)
> > > > +               return null;
> > > > +
> > > >          switch (beanConfiguration.getInitMode ())
> > > >          {
> > > >              case ManagedBean.INIT_MODE_PROPERTIES:
> > > > @@ -240,18 +261,18 @@
> > > >              String valueScope = getScope(facesContext, expression);
> > > >
> > > >              // if the target scope is 'none' value scope has to be
> 'none', too
> > > > -            if (targetScope == null ||
> targetScope.equalsIgnoreCase("none")) {
> > > > -                if (valueScope != null &&
> !(valueScope.equalsIgnoreCase("none"))) {
> > > > +            if (targetScope == null ||
> targetScope.equalsIgnoreCase(NONE)) {
> > > > +                if (valueScope != null &&
> !(valueScope.equalsIgnoreCase(NONE))) {
> > > >                      return false;
> > > >                  }
> > > >                  return true;
> > > >              }
> > > >
> > > >              // 'application' scope can reference 'application' and
> 'none'
> > > > -            if (targetScope.equalsIgnoreCase("application")) {
> > > > +            if (targetScope.equalsIgnoreCase(APPLICATION)) {
> > > >                  if (valueScope != null) {
> > > > -                    if (valueScope.equalsIgnoreCase("request") ||
> > > > -                         valueScope.equalsIgnoreCase("session")) {
> > > > +                    if (valueScope.equalsIgnoreCase(REQUEST) ||
> > > > +                        valueScope.equalsIgnoreCase(SESSION)) {
> > > >                          return false;
> > > >                      }
> > > >                  }
> > > > @@ -259,9 +280,9 @@
> > > >              }
> > > >
> > > >              // 'session' scope can reference 'session',
> 'application', and 'none' but not 'request'
> > > > -            if (targetScope.equalsIgnoreCase("session")) {
> > > > +            if (targetScope.equalsIgnoreCase(SESSION)) {
> > > >                  if (valueScope != null) {
> > > > -                    if ( valueScope.equalsIgnoreCase("request")) {
> > > > +                    if (valueScope.equalsIgnoreCase(REQUEST)) {
> > > >                          return false;
> > > >                      }
> > > >                  }
> > > > @@ -269,7 +290,7 @@
> > > >              }
> > > >
> > > >              // 'request' scope can reference any value scope
> > > > -            if (targetScope.equalsIgnoreCase("request")) {
> > > > +            if ( targetScope.equalsIgnoreCase(REQUEST)) {
> > > >                  return true;
> > > >              }
> > > >          }
> > > > @@ -282,60 +303,59 @@
> > > >          String beanName = getFirstSegment(expression);
> > > >          ExternalContext externalContext =
> facesContext.getExternalContext();
> > > >
> > > > -        // check scope objects
> > > > +
> > > > +               // check scope objects
> > > >          if (beanName.equalsIgnoreCase("requestScope")) {
> > > > -            return "request";
> > > > +            return REQUEST;
> > > >          }
> > > > -        if (beanName.equalsIgnoreCase("sessionScope")) {
> > > > -            return "session";
> > > > +               if (beanName.equalsIgnoreCase ("sessionScope")) {
> > > > +            return SESSION;
> > > >          }
> > > > -        if (beanName.equalsIgnoreCase("applicationScope")) {
> > > > -            return "application";
> > > > +               if (beanName.equalsIgnoreCase("applicationScope")) {
> > > > +            return APPLICATION;
> > > >          }
> > > >
> > > >             // check implicit objects
> > > >          if (beanName.equalsIgnoreCase ("cookie")) {
> > > > -           return "request";
> > > > +               return REQUEST;
> > > >          }
> > > >          if (beanName.equalsIgnoreCase("facesContext")) {
> > > > -            return "request";
> > > > +            return REQUEST;
> > > >          }
> > > >
> > > >          if (beanName.equalsIgnoreCase("header")) {
> > > > -            return "request";
> > > > +            return REQUEST;
> > > >          }
> > > >          if (beanName.equalsIgnoreCase("headerValues")) {
> > > > -            return "request";
> > > > +            return REQUEST;
> > > >          }
> > > >
> > > >          if ( beanName.equalsIgnoreCase("initParam")) {
> > > > -           return "application";
> > > > +               return APPLICATION;
> > > >          }
> > > >          if (beanName.equalsIgnoreCase("param")) {
> > > > -            return "request";
> > > > +            return REQUEST;
> > > >          }
> > > >          if (beanName.equalsIgnoreCase("paramValues")) {
> > > > -            return "request";
> > > > +            return REQUEST;
> > > >          }
> > > >          if (beanName.equalsIgnoreCase("view")) {
> > > > -            return "request";
> > > > +            return REQUEST;
> > > >          }
> > > >
> > > > -
> > > >          // not found so far - check all scopes
> > > >          if (externalContext.getRequestMap().get(beanName) != null) {
> > > > -            return "request";
> > > > +            return REQUEST;
> > > >          }
> > > >          if (externalContext.getSessionMap().get(beanName) != null) {
> > > > -            return "session";
> > > > +            return SESSION;
> > > >          }
> > > >          if (
> externalContext.getApplicationMap().get(beanName) != null)
> {
> > > > -            return "application";
> > > > +            return APPLICATION;
> > > >          }
> > > >
> > > >          //not found - check mangaged bean config
> > > >
> > > > -
> > > >          ManagedBean mbc =
> getRuntimeConfig(facesContext).getManagedBean(beanName);
> > > >
> > > >          if (mbc != null) {
> > > > @@ -344,9 +364,6 @@
> > > >
> > > >          return null;
> > > >      }
> > > > -
> > > > -
> > > > -
> > > >
> > > >      /**
> > > >       * Extract the first expression segment, that is the substring up
> to the first '.' or '['
> > > >
> > > > Added:
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
> > > > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java?view=auto&rev=511230
> > > >
> ==============================================================================
> > > > ---
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
> (added)
> > > > +++
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
> Fri Feb 23 22:59:15 2007
> > > > @@ -0,0 +1,136 @@
> > > > +package org.apache.myfaces.config.annotation ;
> > > > +
> > > > +import java.lang.annotation.Annotation;
> > > > +import java.lang.reflect.InvocationTargetException;
> > > > +import java.lang.reflect.Method;
> > > > +
> > > > +import javax.faces.FacesException;
> > > > +
> > > > +import org.apache.commons.logging.Log;
> > > > +import org.apache.commons.logging.LogFactory;
> > > > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > > > +import org.apache.myfaces.config.element.ManagedBean
> ;
> > > > +
> > > > +/**
> > > > + * @see JSF spec 1.2, section 5.4
> > > > + * @warn Do not import javax.annotation.* in this class
> > > > + * @author Dennis Byrne
> > > > + */
> > > > +
> > > > +public class AnnotatedManagedBeanHandler {
> > > > +
> > > > +       private static Log log =
> LogFactory.getLog(AnnotatedManagedBeanHandler.class);
> > > > +
> > > > +       private Object managedBean;
> > > > +
> > > > +       private ManagedBean beanConfiguration;
> > > > +
> > > > +       public AnnotatedManagedBeanHandler(Object
> managedBean, ManagedBean beanConfiguration) {
> > > > +
> > > > +               if (managedBean == null) {
> > > > +                       throw new NullPointerException("Object
> managedBean");
> > > > +               }
> > > > +
> > > > +               if (beanConfiguration == null) {
> > > > +                       throw new
> NullPointerException("ManagedBean beanConfiguration");
> > > > +               }
> > > > +
> > > > +               this.managedBean = managedBean;
> > > > +               this.beanConfiguration = beanConfiguration;
> > > > +
> > > > +       }
> > > > +
> > > > +       public boolean run() {
> > > > +
> > > > +               boolean threwUnchecked = false;
> > > > +
> > > > +               if
> (ManagedBeanBuilder.NONE.equals(beanConfiguration.getManagedBeanScope()))
> {
> > > > +                       ; // this only applies to a, s, and r scope
> beans
> > > > +               } else {
> > > > +                       threwUnchecked =
> run(managedBean.getClass().getMethods());
> > > > +               }
> > > > +
> > > > +               return threwUnchecked;
> > > > +       }
> > > > +
> > > > +       private boolean run(Method[] methods) {
> > > > +
> > > > +               boolean threwUnchecked = false;
> > > > +
> > > > +               for (Method method : methods)
> > > > +                       if (run(method)) {
> > > > +                               threwUnchecked = true;
> > > > +                               break;
> > > > +                       }// break if we invoke method ? or invoke all
> w/ annoation?
> > > > +
> > > > +               return threwUnchecked;
> > > > +       }
> > > > +
> > > > +       private boolean run(Method method) {
> > > > +
> > > > +               Annotation[] annotations = method.getAnnotations();
> > > > +               boolean threwUnchecked = false;
> > > > +
> > > > +               for (Annotation annotation : annotations) {
> > > > +                       if (isPostConstruct(annotation)) {
> > > > +                               if (run(annotation, method)) {
> > > > +
> threwUnchecked = true;
> > > > +                                       break; //
> spec says not to call anymore methods on this
> > > > +                               }
> > > > +                       }
> > > > +               }
> > > > +
> > > > +               return threwUnchecked;
> > > > +       }
> > > > +
> > > > +       private boolean run(Annotation annotation, Method method) {
> > > > +
> > > > +               boolean threwUnchecked = true; // start w/ pessimism
> > > > +
> > > > +               try {
> > > > +
> > > > +                       method.invoke(managedBean, null);
> > > > +
> > > > +                       threwUnchecked = false;
> > > > +
> > > > +               } catch (InvocationTargetException ite) { // catch
> most specific first
> > > > +
> > > > +                       final Throwable cause = ite.getCause();
> > > > +
> > > > +                       handleException(method, cause == null ? ite :
> cause);
> > > > +
> > > > +               } catch (Exception e) {
> > > > +
> > > > +                       handleException(method, e);
> > > > +               }
> > > > +
> > > > +               return threwUnchecked;
> > > > +       }
> > > > +
> > > > +       private void handleException(Method method, Throwable e) {
> > > > +               final String genericLoggingMessage =
> getGenericLoggingMessage(method, e);
> > > > +
> > > > +               if (e instanceof RuntimeException) // why did they
> make RE extend E ?
> > > > +               {
> > > > +                       log.error(genericLoggingMessage + " MyFaces
> cannot " + " put the bean in "
> > > > +                                       +
> beanConfiguration.getManagedBeanScope() + " scope " + " ...
> execution continues. ");
> > > > +               } else {
> > > > +                       throw new
> FacesException(genericLoggingMessage + " The spec is
> ambivalent on checked exceptions.");
> > > > +               }
> > > > +       }
> > > > +
> > > > +       private String getGenericLoggingMessage(Method method,
> Throwable e) {
> > > > +               return "When invoking " + method.getName() + " on a
> managed bean '" + beanConfiguration.getManagedBeanName ()
> > > > +                               + "'," + " an exception " +
> e.getClass() + "{" + e.getMessage() + "} was thrown. "
> > > > +                               + " See section 5.4.1 of the JSF
> specification.";
> > > > +       }
> > > > +
> > > > +       private boolean isPostConstruct(Annotation annotation) {
> > > > +
> > > > +               final Class<? extends Annotation> annotationType =
> annotation.annotationType();
> > > > +               final String name = annotationType.getName();
> > > > +               // use the literal String because we want to avoid
> ClassDefNotFoundError
> > > > +               return " javax.annotation.PostConstruct".equals(name);
> > > > +
> > > > +       }
> > > > +}
> > > >
> > > > Modified:
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
> > > > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java?view=diff&rev=511230&r1=511229&r2=511230
> > > >
> ==============================================================================
> > > > ---
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
> (original)
> > > > +++
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
> Fri Feb 23 22:59:15 2007
> > > > @@ -29,6 +29,7 @@
> > > >  import org.apache.myfaces.config.ManagedBeanBuilder;
> > > >  import org.apache.myfaces.config.RuntimeConfig;
> > > >  import
> org.apache.myfaces.config.element.ManagedBean;
> > > > +import
> org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.Scope;
> > > >
> > > >  import org.apache.commons.logging.Log;
> > > >  import org.apache.commons.logging.LogFactory;
> > > > @@ -313,25 +314,7 @@
> > > >                   beansUnderConstruction.remove(managedBeanName);
> > > >              }
> > > >
> > > > -            // put in scope
> > > > -            String scopeKey = mbc.getManagedBeanScope();
> > > > -
> > > > -            // find the scope handler object
> > > > -            Scope scope = (Scope) _scopes.get(scopeKey);
> > > > -            if (scope == null)
> > > > -            {
> > > > -                log.error("Managed bean '" + name + "' has illegal
> scope: "
> > > > -                    + scopeKey);
> > > > -            }
> > > > -            else
> > > > -            {
> > > > -                scope.put(externalContext, name, obj);
> > > > -            }
> > > > -
> > > > -            if(obj==null && log.isDebugEnabled())
> > > > -            {
> > > > -                log.debug("Variable '" + name + "' could not be
> resolved.");
> > > > -            }
> > > > +            putInScope(mbc, externalContext, obj);
> > > >
> > > >              return obj;
> > > >          }
> > > > @@ -344,6 +327,28 @@
> > > >          return null;
> > > >      }
> > > >
> > > > +       private void putInScope(ManagedBean managedBean,
> ExternalContext extContext, Object obj) {
> > > > +
> > > > +               final String managedBeanName =
> managedBean.getManagedBeanName();
> > > > +
> > > > +               if (obj == null) {
> > > > +                       if (log.isDebugEnabled())
> > > > +                               log.debug("Variable '" +
> managedBeanName + "' could not be resolved.");
> > > > +               } else {
> > > > +
> > > > +                       String scopeKey =
> managedBean.getManagedBeanScope ();
> > > > +
> > > > +                       // find the scope handler object
> > > > +                       Scope scope = (Scope) _scopes.get(scopeKey);
> > > > +                       if (scope == null) {
> > > > +                               log.error("Managed bean '" +
> managedBeanName + "' has illegal scope: " + scopeKey);
> > > > +                       } else {
> > > > +                               scope.put(extContext, managedBeanName,
> obj);
> > > > +                       }
> > > > +               }
> > > > +
> > > > +       }
> > > > +
> > > >      protected RuntimeConfig getRuntimeConfig(FacesContext
> facesContext)
> > > >      {
> > > >          if (_runtimeConfig == null)
> > > >
> > > > Modified:
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
> > > > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java?view=diff&rev=511230&r1=511229&r2=511230
> > > >
> ==============================================================================
> > > > ---
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
> (original)
> > > > +++
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
> Fri Feb 23 22:59:15 2007
> > > > @@ -192,22 +192,30 @@
> > > >              beansUnderConstruction.remove(managedBeanName);
> > > >          }
> > > >
> > > > -        // put in scope
> > > > -        String scopeKey = managedBean.getManagedBeanScope ();
> > > > +       putInScope(managedBean, extContext, obj);
> > > > +    }
> > > > +
> > > > +       private void putInScope(ManagedBean managedBean,
> ExternalContext extContext, Object obj) {
> > > >
> > > > -        // find the scope handler object
> > > > -        Scope scope = (Scope) _scopes.get(scopeKey);
> > > > -        if (scope == null) {
> > > > -            log.error("Managed bean '" + managedBeanName + "' has
> illegal scope: "
> > > > -                + scopeKey);
> > > > -        } else {
> > > > -            scope.put(extContext, managedBeanName, obj);
> > > > -        }
> > > > +               final String managedBeanName =
> managedBean.getManagedBeanName ();
> > > > +
> > > > +               if (obj == null) {
> > > > +                       if (log.isDebugEnabled())
> > > > +                               log.debug("Variable '" +
> managedBeanName + "' could not be resolved.");
> > > > +               } else {
> > > >
> > > > -        if(obj==null && log.isDebugEnabled()) {
> > > > -            log.debug("Variable '" + managedBeanName + "' could not
> be resolved.");
> > > > -        }
> > > > -    }
> > > > +                       String scopeKey =
> managedBean.getManagedBeanScope();
> > > > +
> > > > +                       // find the scope handler object
> > > > +                       Scope scope = (Scope) _scopes.get(scopeKey);
> > > > +                       if (scope == null) {
> > > > +                               log.error("Managed bean '" +
> managedBeanName + "' has illegal scope: " + scopeKey);
> > > > +                       } else {
> > > > +                               scope.put(extContext, managedBeanName,
> obj);
> > > > +                       }
> > > > +               }
> > > > +
> > > > +       }
> > > >
> > > >      // get the FacesContext from the ELContext
> > > >      private FacesContext facesContext(ELContext context) {
> > > >
> > > > Added:
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
> > > > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java?view=auto&rev=511230
> > > >
> ==============================================================================
> > > > ---
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
> (added)
> > > > +++
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
> Fri Feb 23 22:59:15 2007
> > > > @@ -0,0 +1,88 @@
> > > > +package org.apache.myfaces.config.annotation ;
> > > > +
> > > > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > > > +import
> org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler;
> > > > +import
> org.apache.myfaces.config.impl.digester.elements.ManagedBean
> ;
> > > > +
> > > > +import junit.framework.TestCase;
> > > > +
> > > > +/**
> > > > + * @author Dennis Byrne
> > > > + */
> > > > +
> > > > +public class
> AnnotatedExceptionManagedBeanHandlerTestCase extends
> TestCase {
> > > > +
> > > > +       protected AnnotatedManagedBean managedBean;
> > > > +
> > > > +       protected AnnotatedManagedBeanHandler handler;
> > > > +
> > > > +       protected ManagedBean managedBeanConf;
> > > > +
> > > > +       public void setUp() {
> > > > +               managedBean = new AnnotatedManagedBean(new
> Exception());
> > > > +               managedBeanConf = new ManagedBean();
> > > > +               handler = new
> AnnotatedManagedBeanHandler(managedBean, managedBeanConf);
> > > > +       }
> > > > +
> > > > +       public void testShouldNotBlowUpForNoneScope()
> {
> > > > +
> > > > +               managedBeanConf.setScope(ManagedBeanBuilder.NONE);
> > > > +
> > > > +               boolean exceptionThrown = false;
> > > > +
> > > > +               try {
> > > > +                       handler.run();
> > > > +               } catch (Exception e) {
> > > > +                       exceptionThrown = true;
> > > > +               }
> > > > +
> > > > +
> assertFalse(managedBean.isPostConstructCalled());
> > > > +               assertFalse(exceptionThrown);
> > > > +       }
> > > > +
> > > > +       public void testShouldBlowUpForRequestScope()
> {
> > > > +
> > > > +               managedBeanConf.setScope(ManagedBeanBuilder.REQUEST);
> > > > +
> > > > +               boolean exceptionThrown = false;
> > > > +
> > > > +               try {
> > > > +                       handler.run();
> > > > +               } catch (Exception e) {
> > > > +                       exceptionThrown = true;
> > > > +               }
> > > > +
> > > > +               assertTrue(exceptionThrown);
> > > > +       }
> > > > +
> > > > +       public void testShouldBlowUpForSessionScope()
> {
> > > > +
> > > > +               managedBeanConf.setScope(ManagedBeanBuilder.SESSION);
> > > > +
> > > > +               boolean exceptionThrown = false;
> > > > +
> > > > +               try {
> > > > +                       handler.run();
> > > > +               } catch (Exception e) {
> > > > +                       exceptionThrown = true;
> > > > +               }
> > > > +
> > > > +               assertTrue(exceptionThrown);
> > > > +       }
> > > > +
> > > > +       public void
> testShouldBlowUpForApplicationScope() {
> > > > +
> > > > +
> managedBeanConf.setScope(ManagedBeanBuilder.APPLICATION );
> > > > +
> > > > +               boolean exceptionThrown = false;
> > > > +
> > > > +               try {
> > > > +                       handler.run();
> > > > +               } catch (Exception e) {
> > > > +                       exceptionThrown = true;
> > > > +               }
> > > > +
> > > > +               assertTrue(exceptionThrown);
> > > > +       }
> > > > +
> > > > +}
> > > >
> > > > Added:
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
> > > > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java?view=auto&rev=511230
> > > >
> ==============================================================================
> > > > ---
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
> (added)
> > > > +++
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
> Fri Feb 23 22:59:15 2007
> > > > @@ -0,0 +1,46 @@
> > > > +package org.apache.myfaces.config.annotation ;
> > > > +
> > > > +import javax.annotation.PostConstruct;
> > > > +import javax.annotation.PreDestroy;
> > > > +
> > > > +/**
> > > > + * @author Dennis Byrne
> > > > + */
> > > > +
> > > > +class AnnotatedManagedBean {
> > > > +
> > > > +       private boolean postConstructCalled = false; // using a stub
> for a mock
> > > > +
> > > > +       private boolean preDestroyCalled = false; // using a stob for
> a mock here
> > > > +
> > > > +       private Throwable throwable;
> > > > +
> > > > +       public AnnotatedManagedBean(Throwable throwable) {
> > > > +               this.throwable = throwable;
> > > > +       }
> > > > +
> > > > +       @PostConstruct
> > > > +       public void postConstruct() throws Throwable {
> > > > +               postConstructCalled = true;
> > > > +
> > > > +               if (throwable != null)
> > > > +                       throw throwable;
> > > > +       }
> > > > +
> > > > +       @PreDestroy
> > > > +       public void preDestroy() throws Throwable {
> > > > +               preDestroyCalled = true;
> > > > +
> > > > +               if (throwable != null)
> > > > +                       throw throwable;
> > > > +       }
> > > > +
> > > > +       boolean isPostConstructCalled() {
> > > > +               return postConstructCalled;
> > > > +       }
> > > > +
> > > > +       boolean isPreDestroyCalled() {
> > > > +               return preDestroyCalled;
> > > > +       }
> > > > +
> > > > +}
> > > >
> > > > Added:
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
> > > > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java?view=auto&rev=511230
> > > >
> ==============================================================================
> > > > ---
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
> (added)
> > > > +++
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
> Fri Feb 23 22:59:15 2007
> > > > @@ -0,0 +1,61 @@
> > > > +package org.apache.myfaces.config.annotation;
> > > > +
> > > > +import junit.framework.TestCase;
> > > > +
> > > > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > > > +import
> org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler;
> > > > +import
> org.apache.myfaces.config.impl.digester.elements.ManagedBean;
> > > > +
> > > > +/**
> > > > + * @author Dennis Byrne
> > > > + */
> > > > +
> > > > +public class AnnotatedManagedBeanHandlerTestCase
> extends TestCase {
> > > > +
> > > > +       protected AnnotatedManagedBean managedBean;
> > > > +       protected AnnotatedManagedBeanHandler handler;
> > > > +       protected ManagedBean managedBeanConf;
> > > > +
> > > > +       public void setUp() {
> > > > +               managedBean = new AnnotatedManagedBean(null);
> > > > +               managedBeanConf = new ManagedBean();
> > > > +               handler = new
> AnnotatedManagedBeanHandler(managedBean, managedBeanConf);
> > > > +       }
> > > > +
> > > > +       public void testShouldNotInvokeForNoneScope()
> {
> > > > +
> > > > +               managedBeanConf.setScope(ManagedBeanBuilder.NONE);
> > > > +               boolean threwUnchecked = handler.run();
> > > > +
> > > > +               assertFalse(threwUnchecked);
> > > > +
> assertFalse(managedBean.isPostConstructCalled());
> > > > +       }
> > > > +
> > > > +       public void testShouldInvokeForRequestScope()
> {
> > > > +
> > > > +               managedBeanConf.setScope(ManagedBeanBuilder.REQUEST);
> > > > +               boolean threwUnchecked = handler.run();
> > > > +
> > > > +               assertFalse(threwUnchecked);
> > > > +               assertTrue(
> managedBean.isPostConstructCalled());
> > > > +       }
> > > > +
> > > > +       public void testShouldInvokeForSessionScope()
> {
> > > > +
> > > > +               managedBeanConf.setScope(ManagedBeanBuilder.SESSION);
> > > > +               boolean threwUnchecked = handler.run();
> > > > +
> > > > +               assertFalse(threwUnchecked);
> > > > +
> assertTrue(managedBean.isPostConstructCalled());
> > > > +       }
> > > > +
> > > > +       public void
> testShouldInvokeForApplicationScope() {
> > > > +
> > > > +
> managedBeanConf.setScope(ManagedBeanBuilder.APPLICATION);
> > > > +               boolean threwUnchecked = handler.run ();
> > > > +
> > > > +               assertFalse(threwUnchecked);
> > > > +
> assertTrue(managedBean.isPostConstructCalled());
> > > > +       }
> > > > +
> > > > +}
> > > >
> > > > Added:
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> > > > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java?view=auto&rev=511230
> > > >
> ==============================================================================
> > > > ---
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> (added)
> > > > +++
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> Fri Feb 23 22:59:15 2007
> > > > @@ -0,0 +1,61 @@
> > > > +package org.apache.myfaces.config.annotation;
> > > > +
> > > > +import junit.framework.TestCase;
> > > > +
> > > > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > > > +import
> org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler
> ;
> > > > +import
> org.apache.myfaces.config.impl.digester.elements.ManagedBean;
> > > > +
> > > > +/**
> > > > + * @author Dennis Byrne
> > > > + */
> > > > +
> > > > +public class
> AnnotatedRuntimeExceptionManagedBeanHandlerTestCase extends
> TestCase {
> > > > +
> > > > +       protected AnnotatedManagedBean managedBean;
> > > > +       protected AnnotatedManagedBeanHandler handler;
> > > > +       protected ManagedBean managedBeanConf;
> > > > +
> > > > +       public void setUp() {
> > > > +               managedBean = new AnnotatedManagedBean(new
> RuntimeException());
> > > > +               managedBeanConf = new ManagedBean();
> > > > +               handler = new
> AnnotatedManagedBeanHandler(managedBean, managedBeanConf);
> > > > +       }
> > > > +
> > > > +       public void testShouldNotInvokeForNoneScope()
> {
> > > > +
> > > > +               managedBeanConf.setScope(ManagedBeanBuilder.NONE);
> > > > +               boolean threwUnchecked = handler.run();
> > > > +
> > > > +               assertFalse(threwUnchecked);
> > > > +
> assertFalse(managedBean.isPostConstructCalled());
> > > > +       }
> > > > +
> > > > +       public void testShouldInvokeForRequestScope()
> {
> > > > +
> > > > +               managedBeanConf.setScope(ManagedBeanBuilder.REQUEST);
> > > > +               boolean threwUnchecked = handler.run();
> > > > +
> > > > +               assertTrue(threwUnchecked);
> > > > +               assertTrue(
> managedBean.isPostConstructCalled());
> > > > +       }
> > > > +
> > > > +       public void testShouldInvokeForSessionScope()
> {
> > > > +
> > > > +               managedBeanConf.setScope(ManagedBeanBuilder.SESSION);
> > > > +               boolean threwUnchecked = handler.run();
> > > > +
> > > > +               assertTrue(threwUnchecked);
> > > > +
> assertTrue(managedBean.isPostConstructCalled());
> > > > +       }
> > > > +
> > > > +       public void
> testShouldInvokeForApplicationScope() {
> > > > +
> > > > +
> managedBeanConf.setScope(ManagedBeanBuilder.APPLICATION);
> > > > +               boolean threwUnchecked = handler.run ();
> > > > +
> > > > +               assertTrue(threwUnchecked);
> > > > +
> assertTrue(managedBean.isPostConstructCalled());
> > > > +       }
> > > > +
> > > > +}
> > > >
> > > >
> > > >
> > >
> > >
> > > --
> > > Mathias
> > >
> >
> >
> >
> >
> --
> Dennis Byrne


-- 
Mathias

Re: svn commit: r511230 - in /myfaces/core/branches/jsf12/impl/src: main/java/org/apache/myfaces/config/ main/java/org/apache/myfaces/config/annotation/ main/java/org/apache/myfaces/el/ main/java/org/apache/myfaces/el/unified/resolver/ test/java/org/

Posted by Dennis Byrne <de...@dbyrne.net>.
Hi Mathias,

Can you tell me which section(s)?

ManagedBeanResolver calls ManagedBeanBuilder.buildManagedBean().  In
ManagedBeanBuilder.buildManagedBean uses AnnotatedManagedBeanHandler,
insuring that @PostContruct is respected.  You are saying the problem is
that this behavior is in *both* ManagedBeanResolver and
VariableResolverImpl?

>
Dennis Byrne

On 2/24/07, Mathias Brökelmann <mb...@googlemail.com> wrote:
>
> Hi Dennis,
>
> I have a problem with the handling of ManagedBeans in
> VariableResolverImpl. According to the spec the VariableResolverImpl
> should only delegate to the application elresolver now. The managed
> beans where resolved in a new ManagedBeanResolver. We already have an
> implementation for this so I ask you to implement this into the
> ManagedBeanResolver.
>
> I currently change VariableResolverImpl and ElResolver setup according
> to the spec.
>
> Cheers,
> Mathias
>
> 2007/2/24, dennisbyrne@apache.org <de...@apache.org>:
> > Author: dennisbyrne
> > Date: Fri Feb 23 22:59:15 2007
> > New Revision: 511230
> >
> > URL: http://svn.apache.org/viewvc?view=rev&rev=511230
> > Log:
> > implemented sectoin 5.4.1 as far as @PostConstruct is concerned,
> @PreDestroy is still left
> > refactored ManagedBeanBuilder and both Resolvers
> >
> > Added:
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
> >
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> > Modified:
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
> >
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
> >
> > Modified:
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
> > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java?view=diff&rev=511230&r1=511229&r2=511230
> >
> ==============================================================================
> > ---
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
> (original)
> > +++
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/ManagedBeanBuilder.java
> Fri Feb 23 22:59:15 2007
> > @@ -15,23 +15,34 @@
> >   */
> >  package org.apache.myfaces.config;
> >
> > +import java.lang.reflect.Array;
> > +import java.util.ArrayList;
> > +import java.util.HashMap;
> > +import java.util.Iterator;
> > +import java.util.List;
> > +import java.util.Map;
> > +
> >  import javax.el.ELContext;
> > +import javax.el.ELException;
> >  import javax.el.ELResolver;
> >  import javax.el.ExpressionFactory;
> >  import javax.el.ValueExpression;
> > -import org.apache.myfaces.config.element.*;
> > -import org.apache.commons.beanutils.PropertyUtils;
> > -import org.apache.commons.logging.Log;
> > -import org.apache.commons.logging.LogFactory;
> > -
> >  import javax.faces.FacesException;
> >  import javax.faces.application.Application;
> > -import javax.faces.context.FacesContext;
> >  import javax.faces.context.ExternalContext;
> > +import javax.faces.context.FacesContext;
> >  import javax.faces.webapp.UIComponentTag;
> > -import java.util.*;
> > -import java.lang.reflect.Array;
> > -import javax.el.ELException;
> > +
> > +import org.apache.commons.beanutils.PropertyUtils;
> > +import org.apache.commons.logging.Log;
> > +import org.apache.commons.logging.LogFactory;
> > +import org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler
> ;
> > +import org.apache.myfaces.config.element.ListEntries;
> > +import org.apache.myfaces.config.element.ListEntry;
> > +import org.apache.myfaces.config.element.ManagedBean;
> > +import org.apache.myfaces.config.element.ManagedProperty;
> > +import org.apache.myfaces.config.element.MapEntries;
> > +import org.apache.myfaces.config.element.MapEntry;
> >  import org.apache.myfaces.shared_impl.util.ClassUtils;
> >
> >
> > @@ -45,12 +56,22 @@
> >  {
> >      private static Log log = LogFactory.getLog(ManagedBeanBuilder.class
> );
> >      private RuntimeConfig _runtimeConfig;
> > -
> > +    public final static String REQUEST = "request";
> > +    public final static String APPLICATION = "application";
> > +    public final static String SESSION = "session";
> > +    public final static String NONE = "none";
> >
> >      public Object buildManagedBean(FacesContext facesContext,
> ManagedBean beanConfiguration) throws FacesException
> >      {
> > -        Object bean = ClassUtils.newInstance(
> beanConfiguration.getManagedBeanClassName());
> > +        final Object bean = ClassUtils.newInstance(
> beanConfiguration.getManagedBeanClassName());
> >
> > +        final AnnotatedManagedBeanHandler handler = new
> AnnotatedManagedBeanHandler(bean, beanConfiguration);
> > +
> > +        final boolean threwUnchecked = handler.run();
> > +
> > +        if(threwUnchecked)
> > +               return null;
> > +
> >          switch (beanConfiguration.getInitMode())
> >          {
> >              case ManagedBean.INIT_MODE_PROPERTIES:
> > @@ -240,18 +261,18 @@
> >              String valueScope = getScope(facesContext, expression);
> >
> >              // if the target scope is 'none' value scope has to be
> 'none', too
> > -            if (targetScope == null || targetScope.equalsIgnoreCase("none"))
> {
> > -                if (valueScope != null && !(valueScope.equalsIgnoreCase("none")))
> {
> > +            if (targetScope == null || targetScope.equalsIgnoreCase(NONE))
> {
> > +                if (valueScope != null && !(valueScope.equalsIgnoreCase(NONE)))
> {
> >                      return false;
> >                  }
> >                  return true;
> >              }
> >
> >              // 'application' scope can reference 'application' and
> 'none'
> > -            if (targetScope.equalsIgnoreCase("application")) {
> > +            if (targetScope.equalsIgnoreCase(APPLICATION)) {
> >                  if (valueScope != null) {
> > -                    if (valueScope.equalsIgnoreCase("request") ||
> > -                        valueScope.equalsIgnoreCase("session")) {
> > +                    if (valueScope.equalsIgnoreCase(REQUEST) ||
> > +                        valueScope.equalsIgnoreCase(SESSION)) {
> >                          return false;
> >                      }
> >                  }
> > @@ -259,9 +280,9 @@
> >              }
> >
> >              // 'session' scope can reference 'session', 'application',
> and 'none' but not 'request'
> > -            if (targetScope.equalsIgnoreCase("session")) {
> > +            if (targetScope.equalsIgnoreCase(SESSION)) {
> >                  if (valueScope != null) {
> > -                    if (valueScope.equalsIgnoreCase("request")) {
> > +                    if (valueScope.equalsIgnoreCase(REQUEST)) {
> >                          return false;
> >                      }
> >                  }
> > @@ -269,7 +290,7 @@
> >              }
> >
> >              // 'request' scope can reference any value scope
> > -            if (targetScope.equalsIgnoreCase("request")) {
> > +            if (targetScope.equalsIgnoreCase(REQUEST)) {
> >                  return true;
> >              }
> >          }
> > @@ -282,60 +303,59 @@
> >          String beanName = getFirstSegment(expression);
> >          ExternalContext externalContext =
> facesContext.getExternalContext();
> >
> > -        // check scope objects
> > +
> > +               // check scope objects
> >          if (beanName.equalsIgnoreCase("requestScope")) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> > -        if (beanName.equalsIgnoreCase("sessionScope")) {
> > -            return "session";
> > +               if (beanName.equalsIgnoreCase("sessionScope")) {
> > +            return SESSION;
> >          }
> > -        if (beanName.equalsIgnoreCase("applicationScope")) {
> > -            return "application";
> > +               if (beanName.equalsIgnoreCase("applicationScope")) {
> > +            return APPLICATION;
> >          }
> >
> >             // check implicit objects
> >          if (beanName.equalsIgnoreCase("cookie")) {
> > -           return "request";
> > +               return REQUEST;
> >          }
> >          if (beanName.equalsIgnoreCase("facesContext")) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> >
> >          if (beanName.equalsIgnoreCase("header")) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> >          if (beanName.equalsIgnoreCase("headerValues")) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> >
> >          if (beanName.equalsIgnoreCase("initParam")) {
> > -           return "application";
> > +               return APPLICATION;
> >          }
> >          if (beanName.equalsIgnoreCase("param")) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> >          if (beanName.equalsIgnoreCase("paramValues")) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> >          if (beanName.equalsIgnoreCase("view")) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> >
> > -
> >          // not found so far - check all scopes
> >          if (externalContext.getRequestMap().get(beanName) != null) {
> > -            return "request";
> > +            return REQUEST;
> >          }
> >          if (externalContext.getSessionMap().get(beanName) != null) {
> > -            return "session";
> > +            return SESSION;
> >          }
> >          if (externalContext.getApplicationMap().get(beanName) != null)
> {
> > -            return "application";
> > +            return APPLICATION;
> >          }
> >
> >          //not found - check mangaged bean config
> >
> > -
> >          ManagedBean mbc =
> getRuntimeConfig(facesContext).getManagedBean(beanName);
> >
> >          if (mbc != null) {
> > @@ -344,9 +364,6 @@
> >
> >          return null;
> >      }
> > -
> > -
> > -
> >
> >      /**
> >       * Extract the first expression segment, that is the substring up
> to the first '.' or '['
> >
> > Added:
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
> > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java?view=auto&rev=511230
> >
> ==============================================================================
> > ---
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
> (added)
> > +++
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandler.java
> Fri Feb 23 22:59:15 2007
> > @@ -0,0 +1,136 @@
> > +package org.apache.myfaces.config.annotation;
> > +
> > +import java.lang.annotation.Annotation;
> > +import java.lang.reflect.InvocationTargetException;
> > +import java.lang.reflect.Method;
> > +
> > +import javax.faces.FacesException;
> > +
> > +import org.apache.commons.logging.Log;
> > +import org.apache.commons.logging.LogFactory;
> > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > +import org.apache.myfaces.config.element.ManagedBean;
> > +
> > +/**
> > + * @see JSF spec 1.2, section 5.4
> > + * @warn Do not import javax.annotation.* in this class
> > + * @author Dennis Byrne
> > + */
> > +
> > +public class AnnotatedManagedBeanHandler {
> > +
> > +       private static Log log = LogFactory.getLog(
> AnnotatedManagedBeanHandler.class);
> > +
> > +       private Object managedBean;
> > +
> > +       private ManagedBean beanConfiguration;
> > +
> > +       public AnnotatedManagedBeanHandler(Object managedBean,
> ManagedBean beanConfiguration) {
> > +
> > +               if (managedBean == null) {
> > +                       throw new NullPointerException("Object
> managedBean");
> > +               }
> > +
> > +               if (beanConfiguration == null) {
> > +                       throw new NullPointerException("ManagedBean
> beanConfiguration");
> > +               }
> > +
> > +               this.managedBean = managedBean;
> > +               this.beanConfiguration = beanConfiguration;
> > +
> > +       }
> > +
> > +       public boolean run() {
> > +
> > +               boolean threwUnchecked = false;
> > +
> > +               if (ManagedBeanBuilder.NONE.equals(
> beanConfiguration.getManagedBeanScope())) {
> > +                       ; // this only applies to a, s, and r scope
> beans
> > +               } else {
> > +                       threwUnchecked = run(managedBean.getClass
> ().getMethods());
> > +               }
> > +
> > +               return threwUnchecked;
> > +       }
> > +
> > +       private boolean run(Method[] methods) {
> > +
> > +               boolean threwUnchecked = false;
> > +
> > +               for (Method method : methods)
> > +                       if (run(method)) {
> > +                               threwUnchecked = true;
> > +                               break;
> > +                       }// break if we invoke method ? or invoke all w/
> annoation?
> > +
> > +               return threwUnchecked;
> > +       }
> > +
> > +       private boolean run(Method method) {
> > +
> > +               Annotation[] annotations = method.getAnnotations();
> > +               boolean threwUnchecked = false;
> > +
> > +               for (Annotation annotation : annotations) {
> > +                       if (isPostConstruct(annotation)) {
> > +                               if (run(annotation, method)) {
> > +                                       threwUnchecked = true;
> > +                                       break; // spec says not to call
> anymore methods on this
> > +                               }
> > +                       }
> > +               }
> > +
> > +               return threwUnchecked;
> > +       }
> > +
> > +       private boolean run(Annotation annotation, Method method) {
> > +
> > +               boolean threwUnchecked = true; // start w/ pessimism
> > +
> > +               try {
> > +
> > +                       method.invoke(managedBean, null);
> > +
> > +                       threwUnchecked = false;
> > +
> > +               } catch (InvocationTargetException ite) { // catch most
> specific first
> > +
> > +                       final Throwable cause = ite.getCause();
> > +
> > +                       handleException(method, cause == null ? ite :
> cause);
> > +
> > +               } catch (Exception e) {
> > +
> > +                       handleException(method, e);
> > +               }
> > +
> > +               return threwUnchecked;
> > +       }
> > +
> > +       private void handleException(Method method, Throwable e) {
> > +               final String genericLoggingMessage =
> getGenericLoggingMessage(method, e);
> > +
> > +               if (e instanceof RuntimeException) // why did they make
> RE extend E ?
> > +               {
> > +                       log.error(genericLoggingMessage + " MyFaces
> cannot " + " put the bean in "
> > +                                       +
> beanConfiguration.getManagedBeanScope() + " scope " + " ... execution
> continues. ");
> > +               } else {
> > +                       throw new FacesException(genericLoggingMessage +
> " The spec is ambivalent on checked exceptions.");
> > +               }
> > +       }
> > +
> > +       private String getGenericLoggingMessage(Method method, Throwable
> e) {
> > +               return "When invoking " + method.getName() + " on a
> managed bean '" + beanConfiguration.getManagedBeanName()
> > +                               + "'," + " an exception " + e.getClass()
> + "{" + e.getMessage() + "} was thrown. "
> > +                               + " See section 5.4.1 of the JSF
> specification.";
> > +       }
> > +
> > +       private boolean isPostConstruct(Annotation annotation) {
> > +
> > +               final Class<? extends Annotation> annotationType =
> annotation.annotationType();
> > +               final String name = annotationType.getName();
> > +               // use the literal String because we want to avoid
> ClassDefNotFoundError
> > +               return "javax.annotation.PostConstruct".equals(name);
> > +
> > +       }
> > +}
> >
> > Modified:
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
> > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java?view=diff&rev=511230&r1=511229&r2=511230
> >
> ==============================================================================
> > ---
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
> (original)
> > +++
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/VariableResolverImpl.java
> Fri Feb 23 22:59:15 2007
> > @@ -29,6 +29,7 @@
> >  import org.apache.myfaces.config.ManagedBeanBuilder;
> >  import org.apache.myfaces.config.RuntimeConfig;
> >  import org.apache.myfaces.config.element.ManagedBean;
> > +import org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.Scope
> ;
> >
> >  import org.apache.commons.logging.Log;
> >  import org.apache.commons.logging.LogFactory;
> > @@ -313,25 +314,7 @@
> >                  beansUnderConstruction.remove(managedBeanName);
> >              }
> >
> > -            // put in scope
> > -            String scopeKey = mbc.getManagedBeanScope();
> > -
> > -            // find the scope handler object
> > -            Scope scope = (Scope) _scopes.get(scopeKey);
> > -            if (scope == null)
> > -            {
> > -                log.error("Managed bean '" + name + "' has illegal
> scope: "
> > -                    + scopeKey);
> > -            }
> > -            else
> > -            {
> > -                scope.put(externalContext, name, obj);
> > -            }
> > -
> > -            if(obj==null && log.isDebugEnabled())
> > -            {
> > -                log.debug("Variable '" + name + "' could not be
> resolved.");
> > -            }
> > +            putInScope(mbc, externalContext, obj);
> >
> >              return obj;
> >          }
> > @@ -344,6 +327,28 @@
> >          return null;
> >      }
> >
> > +       private void putInScope(ManagedBean managedBean, ExternalContext
> extContext, Object obj) {
> > +
> > +               final String managedBeanName =
> managedBean.getManagedBeanName();
> > +
> > +               if (obj == null) {
> > +                       if (log.isDebugEnabled())
> > +                               log.debug("Variable '" + managedBeanName
> + "' could not be resolved.");
> > +               } else {
> > +
> > +                       String scopeKey =
> managedBean.getManagedBeanScope();
> > +
> > +                       // find the scope handler object
> > +                       Scope scope = (Scope) _scopes.get(scopeKey);
> > +                       if (scope == null) {
> > +                               log.error("Managed bean '" +
> managedBeanName + "' has illegal scope: " + scopeKey);
> > +                       } else {
> > +                               scope.put(extContext, managedBeanName,
> obj);
> > +                       }
> > +               }
> > +
> > +       }
> > +
> >      protected RuntimeConfig getRuntimeConfig(FacesContext facesContext)
> >      {
> >          if (_runtimeConfig == null)
> >
> > Modified:
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
> > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java?view=diff&rev=511230&r1=511229&r2=511230
> >
> ==============================================================================
> > ---
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
> (original)
> > +++
> myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/el/unified/resolver/ManagedBeanResolver.java
> Fri Feb 23 22:59:15 2007
> > @@ -192,22 +192,30 @@
> >              beansUnderConstruction.remove(managedBeanName);
> >          }
> >
> > -        // put in scope
> > -        String scopeKey = managedBean.getManagedBeanScope();
> > +       putInScope(managedBean, extContext, obj);
> > +    }
> > +
> > +       private void putInScope(ManagedBean managedBean, ExternalContext
> extContext, Object obj) {
> >
> > -        // find the scope handler object
> > -        Scope scope = (Scope) _scopes.get(scopeKey);
> > -        if (scope == null) {
> > -            log.error("Managed bean '" + managedBeanName + "' has
> illegal scope: "
> > -                + scopeKey);
> > -        } else {
> > -            scope.put(extContext, managedBeanName, obj);
> > -        }
> > +               final String managedBeanName =
> managedBean.getManagedBeanName();
> > +
> > +               if (obj == null) {
> > +                       if (log.isDebugEnabled())
> > +                               log.debug("Variable '" + managedBeanName
> + "' could not be resolved.");
> > +               } else {
> >
> > -        if(obj==null && log.isDebugEnabled()) {
> > -            log.debug("Variable '" + managedBeanName + "' could not be
> resolved.");
> > -        }
> > -    }
> > +                       String scopeKey =
> managedBean.getManagedBeanScope();
> > +
> > +                       // find the scope handler object
> > +                       Scope scope = (Scope) _scopes.get(scopeKey);
> > +                       if (scope == null) {
> > +                               log.error("Managed bean '" +
> managedBeanName + "' has illegal scope: " + scopeKey);
> > +                       } else {
> > +                               scope.put(extContext, managedBeanName,
> obj);
> > +                       }
> > +               }
> > +
> > +       }
> >
> >      // get the FacesContext from the ELContext
> >      private FacesContext facesContext(ELContext context) {
> >
> > Added:
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
> > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java?view=auto&rev=511230
> >
> ==============================================================================
> > ---
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
> (added)
> > +++
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedExceptionManagedBeanHandlerTestCase.java
> Fri Feb 23 22:59:15 2007
> > @@ -0,0 +1,88 @@
> > +package org.apache.myfaces.config.annotation;
> > +
> > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > +import org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler
> ;
> > +import org.apache.myfaces.config.impl.digester.elements.ManagedBean;
> > +
> > +import junit.framework.TestCase;
> > +
> > +/**
> > + * @author Dennis Byrne
> > + */
> > +
> > +public class AnnotatedExceptionManagedBeanHandlerTestCase extends
> TestCase {
> > +
> > +       protected AnnotatedManagedBean managedBean;
> > +
> > +       protected AnnotatedManagedBeanHandler handler;
> > +
> > +       protected ManagedBean managedBeanConf;
> > +
> > +       public void setUp() {
> > +               managedBean = new AnnotatedManagedBean(new Exception());
> > +               managedBeanConf = new ManagedBean();
> > +               handler = new AnnotatedManagedBeanHandler(managedBean,
> managedBeanConf);
> > +       }
> > +
> > +       public void testShouldNotBlowUpForNoneScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.NONE);
> > +
> > +               boolean exceptionThrown = false;
> > +
> > +               try {
> > +                       handler.run();
> > +               } catch (Exception e) {
> > +                       exceptionThrown = true;
> > +               }
> > +
> > +               assertFalse(managedBean.isPostConstructCalled());
> > +               assertFalse(exceptionThrown);
> > +       }
> > +
> > +       public void testShouldBlowUpForRequestScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.REQUEST);
> > +
> > +               boolean exceptionThrown = false;
> > +
> > +               try {
> > +                       handler.run();
> > +               } catch (Exception e) {
> > +                       exceptionThrown = true;
> > +               }
> > +
> > +               assertTrue(exceptionThrown);
> > +       }
> > +
> > +       public void testShouldBlowUpForSessionScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.SESSION);
> > +
> > +               boolean exceptionThrown = false;
> > +
> > +               try {
> > +                       handler.run();
> > +               } catch (Exception e) {
> > +                       exceptionThrown = true;
> > +               }
> > +
> > +               assertTrue(exceptionThrown);
> > +       }
> > +
> > +       public void testShouldBlowUpForApplicationScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.APPLICATION
> );
> > +
> > +               boolean exceptionThrown = false;
> > +
> > +               try {
> > +                       handler.run();
> > +               } catch (Exception e) {
> > +                       exceptionThrown = true;
> > +               }
> > +
> > +               assertTrue(exceptionThrown);
> > +       }
> > +
> > +}
> >
> > Added:
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
> > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java?view=auto&rev=511230
> >
> ==============================================================================
> > ---
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
> (added)
> > +++
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBean.java
> Fri Feb 23 22:59:15 2007
> > @@ -0,0 +1,46 @@
> > +package org.apache.myfaces.config.annotation;
> > +
> > +import javax.annotation.PostConstruct;
> > +import javax.annotation.PreDestroy;
> > +
> > +/**
> > + * @author Dennis Byrne
> > + */
> > +
> > +class AnnotatedManagedBean {
> > +
> > +       private boolean postConstructCalled = false; // using a stub for
> a mock
> > +
> > +       private boolean preDestroyCalled = false; // using a stob for a
> mock here
> > +
> > +       private Throwable throwable;
> > +
> > +       public AnnotatedManagedBean(Throwable throwable) {
> > +               this.throwable = throwable;
> > +       }
> > +
> > +       @PostConstruct
> > +       public void postConstruct() throws Throwable {
> > +               postConstructCalled = true;
> > +
> > +               if (throwable != null)
> > +                       throw throwable;
> > +       }
> > +
> > +       @PreDestroy
> > +       public void preDestroy() throws Throwable {
> > +               preDestroyCalled = true;
> > +
> > +               if (throwable != null)
> > +                       throw throwable;
> > +       }
> > +
> > +       boolean isPostConstructCalled() {
> > +               return postConstructCalled;
> > +       }
> > +
> > +       boolean isPreDestroyCalled() {
> > +               return preDestroyCalled;
> > +       }
> > +
> > +}
> >
> > Added:
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
> > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java?view=auto&rev=511230
> >
> ==============================================================================
> > ---
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
> (added)
> > +++
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedManagedBeanHandlerTestCase.java
> Fri Feb 23 22:59:15 2007
> > @@ -0,0 +1,61 @@
> > +package org.apache.myfaces.config.annotation;
> > +
> > +import junit.framework.TestCase;
> > +
> > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > +import org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler
> ;
> > +import org.apache.myfaces.config.impl.digester.elements.ManagedBean;
> > +
> > +/**
> > + * @author Dennis Byrne
> > + */
> > +
> > +public class AnnotatedManagedBeanHandlerTestCase extends TestCase {
> > +
> > +       protected AnnotatedManagedBean managedBean;
> > +       protected AnnotatedManagedBeanHandler handler;
> > +       protected ManagedBean managedBeanConf;
> > +
> > +       public void setUp() {
> > +               managedBean = new AnnotatedManagedBean(null);
> > +               managedBeanConf = new ManagedBean();
> > +               handler = new AnnotatedManagedBeanHandler(managedBean,
> managedBeanConf);
> > +       }
> > +
> > +       public void testShouldNotInvokeForNoneScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.NONE);
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertFalse(threwUnchecked);
> > +               assertFalse(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +       public void testShouldInvokeForRequestScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.REQUEST);
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertFalse(threwUnchecked);
> > +               assertTrue(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +       public void testShouldInvokeForSessionScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.SESSION);
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertFalse(threwUnchecked);
> > +               assertTrue(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +       public void testShouldInvokeForApplicationScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.APPLICATION
> );
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertFalse(threwUnchecked);
> > +               assertTrue(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +}
> >
> > Added:
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> > URL:
> http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java?view=auto&rev=511230
> >
> ==============================================================================
> > ---
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> (added)
> > +++
> myfaces/core/branches/jsf12/impl/src/test/java/org/apache/myfaces/config/annotation/AnnotatedRuntimeExceptionManagedBeanHandlerTestCase.java
> Fri Feb 23 22:59:15 2007
> > @@ -0,0 +1,61 @@
> > +package org.apache.myfaces.config.annotation;
> > +
> > +import junit.framework.TestCase;
> > +
> > +import org.apache.myfaces.config.ManagedBeanBuilder;
> > +import org.apache.myfaces.config.annotation.AnnotatedManagedBeanHandler
> ;
> > +import org.apache.myfaces.config.impl.digester.elements.ManagedBean;
> > +
> > +/**
> > + * @author Dennis Byrne
> > + */
> > +
> > +public class AnnotatedRuntimeExceptionManagedBeanHandlerTestCase
> extends TestCase {
> > +
> > +       protected AnnotatedManagedBean managedBean;
> > +       protected AnnotatedManagedBeanHandler handler;
> > +       protected ManagedBean managedBeanConf;
> > +
> > +       public void setUp() {
> > +               managedBean = new AnnotatedManagedBean(new
> RuntimeException());
> > +               managedBeanConf = new ManagedBean();
> > +               handler = new AnnotatedManagedBeanHandler(managedBean,
> managedBeanConf);
> > +       }
> > +
> > +       public void testShouldNotInvokeForNoneScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.NONE);
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertFalse(threwUnchecked);
> > +               assertFalse(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +       public void testShouldInvokeForRequestScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.REQUEST);
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertTrue(threwUnchecked);
> > +               assertTrue(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +       public void testShouldInvokeForSessionScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.SESSION);
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertTrue(threwUnchecked);
> > +               assertTrue(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +       public void testShouldInvokeForApplicationScope() {
> > +
> > +               managedBeanConf.setScope(ManagedBeanBuilder.APPLICATION
> );
> > +               boolean threwUnchecked = handler.run();
> > +
> > +               assertTrue(threwUnchecked);
> > +               assertTrue(managedBean.isPostConstructCalled());
> > +       }
> > +
> > +}
> >
> >
> >
>
>
> --
> Mathias
>



-- 
Dennis Byrne