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();
}
}