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();
+ }
}
}