[weld-commits] Weld SVN: r4628 - in core/trunk/impl/src/main/java/org/jboss/weld: bootstrap/events and 2 other directories.
weld-commits at lists.jboss.org
weld-commits at lists.jboss.org
Tue Nov 3 14:38:03 EST 2009
Author: marius.bogoevici
Date: 2009-11-03 14:38:02 -0500 (Tue, 03 Nov 2009)
New Revision: 4628
Modified:
core/trunk/impl/src/main/java/org/jboss/weld/BeanManagerImpl.java
core/trunk/impl/src/main/java/org/jboss/weld/Validator.java
core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/events/AfterBeanDiscoveryImpl.java
core/trunk/impl/src/main/java/org/jboss/weld/resolution/TypeSafeInterceptorResolver.java
core/trunk/impl/src/main/java/org/jboss/weld/xml/BeansXmlParser.java
Log:
WELD-238: Support Interceptors added via portable extensions.
Modified: core/trunk/impl/src/main/java/org/jboss/weld/BeanManagerImpl.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/BeanManagerImpl.java 2009-11-03 19:11:21 UTC (rev 4627)
+++ core/trunk/impl/src/main/java/org/jboss/weld/BeanManagerImpl.java 2009-11-03 19:38:02 UTC (rev 4628)
@@ -218,7 +218,7 @@
*/
private transient final TypeSafeBeanResolver<Bean<?>> beanResolver;
private transient final TypeSafeResolver<? extends Resolvable, DecoratorImpl<?>> decoratorResolver;
- private transient final TypeSafeResolver<? extends Resolvable, InterceptorImpl<?>> interceptorResolver;
+ private transient final TypeSafeResolver<? extends Resolvable, Interceptor<?>> interceptorResolver;
private transient final TypeSafeResolver<? extends Resolvable, ObserverMethod<?>> observerResolver;
private transient final NameBasedResolver nameBasedResolver;
private transient final ELResolver weldELResolver;
@@ -236,7 +236,7 @@
private transient final List<Bean<?>> beans;
private transient final List<Bean<?>> transitiveBeans;
private transient final List<DecoratorImpl<?>> decorators;
- private transient final List<InterceptorImpl<?>> interceptors;
+ private transient final List<Interceptor<?>> interceptors;
private transient final List<String> namespaces;
private transient final List<ObserverMethod<?>> observers;
@@ -290,7 +290,7 @@
new CopyOnWriteArrayList<Bean<?>>(),
new CopyOnWriteArrayList<Bean<?>>(),
new CopyOnWriteArrayList<DecoratorImpl<?>>(),
- new CopyOnWriteArrayList<InterceptorImpl<?>>(),
+ new CopyOnWriteArrayList<Interceptor<?>>(),
new CopyOnWriteArrayList<ObserverMethod<?>>(),
new CopyOnWriteArrayList<String>(),
new ConcurrentHashMap<EjbDescriptor<?>, SessionBean<?>>(),
@@ -319,7 +319,7 @@
new CopyOnWriteArrayList<Bean<?>>(),
new CopyOnWriteArrayList<Bean<?>>(),
new CopyOnWriteArrayList<DecoratorImpl<?>>(),
- new CopyOnWriteArrayList<InterceptorImpl<?>>(),
+ new CopyOnWriteArrayList<Interceptor<?>>(),
new CopyOnWriteArrayList<ObserverMethod<?>>(),
new CopyOnWriteArrayList<String>(),
rootManager.getEnterpriseBeans(),
@@ -385,7 +385,7 @@
List<Bean<?>> beans,
List<Bean<?>> transitiveBeans,
List<DecoratorImpl<?>> decorators,
- List<InterceptorImpl<?>> interceptors,
+ List<Interceptor<?>> interceptors,
List<ObserverMethod<?>> observers,
List<String> namespaces,
Map<EjbDescriptor<?>, SessionBean<?>> enterpriseBeans,
@@ -528,10 +528,10 @@
};
- public static Transform<InterceptorImpl<?>> INTERCEPTOR_BEAN = new Transform<InterceptorImpl<?>>()
+ public static Transform<Interceptor<?>> INTERCEPTOR_BEAN = new Transform<Interceptor<?>>()
{
- public Iterable<InterceptorImpl<?>> transform(BeanManagerImpl beanManager)
+ public Iterable<Interceptor<?>> transform(BeanManagerImpl beanManager)
{
return beanManager.getInterceptors();
}
@@ -610,7 +610,7 @@
return this.<T>resolveObserverMethods(event.getClass(), bindings);
}
- public void addInterceptor(InterceptorImpl<?> bean)
+ public void addInterceptor(Interceptor<?> bean)
{
interceptors.add(bean);
getServices().get(ContextualStore.class).putIfAbsent(bean);
@@ -815,7 +815,7 @@
return Collections.unmodifiableList(decorators);
}
- public List<InterceptorImpl<?>> getInterceptors()
+ public List<Interceptor<?>> getInterceptors()
{
return Collections.unmodifiableList(interceptors);
}
Modified: core/trunk/impl/src/main/java/org/jboss/weld/Validator.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/Validator.java 2009-11-03 19:11:21 UTC (rev 4627)
+++ core/trunk/impl/src/main/java/org/jboss/weld/Validator.java 2009-11-03 19:38:02 UTC (rev 4628)
@@ -27,6 +27,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.Map;
import javax.enterprise.context.Dependent;
import javax.enterprise.event.Event;
@@ -266,6 +267,7 @@
validateBeans(manager.getDecorators(), new ArrayList<RIBean<?>>(), manager);
validateBeans(manager.getBeans(), new ArrayList<RIBean<?>>(), manager);
validateEnabledDecoratorClasses(manager);
+ validateEnabledInterceptorClasses(manager);
validateEnabledPolicies(manager);
validateDisposalMethods(environment);
validateBeanNames(manager);
@@ -324,6 +326,28 @@
}
}
}
+
+ private void validateEnabledInterceptorClasses(BeanManagerImpl beanManager)
+ {
+ Set<Class<?>> interceptorBeanClasses = new HashSet<Class<?>>();
+ for (Interceptor<?> interceptor : beanManager.getInterceptors())
+ {
+ interceptorBeanClasses.add(interceptor.getBeanClass());
+ }
+ for (Class<?> enabledInterceptorClass: beanManager.getEnabledInterceptorClasses())
+ {
+ if (beanManager.getEnabledInterceptorClasses().indexOf(enabledInterceptorClass)
+ < beanManager.getEnabledInterceptorClasses().lastIndexOf(enabledInterceptorClass))
+ {
+ throw new DeploymentException("Enabled interceptor class" + enabledInterceptorClass + " specified twice");
+ }
+ if (!interceptorBeanClasses.contains(enabledInterceptorClass))
+ {
+ throw new DeploymentException("Enabled interceptor class " + enabledInterceptorClass
+ + " is neither annotated with @Interceptor, nor registered through a portable extension");
+ }
+ }
+ }
private void validateEnabledDecoratorClasses(BeanManagerImpl beanManager)
{
Modified: core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/events/AfterBeanDiscoveryImpl.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/events/AfterBeanDiscoveryImpl.java 2009-11-03 19:11:21 UTC (rev 4627)
+++ core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/events/AfterBeanDiscoveryImpl.java 2009-11-03 19:38:02 UTC (rev 4628)
@@ -24,6 +24,8 @@
import javax.enterprise.inject.spi.AfterBeanDiscovery;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.ObserverMethod;
+import javax.enterprise.inject.spi.Interceptor;
+import javax.decorator.Decorator;
import org.jboss.weld.BeanManagerImpl;
import org.jboss.weld.bootstrap.BeanDeployment;
@@ -56,7 +58,14 @@
public void addBean(Bean<?> bean)
{
BeanManagerImpl beanManager = getOrCreateBeanDeployment(bean.getBeanClass()).getBeanManager();
- beanManager.addBean(bean);
+ if (bean instanceof Interceptor)
+ {
+ beanManager.addInterceptor((Interceptor<?>) bean);
+ }
+ else
+ {
+ beanManager.addBean(bean);
+ }
ProcessBeanImpl.fire(beanManager, bean);
}
Modified: core/trunk/impl/src/main/java/org/jboss/weld/resolution/TypeSafeInterceptorResolver.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/resolution/TypeSafeInterceptorResolver.java 2009-11-03 19:11:21 UTC (rev 4627)
+++ core/trunk/impl/src/main/java/org/jboss/weld/resolution/TypeSafeInterceptorResolver.java 2009-11-03 19:38:02 UTC (rev 4628)
@@ -23,6 +23,8 @@
import java.util.Set;
import java.util.TreeSet;
+import javax.enterprise.inject.spi.Interceptor;
+
import org.jboss.weld.BeanManagerImpl;
import org.jboss.weld.bean.InterceptorImpl;
import org.jboss.weld.util.Beans;
@@ -30,34 +32,34 @@
/**
* @author <a href="mailto:mariusb at redhat.com">Marius Bogoevici</a>
*/
-public class TypeSafeInterceptorResolver extends TypeSafeResolver<InterceptorResolvable,InterceptorImpl<?>>
+public class TypeSafeInterceptorResolver extends TypeSafeResolver<InterceptorResolvable,Interceptor<?>>
{
private BeanManagerImpl manager;
- public TypeSafeInterceptorResolver(BeanManagerImpl manager, Iterable<InterceptorImpl<?>> interceptors)
+ public TypeSafeInterceptorResolver(BeanManagerImpl manager, Iterable<Interceptor<?>> interceptors)
{
super(interceptors);
this.manager = manager;
}
@Override
- protected boolean matches(InterceptorResolvable resolvable, InterceptorImpl<?> bean)
+ protected boolean matches(InterceptorResolvable resolvable, Interceptor<?> bean)
{
return bean.intercepts(resolvable.getInterceptionType())
&& bean.getInterceptorBindings().size() > 0
&& Beans.containsAllInterceptionBindings(bean.getInterceptorBindings(), resolvable.getQualifiers(), getManager())
- && getManager().getEnabledInterceptorClasses().contains(bean.getType());
+ && getManager().getEnabledInterceptorClasses().contains(bean.getBeanClass());
}
@Override
- protected Set<InterceptorImpl<?>> sortResult(Set<InterceptorImpl<?>> matchedInterceptors)
+ protected Set<Interceptor<?>> sortResult(Set<Interceptor<?>> matchedInterceptors)
{
- Set<InterceptorImpl<?>> sortedBeans = new TreeSet<InterceptorImpl<?>>(new Comparator<InterceptorImpl<?>>()
+ Set<Interceptor<?>> sortedBeans = new TreeSet<Interceptor<?>>(new Comparator<Interceptor<?>>()
{
- public int compare(InterceptorImpl<?> o1, InterceptorImpl<?> o2)
+ public int compare(Interceptor<?> o1, Interceptor<?> o2)
{
List<Class<?>> enabledInterceptors = getManager().getEnabledInterceptorClasses();
int p1 = enabledInterceptors.indexOf(((InterceptorImpl<?>) o1).getType());
@@ -71,7 +73,7 @@
}
@Override
- protected Set<InterceptorImpl<?>> filterResult(Set<InterceptorImpl<?>> matched)
+ protected Set<Interceptor<?>> filterResult(Set<Interceptor<?>> matched)
{
return matched;
}
Modified: core/trunk/impl/src/main/java/org/jboss/weld/xml/BeansXmlParser.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/xml/BeansXmlParser.java 2009-11-03 19:11:21 UTC (rev 4627)
+++ core/trunk/impl/src/main/java/org/jboss/weld/xml/BeansXmlParser.java 2009-11-03 19:38:02 UTC (rev 4628)
@@ -283,19 +283,7 @@
try
{
Class<?> clazz = resourceLoader.classForName(className);
- if (!clazz.isAnnotationPresent(Interceptor.class))
- {
- throw new DeploymentException("Class " + clazz.getName() + " is enabled as an interceptor," +
- " but it does not have the appropriate annotation");
- }
- else if (list.contains(clazz))
- {
- throw new DeploymentException("Class " + clazz.getName() + " is listed twice as an enabled interceptor");
- }
- else
- {
- list.add(clazz);
- }
+ list.add(clazz);
}
catch (ResourceLoadingException e)
{
More information about the weld-commits
mailing list