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/17 13:08:20 UTC

svn commit: r1434632 - in /openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/container/ main/java/org/apache/webbeans/proxy/ test/java/org/apache/webbeans/newtests/ test/java/org/apache/webbeans/test/component/ test/java/org/apache/we...

Author: struberg
Date: Thu Jan 17 12:08:19 2013
New Revision: 1434632

URL: http://svn.apache.org/viewvc?rev=1434632&view=rev
Log:
OWB-344 support Interface proxying

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/AbstractProxyFactory.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/AbstractUnitTest.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/DisposalMethodComponent.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/DisposalInjectedComponentTest.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=1434632&r1=1434631&r2=1434632&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 Thu Jan 17 12:08:19 2013
@@ -710,7 +710,6 @@ public class BeanManagerImpl implements 
             {
                 //Create Managed Bean Proxy
                 //X old approach: instance = webBeansContext.getProxyFactoryRemove().createNormalScopedBeanProxyRemove((AbstractOwbBean<?>) bean, creationalContext);
-
                 instance = webBeansContext.getNormalScopeProxyFactory().createNormalScopeProxy(bean);
 
                 //Cached instance

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java?rev=1434632&r1=1434631&r2=1434632&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java Thu Jan 17 12:08:19 2013
@@ -142,8 +142,15 @@ public abstract class AbstractProxyFacto
         String classFileName = classToProxy.getName().replace('.', '/');
 
         String[] interfaceNames = new String[]{Type.getInternalName(getMarkerInterface())};
+        String superClassName = classFileName;
 
-        cw.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC + Opcodes.ACC_SUPER + Opcodes.ACC_SYNTHETIC, proxyClassFileName, null, classFileName, interfaceNames);
+        if (classToProxy.isInterface())
+        {
+            interfaceNames = new String[]{Type.getInternalName(classToProxy), interfaceNames[0]};
+            superClassName = Type.getInternalName(Object.class);
+        }
+
+        cw.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC + Opcodes.ACC_SUPER + Opcodes.ACC_SYNTHETIC, proxyClassFileName, null, superClassName, interfaceNames);
         cw.visitSource(classFileName + ".java", null);
 
         createInstanceVariables(cw, classToProxy, classFileName);

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=1434632&r1=1434631&r2=1434632&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 Thu Jan 17 12:08:19 2013
@@ -26,6 +26,7 @@ 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.WebBeansContext;
 import org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler;
 import org.apache.webbeans.util.ClassUtil;
@@ -60,7 +61,16 @@ public class NormalScopeProxyFactory ext
     {
         ClassLoader classLoader = bean.getClass().getClassLoader();
 
-        Class<T> classToProxy = (Class<T>) bean.getBeanClass();
+        Class<T> classToProxy;
+        if (bean instanceof OwbBean)
+        {
+            classToProxy = ((OwbBean<T>) bean).getReturnType();
+        }
+        else
+        {
+            // TODO: that might be wrong sometimes
+            classToProxy = (Class<T>) bean.getBeanClass();
+        }
 
         Class<? extends T> proxyClass = createProxyClass(classLoader, classToProxy);
 
@@ -155,13 +165,24 @@ public class NormalScopeProxyFactory ext
     {
         try
         {
-            Constructor superDefaultCt = classToProxy.getConstructor(null);
+            Constructor superDefaultCt;
+            String parentClassFileName;
+            if (classToProxy.isInterface())
+            {
+                parentClassFileName = Type.getInternalName(Object.class);
+                superDefaultCt = Object.class.getConstructor(null);
+            }
+            else
+            {
+                parentClassFileName = classFileName;
+                superDefaultCt = classToProxy.getConstructor(null);
+            }
 
             final String descriptor = Type.getConstructorDescriptor(superDefaultCt);
             final MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", descriptor, null, null);
             mv.visitCode();
             mv.visitVarInsn(Opcodes.ALOAD, 0);
-            mv.visitMethodInsn(Opcodes.INVOKESPECIAL, classFileName, "<init>", descriptor);
+            mv.visitMethodInsn(Opcodes.INVOKESPECIAL, parentClassFileName, "<init>", descriptor);
 
             mv.visitVarInsn(Opcodes.ALOAD, 0);
             mv.visitInsn(Opcodes.ACONST_NULL);

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/AbstractUnitTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/AbstractUnitTest.java?rev=1434632&r1=1434631&r2=1434632&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/AbstractUnitTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/AbstractUnitTest.java Thu Jan 17 12:08:19 2013
@@ -117,10 +117,25 @@ public abstract class AbstractUnitTest
         Assert.assertNotNull(beans);
 
         Bean<?> bean = getBeanManager().resolve(beans);
-        
+        Assert.assertNotNull("Bean with type " + type + " could not be found!", bean);
+
         return (T) getBeanManager().getReference(bean, type, getBeanManager().createCreationalContext(bean));
     }
-    
+
+    @SuppressWarnings("unchecked")
+    protected <T> T getInstance(String elName)
+    {
+        Set<Bean<?>> beans = getBeanManager().getBeans(elName);
+        Assert.assertNotNull(beans);
+
+        Bean<?> bean = getBeanManager().resolve(beans);
+        Assert.assertNotNull("Bean with name " + elName + " could not be found!", bean);
+
+        return (T) getBeanManager().getReference(bean, Object.class, getBeanManager().createCreationalContext(bean));
+    }
+
+
+
     protected String getXmlPath(String packageName, String fileName)
     {
         StringBuilder prefix = new StringBuilder(packageName.replace('.', '/'));

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/DisposalMethodComponent.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/DisposalMethodComponent.java?rev=1434632&r1=1434631&r2=1434632&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/DisposalMethodComponent.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/DisposalMethodComponent.java Thu Jan 17 12:08:19 2013
@@ -33,7 +33,7 @@ import org.apache.webbeans.test.componen
 @Named
 public class DisposalMethodComponent
 {
-    private @Inject @Default IService service = null;
+    private IService service = null;
 
     @Produces
     @ApplicationScoped

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/DisposalInjectedComponentTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/DisposalInjectedComponentTest.java?rev=1434632&r1=1434631&r2=1434632&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/DisposalInjectedComponentTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/DisposalInjectedComponentTest.java Thu Jan 17 12:08:19 2013
@@ -18,75 +18,46 @@
  */
 package org.apache.webbeans.test.unittests.inject;
 
-import java.util.List;
+import java.util.ArrayList;
+import java.util.Collection;
 
-import javax.enterprise.inject.spi.BeanManager;
+import org.junit.Assert;
 
-import junit.framework.Assert;
-
-import org.apache.webbeans.component.AbstractOwbBean;
-import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.context.ContextFactory;
-import org.apache.webbeans.test.TestContext;
+import org.apache.webbeans.newtests.AbstractUnitTest;
 import org.apache.webbeans.test.component.DisposalMethodComponent;
 import org.apache.webbeans.test.component.service.IService;
 import org.apache.webbeans.test.component.service.ServiceImpl1;
-import org.junit.Before;
 import org.junit.Test;
 
-public class DisposalInjectedComponentTest extends TestContext
+public class DisposalInjectedComponentTest extends AbstractUnitTest
 {
-    BeanManager container = null;
-
-    public DisposalInjectedComponentTest()
-    {
-        super(DisposalInjectedComponentTest.class.getSimpleName());
-    }
-
-    @Before
-    public void init()
-    {
-        this.container = WebBeansContext.getInstance().getBeanManagerImpl();
-        super.init();
-    }
 
     @Test
     public void testTypedComponent() throws Throwable
     {
-        clear();
-
-        defineManagedBean(ServiceImpl1.class);
-        defineManagedBean(DisposalMethodComponent.class);
+        Collection<Class<?>> classes = new ArrayList<Class<?>>();
+        classes.add(DisposalMethodComponent.class);
+        classes.add(ServiceImpl1.class);
 
-        List<AbstractOwbBean<?>> comps = getComponents();
+        startContainer(classes, null);
 
-        ContextFactory contextFactory = WebBeansContext.getInstance().getContextFactory();
-        contextFactory.initRequestContext(null);
-        contextFactory.initApplicationContext(null);
 
-        Assert.assertEquals(2, comps.size());
-
-        Object producerResult = getInstanceByName("service");
-        
-        IService producverService = (IService)producerResult;
+        IService producedService = getInstance("service");
         
-        Assert.assertNotNull(producverService);
+        Assert.assertNotNull(producedService);
         
-        Object disposalComp = getManager().getInstance(comps.get(1));
-        Object object = getManager().getInstance(comps.get(0));
+        Object object = getInstance(ServiceImpl1.class);
 
         Assert.assertTrue(object instanceof ServiceImpl1);
-        Assert.assertTrue(disposalComp instanceof DisposalMethodComponent);
 
-        DisposalMethodComponent mc = (DisposalMethodComponent) disposalComp;
+        DisposalMethodComponent mc = getInstance(DisposalMethodComponent.class);
 
         IService s = mc.service();
 
         Assert.assertNotNull(s);
 
-        contextFactory.destroyApplicationContext(null);
-        contextFactory.destroyRequestContext(null);
 
+        shutDownContainer();
     }
 
 }