Author: gerdogdu
Date: Sat Aug 14 07:37:23 2010
New Revision: 985441

URL: http://svn.apache.org/viewvc?rev=985441&view=rev
Log:
[OWB-438]  Cached Normal Scoped Proxy instances

Added:
    
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/
    
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/ELPerformanceTest.java
   (with props)
    
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/MockELContext.java
   (with props)
    
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/SampleBean.java
   (with props)
Modified:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java

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=985441&r1=985440&r2=985441&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
 Sat Aug 14 07:37:23 2010
@@ -807,6 +807,9 @@ public class BeanManagerImpl implements 
             //Create Managed Bean Proxy
             instance = 
JavassistProxyFactory.getInstance().createNormalScopedBeanProxy((AbstractOwbBean<?>)bean,creationalContext);
             
+            //Cached instance
+            this.cacheProxies.put(bean, instance);
+            
         }
         //Create Pseudo-Scope Bean Instance
         else

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java?rev=985441&r1=985440&r2=985441&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
 Sat Aug 14 07:37:23 2010
@@ -27,6 +27,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import javassist.util.proxy.ProxyFactory;
 import javassist.util.proxy.ProxyObject;
@@ -59,10 +60,10 @@ public final class JavassistProxyFactory
 
     }
     
-    private Map<OwbBean<?>, Class<?>> normalScopedBeanProxyClasses = new 
ConcurrentHashMap<OwbBean<?>, Class<?>>();    
-    private Map<OwbBean<?>, Class<?>> dependentScopedBeanProxyClasses = new 
ConcurrentHashMap<OwbBean<?>, Class<?>>();    
-    private Map<OwbBean<?>, Class<?>> interceptorProxyClasses = new 
ConcurrentHashMap<OwbBean<?>, Class<?>>();    
-    private Map<OwbBean<?>, Class<?>> ejbProxyClasses = new 
ConcurrentHashMap<OwbBean<?>, Class<?>>();    
+    private ConcurrentMap<OwbBean<?>, Class<?>> normalScopedBeanProxyClasses = 
new ConcurrentHashMap<OwbBean<?>, Class<?>>();    
+    private ConcurrentMap<OwbBean<?>, Class<?>> 
dependentScopedBeanProxyClasses = new ConcurrentHashMap<OwbBean<?>, 
Class<?>>();    
+    private ConcurrentMap<OwbBean<?>, Class<?>> interceptorProxyClasses = new 
ConcurrentHashMap<OwbBean<?>, Class<?>>();    
+    private ConcurrentMap<OwbBean<?>, Class<?>> ejbProxyClasses = new 
ConcurrentHashMap<OwbBean<?>, Class<?>>();    
     
     public   Map<OwbBean<?>, Class<?>> getInterceptorProxyClasses()
     {
@@ -100,7 +101,7 @@ public final class JavassistProxyFactory
         else
         {
             clazz = SecurityUtil.doPrivilegedCreateClass(factory);
-            ejbProxyClasses.put(bean, clazz);
+            ejbProxyClasses.putIfAbsent(bean, clazz);
         }
         
         return clazz;
@@ -136,7 +137,7 @@ public final class JavassistProxyFactory
                 ProxyFactory fact = createProxyFactory(bean);
 
                 proxyClass = getProxyClass(fact);
-                normalScopedBeanProxyClasses.put(bean, proxyClass);
+                normalScopedBeanProxyClasses.putIfAbsent(bean, proxyClass);
             }
             
             result = proxyClass.newInstance();
@@ -229,7 +230,7 @@ public final class JavassistProxyFactory
             {
                 ProxyFactory fact = createProxyFactory(bean);
                 proxyClass = getProxyClass(fact);
-                dependentScopedBeanProxyClasses.put(bean, proxyClass);
+                dependentScopedBeanProxyClasses.putIfAbsent(bean, proxyClass);
             }
             
             result = proxyClass.newInstance();

Added: 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/ELPerformanceTest.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/ELPerformanceTest.java?rev=985441&view=auto
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/ELPerformanceTest.java
 (added)
+++ 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/ELPerformanceTest.java
 Sat Aug 14 07:37:23 2010
@@ -0,0 +1,85 @@
+/*
+ * 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.newtests.el;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.webbeans.el.WebBeansELResolver;
+import org.apache.webbeans.newtests.AbstractUnitTest;
+import org.junit.Test;
+
+public class ELPerformanceTest extends AbstractUnitTest
+{
+    /**
+     * Test our bean creation for thread safety.
+     */
+    @Test
+    public void testBeanCreation() throws Exception
+    {
+        Collection<Class<?>> classes = new ArrayList<Class<?>>();
+
+        classes.add(SampleBean.class);
+        startContainer(classes);
+        
+        List<ParallelBeanStarter> strarters = new 
ArrayList<ParallelBeanStarter>();
+        WebBeansELResolver resolver = new WebBeansELResolver();
+        for(int i=0;i<500;i++)
+        {
+            ParallelBeanStarter starter = new ParallelBeanStarter(resolver);
+            strarters.add(starter);
+        }
+        
+        for(ParallelBeanStarter start : strarters)
+        {
+            start.start();
+        }        
+        
+        System.out.println("Completed");
+        
+        shutDownContainer();
+    }
+    
+    private static class ParallelBeanStarter extends Thread
+    {
+        private WebBeansELResolver resolver;
+        private static AtomicInteger n = new AtomicInteger(0);
+        
+        public ParallelBeanStarter(WebBeansELResolver resolver)
+        {
+            this.resolver = resolver;
+        }
+        
+        @Override
+        public void run()
+        {
+            try
+            {
+                System.out.println(n.incrementAndGet());
+                resolver.getValue(new MockELContext() , null, "sampleBean");
+                
+            }catch(Exception e)
+            {
+                e.printStackTrace();
+            }
+        }
+    }
+}

Propchange: 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/ELPerformanceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/MockELContext.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/MockELContext.java?rev=985441&view=auto
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/MockELContext.java
 (added)
+++ 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/MockELContext.java
 Sat Aug 14 07:37:23 2010
@@ -0,0 +1,47 @@
+/*
+ * 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.newtests.el;
+
+import javax.el.ELContext;
+import javax.el.ELResolver;
+import javax.el.FunctionMapper;
+import javax.el.VariableMapper;
+
+public class MockELContext extends ELContext
+{
+
+    @Override
+    public ELResolver getELResolver()
+    {
+        return null;
+    }
+
+    @Override
+    public FunctionMapper getFunctionMapper()
+    {
+        return null;
+    }
+
+    @Override
+    public VariableMapper getVariableMapper()
+    {
+        return null;
+    }
+
+}

Propchange: 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/MockELContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/SampleBean.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/SampleBean.java?rev=985441&view=auto
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/SampleBean.java
 (added)
+++ 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/SampleBean.java
 Sat Aug 14 07:37:23 2010
@@ -0,0 +1,29 @@
+/*
+ * 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.newtests.el;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.SessionScoped;
+import javax.inject.Named;
+
+...@sessionscoped @Named public class SampleBean implements Serializable
+{
+    
+}

Propchange: 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/el/SampleBean.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to