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