You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ar...@apache.org on 2013/04/12 19:17:49 UTC
svn commit: r1467359 - in
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans:
config/BeansDeployer.java container/BeanManagerImpl.java
portable/AnnotatedElementFactory.java
portable/events/discovery/AfterBeanDiscoveryImpl.java
Author: arne
Date: Fri Apr 12 17:17:48 2013
New Revision: 1467359
URL: http://svn.apache.org/r1467359
Log:
OWB-826: first shot
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java?rev=1467359&r1=1467358&r2=1467359&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java Fri Apr 12 17:17:48 2013
@@ -85,6 +85,7 @@ import java.lang.reflect.Constructor;
import java.net.URL;
import java.security.PrivilegedActionException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -524,7 +525,7 @@ public class BeansDeployer
if (classIndex != null)
{
AnnotatedElementFactory annotatedElementFactory = webBeansContext.getAnnotatedElementFactory();
- List<AnnotatedType<?>> additionalAnnotatedTypes = webBeansContext.getBeanManagerImpl()
+ Collection<AnnotatedType<?>> additionalAnnotatedTypes = webBeansContext.getBeanManagerImpl()
.getAdditionalAnnotatedTypes();
for(Class<?> implClass : classIndex)
@@ -568,7 +569,7 @@ public class BeansDeployer
{
BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
- List<AnnotatedType<?>> annotatedTypes = beanManager.getAdditionalAnnotatedTypes();
+ Collection<AnnotatedType<?>> annotatedTypes = beanManager.getAdditionalAnnotatedTypes();
for(AnnotatedType<?> type : annotatedTypes)
{
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=1467359&r1=1467358&r2=1467359&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 Fri Apr 12 17:17:48 2013
@@ -22,6 +22,7 @@ import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -160,7 +161,7 @@ public class BeanManagerImpl implements
*/
private List<ExternalScope> additionalScopes = new ArrayList<ExternalScope>();
- private List<AnnotatedType<?>> additionalAnnotatedTypes = new ArrayList<AnnotatedType<?>>();
+ private Map<String, AnnotatedType<?>> additionalAnnotatedTypes = new HashMap<String, AnnotatedType<?>>();
private ErrorStack errorStack = new ErrorStack();
@@ -210,6 +211,11 @@ public class BeanManagerImpl implements
annotatedElementFactory = webBeansContext.getAnnotatedElementFactory();
}
+ public WebBeansContext getWebBeansContext()
+ {
+ return webBeansContext;
+ }
+
public <T> void putProducerForJavaEeComponent(Class<T> javaEeComponentClass, Producer<T> wrapper)
{
Asserts.assertNotNull(javaEeComponentClass);
@@ -985,7 +991,13 @@ public class BeanManagerImpl implements
public void addAdditionalAnnotatedType(AnnotatedType<?> annotatedType)
{
webBeansContext.getAnnotatedElementFactory().setAnnotatedType(annotatedType);
- additionalAnnotatedTypes.add(annotatedType);
+ additionalAnnotatedTypes.put(null, annotatedType);
+ }
+
+ public void addAdditionalAnnotatedType(AnnotatedType<?> annotatedType, String id)
+ {
+ webBeansContext.getAnnotatedElementFactory().setAnnotatedType(annotatedType);
+ additionalAnnotatedTypes.put(id, annotatedType);
}
public List<Class<? extends Annotation>> getAdditionalQualifiers()
@@ -1007,12 +1019,23 @@ public class BeanManagerImpl implements
return additionalScopes;
}
- public List<AnnotatedType<?>> getAdditionalAnnotatedTypes()
+ public Collection<AnnotatedType<?>> getAdditionalAnnotatedTypes()
{
- return additionalAnnotatedTypes;
+ return additionalAnnotatedTypes.values();
}
-
+ public <T> AnnotatedType<T> getAdditionalAnnotatedType(Class<T> type, String id)
+ {
+ AnnotatedType<?> annotatedType = additionalAnnotatedTypes.get(id);
+ if (annotatedType.getJavaClass().equals(type))
+ {
+ return (AnnotatedType<T>) annotatedType;
+ }
+ else
+ {
+ return null;
+ }
+ }
public void clear()
{
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java?rev=1467359&r1=1467358&r2=1467359&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java Fri Apr 12 17:17:48 2013
@@ -43,13 +43,15 @@ import org.apache.webbeans.util.Asserts;
*/
public final class AnnotatedElementFactory
{
+
+ private static final String OWB_DEFAULT_KEY = "OWB_DEFAULT_KEY";
// Logger instance
private final static Logger logger = WebBeansLoggerFacade.getLogger(AnnotatedElementFactory.class);
//Cache of the AnnotatedType
- private ConcurrentMap<Class<?>, AnnotatedType<?>> annotatedTypeCache =
- new ConcurrentHashMap<Class<?>, AnnotatedType<?>>();
+ private ConcurrentMap<Class<?>, ConcurrentMap<String, AnnotatedType<?>>> annotatedTypeCache =
+ new ConcurrentHashMap<Class<?>, ConcurrentMap<String, AnnotatedType<?>>>();
//Cache of AnnotatedConstructor
private ConcurrentMap<Constructor<?>, AnnotatedConstructor<?>> annotatedConstructorCache =
@@ -81,10 +83,21 @@ public final class AnnotatedElementFacto
*/
public <X> AnnotatedType<X> getAnnotatedType(Class<X> annotatedClass)
{
- return (AnnotatedType<X>) annotatedTypeCache.get(annotatedClass);
+ return getAnnotatedTypeCache(annotatedClass).get(OWB_DEFAULT_KEY);
}
/**
+ * Get all already registered AnnotatedTypes of the specified type. This will NOT create a new one!
+ * @param annotatedClass
+ * @param <X>
+ * @return AnnotatedType
+ */
+ public <X> Iterable<AnnotatedType<X>> getAnnotatedTypes(Class<X> annotatedClass)
+ {
+ return getAnnotatedTypeCache(annotatedClass).values();
+ }
+
+ /**
* This method will get used to manually add AnnoatedTypes to our storage.
* Those AnnotatedTypes are coming from Extensions and get registered e.g. via
* {@link javax.enterprise.inject.spi.BeforeBeanDiscovery#addAnnotatedType(AnnotatedType)}
@@ -96,9 +109,14 @@ public final class AnnotatedElementFacto
*/
public <X> AnnotatedType<X> setAnnotatedType(AnnotatedType<X> annotatedType)
{
- return (AnnotatedType<X>) annotatedTypeCache.put(annotatedType.getJavaClass(), annotatedType);
+ return setAnnotatedType(annotatedType, OWB_DEFAULT_KEY);
}
+ public <X> AnnotatedType<X> setAnnotatedType(AnnotatedType<X> annotatedType, String id)
+ {
+ ConcurrentMap<String, AnnotatedType<X>> annotatedTypes = getAnnotatedTypeCache(annotatedType.getJavaClass());
+ return (AnnotatedType<X>) annotatedTypes.put(id, annotatedType);
+ }
/**
* Creates and configures new annotated type.
@@ -107,11 +125,11 @@ public final class AnnotatedElementFacto
* @param annotatedClass annotated class
* @return new annotated type
*/
- @SuppressWarnings("unchecked")
public <X> AnnotatedType<X> newAnnotatedType(Class<X> annotatedClass)
{
Asserts.assertNotNull(annotatedClass, "annotatedClass is null");
- AnnotatedType<X> annotatedType = (AnnotatedType<X>)annotatedTypeCache.get(annotatedClass);
+ ConcurrentMap<String, AnnotatedType<X>> annotatedTypes = getAnnotatedTypeCache(annotatedClass);
+ AnnotatedType<X> annotatedType = (AnnotatedType<X>)annotatedTypes.get(OWB_DEFAULT_KEY);
if(annotatedType == null)
{
try
@@ -123,7 +141,7 @@ public final class AnnotatedElementFacto
}
annotatedType = new AnnotatedTypeImpl<X>(webBeansContext, annotatedClass, (AnnotatedTypeImpl<? super X>) supertype);
- AnnotatedType<X> oldType = (AnnotatedType<X>)annotatedTypeCache.putIfAbsent(annotatedClass, annotatedType);
+ AnnotatedType<X> oldType = (AnnotatedType<X>)annotatedTypes.putIfAbsent(OWB_DEFAULT_KEY, annotatedType);
if(oldType != null)
{
annotatedType = oldType;
@@ -264,4 +282,19 @@ public final class AnnotatedElementFacto
annotatedFieldCache.clear();
annotatedMethodCache.clear();
}
+
+ private <T> ConcurrentMap<String, AnnotatedType<T>> getAnnotatedTypeCache(Class<T> type)
+ {
+ ConcurrentMap<String, AnnotatedType<?>> annotatedTypes = annotatedTypeCache.get(type);
+ if (annotatedTypes == null)
+ {
+ annotatedTypes = new ConcurrentHashMap<String, AnnotatedType<?>>();
+ ConcurrentMap<String, AnnotatedType<?>> oldAnnotatedTypes = annotatedTypeCache.putIfAbsent(type, annotatedTypes);
+ if (oldAnnotatedTypes != null)
+ {
+ annotatedTypes = oldAnnotatedTypes;
+ }
+ }
+ return (ConcurrentMap<String, AnnotatedType<T>>)(ConcurrentMap<?, ?>)annotatedTypes;
+ }
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java?rev=1467359&r1=1467358&r2=1467359&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java Fri Apr 12 17:17:48 2013
@@ -64,7 +64,6 @@ public class AfterBeanDiscoveryImpl impl
/**
* {@inheritDoc}
*/
- @SuppressWarnings("unchecked")
public void addBean(Bean<?> bean)
{
AnnotatedType<?> annotatedType = webBeansContext.getAnnotatedElementFactory().newAnnotatedType(bean.getBeanClass());
@@ -76,9 +75,7 @@ public class AfterBeanDiscoveryImpl impl
if(bean instanceof Interceptor)
{
//Required for custom interceptors
- ManagedBean managedBean =
- webBeansContext.getWebBeansUtil().defineManagedBeanWithoutFireEvents(
- (AnnotatedType<?>) annotatedType);
+ webBeansContext.getWebBeansUtil().defineManagedBeanWithoutFireEvents((AnnotatedType<?>) annotatedType);
Interceptor<?> interceptor = (Interceptor<?>)bean;
if(interceptor.getScope() != Dependent.class)
@@ -113,7 +110,7 @@ public class AfterBeanDiscoveryImpl impl
else if(bean instanceof Decorator)
{
//Required for custom decorators
- ManagedBean managedBean =
+ ManagedBean<?> managedBean =
webBeansContext.getWebBeansUtil().defineManagedBeanWithoutFireEvents(
(AnnotatedType<?>) annotatedType);
if(managedBean.getScope() != Dependent.class)
@@ -141,7 +138,7 @@ public class AfterBeanDiscoveryImpl impl
}
- webBeansContext.getDecoratorsManager().addDecorator((Decorator) bean);
+ webBeansContext.getDecoratorsManager().addDecorator((Decorator<?>) bean);
webBeansContext.getDecoratorsManager().addCustomDecoratorClass(bean.getBeanClass());
}
else
@@ -177,4 +174,20 @@ public class AfterBeanDiscoveryImpl impl
beanManager.getNotificationManager().addObserver(observerMethod, observerMethod.getObservedType());
}
+ /**
+ * {@inheritDoc}
+ */
+ public <T> AnnotatedType<T> getAnnotatedType(Class<T> type, String id)
+ {
+ return (AnnotatedType<T>) beanManager.getAdditionalAnnotatedType(type, id);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public <T> Iterable<AnnotatedType<T>> getAnnotatedTypes(Class<T> type)
+ {
+ return beanManager.getWebBeansContext().getAnnotatedElementFactory().getAnnotatedTypes(type);
+ }
+
}