[webbeans-commits] Webbeans SVN: r1207 - ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans and 3 other directories.
webbeans-commits at lists.jboss.org
webbeans-commits at lists.jboss.org
Fri Jan 23 12:50:40 EST 2009
Author: pete.muir at jboss.org
Date: 2009-01-23 12:50:40 -0500 (Fri, 23 Jan 2009)
New Revision: 1207
Modified:
examples/trunk/translator/webbeans-translator-ejb/src/main/java/org/jboss/webbeans/examples/translator/TextTranslator.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/EnterpriseBeanProxyMethodHandler.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/context/SessionContext.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/SessionBeanInterceptor.java
Log:
Use new instances for non-contextual injection into EJBs, WBRI-101
Modified: examples/trunk/translator/webbeans-translator-ejb/src/main/java/org/jboss/webbeans/examples/translator/TextTranslator.java
===================================================================
--- examples/trunk/translator/webbeans-translator-ejb/src/main/java/org/jboss/webbeans/examples/translator/TextTranslator.java 2009-01-23 17:13:42 UTC (rev 1206)
+++ examples/trunk/translator/webbeans-translator-ejb/src/main/java/org/jboss/webbeans/examples/translator/TextTranslator.java 2009-01-23 17:50:40 UTC (rev 1207)
@@ -2,18 +2,19 @@
import java.io.Serializable;
+import javax.ejb.EJB;
import javax.webbeans.Initializer;
public class TextTranslator implements Serializable
{
private SentenceParser sentenceParser;
- private Translator sentenceTranslator;
+ @EJB Translator translator;
+
@Initializer
- TextTranslator(SentenceParser sentenceParser, Translator sentenceTranslator)
+ TextTranslator(SentenceParser sentenceParser)
{
- this.sentenceParser = sentenceParser;
- this.sentenceTranslator = sentenceTranslator;
+ this.sentenceParser = sentenceParser;
}
public String translate(String text)
@@ -21,7 +22,7 @@
StringBuilder sb = new StringBuilder();
for (String sentence: sentenceParser.parse(text))
{
- sb.append(sentenceTranslator.translate(sentence)).append(". ");
+ sb.append(translator.translate(sentence)).append(". ");
}
return sb.toString().trim();
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java 2009-01-23 17:13:42 UTC (rev 1206)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java 2009-01-23 17:50:40 UTC (rev 1207)
@@ -52,6 +52,8 @@
import javax.webbeans.manager.Manager;
import org.jboss.webbeans.bean.AbstractBean;
+import org.jboss.webbeans.bean.EnterpriseBean;
+import org.jboss.webbeans.bean.NewEnterpriseBean;
import org.jboss.webbeans.bean.proxy.ProxyPool;
import org.jboss.webbeans.context.ContextMap;
import org.jboss.webbeans.ejb.EjbDescriptorCache;
@@ -103,7 +105,8 @@
// The registered beans
private transient List<Bean<?>> beans;
// The registered beans, mapped by implementation class
- private transient final Map<Class<?>, Bean<?>> beanMap;
+ private transient final Map<Class<?>, EnterpriseBean<?>> newEnterpriseBeanMap;
+ private transient final Map<Class<?>, EnterpriseBean<?>> enterpriseBeanMap;
// The registered decorators
private transient final Set<Decorator> decorators;
// The registered interceptors
@@ -133,7 +136,8 @@
this.namingContext = namingContext;
this.resourceLoader = resourceLoader;
this.beans = new CopyOnWriteArrayList<Bean<?>>();
- this.beanMap = new ConcurrentHashMap<Class<?>, Bean<?>>();
+ this.newEnterpriseBeanMap = new ConcurrentHashMap<Class<?>, EnterpriseBean<?>>();
+ this.enterpriseBeanMap = new ConcurrentHashMap<Class<?>, EnterpriseBean<?>>();
this.resolver = new Resolver(this);
this.proxyPool = new ProxyPool();
this.decorators = new HashSet<Decorator>();
@@ -328,6 +332,7 @@
* @param beans The set of beans to add
* @return A reference to the manager
*/
+ // TODO Build maps in the deployer :-)
public void setBeans(Set<AbstractBean<?, ?>> beans)
{
synchronized (beans)
@@ -335,7 +340,14 @@
this.beans = new CopyOnWriteArrayList<Bean<?>>(beans);
for (AbstractBean<?, ?> bean : beans)
{
- beanMap.put(bean.getType(), bean);
+ if (bean instanceof NewEnterpriseBean)
+ {
+ newEnterpriseBeanMap.put(bean.getType(), (EnterpriseBean<?>) bean);
+ }
+ else if (bean instanceof EnterpriseBean)
+ {
+ enterpriseBeanMap.put(bean.getType(), (EnterpriseBean<?>) bean);
+ }
}
resolver.clear();
}
@@ -346,10 +358,15 @@
*
* @return The bean map
*/
- public Map<Class<?>, Bean<?>> getBeanMap()
+ public Map<Class<?>, EnterpriseBean<?>> getNewEnterpriseBeanMap()
{
- return beanMap;
+ return newEnterpriseBeanMap;
}
+
+ public Map<Class<?>, EnterpriseBean<?>> getEnterpriseBeanMap()
+ {
+ return enterpriseBeanMap;
+ }
/**
* The beans registered with the Web Bean manager. For internal use
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/EnterpriseBeanProxyMethodHandler.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/EnterpriseBeanProxyMethodHandler.java 2009-01-23 17:13:42 UTC (rev 1206)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/EnterpriseBeanProxyMethodHandler.java 2009-01-23 17:50:40 UTC (rev 1207)
@@ -18,15 +18,14 @@
package org.jboss.webbeans.bean.proxy;
import java.lang.reflect.Method;
-import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import javassist.util.proxy.MethodHandler;
-import javax.webbeans.Dependent;
-
import org.jboss.webbeans.CurrentManager;
import org.jboss.webbeans.bean.EnterpriseBean;
import org.jboss.webbeans.log.LogProvider;
@@ -44,6 +43,40 @@
{
// The log provider
private static final transient LogProvider log = Logging.getLogProvider(EnterpriseBeanProxyMethodHandler.class);
+
+ private static final ThreadLocal<Set<Class<?>>> contextualInstance;
+
+ static
+ {
+ contextualInstance = new ThreadLocal<Set<Class<?>>>()
+ {
+
+ @Override
+ protected Set<Class<?>> initialValue()
+ {
+ return new HashSet<Class<?>>();
+ }
+
+ };
+
+ }
+
+ public static boolean isContextualInstance(Class<?> beanClass)
+ {
+ return contextualInstance.get().contains(beanClass);
+ }
+
+ private static void setContextualInstance(Class<?> beanClass, boolean accessing)
+ {
+ if (accessing)
+ {
+ contextualInstance.get().add(beanClass);
+ }
+ else
+ {
+ contextualInstance.get().remove(beanClass);
+ }
+ }
// The container provided proxy that implements all interfaces
private final Map<Class<?>, Object> proxiedInstances;
@@ -51,6 +84,7 @@
private boolean destroyed;
private boolean canCallRemoveMethods;
private final List<Method> removeMethods;
+ private final Class<?> beanClass;
/**
* Constructor
@@ -66,6 +100,7 @@
this.canCallRemoveMethods = bean.canCallRemoveMethods();
this.removeMethods = bean.getEjbDescriptor().getRemoveMethods();
this.destroyed = false;
+ this.beanClass = bean.getType();
log.trace("Created enterprise bean proxy method handler for " + bean);
}
@@ -101,7 +136,15 @@
{
throw new IllegalStateException("Unable to establish jndi name to use to lookup EJB");
}
- proxiedInstance = CurrentManager.rootManager().getNaming().lookup(jndiName, businessInterface);
+ try
+ {
+ setContextualInstance(beanClass, true);
+ proxiedInstance = CurrentManager.rootManager().getNaming().lookup(jndiName, businessInterface);
+ }
+ finally
+ {
+ setContextualInstance(beanClass, false);
+ }
proxiedInstances.put(businessInterface, proxiedInstance);
}
Method proxiedMethod = Reflections.lookupMethod(method, proxiedInstance);
@@ -116,8 +159,17 @@
throw new UnsupportedOperationException("Remove method can't be called directly on non-dependent scoped Enterprise Beans");
}
}
- Object returnValue = Reflections.invokeAndWrap(proxiedMethod, proxiedInstance, args);
- log.trace("Executed " + method + " on " + proxiedInstance + " with parameters " + args + " and got return value " + returnValue);
- return returnValue;
+ try
+ {
+ setContextualInstance(beanClass, true);
+ Object returnValue = Reflections.invokeAndWrap(proxiedMethod, proxiedInstance, args);
+ log.trace("Executed " + method + " on " + proxiedInstance + " with parameters " + args + " and got return value " + returnValue);
+ return returnValue;
+ }
+ finally
+ {
+ setContextualInstance(beanClass, false);
+ }
+
}
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/context/SessionContext.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/context/SessionContext.java 2009-01-23 17:13:42 UTC (rev 1206)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/context/SessionContext.java 2009-01-23 17:50:40 UTC (rev 1207)
@@ -51,7 +51,7 @@
* Gets the bean map
*
* @returns The bean map
- * @see org.jboss.webbeans.context.AbstractContext#getBeanMap()
+ * @see org.jboss.webbeans.context.AbstractContext#getNewEnterpriseBeanMap()
*/
@Override
public BeanMap getBeanMap()
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/SessionBeanInterceptor.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/SessionBeanInterceptor.java 2009-01-23 17:13:42 UTC (rev 1206)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/SessionBeanInterceptor.java 2009-01-23 17:50:40 UTC (rev 1207)
@@ -20,10 +20,10 @@
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.interceptor.InvocationContext;
-import javax.webbeans.manager.Bean;
import org.jboss.webbeans.CurrentManager;
import org.jboss.webbeans.bean.EnterpriseBean;
+import org.jboss.webbeans.bean.proxy.EnterpriseBeanProxyMethodHandler;
/**
* Interceptor for handling EJB post-construct tasks
@@ -76,17 +76,13 @@
*/
private static <T> EnterpriseBean<T> getBean(Class<? extends T> beanClass)
{
- Bean<?> bean = CurrentManager.rootManager().getBeanMap().get(beanClass);
- if (bean instanceof EnterpriseBean)
+ if (EnterpriseBeanProxyMethodHandler.isContextualInstance(beanClass))
{
- @SuppressWarnings("unchecked")
- // TODO shift this into the map!
- EnterpriseBean<T> enterpriseBean = (EnterpriseBean<T>) bean;
- return enterpriseBean;
+ return (EnterpriseBean<T>) CurrentManager.rootManager().getEnterpriseBeanMap().get(beanClass);
}
else
{
- return null;
+ return (EnterpriseBean<T>) CurrentManager.rootManager().getNewEnterpriseBeanMap().get(beanClass);
}
}
More information about the weld-commits
mailing list