You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ge...@apache.org on 2010/01/06 17:50:24 UTC
svn commit: r896525 - in /openwebbeans/trunk: ./
webbeans-impl/src/main/java/org/apache/webbeans/container/
webbeans-impl/src/main/java/org/apache/webbeans/el/ webbeans-porting/
webbeans-porting/src/main/java/org/apache/webbeans/test/tck/
Author: gerdogdu
Date: Wed Jan 6 16:50:13 2010
New Revision: 896525
URL: http://svn.apache.org/viewvc?rev=896525&view=rev
Log:
[OWB-218] Work on (Section 2.5 - Bean EL names) of coverege-cdi.html of RI TCK
Added:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/ELContextStore.java (with props)
Modified:
openwebbeans/trunk/TCK-STANDALONE
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WebBeansELResolver.java
openwebbeans/trunk/webbeans-porting/pom.xml
openwebbeans/trunk/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/ELImpl.java
Modified: openwebbeans/trunk/TCK-STANDALONE
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/TCK-STANDALONE?rev=896525&r1=896524&r2=896525&view=diff
==============================================================================
--- openwebbeans/trunk/TCK-STANDALONE (original)
+++ openwebbeans/trunk/TCK-STANDALONE Wed Jan 6 16:50:13 2010
@@ -66,4 +66,8 @@
Section 2.4.2 - Defining new scope types (PASSED)
Section 2.4.3 - Declaring the bean scope (PASSED)
Section 2.4.4 - Default scope (PASSED)
+Section 2.5 - Bean EL Names (PASSED)
+Section 2.5.1 - Declaring the bean EL name (PASSED)
+Section 2.5.2 - Default bean EL names (PASSED)
+Section 2.5.3 - Beans with no EL name (PASSED)
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=896525&r1=896524&r2=896525&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java Wed Jan 6 16:50:13 2010
@@ -65,10 +65,8 @@
import org.apache.webbeans.component.WebBeansType;
import org.apache.webbeans.component.third.ThirdpartyBeanImpl;
import org.apache.webbeans.config.ManagedBeanConfigurator;
-import org.apache.webbeans.config.OpenWebBeansConfiguration;
import org.apache.webbeans.config.WebBeansFinder;
import org.apache.webbeans.context.ContextFactory;
-import org.apache.webbeans.context.WebBeansContext;
import org.apache.webbeans.context.creational.CreationalContextFactory;
import org.apache.webbeans.context.creational.CreationalContextImpl;
import org.apache.webbeans.decorator.DecoratorComparator;
Added: 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=896525&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/ELContextStore.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/ELContextStore.java Wed Jan 6 16:50:13 2010
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.el;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import javax.el.ELContext;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.Bean;
+
+public class ELContextStore
+{
+ private ELContext elContext;
+
+ private Map<Bean<?>, CreationalStore> dependentObjects = new HashMap<Bean<?>, CreationalStore>();
+
+ private static class CreationalStore
+ {
+ private Object object;
+
+ private CreationalContext<?> creational;
+
+ public CreationalStore(Object object, CreationalContext<?> creational)
+ {
+ this.object = object;
+ this.creational = creational;
+ }
+
+ /**
+ * @return the object
+ */
+ public Object getObject()
+ {
+ return object;
+ }
+
+ /**
+ * @return the creational
+ */
+ public CreationalContext<?> getCreational()
+ {
+ return creational;
+ }
+
+
+ }
+
+ public ELContextStore(ELContext context)
+ {
+ this.elContext = context;
+ }
+
+ public void addDependent(Bean<?> bean, Object dependent, CreationalContext<?> creationalContext)
+ {
+ this.dependentObjects.put(bean, new CreationalStore(dependent,creationalContext));
+ }
+
+ public Object getDependent(Bean<?> bean)
+ {
+ if(this.dependentObjects.containsKey(bean))
+ {
+ return this.dependentObjects.get(bean).getObject();
+ }
+
+ return null;
+ }
+
+ public boolean isExist(Bean<?> bean)
+ {
+ return this.dependentObjects.containsKey(bean);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void destroy()
+ {
+ Set<Bean<?>> beans = this.dependentObjects.keySet();
+ for(Bean<?> bean : beans)
+ {
+ Bean<Object> o = (Bean<Object>)bean;
+ CreationalStore store = this.dependentObjects.get(bean);
+ o.destroy(o, (CreationalContext<Object>)store.getCreational());
+ }
+
+ this.dependentObjects.clear();
+ this.elContext = null;
+ }
+
+ public ELContext getELContext()
+ {
+ return this.elContext;
+ }
+}
Propchange: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/ELContextStore.java
------------------------------------------------------------------------------
svn:eol-style = native
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=896525&r1=896524&r2=896525&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 Wed Jan 6 16:50:13 2010
@@ -49,6 +49,8 @@
public class WebBeansELResolver extends ELResolver
{
+ public static ThreadLocal<ELContextStore> LOCAL_CONTEXT = new ThreadLocal<ELContextStore>();
+
/**
* {@inheritDoc}
*/
@@ -84,69 +86,70 @@
public Object getValue(ELContext context, Object obj, Object property) throws NullPointerException, PropertyNotFoundException, ELException
{
BeanManagerImpl manager = BeanManagerImpl.getManager();
-
Object object = null;
Bean<Object> bean = null;
-
- boolean isResolution = false;
- CreationalContext<Object> creationalContext = null;
- try
- {
- if (obj == null)
+ CreationalContext<Object> creationalContext = null;
+ ELContextStore store = null;
+ boolean canBe = false;
+
+ if (obj == null)
+ {
+ if((store = LOCAL_CONTEXT.get()) != null)
{
- String name = (String) property;
- Set<Bean<?>> beans = manager.getBeans(name);
-
- if(beans != null && !beans.isEmpty())
+ ELContext oldContext = store.getELContext();
+ if(!oldContext.equals(context))
{
- bean = (Bean<Object>)beans.iterator().next();
- creationalContext = manager.createCreationalContext(bean);
-
+ store.destroy();
+ LOCAL_CONTEXT.remove();
}
+ else
+ {
+ canBe = true;
+ }
+ }
+
+ String name = (String) property;
+ Set<Bean<?>> beans = manager.getBeans(name);
+
+ if(beans != null && !beans.isEmpty())
+ {
+ bean = (Bean<Object>)beans.iterator().next();
+ creationalContext = manager.createCreationalContext(bean);
+ if(bean.getScope().equals(Dependent.class))
+ {
+ if(canBe)
+ {
+ object = store.getDependent(bean);
+ }
+ }
+ }
+
+
+ if(object == null)
+ {
object = manager.getInstanceByName(name,creationalContext);
if (object != null)
- {
- isResolution = true;
+ {
context.setPropertyResolved(true);
- }
+
+ store = new ELContextStore(context);
+ store.addDependent(bean, object, creationalContext);
+ LOCAL_CONTEXT.set(store);
+ }
}
-
- }
- finally
- {
- if (isResolution)
+ else
{
- if (bean != null)
- {
- destroyBean(bean, object, creationalContext);
- }
+ context.setPropertyResolved(true);
}
+
}
return object;
}
/**
- * Destroys the bean.
- *
- * @param <T> bean type info
- * @param bean dependent context scoped bean
- * @param instance bean instance
- */
- @SuppressWarnings("unchecked")
- private <T> void destroyBean(Bean<T> bean, Object instance, CreationalContext<T> creationalContext)
- {
- if (bean.getScope().equals(Dependent.class))
- {
- T inst = (T) instance;
-
- bean.destroy(inst,creationalContext);
- }
- }
-
- /**
* {@inheritDoc}
*/
@Override
Modified: openwebbeans/trunk/webbeans-porting/pom.xml
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-porting/pom.xml?rev=896525&r1=896524&r2=896525&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-porting/pom.xml (original)
+++ openwebbeans/trunk/webbeans-porting/pom.xml Wed Jan 6 16:50:13 2010
@@ -88,6 +88,11 @@
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-el_1.0_spec</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>jasper-el</artifactId>
+ <version>6.0.20</version>
+ </dependency>
</dependencies>
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=896525&r1=896524&r2=896525&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 Wed Jan 6 16:50:13 2010
@@ -13,107 +13,92 @@
*/
package org.apache.webbeans.test.tck;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
+import javax.el.ArrayELResolver;
+import javax.el.BeanELResolver;
+import javax.el.CompositeELResolver;
import javax.el.ELContext;
import javax.el.ELResolver;
+import javax.el.ExpressionFactory;
import javax.el.FunctionMapper;
+import javax.el.ListELResolver;
+import javax.el.MapELResolver;
+import javax.el.ResourceBundleELResolver;
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.WebBeansELResolver;
import org.jboss.jsr299.tck.spi.EL;
public class ELImpl implements EL
{
- private WebBeansELResolver resolver = new WebBeansELResolver();
+ private static ExpressionFactory EXPRESSION_FACTORY = new ExpressionFactoryImpl();
- public static class ELContextImpl extends ELContext
+ public ELImpl()
+ {
+ }
+
+ public static ELResolver getELResolver()
{
+ CompositeELResolver composite = new CompositeELResolver();
+ composite.add(new BeanELResolver());
+ composite.add(new ArrayELResolver());
+ composite.add(new MapELResolver());
+ composite.add(new ListELResolver());
+ composite.add(new ResourceBundleELResolver());
+ composite.add(new WebBeansELResolver());
+
+ return composite;
+ }
+
+ public static class ELContextImpl extends ELContext
+ {
@Override
public ELResolver getELResolver()
{
- // TODO Auto-generated method stub
- return null;
+ return ELImpl.getELResolver();
}
@Override
public FunctionMapper getFunctionMapper()
{
- // TODO Auto-generated method stub
- return null;
+ return new FunctionMapperImpl();
}
@Override
public VariableMapper getVariableMapper()
{
- // TODO Auto-generated method stub
- return null;
+ return new VariableMapperImpl();
}
}
@SuppressWarnings("unchecked")
public <T> T evaluateMethodExpression(String expression, Class<T> expectedType, Class<?>[] expectedParamTypes, Object[] expectedParams)
- {
- int firstDot = expression.indexOf('.');
- String property = expression.substring(expression.indexOf("#"),firstDot) + "}"; //object name
- String methodName = expression.substring(firstDot+1,expression.length()-1);
-
- Object object = evaluateValueExpression(property, expectedType);
+ {
+ ELContext context = createELContext();
- try
- {
- Method method = object.getClass().getMethod(methodName, expectedParamTypes);
- return (T)method.invoke(object, expectedParams);
- }
- catch (SecurityException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- catch (NoSuchMethodException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- catch (IllegalArgumentException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- catch (IllegalAccessException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- catch (InvocationTargetException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
+ Object object = EXPRESSION_FACTORY.createMethodExpression(context, expression, expectedType, expectedParamTypes).invoke(context, expectedParams);
- return null;
+ return (T)object;
}
@SuppressWarnings("unchecked")
public <T> T evaluateValueExpression(String expression, Class<T> expectedType)
{
- String property = expression.substring(expression.indexOf("#")+2,expression.length()-1);
+ ELContext context = createELContext();
- T object = (T) resolver.getValue(new ELContextImpl() , null, property);
+ Object object = EXPRESSION_FACTORY.createValueExpression(context, expression, expectedType).getValue(context);
- return object;
+ return (T)object;
}
@Override
public ELContext createELContext()
- {
- // TODO Auto-generated method stub
- return null;
+ {
+ return new ELContextImpl();
}
-
-
-
-}
+}
\ No newline at end of file