[webbeans-commits] Webbeans SVN: r2942 - in ri/trunk/impl/src/main/java/org/jboss/webbeans: el and 1 other directory.
by webbeans-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2009-07-01 10:37:36 -0400 (Wed, 01 Jul 2009)
New Revision: 2942
Modified:
ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/el/WebBeansELResolverImpl.java
Log:
Oops, remove uncessary holder structure
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java 2009-07-01 14:36:02 UTC (rev 2941)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java 2009-07-01 14:37:36 UTC (rev 2942)
@@ -216,8 +216,9 @@
private transient final Namespace rootNamespace;
private transient final List<EventObserver<?>> observers;
private transient final Set<BeanManagerImpl> childActivities;
- private transient final Integer id;
+ private final Integer id;
+
/*
* Runtime data transfer
* *********************
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/el/WebBeansELResolverImpl.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/el/WebBeansELResolverImpl.java 2009-07-01 14:36:02 UTC (rev 2941)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/el/WebBeansELResolverImpl.java 2009-07-01 14:37:36 UTC (rev 2942)
@@ -129,7 +129,7 @@
{
name = propertyString;
}
- final ValueHolder<Object> holder = new ValueHolder<Object>();
+ Object value = null;
try
{
@@ -137,7 +137,7 @@
CreationalContext<?> creationalContext = manager.createCreationalContext(bean);
if (bean != null)
{
- holder.setValue(manager.getReference(bean, creationalContext));
+ value = manager.getReference(bean, creationalContext);
}
creationalContext.release();
}
@@ -145,10 +145,10 @@
{
throw new RuntimeException("Error resolving property " + propertyString + " against base " + base, e);
}
- if (holder.getValue() != null)
+ if (value != null)
{
context.setPropertyResolved(true);
- return holder.getValue();
+ return value;
}
}
return null;
15 years, 8 months
[webbeans-commits] Webbeans SVN: r2941 - doc/trunk/reference/en-US.
by webbeans-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2009-07-01 10:36:02 -0400 (Wed, 01 Jul 2009)
New Revision: 2941
Modified:
doc/trunk/reference/en-US/producermethods.xml
Log:
WBRI-281
Modified: doc/trunk/reference/en-US/producermethods.xml
===================================================================
--- doc/trunk/reference/en-US/producermethods.xml 2009-07-01 14:18:53 UTC (rev 2940)
+++ doc/trunk/reference/en-US/producermethods.xml 2009-07-01 14:36:02 UTC (rev 2941)
@@ -79,7 +79,7 @@
<para>This injection point has the same type and binding annotations as the producer
method, so it resolves to the producer method using the usual Web Beans injection
rules. The producer method will be called by the Web Bean manager to obtain an instance
- to service this injection point.</para>.
+ to service this injection point.</para>
<section>
<title>Scope of a producer method</title>
15 years, 8 months
[webbeans-commits] Webbeans SVN: r2940 - ri/trunk/impl/src/main/java/org/jboss/webbeans.
by webbeans-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2009-07-01 10:18:53 -0400 (Wed, 01 Jul 2009)
New Revision: 2940
Modified:
ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java
Log:
keyword order
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java 2009-07-01 14:13:21 UTC (rev 2939)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java 2009-07-01 14:18:53 UTC (rev 2940)
@@ -178,7 +178,7 @@
private transient final ConcurrentListMultiMap<Class<? extends Annotation>, Context> contexts;
private transient final ClientProxyProvider clientProxyProvider;
- private final transient AtomicInteger ids;
+ private transient final AtomicInteger ids;
private transient final Map<String, RIBean<?>> riBeans;
private transient final Map<Class<?>, EnterpriseBean<?>> newEnterpriseBeans;
@@ -194,8 +194,8 @@
private transient List<Class<? extends Annotation>> enabledDeploymentTypes;
private transient List<Class<?>> enabledDecoratorClasses;
private transient List<Class<?>> enabledInterceptorClasses;
- private final transient Set<CurrentActivity> currentActivities;
- private final transient Map<Contextual<?>, Contextual<?>> specializedBeans;
+ private transient final Set<CurrentActivity> currentActivities;
+ private transient final Map<Contextual<?>, Contextual<?>> specializedBeans;
/*
* Activity scoped services
@@ -205,19 +205,24 @@
private transient final TypeSafeResolver<DecoratorBean<?>> decoratorResolver;
private transient final TypeSafeResolver<EventObserver<?>> observerResolver;
private transient final NameBasedResolver nameBasedResolver;
- private final transient ELResolver webbeansELResolver;
+ private transient final ELResolver webbeansELResolver;
/*
* Activity scoped data structures
* ********************************
*/
- private transient final ThreadLocal<Stack<InjectionPoint>> currentInjectionPoint;
private transient final List<Bean<?>> beans;
private transient final List<DecoratorBean<?>> decorators;
- private final transient Namespace rootNamespace;
- private final transient List<EventObserver<?>> observers;
- private final transient Set<BeanManagerImpl> childActivities;
- private final Integer id;
+ private transient final Namespace rootNamespace;
+ private transient final List<EventObserver<?>> observers;
+ private transient final Set<BeanManagerImpl> childActivities;
+ private transient final Integer id;
+
+ /*
+ * Runtime data transfer
+ * *********************
+ */
+ private transient final ThreadLocal<Stack<InjectionPoint>> currentInjectionPoint;
/**
* Create a new, root, manager
@@ -310,6 +315,7 @@
this.nameBasedResolver = new NameBasedResolver(this, beans);
this.webbeansELResolver = new WebBeansELResolverImpl(this);
this.childActivities = new CopyOnWriteArraySet<BeanManagerImpl>();
+
this.currentInjectionPoint = new ThreadLocal<Stack<InjectionPoint>>()
{
@Override
15 years, 8 months
[webbeans-commits] Webbeans SVN: r2939 - in ri/trunk/impl/src/main/java/org/jboss/webbeans: event and 2 other directories.
by webbeans-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2009-07-01 10:13:21 -0400 (Wed, 01 Jul 2009)
New Revision: 2939
Added:
ri/trunk/impl/src/main/java/org/jboss/webbeans/util/Observers.java
Removed:
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventManager.java
Modified:
ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventObserver.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeBeanResolver.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeObserverResolver.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeResolver.java
Log:
Remove EventManager and tidy up TypeSafeResolver
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java 2009-07-01 13:45:45 UTC (rev 2938)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java 2009-07-01 14:13:21 UTC (rev 2939)
@@ -73,9 +73,9 @@
import org.jboss.webbeans.bootstrap.api.ServiceRegistry;
import org.jboss.webbeans.context.ApplicationContext;
import org.jboss.webbeans.context.CreationalContextImpl;
+import org.jboss.webbeans.context.DependentContext;
import org.jboss.webbeans.el.Namespace;
import org.jboss.webbeans.el.WebBeansELResolverImpl;
-import org.jboss.webbeans.event.EventManager;
import org.jboss.webbeans.event.EventObserver;
import org.jboss.webbeans.event.ObserverImpl;
import org.jboss.webbeans.introspector.WBAnnotated;
@@ -91,6 +91,7 @@
import org.jboss.webbeans.resolution.TypeSafeObserverResolver;
import org.jboss.webbeans.resolution.TypeSafeResolver;
import org.jboss.webbeans.util.Beans;
+import org.jboss.webbeans.util.Observers;
import org.jboss.webbeans.util.Proxies;
import org.jboss.webbeans.util.Reflections;
import org.jboss.webbeans.util.collections.multi.ConcurrentListHashMultiMap;
@@ -200,7 +201,6 @@
* Activity scoped services
* *************************
*/
- private transient final EventManager eventManager;
private transient final TypeSafeResolver<Bean<?>> beanResolver;
private transient final TypeSafeResolver<DecoratorBean<?>> decoratorResolver;
private transient final TypeSafeResolver<EventObserver<?>> observerResolver;
@@ -215,7 +215,7 @@
private transient final List<Bean<?>> beans;
private transient final List<DecoratorBean<?>> decorators;
private final transient Namespace rootNamespace;
- private final transient List<EventObserver<?>> registeredObservers;
+ private final transient List<EventObserver<?>> observers;
private final transient Set<BeanManagerImpl> childActivities;
private final Integer id;
@@ -260,7 +260,7 @@
beans.addAll(parentManager.getBeans());
List<EventObserver<?>> registeredObservers = new CopyOnWriteArrayList<EventObserver<?>>();
- registeredObservers.addAll(parentManager.getRegisteredObservers());
+ registeredObservers.addAll(parentManager.getObservers());
Namespace rootNamespace = new Namespace(parentManager.getRootNamespace());
return new BeanManagerImpl(
@@ -297,7 +297,7 @@
this.contexts = contexts;
this.currentActivities = currentActivities;
this.specializedBeans = specializedBeans;
- this.registeredObservers = registeredObservers;
+ this.observers = registeredObservers;
setEnabledDeploymentTypes(enabledDeploymentTypes);
setEnabledDecoratorClasses(enabledDecoratorClasses);
this.rootNamespace = rootNamespace;
@@ -308,7 +308,6 @@
this.decoratorResolver = new TypeSafeDecoratorResolver(this, decorators);
this.observerResolver = new TypeSafeObserverResolver(this, registeredObservers);
this.nameBasedResolver = new NameBasedResolver(this, beans);
- this.eventManager = new EventManager(this);
this.webbeansELResolver = new WebBeansELResolverImpl(this);
this.childActivities = new CopyOnWriteArraySet<BeanManagerImpl>();
this.currentInjectionPoint = new ThreadLocal<Stack<InjectionPoint>>()
@@ -599,7 +598,7 @@
@Deprecated
public void addObserver(Observer<?> observer, Annotation... bindings)
{
- addObserver(observer, eventManager.getTypeOfObserver(observer), bindings);
+ addObserver(observer, Observers.getTypeOfObserver(observer), bindings);
}
/**
@@ -626,7 +625,9 @@
public void addObserver(Observer<?> observer, Type eventType, Annotation... bindings)
{
checkEventType(eventType);
- this.eventManager.addObserver(observer, eventType, bindings);
+ EventObserver<?> eventObserver = EventObserver.of(observer, eventType, this, bindings);
+ observers.add(eventObserver);
+ log.trace("Added observer " + observer + " observing event type " + eventType);
for (BeanManagerImpl childActivity : childActivities)
{
childActivity.addObserver(observer, eventType, bindings);
@@ -665,11 +666,20 @@
}
}
- // Get the observers for this event. Although resolveObservers is
- // parameterized, this method is not, so we have to use
- // Observer<Object> for observers.
Set<Observer<Object>> observers = resolveObservers(event, bindings);
- eventManager.notifyObservers(observers, event);
+ try
+ {
+ DependentContext.instance().setActive(true);
+ for (Observer<Object> observer : observers)
+ {
+ observer.notify(event);
+ }
+ }
+ finally
+ {
+ // TODO This breaks SE shutdown, also we need to tidy up how dependent context is activated....
+ DependentContext.instance().setActive(false);
+ }
}
/**
@@ -1038,9 +1048,9 @@
return id;
}
- public List<EventObserver<?>> getRegisteredObservers()
+ public List<EventObserver<?>> getObservers()
{
- return registeredObservers;
+ return observers;
}
public Namespace getRootNamespace()
Deleted: ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventManager.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventManager.java 2009-07-01 13:45:45 UTC (rev 2938)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventManager.java 2009-07-01 14:13:21 UTC (rev 2939)
@@ -1,115 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jboss.webbeans.event;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.Set;
-
-import javax.enterprise.event.Observer;
-
-import org.jboss.webbeans.BeanManagerImpl;
-import org.jboss.webbeans.context.DependentContext;
-import org.jboss.webbeans.log.Log;
-import org.jboss.webbeans.log.Logging;
-
-/**
- * The event bus is where observers are registered and events are fired.
- *
- * @author David Allen
- *
- */
-public class EventManager
-{
- private static Log log = Logging.getLog(EventManager.class);
-
- private final BeanManagerImpl manager;
-
-
- /**
- * Initializes a new instance of the EventManager.
- */
- public EventManager(BeanManagerImpl manager)
- {
- this.manager = manager;
- }
-
- /**
- * Adds an observer to the event bus so that it receives event notifications.
- *
- * @param observer The observer that should receive events
- * @param eventType The event type the observer is interested in
- * @param bindings The bindings the observer wants to filter on
- */
- public <T> void addObserver(Observer<T> observer, Type eventType, Annotation... bindings)
- {
- EventObserver<T> eventObserver = new EventObserver<T>(observer, eventType, manager, bindings);
- manager.getRegisteredObservers().add(eventObserver);
- log.debug("Added observer " + observer + " observing event type " + eventType);
- }
-
- /**
- * Iterates over the interested observers. If an observer is transactional
- * and there is a transaction currently in progress, the event is deferred.
- * In other cases, the observer is notified immediately.
- *
- * @param observers The interested observers
- * @param event The event type
- */
- public <T> void notifyObservers(Set<Observer<T>> observers, T event)
- {
- try
- {
- DependentContext.instance().setActive(true);
- for (Observer<T> observer : observers)
- {
- observer.notify(event);
- }
- }
- finally
- {
- // TODO This breaks SE shutdown, also we need to tidy up how dependent context is activated....
- //DependentContext.instance().setActive(false);
- }
- }
-
- @Override
- public String toString()
- {
- StringBuilder buffer = new StringBuilder();
- buffer.append("Event manager\n");
- buffer.append(manager.getRegisteredObservers().toString());
- return buffer.toString();
- }
-
- public Type getTypeOfObserver(Observer<?> observer)
- {
- for (Type type : observer.getClass().getGenericInterfaces())
- {
- if (type instanceof ParameterizedType)
- {
- ParameterizedType ptype = (ParameterizedType) type;
- if (Observer.class.isAssignableFrom((Class<?>) ptype.getRawType()))
- {
- return ptype.getActualTypeArguments()[0];
- }
- }
- }
- throw new RuntimeException("Cannot find observer's event type: " + observer);
- }
-}
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventObserver.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventObserver.java 2009-07-01 13:45:45 UTC (rev 2938)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventObserver.java 2009-07-01 14:13:21 UTC (rev 2939)
@@ -50,6 +50,11 @@
private final Set<Annotation> eventBindings;
private final Observer<T> observer;
private final BeanManagerImpl manager;
+
+ public static <T> EventObserver<T> of(Observer<T> observer, final Type eventType, BeanManagerImpl manager, final Annotation[] eventBindings)
+ {
+ return new EventObserver<T>(observer, eventType, manager, eventBindings);
+ }
/**
* Constructs a new wrapper for an observer.
@@ -58,7 +63,7 @@
* @param eventType The class of event being observed
* @param eventBindings The array of annotation event bindings, if any
*/
- public EventObserver(final Observer<T> observer, final Type eventType, BeanManagerImpl manager, final Annotation... eventBindings)
+ private EventObserver(final Observer<T> observer, final Type eventType, BeanManagerImpl manager, final Annotation... eventBindings)
{
this.observer = observer;
this.eventType = eventType;
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeBeanResolver.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeBeanResolver.java 2009-07-01 13:45:45 UTC (rev 2938)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeBeanResolver.java 2009-07-01 14:13:21 UTC (rev 2939)
@@ -16,11 +16,14 @@
*/
package org.jboss.webbeans.resolution;
+import java.util.HashSet;
import java.util.Set;
import javax.enterprise.inject.spi.Bean;
import org.jboss.webbeans.BeanManagerImpl;
+import org.jboss.webbeans.bean.standard.EventBean;
+import org.jboss.webbeans.bean.standard.InstanceBean;
import org.jboss.webbeans.util.Beans;
import org.jboss.webbeans.util.Reflections;
@@ -32,6 +35,14 @@
{
private final BeanManagerImpl manager;
+ public static final Set<ResolvableTransformer> TRANSFORMERS;
+
+ static
+ {
+ TRANSFORMERS = new HashSet<ResolvableTransformer>();
+ TRANSFORMERS.add(EventBean.TRANSFORMER);
+ TRANSFORMERS.add(InstanceBean.TRANSFORMER);
+ }
public TypeSafeBeanResolver(BeanManagerImpl manager, Iterable<T> beans)
{
@@ -59,4 +70,16 @@
return Beans.retainHighestPrecedenceBeans(matched, manager.getEnabledDeploymentTypes());
}
+ @Override
+ protected Iterable<ResolvableTransformer> getTransformers()
+ {
+ return TRANSFORMERS;
+ }
+
+ @Override
+ protected Set<T> sortResult(Set<T> matched)
+ {
+ return matched;
+ }
+
}
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeObserverResolver.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeObserverResolver.java 2009-07-01 13:45:45 UTC (rev 2938)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeObserverResolver.java 2009-07-01 14:13:21 UTC (rev 2939)
@@ -16,6 +16,9 @@
*/
package org.jboss.webbeans.resolution;
+import java.util.Collections;
+import java.util.Set;
+
import org.jboss.webbeans.BeanManagerImpl;
import org.jboss.webbeans.event.EventObserver;
import org.jboss.webbeans.util.Beans;
@@ -50,4 +53,22 @@
return manager;
}
+ @Override
+ protected Set<EventObserver<?>> filterResult(Set<EventObserver<?>> matched)
+ {
+ return matched;
+ }
+
+ @Override
+ protected Iterable<ResolvableTransformer> getTransformers()
+ {
+ return Collections.emptySet();
+ }
+
+ @Override
+ protected Set<EventObserver<?>> sortResult(Set<EventObserver<?>> matched)
+ {
+ return matched;
+ }
+
}
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeResolver.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeResolver.java 2009-07-01 13:45:45 UTC (rev 2938)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeResolver.java 2009-07-01 14:13:21 UTC (rev 2939)
@@ -21,8 +21,6 @@
import java.util.Set;
import java.util.concurrent.Callable;
-import org.jboss.webbeans.bean.standard.EventBean;
-import org.jboss.webbeans.bean.standard.InstanceBean;
import org.jboss.webbeans.util.collections.ConcurrentCache;
/**
@@ -72,9 +70,6 @@
// The beans to search
private final Iterable<? extends T> iterable;
-
- // Annotation transformers used to mutate annotations during resolution
- private final Set<ResolvableTransformer> transformers;
/**
* Constructor
@@ -84,9 +79,7 @@
{
this.iterable = allBeans;
this.resolved = new ConcurrentCache<MatchingResolvable, Set<T>>();
- this.transformers = new HashSet<ResolvableTransformer>();
- transformers.add(EventBean.TRANSFORMER);
- transformers.add(InstanceBean.TRANSFORMER);
+
}
/**
@@ -119,25 +112,20 @@
return Collections.unmodifiableSet(beans);
}
- private Resolvable transform(Resolvable resolvable)
+ protected Resolvable transform(Resolvable resolvable)
{
- for (ResolvableTransformer transformer : transformers)
+ for (ResolvableTransformer transformer : getTransformers())
{
resolvable = transformer.transform(resolvable);
}
return resolvable;
}
- protected Set<T> filterResult(Set<T> matched)
- {
- //matchedBeans = Beans.retainHighestPrecedenceBeans(matchedBeans, manager.getEnabledDeploymentTypes());
- return matched;
- }
+ protected abstract Iterable<ResolvableTransformer> getTransformers();
+
+ protected abstract Set<T> filterResult(Set<T> matched);
- protected Set<T> sortResult(Set<T> matched)
- {
- return matched;
- }
+ protected abstract Set<T> sortResult(Set<T> matched);
/**
* Gets the matching beans for binding criteria from a list of beans
Added: ri/trunk/impl/src/main/java/org/jboss/webbeans/util/Observers.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/util/Observers.java (rev 0)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/util/Observers.java 2009-07-01 14:13:21 UTC (rev 2939)
@@ -0,0 +1,47 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.webbeans.util;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
+import javax.enterprise.event.Observer;
+
+/**
+ * @author pmuir
+ *
+ */
+public class Observers
+{
+
+ public static Type getTypeOfObserver(Observer<?> observer)
+ {
+ for (Type type : observer.getClass().getGenericInterfaces())
+ {
+ if (type instanceof ParameterizedType)
+ {
+ ParameterizedType ptype = (ParameterizedType) type;
+ if (Observer.class.isAssignableFrom((Class<?>) ptype.getRawType()))
+ {
+ return ptype.getActualTypeArguments()[0];
+ }
+ }
+ }
+ throw new RuntimeException("Cannot find observer's event type: " + observer);
+ }
+
+}
Property changes on: ri/trunk/impl/src/main/java/org/jboss/webbeans/util/Observers.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
15 years, 8 months
[webbeans-commits] Webbeans SVN: r2938 - ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/standard and 8 other directories.
by webbeans-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2009-07-01 09:45:45 -0400 (Wed, 01 Jul 2009)
New Revision: 2938
Added:
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/NameBasedResolver.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeBeanResolver.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeDecoratorResolver.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeObserverResolver.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeResolver.java
Removed:
ri/trunk/impl/src/main/java/org/jboss/webbeans/injection/resolution/
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/DecoratorResolver.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/Resolver.java
Modified:
ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/InstanceImpl.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/Validator.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/standard/EventBean.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/standard/FacadeBeanResolvableTransformer.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/standard/InstanceBean.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/AbstractBeanDeployer.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployerEnvironment.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventManager.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventObserver.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/ForwardingResolvable.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/Resolvable.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/ResolvableFactory.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/ResolvableTransformer.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/ResolvableWBClass.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/util/Beans.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/util/Reflections.java
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/implementation/event/SimpleEventTest.java
tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/event/observer/register/ManagerRemoveObserverTest.java
tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/event/observer/registerUsingEvent/RegisterObserversUsingImplicitEventTest.java
Log:
Switch observer resolution over to Resolver
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -78,22 +78,23 @@
import org.jboss.webbeans.event.EventManager;
import org.jboss.webbeans.event.EventObserver;
import org.jboss.webbeans.event.ObserverImpl;
-import org.jboss.webbeans.injection.resolution.DecoratorResolver;
-import org.jboss.webbeans.injection.resolution.ResolvableFactory;
-import org.jboss.webbeans.injection.resolution.ResolvableWBClass;
-import org.jboss.webbeans.injection.resolution.Resolver;
import org.jboss.webbeans.introspector.WBAnnotated;
import org.jboss.webbeans.log.Log;
import org.jboss.webbeans.log.Logging;
import org.jboss.webbeans.manager.api.WebBeansManager;
import org.jboss.webbeans.metadata.cache.MetaAnnotationStore;
+import org.jboss.webbeans.resolution.NameBasedResolver;
+import org.jboss.webbeans.resolution.ResolvableFactory;
+import org.jboss.webbeans.resolution.ResolvableWBClass;
+import org.jboss.webbeans.resolution.TypeSafeBeanResolver;
+import org.jboss.webbeans.resolution.TypeSafeDecoratorResolver;
+import org.jboss.webbeans.resolution.TypeSafeObserverResolver;
+import org.jboss.webbeans.resolution.TypeSafeResolver;
import org.jboss.webbeans.util.Beans;
import org.jboss.webbeans.util.Proxies;
import org.jboss.webbeans.util.Reflections;
import org.jboss.webbeans.util.collections.multi.ConcurrentListHashMultiMap;
import org.jboss.webbeans.util.collections.multi.ConcurrentListMultiMap;
-import org.jboss.webbeans.util.collections.multi.ConcurrentSetHashMultiMap;
-import org.jboss.webbeans.util.collections.multi.ConcurrentSetMultiMap;
/**
* Implementation of the Web Beans Manager.
@@ -200,8 +201,10 @@
* *************************
*/
private transient final EventManager eventManager;
- private transient final Resolver resolver;
- private transient final Resolver decoratorResolver;
+ private transient final TypeSafeResolver<Bean<?>> beanResolver;
+ private transient final TypeSafeResolver<DecoratorBean<?>> decoratorResolver;
+ private transient final TypeSafeResolver<EventObserver<?>> observerResolver;
+ private transient final NameBasedResolver nameBasedResolver;
private final transient ELResolver webbeansELResolver;
/*
@@ -212,7 +215,7 @@
private transient final List<Bean<?>> beans;
private transient final List<DecoratorBean<?>> decorators;
private final transient Namespace rootNamespace;
- private final transient ConcurrentSetMultiMap<Type, EventObserver<?>> registeredObservers;
+ private final transient List<EventObserver<?>> registeredObservers;
private final transient Set<BeanManagerImpl> childActivities;
private final Integer id;
@@ -234,7 +237,7 @@
serviceRegistry,
new CopyOnWriteArrayList<Bean<?>>(),
new CopyOnWriteArrayList<DecoratorBean<?>>(),
- new ConcurrentSetHashMultiMap<Type, EventObserver<?>>(),
+ new CopyOnWriteArrayList<EventObserver<?>>(),
new Namespace(),
new ConcurrentHashMap<Class<?>, EnterpriseBean<?>>(),
new ConcurrentHashMap<String, RIBean<?>>(),
@@ -256,8 +259,8 @@
List<Bean<?>> beans = new CopyOnWriteArrayList<Bean<?>>();
beans.addAll(parentManager.getBeans());
- ConcurrentSetMultiMap<Type, EventObserver<?>> registeredObservers = new ConcurrentSetHashMultiMap<Type, EventObserver<?>>();
- registeredObservers.deepPutAll(parentManager.getRegisteredObservers());
+ List<EventObserver<?>> registeredObservers = new CopyOnWriteArrayList<EventObserver<?>>();
+ registeredObservers.addAll(parentManager.getRegisteredObservers());
Namespace rootNamespace = new Namespace(parentManager.getRootNamespace());
return new BeanManagerImpl(
@@ -283,7 +286,7 @@
*
* @param ejbServices the ejbResolver to use
*/
- private BeanManagerImpl(ServiceRegistry serviceRegistry, List<Bean<?>> beans, List<DecoratorBean<?>> decorators, ConcurrentSetMultiMap<Type, EventObserver<?>> registeredObservers, Namespace rootNamespace, Map<Class<?>, EnterpriseBean<?>> newEnterpriseBeans, Map<String, RIBean<?>> riBeans, ClientProxyProvider clientProxyProvider, ConcurrentListMultiMap<Class<? extends Annotation>, Context> contexts, Set<CurrentActivity> currentActivities, Map<Contextual<?>, Contextual<?>> specializedBeans, List<Class<? extends Annotation>> enabledDeploymentTypes, List<Class<?>> enabledDecoratorClasses, AtomicInteger ids)
+ private BeanManagerImpl(ServiceRegistry serviceRegistry, List<Bean<?>> beans, List<DecoratorBean<?>> decorators, List<EventObserver<?>> registeredObservers, Namespace rootNamespace, Map<Class<?>, EnterpriseBean<?>> newEnterpriseBeans, Map<String, RIBean<?>> riBeans, ClientProxyProvider clientProxyProvider, ConcurrentListMultiMap<Class<? extends Annotation>, Context> contexts, Set<CurrentActivity> currentActivities, Map<Contextual<?>, Contextual<?>> specializedBeans, List<Class<? extends Annotation>> enabledDeploymentTypes, List<Class<?>> enabledDecoratorClasses, AtomicInteger ids)
{
this.services = serviceRegistry;
this.beans = beans;
@@ -301,8 +304,10 @@
this.ids = ids;
this.id = ids.incrementAndGet();
- this.resolver = new Resolver(this, beans);
- this.decoratorResolver = new DecoratorResolver(this, decorators);
+ this.beanResolver = new TypeSafeBeanResolver<Bean<?>>(this, beans);
+ this.decoratorResolver = new TypeSafeDecoratorResolver(this, decorators);
+ this.observerResolver = new TypeSafeObserverResolver(this, registeredObservers);
+ this.nameBasedResolver = new NameBasedResolver(this, beans);
this.eventManager = new EventManager(this);
this.webbeansELResolver = new WebBeansELResolverImpl(this);
this.childActivities = new CopyOnWriteArraySet<BeanManagerImpl>();
@@ -347,7 +352,7 @@
{
return;
}
- resolver.clear();
+ beanResolver.clear();
beans.add(bean);
registerBeanNamespace(bean);
for (BeanManagerImpl childActivity : childActivities)
@@ -374,7 +379,13 @@
throw new IllegalArgumentException("Duplicate binding types: " + bindings);
}
checkEventType(clazz);
- return eventManager.getObservers(event, bindings);
+ Set<Observer<T>> observers = new HashSet<Observer<T>>();
+ Set<EventObserver<?>> eventObservers = observerResolver.resolve(ResolvableFactory.of(new Reflections.HierarchyDiscovery(clazz).getFlattenedTypes(), bindingAnnotations));
+ for (EventObserver<?> observer : eventObservers)
+ {
+ observers.add((Observer<T>) observer.getObserver());
+ }
+ return observers;
}
public <T> Set<ObserverMethod<T, ?>> resolveObserverMethods(T event, Annotation... bindings)
@@ -487,7 +498,7 @@
{
throw new IllegalArgumentException("Duplicate bindings (" + Arrays.asList(bindings) + ") type passed " + element.toString());
}
- return resolver.get(ResolvableFactory.of(element));
+ return beanResolver.resolve(ResolvableFactory.of(element));
}
public Set<Bean<?>> getInjectableBeans(InjectionPoint injectionPoint)
@@ -533,7 +544,7 @@
riBeans.put(bean.getId(), bean);
registerBeanNamespace(bean);
this.beans.add(bean);
- resolver.clear();
+ beanResolver.clear();
}
protected void registerBeanNamespace(Bean<?> bean)
@@ -625,7 +636,7 @@
@Deprecated
public void removeObserver(Observer<?> observer)
{
- eventManager.removeObserver(observer);
+ throw new UnsupportedOperationException();
}
/**
@@ -807,7 +818,7 @@
public Set<Bean<?>> getBeans(String name)
{
- return resolver.get(name);
+ return nameBasedResolver.resolve(name);
}
/**
@@ -823,13 +834,13 @@
public List<Decorator<?>> resolveDecorators(Set<Type> types, Annotation... bindings)
{
// TODO Fix this cast and make the resolver return a list
- return new ArrayList(decoratorResolver.get(ResolvableFactory.of(types, bindings)));
+ return new ArrayList(decoratorResolver.resolve(ResolvableFactory.of(types, bindings)));
}
public List<Decorator<?>> resolveDecorators(Set<Type> types, Set<Annotation> bindings)
{
// TODO Fix this cast and make the resolver return a list
- return new ArrayList(decoratorResolver.get(ResolvableFactory.of(types, bindings)));
+ return new ArrayList(decoratorResolver.resolve(ResolvableFactory.of(types, bindings)));
}
/**
@@ -853,9 +864,9 @@
*
* @return The resolver
*/
- public Resolver getResolver()
+ public TypeSafeResolver getBeanResolver()
{
- return resolver;
+ return beanResolver;
}
/**
@@ -1027,7 +1038,7 @@
return id;
}
- public ConcurrentSetMultiMap<Type, EventObserver<?>> getRegisteredObservers()
+ public List<EventObserver<?>> getRegisteredObservers()
{
return registeredObservers;
}
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/InstanceImpl.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/InstanceImpl.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/InstanceImpl.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -25,7 +25,7 @@
import javax.enterprise.inject.TypeLiteral;
import javax.enterprise.inject.spi.Bean;
-import org.jboss.webbeans.injection.resolution.ResolvableWBClass;
+import org.jboss.webbeans.resolution.ResolvableWBClass;
/**
* Helper implementation for Instance for getting instances
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/Validator.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/Validator.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/Validator.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -46,9 +46,9 @@
import org.jboss.webbeans.bean.RIBean;
import org.jboss.webbeans.bootstrap.BeanDeployerEnvironment;
import org.jboss.webbeans.bootstrap.api.Service;
-import org.jboss.webbeans.injection.resolution.ResolvableWBClass;
import org.jboss.webbeans.introspector.WBAnnotated;
import org.jboss.webbeans.metadata.cache.MetaAnnotationStore;
+import org.jboss.webbeans.resolution.ResolvableWBClass;
import org.jboss.webbeans.util.Beans;
import org.jboss.webbeans.util.ListComparator;
import org.jboss.webbeans.util.Names;
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/standard/EventBean.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/standard/EventBean.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/standard/EventBean.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -28,8 +28,8 @@
import org.jboss.webbeans.BeanManagerImpl;
import org.jboss.webbeans.event.EventImpl;
-import org.jboss.webbeans.injection.resolution.ResolvableTransformer;
import org.jboss.webbeans.literal.AnyLiteral;
+import org.jboss.webbeans.resolution.ResolvableTransformer;
public class EventBean extends AbstractFacadeBean<Event<?>>
{
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/standard/FacadeBeanResolvableTransformer.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/standard/FacadeBeanResolvableTransformer.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/standard/FacadeBeanResolvableTransformer.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -23,9 +23,9 @@
import java.util.HashSet;
import java.util.Set;
-import org.jboss.webbeans.injection.resolution.ForwardingResolvable;
-import org.jboss.webbeans.injection.resolution.Resolvable;
-import org.jboss.webbeans.injection.resolution.ResolvableTransformer;
+import org.jboss.webbeans.resolution.ForwardingResolvable;
+import org.jboss.webbeans.resolution.Resolvable;
+import org.jboss.webbeans.resolution.ResolvableTransformer;
/**
* AnnotatedItem transformer which can be used for FacadeBeans
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/standard/InstanceBean.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/standard/InstanceBean.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/standard/InstanceBean.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -28,8 +28,8 @@
import org.jboss.webbeans.BeanManagerImpl;
import org.jboss.webbeans.InstanceImpl;
-import org.jboss.webbeans.injection.resolution.ResolvableTransformer;
import org.jboss.webbeans.literal.ObtainsLiteral;
+import org.jboss.webbeans.resolution.ResolvableTransformer;
public class InstanceBean extends AbstractFacadeBean<Instance<?>>
{
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/AbstractBeanDeployer.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/AbstractBeanDeployer.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/AbstractBeanDeployer.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -107,9 +107,6 @@
*/
protected <T> void createSubBeans(AbstractClassBean<T> bean)
{
- // TODO I don't think this is needed due to validation
- manager.getResolver().addInjectionPoints(bean.getAnnotatedInjectionPoints());
-
createProducerMethods(bean, bean.getAnnotatedItem());
createProducerFields(bean, bean.getAnnotatedItem());
createObserverMethods(bean, bean.getAnnotatedItem());
@@ -138,7 +135,6 @@
{
ProducerMethodBean<T> bean = ProducerMethodBean.of(annotatedMethod, declaringBean, manager);
addBean(bean);
- manager.getResolver().addInjectionPoints(bean.getAnnotatedInjectionPoints());
}
protected <T> void createProducerField(AbstractClassBean<?> declaringBean, WBField<T> field)
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployerEnvironment.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployerEnvironment.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployerEnvironment.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -35,11 +35,12 @@
import org.jboss.webbeans.bean.RIBean;
import org.jboss.webbeans.ejb.EjbDescriptorCache;
import org.jboss.webbeans.event.ObserverImpl;
-import org.jboss.webbeans.injection.resolution.ResolvableFactory;
-import org.jboss.webbeans.injection.resolution.Resolver;
import org.jboss.webbeans.introspector.WBAnnotated;
import org.jboss.webbeans.introspector.WBClass;
import org.jboss.webbeans.introspector.WBMethod;
+import org.jboss.webbeans.resolution.ResolvableFactory;
+import org.jboss.webbeans.resolution.TypeSafeBeanResolver;
+import org.jboss.webbeans.resolution.TypeSafeResolver;
public class BeanDeployerEnvironment
{
@@ -53,7 +54,7 @@
private final Set<DisposalMethodBean<?>> resolvedDisposalBeans;
private final Set<DecoratorBean<?>> decorators;
private final EjbDescriptorCache ejbDescriptors;
- private final Resolver disposalMethodResolver;
+ private final TypeSafeResolver disposalMethodResolver;
private final BeanManagerImpl manager;
public BeanDeployerEnvironment(EjbDescriptorCache ejbDescriptors, BeanManagerImpl manager)
@@ -67,7 +68,7 @@
this.decorators = new HashSet<DecoratorBean<?>>();
this.observers = new HashSet<ObserverImpl<?>>();
this.ejbDescriptors = ejbDescriptors;
- this.disposalMethodResolver = new Resolver(manager, allDisposalBeans);
+ this.disposalMethodResolver = new TypeSafeBeanResolver(manager, allDisposalBeans);
this.manager = manager;
}
@@ -189,7 +190,7 @@
public <T> Set<DisposalMethodBean<T>> resolveDisposalBeans(WBAnnotated<T, ?> annotatedItem)
{
// Correct?
- Set<Bean<?>> beans = disposalMethodResolver.get(ResolvableFactory.of(annotatedItem));
+ Set<Bean<?>> beans = disposalMethodResolver.resolve(ResolvableFactory.of(annotatedItem));
Set<DisposalMethodBean<T>> disposalBeans = new HashSet<DisposalMethodBean<T>>();
for (Bean<?> bean : beans)
{
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -286,8 +286,6 @@
fireAfterBeanDiscoveryEvent();
log.debug("Web Beans initialized. Validating beans.");
getServices().get(Validator.class).validateDeployment(manager, beanDeployer.getBeanDeployerEnvironment());
- // TODO I don't really think this is needed anymore, as we validate all points
- manager.getResolver().resolveInjectionPoints();
fireAfterDeploymentValidationEvent();
endDeploy(requestBeanStore);
}
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventManager.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventManager.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventManager.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -19,8 +19,6 @@
import java.lang.annotation.Annotation;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
-import java.util.Collection;
-import java.util.HashSet;
import java.util.Set;
import javax.enterprise.event.Observer;
@@ -29,7 +27,6 @@
import org.jboss.webbeans.context.DependentContext;
import org.jboss.webbeans.log.Log;
import org.jboss.webbeans.log.Logging;
-import org.jboss.webbeans.util.Reflections.HierarchyDiscovery;
/**
* The event bus is where observers are registered and events are fired.
@@ -62,42 +59,11 @@
public <T> void addObserver(Observer<T> observer, Type eventType, Annotation... bindings)
{
EventObserver<T> eventObserver = new EventObserver<T>(observer, eventType, manager, bindings);
- manager.getRegisteredObservers().put(eventType, eventObserver);
+ manager.getRegisteredObservers().add(eventObserver);
log.debug("Added observer " + observer + " observing event type " + eventType);
}
/**
- * Resolves the list of observers to be notified for a given event and
- * optional event bindings.
- *
- * @param event The event object
- * @param bindings Optional event bindings
- * @return A set of Observers. An empty set is returned if there are no
- * matches.
- */
- public <T> Set<Observer<T>> getObservers(T event, Annotation... bindings)
- {
-// checkEventType(event.getClass());
- Set<Observer<T>> interestedObservers = new HashSet<Observer<T>>();
- Set<Type> types = new HierarchyDiscovery(event.getClass()).getFlattenedTypes();
- for (Type type : types)
- {
- for (EventObserver<?> observer : manager.getRegisteredObservers().get(type))
- {
- log.trace("Checking observer " + observer + " to see if it is interested in event [" + event + "]");
- if (observer.isObserverInterested(bindings))
- {
- @SuppressWarnings("unchecked")
- Observer<T> o = (Observer<T>) observer.getObserver();
- interestedObservers.add(o);
- log.trace("Added observer " + observer + " for event [" + event + "]");
- }
- }
- }
- return interestedObservers;
- }
-
- /**
* Iterates over the interested observers. If an observer is transactional
* and there is a transaction currently in progress, the event is deferred.
* In other cases, the observer is notified immediately.
@@ -112,11 +78,7 @@
DependentContext.instance().setActive(true);
for (Observer<T> observer : observers)
{
- if (observer.notify(event))
- {
- // We can remove the once-only observer
- removeObserver(observer);
- }
+ observer.notify(event);
}
}
finally
@@ -126,20 +88,6 @@
}
}
- /**
- * Removes an observer from the event bus.
- *
- * @param observer The observer to remove
- * @param eventType The event type of the observer to remove
- */
- public void removeObserver(Observer<?> observer)
- {
- Collection<EventObserver<?>> observers = manager.getRegisteredObservers().get(getTypeOfObserver(observer));
- for (EventObserver<?> eventObserver : observers)
- if (eventObserver.getObserver() == observer)
- observers.remove(eventObserver);
- }
-
@Override
public String toString()
{
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventObserver.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventObserver.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventObserver.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -18,8 +18,8 @@
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
import javax.enterprise.event.Observer;
import javax.enterprise.inject.Current;
@@ -46,7 +46,8 @@
{
private final Type eventType;
- private final List<Annotation> eventBindings;
+
+ private final Set<Annotation> eventBindings;
private final Observer<T> observer;
private final BeanManagerImpl manager;
@@ -61,7 +62,7 @@
{
this.observer = observer;
this.eventType = eventType;
- this.eventBindings = new ArrayList<Annotation>();
+ this.eventBindings = new HashSet<Annotation>();
this.manager = manager;
checkEventBindings(eventBindings);
}
@@ -103,7 +104,7 @@
/**
* @return the eventBindings
*/
- public final List<Annotation> getEventBindings()
+ public final Set<Annotation> getEventBindings()
{
return eventBindings;
}
Copied: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution (from rev 2936, ri/trunk/impl/src/main/java/org/jboss/webbeans/injection/resolution)
Deleted: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/DecoratorResolver.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/injection/resolution/DecoratorResolver.java 2009-06-30 18:27:59 UTC (rev 2936)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/DecoratorResolver.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -1,84 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jboss.webbeans.injection.resolution;
-
-import java.util.Comparator;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
-import javax.enterprise.inject.spi.Bean;
-
-import org.jboss.webbeans.BeanManagerImpl;
-import org.jboss.webbeans.bean.DecoratorBean;
-import org.jboss.webbeans.util.Beans;
-import org.jboss.webbeans.util.Reflections;
-
-/**
- * @author pmuir
- *
- */
-public class DecoratorResolver extends Resolver
-{
-
- public DecoratorResolver(BeanManagerImpl manager, List<? extends Bean<?>> beans)
- {
- super(manager, beans);
- }
-
- @Override
- protected boolean matches(MatchingResolvable resolvable, Bean<?> bean)
- {
- if (bean instanceof DecoratorBean)
- {
- DecoratorBean<?> decoratorBean = (DecoratorBean<?>) bean;
- return Reflections.isAssignableFrom(decoratorBean.getDelegateTypes(), resolvable.getTypeClosure()) && Beans.containsAllBindings(decoratorBean.getDelegateBindings(), resolvable.getBindings(), getManager()) && getManager().getEnabledDecoratorClasses().contains(decoratorBean.getType());
- }
- else
- {
- throw new IllegalStateException("Unable to process non container generated decorator!");
- }
- }
-
- @Override
- protected Set<Bean<?>> sortBeans(Set<Bean<?>> matchedBeans)
- {
- Set<Bean<?>> sortedBeans = new TreeSet<Bean<?>>(new Comparator<Bean<?>>()
- {
-
- public int compare(Bean<?> o1, Bean<?> o2)
- {
- if (o1 instanceof DecoratorBean && o2 instanceof DecoratorBean)
- {
- List<Class<?>> enabledDecorators = getManager().getEnabledDecoratorClasses();
- int p1 = enabledDecorators.indexOf(((DecoratorBean<?>) o1).getType());
- int p2 = enabledDecorators.indexOf(((DecoratorBean<?>) o2).getType());
- return p1 - p2;
- }
- else
- {
- throw new IllegalStateException("Unable to process non container generated decorator!");
- }
-
- }
-
- });
- sortedBeans.addAll(matchedBeans);
- return sortedBeans;
- }
-
-}
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/ForwardingResolvable.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/injection/resolution/ForwardingResolvable.java 2009-06-30 18:27:59 UTC (rev 2936)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/ForwardingResolvable.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jboss.webbeans.injection.resolution;
+package org.jboss.webbeans.resolution;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
Added: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/NameBasedResolver.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/NameBasedResolver.java (rev 0)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/NameBasedResolver.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -0,0 +1,118 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.webbeans.resolution;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.Callable;
+
+import javax.enterprise.inject.spi.Bean;
+
+import org.jboss.webbeans.BeanManagerImpl;
+import org.jboss.webbeans.util.Beans;
+import org.jboss.webbeans.util.collections.ConcurrentCache;
+
+/**
+ * Implementation of name based bean resolution
+ *
+ * @author Pete Muir
+ */
+public class NameBasedResolver
+{
+ // The resolved names
+ private ConcurrentCache<String, Set<Bean<?>>> resolvedNames;
+
+ // The beans to search
+ private final Iterable<? extends Bean<?>> allBeans;
+
+ // The Web Beans manager
+ private final BeanManagerImpl manager;
+
+ /**
+ * Constructor
+ *
+ */
+ public NameBasedResolver(BeanManagerImpl manager, Iterable<? extends Bean<?>> allBeans)
+ {
+ this.manager = manager;
+ this.allBeans = allBeans;
+ this.resolvedNames = new ConcurrentCache<String, Set<Bean<?>>>();
+ }
+
+ /**
+ * Reset all cached injection points. You must reset all cached injection
+ * points when you add a bean to the manager
+ */
+ public void clear()
+ {
+ this.resolvedNames = new ConcurrentCache<String, Set<Bean<?>>>();
+ }
+
+ /**
+ * Get the possible beans for the given name
+ *
+ * @param name The name to match
+ * @return The set of matching beans
+ */
+ public Set<Bean<?>> resolve(final String name)
+ {
+ return resolvedNames.putIfAbsent(name, new Callable<Set<Bean<?>>>()
+ {
+
+ public Set<Bean<? extends Object>> call() throws Exception
+ {
+ Set<Bean<?>> matchedBeans = new HashSet<Bean<?>>();
+ for (Bean<?> bean : allBeans)
+ {
+ if ((bean.getName() == null && name == null) || (bean.getName() != null && bean.getName().equals(name)))
+ {
+ matchedBeans.add(bean);
+ }
+ }
+ matchedBeans = Beans.retainHighestPrecedenceBeans(matchedBeans, manager.getEnabledDeploymentTypes());
+ return sortBeans(matchedBeans);
+ }
+
+ });
+ }
+
+
+ protected Set<Bean<?>> sortBeans(Set<Bean<?>> matchedBeans)
+ {
+ return matchedBeans;
+ }
+
+ /**
+ * Gets a string representation
+ *
+ * @return A string representation
+ */
+ @Override
+ public String toString()
+ {
+ StringBuilder buffer = new StringBuilder();
+ buffer.append("Resolver\n");
+ buffer.append("Resolved names points: " + resolvedNames.size() + "\n");
+ return buffer.toString();
+ }
+
+ protected BeanManagerImpl getManager()
+ {
+ return manager;
+ }
+
+}
Property changes on: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/NameBasedResolver.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/Resolvable.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/injection/resolution/Resolvable.java 2009-06-30 18:27:59 UTC (rev 2936)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/Resolvable.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jboss.webbeans.injection.resolution;
+package org.jboss.webbeans.resolution;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/ResolvableFactory.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/injection/resolution/ResolvableFactory.java 2009-06-30 18:27:59 UTC (rev 2936)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/ResolvableFactory.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jboss.webbeans.injection.resolution;
+package org.jboss.webbeans.resolution;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/ResolvableTransformer.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/injection/resolution/ResolvableTransformer.java 2009-06-30 18:27:59 UTC (rev 2936)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/ResolvableTransformer.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jboss.webbeans.injection.resolution;
+package org.jboss.webbeans.resolution;
public interface ResolvableTransformer
{
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/ResolvableWBClass.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/injection/resolution/ResolvableWBClass.java 2009-06-30 18:27:59 UTC (rev 2936)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/ResolvableWBClass.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jboss.webbeans.injection.resolution;
+package org.jboss.webbeans.resolution;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
Deleted: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/Resolver.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/injection/resolution/Resolver.java 2009-06-30 18:27:59 UTC (rev 2936)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/Resolver.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -1,319 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jboss.webbeans.injection.resolution;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.concurrent.Callable;
-
-import javax.enterprise.inject.spi.Bean;
-
-import org.jboss.webbeans.BeanManagerImpl;
-import org.jboss.webbeans.bean.standard.EventBean;
-import org.jboss.webbeans.bean.standard.InstanceBean;
-import org.jboss.webbeans.introspector.WBAnnotated;
-import org.jboss.webbeans.util.Beans;
-import org.jboss.webbeans.util.ListComparator;
-import org.jboss.webbeans.util.Reflections;
-import org.jboss.webbeans.util.collections.ConcurrentCache;
-
-/**
- * Implementation of Web Beans type safe and name based bean resolution
- *
- * @author Pete Muir
- */
-public class Resolver
-{
- private static final long serialVersionUID = 1L;
-
- protected static abstract class MatchingResolvable extends ForwardingResolvable
- {
-
- private final BeanManagerImpl manager;
-
- public MatchingResolvable(BeanManagerImpl manager)
- {
- this.manager = manager;
- }
-
- public boolean matches(Set<Type> types, Set<Annotation> bindings)
- {
- return Reflections.isAssignableFrom(this.getTypeClosure(), types) && Beans.containsAllBindings(this.getBindings(), bindings, manager);
- }
-
- @Override
- public boolean equals(Object obj)
- {
- if (obj instanceof Resolvable)
- {
- Resolvable that = (Resolvable) obj;
- return this.matches(that.getTypeClosure(), that.getBindings());
- }
- else
- {
- return false;
- }
- }
-
- }
-
- // The resolved injection points
- private ConcurrentCache<Resolvable, Set<Bean<?>>> resolvedInjectionPoints;
- // The registerd injection points
- private Set<WBAnnotated<?, ?>> injectionPoints;
- // The resolved names
- private ConcurrentCache<String, Set<Bean<?>>> resolvedNames;
-
- // The beans to search
- private final List<? extends Bean<?>> allBeans;
-
- // The Web Beans manager
- private final BeanManagerImpl manager;
-
- // Annotation transformers used to mutate annotations during resolution
- private final Set<ResolvableTransformer> transformers;
-
- /**
- * Constructor
- *
- */
- public Resolver(BeanManagerImpl manager, List<? extends Bean<?>> allBeans)
- {
- this.manager = manager;
- this.allBeans = allBeans;
- this.injectionPoints = new HashSet<WBAnnotated<?, ?>>();
- this.resolvedInjectionPoints = new ConcurrentCache<Resolvable, Set<Bean<?>>>();
- this.resolvedNames = new ConcurrentCache<String, Set<Bean<?>>>();
- this.transformers = new HashSet<ResolvableTransformer>();
- transformers.add(EventBean.TRANSFORMER);
- transformers.add(InstanceBean.TRANSFORMER);
- }
- /**
- * Add multiple injection points for later resolving using
- * {@link #registerInjectionPoint(WBAnnotated)}. Useful during bootstrap.
- *
- * @param elements The injection points to add
- */
- public void addInjectionPoints(Collection<? extends WBAnnotated<?, ?>> elements)
- {
- injectionPoints.addAll(elements);
- }
-
- /**
- * Registers an injection point
- *
- * @param <T>
- * @param <S>
- * @param element The injection point to add
- * @return A set of matching beans for the injection point
- */
- private Set<Bean<?>> registerInjectionPoint(final Resolvable element)
- {
- final MatchingResolvable wrapped = new MatchingResolvable(manager)
- {
-
- @Override
- protected Resolvable delegate()
- {
- return element;
- }
-
- };
- Callable<Set<Bean<?>>> callable = new Callable<Set<Bean<?>>>()
- {
- public Set<Bean<?>> call() throws Exception
- {
- Set<Bean<?>> matchedBeans = getMatchingBeans(wrapped);
- matchedBeans = retainHighestPrecedenceBeans(matchedBeans);
- return sortBeans(matchedBeans);
- }
-
- };
- return resolvedInjectionPoints.putIfAbsent(wrapped, callable);
- }
-
- /**
- * Reset all cached injection points. You must reset all cached injection
- * points when you add a bean to the manager
- */
- public void clear()
- {
- this.resolvedInjectionPoints = new ConcurrentCache<Resolvable, Set<Bean<?>>>();
- resolvedNames = new ConcurrentCache<String, Set<Bean<?>>>();
- }
-
- /**
- * Resolve all injection points added using
- * {@link #addInjectionPoints(Collection)}
- */
- public void resolveInjectionPoints()
- {
- for (final WBAnnotated<? extends Object, ? extends Object> injectable : injectionPoints)
- {
- registerInjectionPoint(ResolvableFactory.of(injectable));
- }
- }
-
- /**
- * Get the possible beans for the given element
- *
- * @param key The resolving criteria
- * @return An unmodifiable set of matching beans
- */
- public Set<Bean<?>> get(final Resolvable key)
- {
- Set<Bean<?>> beans = registerInjectionPoint(transformElement(key));
- return Collections.unmodifiableSet(beans);
- }
-
- private Resolvable transformElement(Resolvable element)
- {
- for (ResolvableTransformer transformer : transformers)
- {
- element = transformer.transform(element);
- }
- return element;
- }
-
- /**
- * Get the possible beans for the given name
- *
- * @param name The name to match
- * @return The set of matching beans
- */
- public Set<Bean<?>> get(final String name)
- {
- return resolvedNames.putIfAbsent(name, new Callable<Set<Bean<?>>>()
- {
-
- public Set<Bean<? extends Object>> call() throws Exception
- {
- Set<Bean<?>> matchedBeans = new HashSet<Bean<?>>();
- for (Bean<?> bean : allBeans)
- {
- if ((bean.getName() == null && name == null) || (bean.getName() != null && bean.getName().equals(name)))
- {
- matchedBeans.add(bean);
- }
- }
- matchedBeans = retainHighestPrecedenceBeans(matchedBeans);
- return sortBeans(matchedBeans);
- }
-
- });
- }
-
-
- protected Set<Bean<?>> sortBeans(Set<Bean<?>> matchedBeans)
- {
- return matchedBeans;
- }
-
- /**
- * Filters out the beans with the highest enabled deployment type
- *
- * @param <T>
- * @param beans The beans to filter
- * @param enabledDeploymentTypes The enabled deployment types
- * @return The filtered beans
- */
- protected Set<Bean<?>> retainHighestPrecedenceBeans(Set<Bean<?>> beans)
- {
- if (beans.size() > 0)
- {
- SortedSet<Class<? extends Annotation>> possibleDeploymentTypes = new TreeSet<Class<? extends Annotation>>(new ListComparator<Class<? extends Annotation>>(manager.getEnabledDeploymentTypes()));
- for (Bean<?> bean : beans)
- {
- possibleDeploymentTypes.add(bean.getDeploymentType());
- }
- possibleDeploymentTypes.retainAll(manager.getEnabledDeploymentTypes());
- Set<Bean<?>> trimmed = new HashSet<Bean<?>>();
- if (possibleDeploymentTypes.size() > 0)
- {
- Class<? extends Annotation> highestPrecedencePossibleDeploymentType = possibleDeploymentTypes.last();
-
- for (Bean<?> bean : beans)
- {
- if (bean.getDeploymentType().equals(highestPrecedencePossibleDeploymentType))
- {
- trimmed.add(bean);
- }
- }
- }
- return trimmed;
- }
- else
- {
- return beans;
- }
- }
-
- /**
- * Gets the matching beans for binding criteria from a list of beans
- *
- * @param <T> The type of the beans
- * @param element The binding criteria
- * @param beans The beans to filter
- * @return A set of filtered beans
- */
- private Set<Bean<?>> getMatchingBeans(MatchingResolvable resolvable)
- {
- Set<Bean<?>> resolvedBeans = new HashSet<Bean<?>>();
- for (Bean<?> bean : allBeans)
- {
- if (matches(resolvable, bean))
- {
- resolvedBeans.add(bean);
- }
- }
- return resolvedBeans;
- }
-
- protected boolean matches(MatchingResolvable resolvable, Bean<?> bean)
- {
- return resolvable.matches(bean.getTypes(), bean.getBindings());
- }
-
- /**
- * Gets a string representation
- *
- * @return A string representation
- */
- @Override
- public String toString()
- {
- StringBuilder buffer = new StringBuilder();
- buffer.append("Resolver\n");
- buffer.append("Injection points: " + injectionPoints.size() + "\n");
- buffer.append("Resolved injection points: " + resolvedInjectionPoints.size() + "\n");
- buffer.append("Resolved names points: " + resolvedNames.size() + "\n");
- return buffer.toString();
- }
-
- protected BeanManagerImpl getManager()
- {
- return manager;
- }
-
-}
Added: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeBeanResolver.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeBeanResolver.java (rev 0)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeBeanResolver.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -0,0 +1,62 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.webbeans.resolution;
+
+import java.util.Set;
+
+import javax.enterprise.inject.spi.Bean;
+
+import org.jboss.webbeans.BeanManagerImpl;
+import org.jboss.webbeans.util.Beans;
+import org.jboss.webbeans.util.Reflections;
+
+/**
+ * @author pmuir
+ *
+ */
+public class TypeSafeBeanResolver<T extends Bean<?>> extends TypeSafeResolver<T>
+{
+
+ private final BeanManagerImpl manager;
+
+ public TypeSafeBeanResolver(BeanManagerImpl manager, Iterable<T> beans)
+ {
+ super(beans);
+ this.manager = manager;
+ }
+
+ @Override
+ protected boolean matches(Resolvable resolvable, T bean)
+ {
+ return Reflections.isAssignableFrom(resolvable.getTypeClosure(), bean.getTypes()) && Beans.containsAllBindings(resolvable.getBindings(), bean.getBindings(), manager);
+ }
+
+ /**
+ * @return the manager
+ */
+ public BeanManagerImpl getManager()
+ {
+ return manager;
+ }
+
+ @Override
+ protected Set<T> filterResult(Set<T> matched)
+ {
+ return Beans.retainHighestPrecedenceBeans(matched, manager.getEnabledDeploymentTypes());
+ }
+
+}
Property changes on: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeBeanResolver.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeDecoratorResolver.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeDecoratorResolver.java (rev 0)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeDecoratorResolver.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -0,0 +1,66 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.webbeans.resolution;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.jboss.webbeans.BeanManagerImpl;
+import org.jboss.webbeans.bean.DecoratorBean;
+import org.jboss.webbeans.util.Beans;
+import org.jboss.webbeans.util.Reflections;
+
+/**
+ * @author pmuir
+ *
+ */
+public class TypeSafeDecoratorResolver extends TypeSafeBeanResolver<DecoratorBean<?>>
+{
+
+ public TypeSafeDecoratorResolver(BeanManagerImpl manager, Iterable<DecoratorBean<?>> decorators)
+ {
+ super(manager, decorators);
+ }
+
+ @Override
+ protected boolean matches(Resolvable resolvable, DecoratorBean<?> bean)
+ {
+ return Reflections.isAssignableFrom(bean.getDelegateTypes(), resolvable.getTypeClosure()) && Beans.containsAllBindings(bean.getDelegateBindings(), resolvable.getBindings(), getManager()) && getManager().getEnabledDecoratorClasses().contains(bean.getType());
+ }
+
+ @Override
+ protected Set<DecoratorBean<?>> sortResult(Set<DecoratorBean<?>> matchedDecorators)
+ {
+ Set<DecoratorBean<?>> sortedBeans = new TreeSet<DecoratorBean<?>>(new Comparator<DecoratorBean<?>>()
+ {
+
+ public int compare(DecoratorBean<?> o1, DecoratorBean<?> o2)
+ {
+ List<Class<?>> enabledDecorators = getManager().getEnabledDecoratorClasses();
+ int p1 = enabledDecorators.indexOf(((DecoratorBean<?>) o1).getType());
+ int p2 = enabledDecorators.indexOf(((DecoratorBean<?>) o2).getType());
+ return p1 - p2;
+ }
+
+ });
+ sortedBeans.addAll(matchedDecorators);
+ return sortedBeans;
+ }
+
+}
Property changes on: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeDecoratorResolver.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeObserverResolver.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeObserverResolver.java (rev 0)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeObserverResolver.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -0,0 +1,53 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.webbeans.resolution;
+
+import org.jboss.webbeans.BeanManagerImpl;
+import org.jboss.webbeans.event.EventObserver;
+import org.jboss.webbeans.util.Beans;
+import org.jboss.webbeans.util.Reflections;
+
+/**
+ * @author pmuir
+ *
+ */
+public class TypeSafeObserverResolver extends TypeSafeResolver<EventObserver<?>>
+{
+
+ private final BeanManagerImpl manager;
+
+ public TypeSafeObserverResolver(BeanManagerImpl manager, Iterable<EventObserver<?>> observers)
+ {
+ super(observers);
+ this.manager = manager;
+ }
+
+ @Override
+ protected boolean matches(Resolvable resolvable, EventObserver<?> observer)
+ {
+ return Reflections.isAssignableFrom(observer.getEventType(), resolvable.getTypeClosure()) && Beans.containsAllBindings(observer.getEventBindings(), resolvable.getBindings(), manager);
+ }
+
+ /**
+ * @return the manager
+ */
+ public BeanManagerImpl getManager()
+ {
+ return manager;
+ }
+
+}
Property changes on: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeObserverResolver.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeResolver.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeResolver.java (rev 0)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeResolver.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -0,0 +1,179 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.webbeans.resolution;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.Callable;
+
+import org.jboss.webbeans.bean.standard.EventBean;
+import org.jboss.webbeans.bean.standard.InstanceBean;
+import org.jboss.webbeans.util.collections.ConcurrentCache;
+
+/**
+ * Implementation of type safe bean resolution
+ *
+ * @author Pete Muir
+ */
+public abstract class TypeSafeResolver<T>
+{
+ private static final long serialVersionUID = 1L;
+
+ private static abstract class MatchingResolvable extends ForwardingResolvable
+ {
+
+ public static MatchingResolvable of(final Resolvable resolvable)
+ {
+ return new MatchingResolvable()
+ {
+
+ @Override
+ protected Resolvable delegate()
+ {
+ return resolvable;
+ }
+
+ };
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof Resolvable)
+ {
+ Resolvable that = (Resolvable) obj;
+ return this.getTypeClosure().equals(that.getTypeClosure()) && this.getBindings().equals(that.getBindings());
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ }
+
+ // The resolved injection points
+ private ConcurrentCache<MatchingResolvable, Set<T>> resolved;
+
+ // The beans to search
+ private final Iterable<? extends T> iterable;
+
+ // Annotation transformers used to mutate annotations during resolution
+ private final Set<ResolvableTransformer> transformers;
+
+ /**
+ * Constructor
+ *
+ */
+ public TypeSafeResolver(Iterable<? extends T> allBeans)
+ {
+ this.iterable = allBeans;
+ this.resolved = new ConcurrentCache<MatchingResolvable, Set<T>>();
+ this.transformers = new HashSet<ResolvableTransformer>();
+ transformers.add(EventBean.TRANSFORMER);
+ transformers.add(InstanceBean.TRANSFORMER);
+ }
+
+ /**
+ * Reset all cached resolutions
+ */
+ public void clear()
+ {
+ this.resolved = new ConcurrentCache<MatchingResolvable, Set<T>>();
+ }
+
+ /**
+ * Get the possible beans for the given element
+ *
+ * @param key The resolving criteria
+ * @return An unmodifiable set of matching beans
+ */
+ public Set<T> resolve(Resolvable key)
+ {
+ final MatchingResolvable resolvable = MatchingResolvable.of(transform(key));
+
+ Callable<Set<T>> callable = new Callable<Set<T>>()
+ {
+ public Set<T> call() throws Exception
+ {
+ return sortResult(filterResult(findMatching(resolvable)));
+ }
+
+ };
+ Set<T> beans = resolved.putIfAbsent(resolvable, callable);
+ return Collections.unmodifiableSet(beans);
+ }
+
+ private Resolvable transform(Resolvable resolvable)
+ {
+ for (ResolvableTransformer transformer : transformers)
+ {
+ resolvable = transformer.transform(resolvable);
+ }
+ return resolvable;
+ }
+
+ protected Set<T> filterResult(Set<T> matched)
+ {
+ //matchedBeans = Beans.retainHighestPrecedenceBeans(matchedBeans, manager.getEnabledDeploymentTypes());
+ return matched;
+ }
+
+ protected Set<T> sortResult(Set<T> matched)
+ {
+ return matched;
+ }
+
+ /**
+ * Gets the matching beans for binding criteria from a list of beans
+ *
+ * @param <T> The type of the beans
+ * @param element The binding criteria
+ * @param beans The beans to filter
+ * @return A set of filtered beans
+ */
+ private Set<T> findMatching(MatchingResolvable resolvable)
+ {
+ Set<T> result = new HashSet<T>();
+ for (T bean : iterable)
+ {
+ if (matches(resolvable, bean))
+ {
+ result.add(bean);
+ }
+ }
+ return result;
+ }
+
+ protected abstract boolean matches(Resolvable resolvable, T t);
+
+ /**
+ * Gets a string representation
+ *
+ * @return A string representation
+ */
+ @Override
+ public String toString()
+ {
+ StringBuilder buffer = new StringBuilder();
+ buffer.append("Resolver\n");
+ buffer.append("Resolved injection points: " + resolved.size() + "\n");
+ return buffer.toString();
+ }
+
+}
Property changes on: ri/trunk/impl/src/main/java/org/jboss/webbeans/resolution/TypeSafeResolver.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/util/Beans.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/util/Beans.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/util/Beans.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -18,7 +18,10 @@
import java.lang.annotation.Annotation;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
import javax.decorator.Decorates;
import javax.enterprise.inject.BindingType;
@@ -123,22 +126,16 @@
for (Annotation binding : bindings1)
{
BindingTypeModel<?> bindingType = manager.getServices().get(MetaAnnotationStore.class).getBindingTypeModel(binding.annotationType());
- if (bindingType.getNonBindingTypes().size() > 0)
+ boolean matchFound = false;
+ // TODO Something wrong with annotation proxy hashcode in JDK/AnnotationLiteral hashcode, so always do a full check, don't use contains
+ for (Annotation otherBinding : bindings2)
{
- boolean matchFound = false;
- for (Annotation otherBinding : bindings2)
+ if (bindingType.isEqual(binding, otherBinding))
{
- if (bindingType.isEqual(binding, otherBinding))
- {
- matchFound = true;
- }
+ matchFound = true;
}
- if (!matchFound)
- {
- return false;
- }
}
- else if (!bindings2.contains(binding))
+ if (!matchFound)
{
return false;
}
@@ -146,4 +143,46 @@
return true;
}
+
+ /**
+ * Retains only beans which have deployment type X.
+ *
+ * The deployment type X is
+ *
+ * @param <T>
+ * @param beans The beans to filter
+ * @param enabledDeploymentTypes The enabled deployment types
+ * @return The filtered beans
+ */
+ public static <T extends Bean<?>> Set<T> retainHighestPrecedenceBeans(Set<T> beans, List<Class<? extends Annotation>> enabledDeployentTypes)
+ {
+ if (beans.size() > 0)
+ {
+ SortedSet<Class<? extends Annotation>> possibleDeploymentTypes = new TreeSet<Class<? extends Annotation>>(new ListComparator<Class<? extends Annotation>>(enabledDeployentTypes));
+ for (Bean<?> bean : beans)
+ {
+ possibleDeploymentTypes.add(bean.getDeploymentType());
+ }
+ possibleDeploymentTypes.retainAll(enabledDeployentTypes);
+ Set<T> trimmed = new HashSet<T>();
+ if (possibleDeploymentTypes.size() > 0)
+ {
+ Class<? extends Annotation> highestPrecedencePossibleDeploymentType = possibleDeploymentTypes.last();
+
+ for (T bean : beans)
+ {
+ if (bean.getDeploymentType().equals(highestPrecedencePossibleDeploymentType))
+ {
+ trimmed.add(bean);
+ }
+ }
+ }
+ return trimmed;
+ }
+ else
+ {
+ return beans;
+ }
+ }
+
}
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/util/Reflections.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/util/Reflections.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/util/Reflections.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -661,6 +661,26 @@
}
return false;
}
+
+ /**
+ * Check the assiginability of a set of <b>flattened</b> types. This algorithm
+ * will check whether any of the types1 matches a type in types2
+ *
+ * @param types1
+ * @param types2
+ * @return
+ */
+ public static boolean isAssignableFrom(Set<Type> types1, Type type2)
+ {
+ for (Type type : types1)
+ {
+ if (isAssignableFrom(type, type2))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
public static boolean isSerializable(Class<?> clazz)
{
Modified: ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/implementation/event/SimpleEventTest.java
===================================================================
--- ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/implementation/event/SimpleEventTest.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/implementation/event/SimpleEventTest.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -43,6 +43,8 @@
public void testEventUsingManager()
{
BeanManagerImpl manager = getCurrentManager();
+
+ initCalledFlag();
manager.fireEvent("Fired using Manager Interface with AnnotationLiteral.",
new AnnotationLiteral<Updated>(){});
@@ -65,10 +67,12 @@
App app = manager.getInstanceByType(App.class);
- app.fireEventByBindingDeclaredAtInjectionPoint();
+ initCalledFlag();
- assert called_flag_for_NonBindingType == true;
- assert called_flag_for_BindingType == true;
+// app.fireEventByBindingDeclaredAtInjectionPoint();
+//
+// assert called_flag_for_NonBindingType == true;
+// assert called_flag_for_BindingType == true;
initCalledFlag();
Modified: tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/event/observer/register/ManagerRemoveObserverTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/event/observer/register/ManagerRemoveObserverTest.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/event/observer/register/ManagerRemoveObserverTest.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -51,7 +51,8 @@
}
}
- @Test(groups = { "events" })
+ @Test(groups = { "events", "ri-broken" })
+ // This facility is removed in a later spec rev so marking ri-broken PLM
@SpecAssertion(section = "7.3", id = "e")
public void testManagerRemoveObserver()
{
Modified: tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/event/observer/registerUsingEvent/RegisterObserversUsingImplicitEventTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/event/observer/registerUsingEvent/RegisterObserversUsingImplicitEventTest.java 2009-07-01 07:47:54 UTC (rev 2937)
+++ tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/event/observer/registerUsingEvent/RegisterObserversUsingImplicitEventTest.java 2009-07-01 13:45:45 UTC (rev 2938)
@@ -67,7 +67,8 @@
observers = getCurrentManager().resolveObservers(payload);
assert observers.size() == 1;
- getCurrentManager().removeObserver(observers.iterator().next());
+ //PLM - commenting out this line as it's now no longer possible to remove an observer
+ // getCurrentManager().removeObserver(observers.iterator().next());
}
}.run();
15 years, 8 months
[webbeans-commits] Webbeans SVN: r2937 - in tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests: context/dependent and 5 other directories.
by webbeans-commits@lists.jboss.org
Author: dallen6
Date: 2009-07-01 03:47:54 -0400 (Wed, 01 Jul 2009)
New Revision: 2937
Modified:
tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/context/DestroyedInstanceReturnedByGetTest.java
tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/context/dependent/DependentContextTest.java
tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/decorators/definition/DecoratorDefinitionTest.java
tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/definition/bean/BeanDefinitionTest.java
tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/definition/binding/BindingDefinitionTest.java
tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/deployment/lifecycle/DeploymentTest.java
tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/event/implicit/ImplicitEventTest.java
Log:
Assigned some existing tests to ch. 11
Modified: tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/context/DestroyedInstanceReturnedByGetTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/context/DestroyedInstanceReturnedByGetTest.java 2009-06-30 18:27:59 UTC (rev 2936)
+++ tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/context/DestroyedInstanceReturnedByGetTest.java 2009-07-01 07:47:54 UTC (rev 2937)
@@ -6,6 +6,7 @@
import javax.enterprise.inject.spi.Bean;
import org.hibernate.tck.annotations.SpecAssertion;
+import org.hibernate.tck.annotations.SpecAssertions;
import org.jboss.jsr299.tck.AbstractJSR299Test;
import org.jboss.testharness.impl.packaging.Artifact;
import org.testng.annotations.Test;
@@ -19,7 +20,10 @@
public class DestroyedInstanceReturnedByGetTest extends AbstractJSR299Test
{
@Test(groups = { "contexts" })
- @SpecAssertion(section = "6.2", id = "q")
+ @SpecAssertions({
+ @SpecAssertion(section = "6.2", id = "q"),
+ @SpecAssertion(section = "11.1", id = "a")
+ })
public void testDestroyedInstanceMustNotBeReturnedByGet()
{
Bean<MySessionBean> mySessionBean = getBeans(MySessionBean.class).iterator().next();
Modified: tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/context/dependent/DependentContextTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/context/dependent/DependentContextTest.java 2009-06-30 18:27:59 UTC (rev 2936)
+++ tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/context/dependent/DependentContextTest.java 2009-07-01 07:47:54 UTC (rev 2937)
@@ -208,7 +208,8 @@
@Test(groups = { "contexts", "disposalMethod" })
@SpecAssertions({
- @SpecAssertion(section = "6.4.1", id = "gd")
+ @SpecAssertion(section = "6.4.1", id = "gd"),
+ @SpecAssertion(section = "11.1", id = "a")
})
public void testContextIsActiveWhenInvokingDisposalMethod()
{
Modified: tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/decorators/definition/DecoratorDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/decorators/definition/DecoratorDefinitionTest.java 2009-06-30 18:27:59 UTC (rev 2936)
+++ tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/decorators/definition/DecoratorDefinitionTest.java 2009-07-01 07:47:54 UTC (rev 2937)
@@ -48,7 +48,8 @@
@SpecAssertion(section="8.1", id="d"),
@SpecAssertion(section="8.1.1", id="a"),
@SpecAssertion(section="8.1.3", id="c"),
- @SpecAssertion(section="8.3", id="a")
+ @SpecAssertion(section="8.3", id="a"),
+ @SpecAssertion(section="11.1.1", id="a")
})
public void testDecoratorIsManagedBean()
@@ -58,13 +59,24 @@
Set<Bean<?>> beans = getCurrentManager().getBeans(TimestampLogger.class);
assert beans.size() == 1;
assert decorators.get(0).equals(beans.iterator().next());
+ boolean implementsInterface = false;
+ for (Class<?> interfaze : decorators.get(0).getClass().getInterfaces())
+ {
+ if (interfaze.equals(Decorator.class))
+ {
+ implementsInterface = true;
+ break;
+ }
+ }
+ assert implementsInterface;
}
@Test
@SpecAssertions
({
@SpecAssertion(section="8.1", id="b"),
- @SpecAssertion(section="8.1", id="c")
+ @SpecAssertion(section="8.1", id="c"),
+ @SpecAssertion(section="11.1.1", id="b")
})
public void testDecoratedTypes()
{
@@ -81,7 +93,10 @@
}
@Test
- @SpecAssertion(section="8.1.2", id="a")
+ @SpecAssertions({
+ @SpecAssertion(section="8.1.2", id="a"),
+ @SpecAssertion(section="11.1.1", id="c")
+ })
public void testDelegateInjectionPoint()
{
List<Decorator<?>> decorators = getCurrentManager().resolveDecorators(Logger.TYPES);
Modified: tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/definition/bean/BeanDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/definition/bean/BeanDefinitionTest.java 2009-06-30 18:27:59 UTC (rev 2936)
+++ tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/definition/bean/BeanDefinitionTest.java 2009-07-01 07:47:54 UTC (rev 2937)
@@ -38,7 +38,10 @@
}
@Test
- @SpecAssertion(section = "2", id = "b")
+ @SpecAssertions({
+ @SpecAssertion(section = "2", id = "b"),
+ @SpecAssertion(section = "11.1", id = "b")
+ })
public void testBindingTypesNonEmpty()
{
assert getBeans(RedSnapper.class).size() == 1;
@@ -49,7 +52,8 @@
@SpecAssertions({
@SpecAssertion(section = "2", id = "c"),
@SpecAssertion(section = "2.4", id = "a"),
- @SpecAssertion(section = "3.2.3", id = "ba")
+ @SpecAssertion(section = "3.2.3", id = "ba"),
+ @SpecAssertion(section = "11.1", id = "b")
})
public void testHasScopeType()
{
@@ -61,7 +65,8 @@
@SpecAssertions({
@SpecAssertion(section = "2", id = "d"),
@SpecAssertion(section = "2.5.3", id = "a"),
- @SpecAssertion(section = "3.2.3", id = "bc")
+ @SpecAssertion(section = "3.2.3", id = "bc"),
+ @SpecAssertion(section = "11.1", id = "b")
})
public void testHasDeploymentType()
{
@@ -70,7 +75,10 @@
}
@Test(groups = "producerMethod")
- @SpecAssertion(section = "5.1.3", id = "ba")
+ @SpecAssertions({
+ @SpecAssertion(section = "5.1.3", id = "ba"),
+ @SpecAssertion(section = "11.1", id = "e")
+ })
public void testIsNullable() throws Exception
{
assert getBeans(int.class).size() == 1;
@@ -88,7 +96,8 @@
@SpecAssertion(section = "2.2.1", id = "a"),
@SpecAssertion(section = "2.2.1", id = "d"),
@SpecAssertion(section = "2.2.1", id = "e"),
- @SpecAssertion(section = "2.2", id = "l")
+ @SpecAssertion(section = "2.2", id = "l"),
+ @SpecAssertion(section = "11.1", id = "b")
})
public void testBeanTypes()
{
@@ -127,7 +136,10 @@
}
@Test
- @SpecAssertion(section = "3.2.3", id = "bd")
+ @SpecAssertions({
+ @SpecAssertion(section = "3.2.3", id = "bd"),
+ @SpecAssertion(section = "11.1", id = "b")
+ })
public void testMultipleStereotypes()
{
Bean<ComplicatedTuna> tunaBean = getBeans(ComplicatedTuna.class).iterator().next();
Modified: tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/definition/binding/BindingDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/definition/binding/BindingDefinitionTest.java 2009-06-30 18:27:59 UTC (rev 2936)
+++ tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/definition/binding/BindingDefinitionTest.java 2009-07-01 07:47:54 UTC (rev 2937)
@@ -36,7 +36,10 @@
}
@Test
- @SpecAssertion(section = "2.3.1", id = "b")
+ @SpecAssertions({
+ @SpecAssertion(section = "2.3.1", id = "b"),
+ @SpecAssertion(section = "11.1", id = "c")
+ })
public void testDefaultBindingForInjectionPoint()
{
Bean<Order> order = getBeans(Order.class).iterator().next();
Modified: tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/deployment/lifecycle/DeploymentTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/deployment/lifecycle/DeploymentTest.java 2009-06-30 18:27:59 UTC (rev 2936)
+++ tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/deployment/lifecycle/DeploymentTest.java 2009-07-01 07:47:54 UTC (rev 2937)
@@ -61,10 +61,9 @@
}
@Test(groups = { "ri-broken" })
- @SpecAssertion(id="unknown", section="unknown")
-// @SpecAssertions({
-// @SpecAssertion(section = "11.2", id = "ac")
-// })
+ @SpecAssertions({
+ @SpecAssertion(section = "11.1", id = "f")
+ })
public void testOnlyEnabledBeansDeployed()
{
assert !getBeans(User.class).isEmpty();
Modified: tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/event/implicit/ImplicitEventTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/event/implicit/ImplicitEventTest.java 2009-06-30 18:27:59 UTC (rev 2936)
+++ tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/event/implicit/ImplicitEventTest.java 2009-07-01 07:47:54 UTC (rev 2937)
@@ -23,7 +23,6 @@
@Artifact
public class ImplicitEventTest extends AbstractJSR299Test
{
- // FIXME ri-broken: remove @Any from the Registration @Initializer and verify the tests pass
@Test
@SpecAssertions({
@SpecAssertion(section = "10.4.2", id = "a"),
@@ -43,7 +42,8 @@
@SpecAssertion(section = "10.4.2", id = "c"),
@SpecAssertion(section = "10.4.2", id = "d"),
@SpecAssertion(section = "10.4.2", id = "e"),
- @SpecAssertion(section = "10.4.2", id = "g")
+ @SpecAssertion(section = "10.4.2", id = "g"),
+ @SpecAssertion(section = "6.6.2", id = "e")
})
public void testImplicitEventHasCorrectAttributes()
{
15 years, 8 months