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