You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2013/01/18 16:08:06 UTC

svn commit: r1435176 - in /openwebbeans/trunk: webbeans-impl/src/main/java/org/apache/webbeans/intercept/ webbeans-impl/src/main/java/org/apache/webbeans/proxy/ webbeans-impl/src/test/java/org/apache/webbeans/newtests/proxy/ webbeans-web/src/main/java/...

Author: struberg
Date: Fri Jan 18 15:08:05 2013
New Revision: 1435176

URL: http://svn.apache.org/viewvc?rev=1435176&view=rev
Log:
OWB-344 re-activate our Interceptor configuration

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ApplicationScopedBeanInterceptorHandler.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/proxy/ProxyMappingTest.java
    openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/intercept/RequestScopedBeanInterceptorHandler.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ApplicationScopedBeanInterceptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ApplicationScopedBeanInterceptorHandler.java?rev=1435176&r1=1435175&r2=1435176&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ApplicationScopedBeanInterceptorHandler.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ApplicationScopedBeanInterceptorHandler.java Fri Jan 18 15:08:05 2013
@@ -18,9 +18,8 @@
  */
 package org.apache.webbeans.intercept;
 
-import javax.enterprise.context.spi.CreationalContext;
-
-import org.apache.webbeans.component.OwbBean;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
 
 
 /**
@@ -33,7 +32,7 @@ import org.apache.webbeans.component.Owb
  *
  * TODO: move caching to new InterceptorHandler logic
  */
-public class ApplicationScopedBeanInterceptorHandler extends NormalScopedBeanInterceptorHandlerRemove
+public class ApplicationScopedBeanInterceptorHandler extends NormalScopedBeanInterceptorHandler
 {
     /**default serial id*/
     private static final long serialVersionUID = 1L;
@@ -47,21 +46,12 @@ public class ApplicationScopedBeanInterc
      */
     private transient Object cachedInstance = null;
 
-    /**
-     * We also cache the CreationalContext of the very bean.
-     */
-    private transient CreationalContext<Object> creationalContext = null;
-    
-    /**
-     * Creates a new handler.
-     * @param bean bean
-     * @param creationalContext creaitonal context
-     */
-    public ApplicationScopedBeanInterceptorHandler(OwbBean<?> bean, CreationalContext<?> creationalContext)
+
+    public ApplicationScopedBeanInterceptorHandler(BeanManager beanManager, Bean<?> bean)
     {
-        super(bean, creationalContext);
+        super(beanManager, bean);
     }
-    
+
     /**
      * {@inheritDoc}
      */
@@ -75,14 +65,4 @@ public class ApplicationScopedBeanInterc
         return cachedInstance;
     }
 
-    @Override
-    protected CreationalContext<Object> getContextualCreationalContext()
-    {
-        if (creationalContext == null)
-        {
-            creationalContext = super.getContextualCreationalContext();
-        }
-
-        return creationalContext;
-    }
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java?rev=1435176&r1=1435175&r2=1435176&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java Fri Jan 18 15:08:05 2013
@@ -31,7 +31,7 @@ import javax.inject.Provider;
 public class NormalScopedBeanInterceptorHandler implements Provider
 {
     private transient BeanManager beanManager;
-    private transient Bean<?> bean;
+    protected transient Bean<?> bean;
 
     public NormalScopedBeanInterceptorHandler(BeanManager beanManager, Bean<?> bean)
     {

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java?rev=1435176&r1=1435175&r2=1435176&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java Fri Jan 18 15:08:05 2013
@@ -19,17 +19,22 @@
 package org.apache.webbeans.proxy;
 
 import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
 import javax.inject.Provider;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.List;
 
 import org.apache.webbeans.component.OwbBean;
+import org.apache.webbeans.config.OpenWebBeansConfiguration;
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.exception.WebBeansConfigurationException;
 import org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler;
 import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.ExceptionUtil;
 import org.objectweb.asm.ClassWriter;
 import org.objectweb.asm.MethodVisitor;
 import org.objectweb.asm.Opcodes;
@@ -57,6 +62,24 @@ public class NormalScopeProxyFactory ext
         return OwbNormalScopeProxy.class;
     }
 
+    /**
+     * @return the internal instance which gets proxied.
+     */
+    public Provider getInstanceProvider(OwbNormalScopeProxy proxyInstance)
+    {
+        try
+        {
+            Field internalInstanceField = proxyInstance.getClass().getDeclaredField(FIELD_INSTANCE_PROVIDER);
+            internalInstanceField.setAccessible(true);
+            return (Provider) internalInstanceField.get(proxyInstance);
+        }
+        catch (Exception e)
+        {
+            ExceptionUtil.throwAsRuntimeException(e);
+        }
+        return null;
+    }
+
     public <T> T createNormalScopeProxy(Bean<T> bean)
     {
         ClassLoader classLoader = bean.getClass().getClassLoader();
@@ -79,37 +102,43 @@ public class NormalScopeProxyFactory ext
 
     public Provider getInstanceProvider(ClassLoader classLoader, Bean<?> bean)
     {
-        //X TODO for now we always return the default NormalScopedBeanInterceptorHandler
-        return new NormalScopedBeanInterceptorHandler(webBeansContext.getBeanManagerImpl(), bean);
-
-/*X TODO add support for the other scopes
         String scopeClassName = bean.getScope().getName();
         Class<? extends Provider> instanceProviderClass = null;
         String proxyMappingConfigKey = OpenWebBeansConfiguration.PROXY_MAPPING_PREFIX + scopeClassName;
         String className = webBeansContext.getOpenWebBeansConfiguration().getProperty(proxyMappingConfigKey);
-        if (className != null && !className.equals(NormalScopedBeanInterceptorHandler.class.getName()))
+        if (className == null || NormalScopedBeanInterceptorHandler.class.getName().equals(className))
         {
-            try
-            {
-                instanceProviderClass = (Class<? extends Provider>) Class.forName(className, true, classLoader);
-            }
-            catch (ClassNotFoundException e)
-            {
-                throw new WebBeansConfigurationException("Configured InterceptorHandler "
-                                                         + className
-                                                         +" cannot be found",
-                                                         e);
-            }
+            return new NormalScopedBeanInterceptorHandler(webBeansContext.getBeanManagerImpl(), bean);
+        }
 
-            //X TODO continue...
+        try
+        {
+            instanceProviderClass = (Class<? extends Provider>) Class.forName(className, true, classLoader);
+            Constructor<?> ct = instanceProviderClass.getConstructor(BeanManager.class, Bean.class);
+            return (Provider) ct.newInstance(webBeansContext.getBeanManagerImpl(), bean);
         }
-        else
+        catch (NoSuchMethodException nsme)
         {
-            return new NormalScopedBeanInterceptorHandler(webBeansContext.getBeanManagerImpl(), bean);
+            throw new WebBeansConfigurationException("Configured InterceptorHandler " + className +" has wrong constructor" , nsme);
+        }
+        catch (ClassNotFoundException e)
+        {
+            throw new WebBeansConfigurationException("Configured InterceptorHandler " + className +" cannot be found", e);
+        }
+        catch (InvocationTargetException e)
+        {
+            throw new WebBeansConfigurationException("Configured InterceptorHandler " + className +" creation exception", e);
+        }
+        catch (InstantiationException e)
+        {
+            throw new WebBeansConfigurationException("Configured InterceptorHandler " + className +" creation exception", e);
+        }
+        catch (IllegalAccessException e)
+        {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
         }
 
         return null;
-*/
     }
 
 

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/proxy/ProxyMappingTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/proxy/ProxyMappingTest.java?rev=1435176&r1=1435175&r2=1435176&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/proxy/ProxyMappingTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/proxy/ProxyMappingTest.java Fri Jan 18 15:08:05 2013
@@ -19,16 +19,17 @@
 package org.apache.webbeans.newtests.proxy;
 
 
-import javassist.util.proxy.ProxyObject;
+import javax.inject.Provider;
+
 import org.apache.webbeans.intercept.ApplicationScopedBeanInterceptorHandler;
-import org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandlerRemove;
+import org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler;
 import org.apache.webbeans.newtests.AbstractUnitTest;
 import org.apache.webbeans.newtests.proxy.beans.ApplicationBean;
 import org.apache.webbeans.newtests.proxy.beans.ConversationBean;
 import org.apache.webbeans.newtests.proxy.beans.DummyScopedExtension;
+import org.apache.webbeans.proxy.OwbNormalScopeProxy;
 import org.junit.Test;
 import org.junit.Assert;
-import org.junit.Ignore;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -40,8 +41,6 @@ public class ProxyMappingTest extends Ab
 {
 
     @Test
-    //X TODO: migrate this test to the new proxies.
-    @Ignore("The proxy handling is not using Javassist anymore")
     public void testProxyMappingConfig()
     {
         Collection<Class<?>> beanClasses = new ArrayList<Class<?>>();
@@ -53,16 +52,19 @@ public class ProxyMappingTest extends Ab
 
         ConversationBean conversationBean = getInstance(ConversationBean.class);
         Assert.assertNotNull(conversationBean);
-        Assert.assertTrue(conversationBean instanceof ProxyObject);
-        Assert.assertNotNull(((ProxyObject) conversationBean).getHandler());
-        Assert.assertEquals(((ProxyObject) conversationBean).getHandler().getClass(), NormalScopedBeanInterceptorHandlerRemove.class);
+        Assert.assertTrue(conversationBean instanceof OwbNormalScopeProxy);
+
+        Provider instanceProvider = getWebBeansContext().getNormalScopeProxyFactory().getInstanceProvider((OwbNormalScopeProxy) conversationBean);
+        Assert.assertNotNull(instanceProvider);
+        Assert.assertEquals(instanceProvider.getClass(), NormalScopedBeanInterceptorHandler.class);
 
 
         ApplicationBean applicationBean = getInstance(ApplicationBean.class);
         Assert.assertNotNull(applicationBean);
-        Assert.assertTrue(applicationBean instanceof ProxyObject);
-        Assert.assertNotNull(((ProxyObject) applicationBean).getHandler());
-        Assert.assertEquals(((ProxyObject) applicationBean).getHandler().getClass(), ApplicationScopedBeanInterceptorHandler.class);
+        Assert.assertTrue(applicationBean instanceof OwbNormalScopeProxy);
+        instanceProvider = getWebBeansContext().getNormalScopeProxyFactory().getInstanceProvider((OwbNormalScopeProxy) applicationBean);
+        Assert.assertNotNull(instanceProvider);
+        Assert.assertEquals(instanceProvider.getClass(), ApplicationScopedBeanInterceptorHandler.class);
 
     }
 

Modified: openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/intercept/RequestScopedBeanInterceptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/intercept/RequestScopedBeanInterceptorHandler.java?rev=1435176&r1=1435175&r2=1435176&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/intercept/RequestScopedBeanInterceptorHandler.java (original)
+++ openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/intercept/RequestScopedBeanInterceptorHandler.java Fri Jan 18 15:08:05 2013
@@ -18,10 +18,10 @@
  */
 package org.apache.webbeans.web.intercept;
 
-import org.apache.webbeans.component.OwbBean;
-import org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandlerRemove;
+import org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler;
 
-import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
 import java.util.HashMap;
 
 
@@ -35,7 +35,7 @@ import java.util.HashMap;
  *
  * TODO: move caching to new InterceptorHandler logic
  */
-public class RequestScopedBeanInterceptorHandler extends NormalScopedBeanInterceptorHandlerRemove
+public class RequestScopedBeanInterceptorHandler extends NormalScopedBeanInterceptorHandler
 {
     /**default serial id*/
     private static final long serialVersionUID = 1L;
@@ -43,7 +43,7 @@ public class RequestScopedBeanIntercepto
     /**
      * Cached bean instance for each thread
      */
-    private static ThreadLocal<HashMap<OwbBean<?>, CacheEntry>> cachedInstances = new ThreadLocal<HashMap<OwbBean<?>, CacheEntry>>();
+    private static ThreadLocal<HashMap<Bean<?>, Object>> cachedInstances = new ThreadLocal<HashMap<Bean<?>, Object>>();
 
 
     public static void removeThreadLocals()
@@ -54,12 +54,10 @@ public class RequestScopedBeanIntercepto
 
     /**
      * Creates a new handler.
-     * @param bean bean
-     * @param creationalContext creaitonal context
      */
-    public RequestScopedBeanInterceptorHandler(OwbBean<?> bean, CreationalContext<?> creationalContext)
+    public RequestScopedBeanInterceptorHandler(BeanManager beanManager, Bean<?> bean)
     {
-        super(bean, creationalContext);
+        super(beanManager, bean);
     }
     
     /**
@@ -67,46 +65,22 @@ public class RequestScopedBeanIntercepto
      */
     protected Object getContextualInstance()
     {
-        HashMap<OwbBean<?>, CacheEntry> beanMap = cachedInstances.get();
+        HashMap<Bean<?>, Object> beanMap = cachedInstances.get();
         if (beanMap == null)
         {
-            beanMap = new HashMap<OwbBean<?>, CacheEntry>();
+            beanMap = new HashMap<Bean<?>, Object>();
             cachedInstances.set(beanMap);
         }
 
-        CacheEntry cachedEntry = beanMap.get(bean);
-        if (cachedEntry == null)
+        Object cachedInstance = beanMap.get(bean);
+        if (cachedInstance == null)
         {
-            cachedEntry = new CacheEntry();
-            cachedEntry.creationalContext = super.getContextualCreationalContext();
-            cachedEntry.instance = super.getContextualInstance();
-            beanMap.put(bean, cachedEntry);
-        }
-
-        return cachedEntry.instance;
-    }
 
-    protected CreationalContext<Object> getContextualCreationalContext()
-    {
-        HashMap<OwbBean<?>, CacheEntry> beanMap = cachedInstances.get();
-        if (beanMap != null)
-        {
-            CacheEntry cachedEntry = beanMap.get(bean);
-            if (cachedEntry != null)
-            {
-                return cachedEntry.creationalContext;
-            }
+            cachedInstance = super.getContextualInstance();
+            beanMap.put(bean, cachedInstance);
         }
 
-        return super.getContextualCreationalContext();
+        return cachedInstance;
     }
 
-    /**
-     * This will store the cached contextual instance and it's CreationalContext
-     */
-    private static final class CacheEntry
-    {
-        CreationalContext<Object> creationalContext;
-        Object instance;
-    }
 }