Author: struberg
Date: Fri Jul 23 01:26:53 2010
New Revision: 966925

URL: http://svn.apache.org/viewvc?rev=966925&view=rev
Log:
OWB-419 fix our ELResolvers

This commit cleans up a lot old stuff and improves the caching
for EL evaluations heavily. We now cache every resolved Bean proxy
until the end of the request. This doesn't hurt even if the managed beans
have a shorter lifecycle, because the proxy will take care of such scenarios!

Removed:
    
openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10ContextListener.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/OwbElContextListener.java
Modified:
    
openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10Adaptor.java
    
openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10Resolver.java
    
openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10ValueExpression.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/ELContextStore.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WebBeansELResolver.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WrappedValueExpression.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/el22/EL22Adaptor.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/StandaloneLifeCycle.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java
    
openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/OwbApplication.java
    
openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/OwbApplication.java
    
openwebbeans/trunk/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/ELImpl.java
    
openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/adaptor/ELAdaptor.java
    
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java
    
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
    
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
    
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/test/EnterpriseTestLifeCycle.java

Modified: 
openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10Adaptor.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10Adaptor.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10Adaptor.java
 (original)
+++ 
openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10Adaptor.java
 Fri Jul 23 01:26:53 2010
@@ -18,7 +18,6 @@
  */
 package org.apache.webbeans.el10;
 
-import javax.el.ELContextListener;
 import javax.el.ELResolver;
 import javax.el.ExpressionFactory;
 
@@ -28,12 +27,6 @@ public class EL10Adaptor implements ELAd
 {
 
     @Override
-    public ELContextListener getOwbELContextListener()
-    {
-        return new EL10ContextListener();
-    }
-
-    @Override
     public ELResolver getOwbELResolver()
     {
         return new EL10Resolver();

Modified: 
openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10Resolver.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10Resolver.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10Resolver.java
 (original)
+++ 
openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10Resolver.java
 Fri Jul 23 01:26:53 2010
@@ -62,74 +62,106 @@ public class EL10Resolver extends ELReso
     @SuppressWarnings("unchecked")
     public Object getValue(ELContext context, Object obj, Object property) 
throws NullPointerException, PropertyNotFoundException, ELException
     {
-        //Manager instance
-        BeanManagerImpl manager = BeanManagerImpl.getManager();
-        
         //Bean instance
-        Object object = null;
-        
+        Object contextualInstance = null;
+
         //Managed bean
         Bean<Object> bean = null;
-        
+
         //Creational context for creating instance
         CreationalContext<Object> creationalContext = null;
-        
-        //Local store, set by the OwbELContextListener
-        ELContextStore store = ELContextStore.localContext.get();
+
+        //Local store, create if not exist
+        ELContextStore store = ELContextStore.getInstance(true);
+
+        //Manager instance
+        BeanManagerImpl manager = store.getBeanManager();
+
+
         if (obj == null)
-        {                      
+        {
             //Name of the bean
             String name = (String) property;
             //Get beans
             Set<Bean<?>> beans = manager.getBeans(name);
-            
+
             //Found?
             if(beans != null && !beans.isEmpty())
             {
                 bean = (Bean<Object>)beans.iterator().next();
-                creationalContext = manager.createCreationalContext(bean);     
               
-                //Already registered in store
+
                 if(bean.getScope().equals(Dependent.class))
                 {
-                    object = store.getDependent(bean);
-                }                    
+                    contextualInstance = 
getDependentContextualInstance(manager, store, context, bean);
+                }
+                else
+                {
+                    // now we check for NormalScoped beans
+                    contextualInstance = 
getNormalScopedContextualInstance(manager, store, context, bean);
+                }
             }
-            
-            //If no object found on the store
-            if(object == null)
+        }
+
+        return contextualInstance;
+    }
+
+    private Object getNormalScopedContextualInstance(BeanManagerImpl manager, 
ELContextStore store, ELContext context, Bean<Object> bean)
+    {
+
+        Object contextualInstance = store.getNormalScoped(bean);
+
+        if (contextualInstance != null)
+        {
+            context.setPropertyResolved(true);
+        }
+        else
+        {
+            CreationalContext<Object> creationalContext = 
manager.createCreationalContext(bean);
+            contextualInstance = manager.getReference(bean, Object.class, 
creationalContext);
+            if (contextualInstance != null)
             {
-                //Getting object
-                object = manager.getInstanceByName(name,creationalContext);    
            
-                if (object != null)
-                {                    
-                    context.setPropertyResolved(true);   
-                    //Adding into store
-                    store.addDependent(bean, object, creationalContext);
-                }                    
+                context.setPropertyResolved(true);
+                //Adding into store
+                store.addNormalScoped(bean, contextualInstance);
             }
+        }
+
+        return contextualInstance;
+    }
+
+
+    private Object getDependentContextualInstance(BeanManagerImpl manager, 
ELContextStore store, ELContext context, Bean<Object> bean)
+    {
+        Object contextualInstance = store.getDependent(bean);
+        if(contextualInstance != null)
+        {
             //Object found on the store
-            else
+            context.setPropertyResolved(true);
+        }
+        else
+        {
+            // If no contextualInstance found on the store
+            CreationalContext<Object> creationalContext = 
manager.createCreationalContext(bean);
+            contextualInstance = manager.getReference(bean, Object.class, 
creationalContext);
+            if (contextualInstance != null)
             {
-                context.setPropertyResolved(true);                    
+                context.setPropertyResolved(true);
+                //Adding into store
+                store.addDependent(bean, contextualInstance, 
creationalContext);
             }
-            
         }
-
-        return object;
+        return contextualInstance;
     }
 
     @Override
     public boolean isReadOnly(ELContext arg0, Object arg1, Object arg2) throws 
NullPointerException, PropertyNotFoundException, ELException
     {
-        
         return false;
     }
 
     @Override
     public void setValue(ELContext arg0, Object arg1, Object arg2, Object 
arg3) throws NullPointerException, PropertyNotFoundException, 
PropertyNotWritableException, ELException
     {
-        
-        
     }
 
 }

Modified: 
openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10ValueExpression.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10ValueExpression.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10ValueExpression.java
 (original)
+++ 
openwebbeans/trunk/webbeans-el10/src/main/java/org/apache/webbeans/el10/EL10ValueExpression.java
 Fri Jul 23 01:26:53 2010
@@ -62,10 +62,10 @@ public class EL10ValueExpression extends
         finally
         {
             //Destroy dependent store
-            ELContextStore store = ELContextStore.localContext.get();
+            ELContextStore store = ELContextStore.getInstance(false);
             if(store != null)
             {
-                store.destroy();
+                store.destroyDependents();
             }
         }
         

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
 Fri Jul 23 01:26:53 2010
@@ -205,7 +205,6 @@ public abstract class AbstractOwbBean<T>
     /*
      * (non-Javadoc)
      * @param creationalContext the contextual instance has been created in
-     * @see javax.webbeans.bean.Component#destroy(java.lang.Object)
      */
     public void destroy(T instance, CreationalContext<T> creationalContext)
     {

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/ELContextStore.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/ELContextStore.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/ELContextStore.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/ELContextStore.java
 Fri Jul 23 01:26:53 2010
@@ -18,6 +18,8 @@
  */
 package org.apache.webbeans.el;
 
+import org.apache.webbeans.container.BeanManagerImpl;
+
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
@@ -26,13 +28,48 @@ import javax.enterprise.context.Dependen
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 
+/**
+ * The ELContextStore serves two different purposes
+ *
+ * <ol>
+ *  <li>
+ *   Store {...@link javax.enterprise.context.Dependent} objects of the same
+ *   invocation. See spec section 6.4.3. <i>Dependent pseudo-scope and Unified 
EL</i>.
+ *  </li>
+ *  <li>
+ *   Store the Contextual Reference for each name per thread. This is a 
performance
+ *   tuning strategy, because creating a {...@link 
org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler}
+ *   for each and every EL call is very expensive.
+ *  </li>
+ * </ol>
+ */
 public class ELContextStore
 {
     //X TODO MUST NOT BE PUBLIC!
-    public static ThreadLocal<ELContextStore> localContext = new 
ThreadLocal<ELContextStore>();
+    private static ThreadLocal<ELContextStore> contextStores = new 
ThreadLocal<ELContextStore>();
+
+    /**
+     * @param createIfNotExist if <code>false</code> doesn't create a new 
ELContextStore if none exists
+     * @return
+     */
+    public static ELContextStore getInstance(boolean createIfNotExist)
+    {
+        ELContextStore store = contextStores.get();
+
+        if (store == null && createIfNotExist)
+        {
+            store = new ELContextStore();
+            contextStores.set(store);
+        }
+
+        return store;
+    }
 
     private Map<Bean<?>, CreationalStore> dependentObjects = new 
HashMap<Bean<?>, CreationalStore>();
-    
+    private Map<Bean<?>, Object>          normalScopedObjects = new 
HashMap<Bean<?>, Object>();
+
+    private BeanManagerImpl beanManager;
+
     private static class CreationalStore
     {
         private Object object;
@@ -63,11 +100,13 @@ public class ELContextStore
         
         
     }
-    
-    public ELContextStore()
+
+    /**
+     * This class can only get constructed via {...@link #getInstance(boolean)}
+     */
+    private ELContextStore()
     {
-        
-    }    
+    }
     
     public void addDependent(Bean<?> bean, Object dependent, 
CreationalContext<?> creationalContext)
     {
@@ -79,21 +118,33 @@ public class ELContextStore
     
     public Object getDependent(Bean<?> bean)
     {
-        if(this.dependentObjects.containsKey(bean))
-        {
-            return this.dependentObjects.get(bean).getObject();
-        }
-        
-        return null;
+        CreationalStore sc = this.dependentObjects.get(bean);
+
+        return sc != null ? sc.getObject() : null;
+    }
+
+    public Object getNormalScoped(Bean<?> bean)
+    {
+        return normalScopedObjects.get(bean);
+    }
+
+    public void addNormalScoped(Bean<?> bean, Object contextualInstance)
+    {
+        normalScopedObjects.put(bean, contextualInstance);
     }
     
-    public boolean isExist(Bean<?> bean)
+    public BeanManagerImpl getBeanManager()
     {
-        return this.dependentObjects.containsKey(bean);
+        if (beanManager == null)
+        {
+            beanManager = BeanManagerImpl.getManager();
+        }
+        return beanManager;
     }
+
     
     @SuppressWarnings("unchecked")
-    public void destroy()
+    public void destroyDependents()
     {
         Set<Bean<?>> beans = this.dependentObjects.keySet();
         for(Bean<?> bean : beans)
@@ -105,5 +156,17 @@ public class ELContextStore
         
         this.dependentObjects.clear();
     }
-    
+
+    /**
+     * This needs to be called at the end of each request.
+     * Because after the request ends, a server might reuse
+     * the Thread to serve other requests (from other WebApps) 
+     */
+    public void destroyELContextStore()
+    {
+        beanManager = null;
+        normalScopedObjects.clear();
+        contextStores.set(null);
+        contextStores.remove();
+    }
 }

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WebBeansELResolver.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WebBeansELResolver.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WebBeansELResolver.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WebBeansELResolver.java
 Fri Jul 23 01:26:53 2010
@@ -39,7 +39,7 @@ import org.apache.webbeans.container.Bea
  * <p>
  * EL is registered with the JSF in faces-config.xml if there exist a 
faces-config.xml
  * in the application location <code>WEB-INF/</code>. Otherwise it is 
registered with
- * {...@link JspApplicationContext} at start-up. 
+ * JspApplicationContext at start-up. 
  * </p>
  * 
  * <p>
@@ -92,11 +92,8 @@ public class WebBeansELResolver extends 
     @SuppressWarnings("unchecked")
     public Object getValue(ELContext context, Object obj, Object property) 
throws NullPointerException, PropertyNotFoundException, ELException
     {
-        //Manager instance
-        BeanManagerImpl manager = BeanManagerImpl.getManager();
-        
         //Bean instance
-        Object object = null;
+        Object contextualInstance = null;
         
         //Managed bean
         Bean<Object> bean = null;
@@ -104,48 +101,86 @@ public class WebBeansELResolver extends 
         //Creational context for creating instance
         CreationalContext<Object> creationalContext = null;
         
-        //Local store, set by the OwbELContextListener
-        ELContextStore store = ELContextStore.localContext.get();
+        //Local store, create if not exist
+        ELContextStore store = ELContextStore.getInstance(true);
+
+        //Manager instance
+        BeanManagerImpl manager = store.getBeanManager();
+
+
         if (obj == null)
         {                      
             //Name of the bean
             String name = (String) property;
             //Get beans
             Set<Bean<?>> beans = manager.getBeans(name);
-            
+
             //Found?
             if(beans != null && !beans.isEmpty())
             {
                 bean = (Bean<Object>)beans.iterator().next();
-                creationalContext = manager.createCreationalContext(bean);     
               
-                //Already registered in store
+
                 if(bean.getScope().equals(Dependent.class))
                 {
-                    object = store.getDependent(bean);
-                }                    
+                    contextualInstance = 
getDependentContextualInstance(manager, store, context, bean);
+                }
+                else
+                {
+                    // now we check for NormalScoped beans
+                    contextualInstance = 
getNormalScopedContextualInstance(manager, store, context, bean);
+                }
             }
-            
-            //If no object found on the store
-            if(object == null)
+        }
+
+        return contextualInstance;
+    }
+
+    private Object getNormalScopedContextualInstance(BeanManagerImpl manager, 
ELContextStore store, ELContext context, Bean<Object> bean)
+    {
+
+        Object contextualInstance = store.getNormalScoped(bean);
+
+        if (contextualInstance != null)
+        {
+            context.setPropertyResolved(true);
+        }
+        else
+        {
+            CreationalContext<Object> creationalContext = 
manager.createCreationalContext(bean);
+            contextualInstance = manager.getReference(bean, Object.class, 
creationalContext);
+            if (contextualInstance != null)
             {
-                //Getting object
-                object = manager.getInstanceByName(name,creationalContext);    
            
-                if (object != null)
-                {                    
-                    context.setPropertyResolved(true);   
-                    //Adding into store
-                    store.addDependent(bean, object, creationalContext);
-                }                    
+                context.setPropertyResolved(true);
+                //Adding into store
+                store.addNormalScoped(bean, contextualInstance);
             }
+        }
+
+        return contextualInstance;
+    }
+
+
+    private Object getDependentContextualInstance(BeanManagerImpl manager, 
ELContextStore store, ELContext context, Bean<Object> bean)
+    {
+        Object contextualInstance = store.getDependent(bean);
+        if(contextualInstance != null)
+        {
             //Object found on the store
-            else
+            context.setPropertyResolved(true);
+        }
+        else
+        {
+            // If no contextualInstance found on the store
+            CreationalContext<Object> creationalContext = 
manager.createCreationalContext(bean);
+            contextualInstance = manager.getReference(bean, Object.class, 
creationalContext);
+            if (contextualInstance != null)
             {
-                context.setPropertyResolved(true);                    
+                context.setPropertyResolved(true);
+                //Adding into store
+                store.addDependent(bean, contextualInstance, 
creationalContext);
             }
-            
         }
-
-        return object;
+        return contextualInstance;
     }
 
     /**

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WrappedValueExpression.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WrappedValueExpression.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WrappedValueExpression.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WrappedValueExpression.java
 Fri Jul 23 01:26:53 2010
@@ -71,10 +71,10 @@ public class WrappedValueExpression exte
         finally
         {
             //Destroy dependent store
-            ELContextStore store = ELContextStore.localContext.get();
+            ELContextStore store = ELContextStore.getInstance(false);
             if(store != null)
             {
-                store.destroy();
+                store.destroyDependents();
             }
         }
         

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/el22/EL22Adaptor.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/el22/EL22Adaptor.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/el22/EL22Adaptor.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/el22/EL22Adaptor.java
 Fri Jul 23 01:26:53 2010
@@ -18,11 +18,9 @@
  */
 package org.apache.webbeans.el.el22;
 
-import javax.el.ELContextListener;
 import javax.el.ELResolver;
 import javax.el.ExpressionFactory;
 
-import org.apache.webbeans.el.OwbElContextListener;
 import org.apache.webbeans.el.WebBeansELResolver;
 import org.apache.webbeans.el.WrappedExpressionFactory;
 import org.apache.webbeans.spi.adaptor.ELAdaptor;
@@ -35,12 +33,6 @@ public class EL22Adaptor implements ELAd
     }
 
     @Override
-    public ELContextListener getOwbELContextListener()
-    {
-        return new OwbElContextListener();
-    }
-
-    @Override
     public ELResolver getOwbELResolver()
     {        
         return new WebBeansELResolver();

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/StandaloneLifeCycle.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/StandaloneLifeCycle.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/StandaloneLifeCycle.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/StandaloneLifeCycle.java
 Fri Jul 23 01:26:53 2010
@@ -22,6 +22,7 @@ import java.util.Properties;
 
 import org.apache.webbeans.config.WebBeansFinder;
 import org.apache.webbeans.context.ContextFactory;
+import org.apache.webbeans.el.ELContextStore;
 import org.apache.webbeans.logger.WebBeansLogger;
 import org.apache.webbeans.util.WebBeansUtil;
 
@@ -69,6 +70,13 @@ public class StandaloneLifeCycle extends
         ContextFactory.destroySingletonContext(null);
 
         ContextFactory.cleanUpContextFactory();
+
+        // clean up the EL caches after each request
+        ELContextStore elStore = ELContextStore.getInstance(false);
+        if (elStore != null)
+        {
+            elStore.destroyELContextStore();
+        }
     }
     
 }
\ No newline at end of file

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java
 Fri Jul 23 01:26:53 2010
@@ -69,9 +69,6 @@ public final class AnnotationUtil
      */
     public static boolean hasMethodAnnotation(Method method, Class<? extends 
Annotation> clazz)
     {
-        Asserts.assertNotNull(method, "Method argument can not be null");
-        Asserts.nullCheckForClass(clazz);
-
         Annotation[] anns = method.getDeclaredAnnotations();
         for (Annotation annotation : anns)
         {

Modified: 
openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/OwbApplication.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/OwbApplication.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/OwbApplication.java
 (original)
+++ 
openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/OwbApplication.java
 Fri Jul 23 01:26:53 2010
@@ -65,7 +65,6 @@ public class OwbApplication extends Appl
     {
         ELAdaptor elAdaptor = ServiceLoader.getService(ELAdaptor.class);
         this.wrappedApplication = wrappedApplication;
-        
this.wrappedApplication.addELContextListener(elAdaptor.getOwbELContextListener());
     }
 
     @Override

Modified: 
openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/OwbApplication.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/OwbApplication.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/OwbApplication.java
 (original)
+++ 
openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/OwbApplication.java
 Fri Jul 23 01:26:53 2010
@@ -44,7 +44,6 @@ import javax.faces.event.ActionListener;
 import javax.faces.validator.Validator;
 
 import org.apache.webbeans.container.BeanManagerImpl;
-import org.apache.webbeans.el10.EL10ContextListener;
 
 @SuppressWarnings("unchecked")
 public class OwbApplication extends Application
@@ -56,7 +55,6 @@ public class OwbApplication extends Appl
     public OwbApplication(Application wrappedApplication)
     {
         this.wrappedApplication = wrappedApplication;
-        this.wrappedApplication.addELContextListener(new 
EL10ContextListener());
     }
 
     @Override

Modified: 
openwebbeans/trunk/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/ELImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/ELImpl.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/ELImpl.java
 (original)
+++ 
openwebbeans/trunk/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/ELImpl.java
 Fri Jul 23 01:26:53 2010
@@ -24,7 +24,6 @@ import javax.el.BeanELResolver;
 import javax.el.CompositeELResolver;
 import javax.el.ELContext;
 import javax.el.ELContextEvent;
-import javax.el.ELContextListener;
 import javax.el.ELResolver;
 import javax.el.ExpressionFactory;
 import javax.el.FunctionMapper;
@@ -36,7 +35,6 @@ import javax.el.VariableMapper;
 import org.apache.el.ExpressionFactoryImpl;
 import org.apache.el.lang.FunctionMapperImpl;
 import org.apache.el.lang.VariableMapperImpl;
-import org.apache.webbeans.el.OwbElContextListener;
 import org.apache.webbeans.el.WebBeansELResolver;
 import org.apache.webbeans.el.WrappedExpressionFactory;
 import org.jboss.jsr299.tck.spi.EL;
@@ -45,8 +43,6 @@ public class ELImpl implements EL
 {
     private static final ExpressionFactory EXPRESSION_FACTORY = new 
WrappedExpressionFactory(new ExpressionFactoryImpl());
     
-    public static final ELContextListener EL_CONTEXT_LISTENER = new 
OwbElContextListener();
-
     public ELImpl()
     {
     }
@@ -110,7 +106,6 @@ public class ELImpl implements EL
     {   
         ELContext context = new ELContextImpl();
         ELContextEvent event = new ELContextEvent(context);
-        EL_CONTEXT_LISTENER.contextCreated(event);
         
         return context;
     }

Modified: 
openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/adaptor/ELAdaptor.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/adaptor/ELAdaptor.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/adaptor/ELAdaptor.java
 (original)
+++ 
openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/adaptor/ELAdaptor.java
 Fri Jul 23 01:26:53 2010
@@ -18,15 +18,12 @@
  */
 package org.apache.webbeans.spi.adaptor;
 
-import javax.el.ELContextListener;
 import javax.el.ELResolver;
 import javax.el.ExpressionFactory;
 
 public interface ELAdaptor
 {
     public ELResolver getOwbELResolver();
-    
-    public ELContextListener getOwbELContextListener();
-    
+
     public ExpressionFactory getOwbWrappedExpressionFactory(ExpressionFactory 
expressionFactory);
 }

Modified: 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java
 (original)
+++ 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java
 Fri Jul 23 01:26:53 2010
@@ -33,6 +33,7 @@ import javax.servlet.http.HttpSessionLis
 import org.apache.webbeans.config.OWBLogConst;
 import org.apache.webbeans.config.OpenWebBeansConfiguration;
 import org.apache.webbeans.conversation.ConversationManager;
+import org.apache.webbeans.el.ELContextStore;
 import org.apache.webbeans.lifecycle.LifecycleFactory;
 import org.apache.webbeans.logger.WebBeansLogger;
 import org.apache.webbeans.spi.ContainerLifecycle;
@@ -100,6 +101,13 @@ public class WebBeansConfigurationListen
             logger.debug("Destroying a request : [{0}]", 
event.getServletRequest().getRemoteAddr());
         }
         this.lifeCycle.getContextService().endContext(RequestScoped.class, 
event);        
+
+        // clean up the EL caches after each request
+        ELContextStore elStore = ELContextStore.getInstance(false);
+        if (elStore != null)
+        {
+            elStore.destroyELContextStore();
+        }
     }
 
     /**

Modified: 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
 (original)
+++ 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
 Fri Jul 23 01:26:53 2010
@@ -333,9 +333,12 @@ public class WebContextsService extends 
             context.destroy();
         }
         
-        //Remove ELContext store
-        ELContextStore.localContext.set(null);
-        ELContextStore.localContext.remove();
+        // clean up the EL caches after each request
+        ELContextStore elStore = ELContextStore.getInstance(false);
+        if (elStore != null)
+        {
+            elStore.destroyELContextStore();
+        }
         
         //Clear thread locals
         requestContext.set(null);
@@ -462,10 +465,10 @@ public class WebContextsService extends 
             currentApplicationContexts.remove(servletContext);   
         }
         
-        //destroy all sessions
+        //destroyDependents all sessions
         sessionCtxManager.destroyAllSessions();
         
-        //destroy all conversations
+        //destroyDependents all conversations
         conversationManager.destroyAllConversations();
     }
     
@@ -517,7 +520,7 @@ public class WebContextsService extends 
         }        
         
         //context is not null
-        //destroy it
+        //destroyDependents it
         if(context != null)
         {
             context.destroy();

Modified: 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
 (original)
+++ 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
 Fri Jul 23 01:26:53 2010
@@ -22,7 +22,6 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
-import javax.el.ELContextListener;
 import javax.el.ELResolver;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.servlet.ServletContext;
@@ -104,7 +103,6 @@ public final class WebContainerLifecycle
 
         ELAdaptor elAdaptor = ServiceLoader.getService(ELAdaptor.class);
         ELResolver resolver = elAdaptor.getOwbELResolver();
-        ELContextListener elContextListener = 
elAdaptor.getOwbELContextListener();
         //Application is configured as JSP
         if(OpenWebBeansConfiguration.getInstance().isJspApplication())
         {
@@ -112,11 +110,6 @@ public final class WebContainerLifecycle
 
             JspApplicationContext applicationCtx = 
JspFactory.getDefaultFactory().getJspApplicationContext((ServletContext)(startupObject));
             applicationCtx.addELResolver(resolver);
-
-            logger.debug("Application is configured as JSP. Adding EL 
Listener.");
-
-            //Adding listener
-            applicationCtx.addELContextListener(elContextListener);
         }
 
         // Add BeanManager to the 'javax.enterprise.inject.spi.BeanManager' 
servlet context attribute

Modified: 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/test/EnterpriseTestLifeCycle.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/test/EnterpriseTestLifeCycle.java?rev=966925&r1=966924&r2=966925&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/test/EnterpriseTestLifeCycle.java
 (original)
+++ 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/test/EnterpriseTestLifeCycle.java
 Fri Jul 23 01:26:53 2010
@@ -22,6 +22,7 @@ import java.util.Properties;
 
 import org.apache.webbeans.context.ContextFactory;
 import org.apache.webbeans.corespi.se.DefaultScannerService;
+import org.apache.webbeans.el.ELContextStore;
 import org.apache.webbeans.lifecycle.StandaloneLifeCycle;
 
 /**
@@ -68,6 +69,13 @@ public class EnterpriseTestLifeCycle ext
         
ContextFactory.destroyApplicationContext(this.servletContextEvent.getServletContext());
 
         ContextFactory.cleanUpContextFactory();
+
+        // clean up the EL caches after each request
+        ELContextStore elStore = ELContextStore.getInstance(false);
+        if (elStore != null)
+        {
+            elStore.destroyELContextStore();
+        }
     }
 
 }


Reply via email to