You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ge...@apache.org on 2009/07/04 21:00:13 UTC

svn commit: r791166 [1/2] - in /incubator/openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/annotation/ main/java/org/apache/webbeans/component/ main/java/org/apache/webbeans/component/xml/ main/java/org/apache/webbeans/config/ main/j...

Author: gerdogdu
Date: Sat Jul  4 19:00:12 2009
New Revision: 791166

URL: http://svn.apache.org/viewvc?rev=791166&view=rev
Log:
Reflect API changes.

Added:
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnyLiteral.java
      - copied, changed from r788743, incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnyScopeLiteral.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java
      - copied, changed from r791061, incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractObservesBean.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/EventBean.java
      - copied, changed from r791061, incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ObservableBean.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java
      - copied, changed from r791061, incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ObservesMethodsOwnerBean.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverWrapper.java
      - copied, changed from r788743, incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverImpl.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java   (with props)
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java   (with props)
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/ProducerBeansProducer.java   (with props)
Removed:
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnyScopeLiteral.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractObservesBean.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ObservableBean.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ObservesMethodsOwnerBean.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverImpl.java
Modified:
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractBean.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/IBeanHasParent.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InstanceBean.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java   (contents, props changed)
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/xml/XMLManagedBean.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/xml/XMLProducerBean.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/BeanObserverImpl.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java   (contents, props changed)
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventUtil.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/TransactionalObserverType.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/xml/BeanObserverXMLImpl.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/WebBeansXMLConfigurator.java
    incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObservable1.java
    incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves1.java
    incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java
    incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/EventTest.java
    incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/component/BrokenComponentTest.java
    incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/component/ObserversComponentTest.java
    incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/event/exception/EventExceptionTest.java

Copied: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnyLiteral.java (from r788743, incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnyScopeLiteral.java)
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnyLiteral.java?p2=incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnyLiteral.java&p1=incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnyScopeLiteral.java&r1=788743&r2=791166&rev=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnyScopeLiteral.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnyLiteral.java Sat Jul  4 19:00:12 2009
@@ -16,6 +16,6 @@
 import javax.enterprise.inject.AnnotationLiteral;
 import javax.enterprise.inject.Any;
 
-public class AnyScopeLiteral extends AnnotationLiteral<Any> implements Any{
+public class AnyLiteral extends AnnotationLiteral<Any> implements Any{
 
 }

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractBean.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractBean.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractBean.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractBean.java Sat Jul  4 19:00:12 2009
@@ -217,7 +217,10 @@
      * 
      * @param instance instance that is being destroyed
      */
-    protected abstract void destroyInstance(T instance);
+    protected void destroyInstance(T instance)
+    {
+        
+    }
 
     /**
      * Get component type.
@@ -237,7 +240,8 @@
     {
         if(IBeanHasParent.class.isAssignableFrom(getClass()))
         {
-            IBeanHasParent comp = (IBeanHasParent)this;
+            @SuppressWarnings("unchecked")
+            IBeanHasParent<T> comp = (IBeanHasParent<T>)this;
             
             return comp.getParent().getBeanClass();
         }

Copied: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java (from r791061, incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractObservesBean.java)
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java?p2=incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java&p1=incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractObservesBean.java&r1=791061&r2=791166&rev=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractObservesBean.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java Sat Jul  4 19:00:12 2009
@@ -23,6 +23,7 @@
 import javax.enterprise.inject.Initializer;
 
 import org.apache.webbeans.config.DefinitionUtil;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
 import org.apache.webbeans.exception.WebBeansException;
 import org.apache.webbeans.inject.InjectableField;
 import org.apache.webbeans.inject.InjectableMethods;
@@ -38,7 +39,7 @@
  *
  * @param <T> bean class
  */
-public abstract class AbstractObservesBean<T> extends AbstractBean<T> implements ObservesMethodsOwnerBean<T>
+public abstract class AbstractInjectionTargetBean<T> extends AbstractBean<T> implements InjectionTargetBean<T>
 {
     /**Logger instance*/
     private final WebBeansLogger logger = WebBeansLogger.getLogger(getClass());
@@ -61,7 +62,7 @@
      * @param webBeansType webbean type
      * @param returnType bean class type
      */
-    protected AbstractObservesBean(WebBeansType webBeansType, Class<T> returnType)
+    protected AbstractInjectionTargetBean(WebBeansType webBeansType, Class<T> returnType)
     {
         super(webBeansType, returnType);
     }
@@ -101,7 +102,14 @@
      * 
      * @param instance object instance.
      */
-    abstract protected void destroyComponentInstance(T instance);
+    protected void destroyComponentInstance(T instance)
+    {
+        preDestroy(instance);
+        
+        //Remove it from creational context, if any
+        CreationalContextImpl<T> cc = (CreationalContextImpl<T>)this.creationalContext;
+        cc.remove();        
+    }
     
     /**
      * Called before constructor
@@ -132,6 +140,14 @@
             DefinitionUtil.defineWebBeanDecoratorStack(this, instance);
         }        
 
+        postConstruct(instance);
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public void postConstruct(T instance)
+    {
         //Call Post Construct
         if (WebBeansUtil.isContainsInterceptorMethod(getInterceptorStack(), InterceptorType.POST_CONSTRUCT))
         {
@@ -146,16 +162,38 @@
                 logger.error("Error is occured while executing @PostConstruct",e);
                 throw new WebBeansException(e);
             }
-        }
+        }        
     }
     
     /**
+     * {@inheritDoc}
+     */
+    public void preDestroy(T instance)
+    {
+        if (WebBeansUtil.isContainsInterceptorMethod(getInterceptorStack(), InterceptorType.PRE_DESTROY))
+        {
+            InvocationContextImpl impl = new InvocationContextImpl(null,instance, null, null, WebBeansUtil.getInterceptorMethods(getInterceptorStack(), InterceptorType.PRE_DESTROY), InterceptorType.PRE_DESTROY);
+            try
+            {
+                impl.proceed();
+            }
+            catch (Exception e)
+            {
+                getLogger().error("Error is occıred while executing @PreDestroy method",e);
+                throw new WebBeansException(e);
+            }
+
+        }                
+    }
+    
+    
+    /**
      * Injects fields of the bean after constructing.
      * 
      * @param instance bean instance
      * @param creationalContext creational context
      */
-    protected void injectFields(T instance, CreationalContext<T> creationalContext)
+    public void injectFields(T instance, CreationalContext<T> creationalContext)
     {
         Set<Field> fields = getInjectedFields();
         for (Field field : fields)
@@ -176,7 +214,7 @@
      * @param creationalContext creational context instance
      */
     @SuppressWarnings("unchecked")
-    protected void injectMethods(T instance, CreationalContext<T> creationalContext)
+    public void injectMethods(T instance, CreationalContext<T> creationalContext)
     {
         Set<Method> methods = getInjectedMethods();
 
@@ -187,6 +225,13 @@
         }
     }
     
+    /**
+     * {@inheritDoc}
+     */
+    public void injectResources(T instance, CreationalContext<T> creationalContext)
+    {
+        //TODO Java EE injections
+    }
     
     /*
      * (non-Javadoc)

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java Sat Jul  4 19:00:12 2009
@@ -20,7 +20,7 @@
  *
  * @param <T> bean type info
  */
-public abstract class AbstractProducerBean<T> extends AbstractBean<T> implements IBeanHasParent
+public abstract class AbstractProducerBean<T> extends AbstractBean<T> implements IBeanHasParent<T>
 {
     /**Owner of the producer field component*/
     protected AbstractBean<?> ownerComponent;
@@ -46,5 +46,9 @@
         return this.ownerComponent;
     }
     
+    public void dispose(T instance)
+    {
+        //Do nothing
+    }
     
 }
\ No newline at end of file

Copied: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/EventBean.java (from r791061, incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ObservableBean.java)
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/EventBean.java?p2=incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/EventBean.java&p1=incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ObservableBean.java&r1=791061&r2=791166&rev=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ObservableBean.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/EventBean.java Sat Jul  4 19:00:12 2009
@@ -14,6 +14,8 @@
 package org.apache.webbeans.component;
 
 import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Type;
 import java.util.Set;
 
 import javax.enterprise.context.spi.CreationalContext;
@@ -25,19 +27,26 @@
  * 
  * @version $Rev$ $Date$
  */
-public class ObservableBean<T, K> extends ManagedBean<T>
+public class EventBean<T> extends AbstractBean<T>
 {
-    private WebBeansType definedType;
+    private Type eventType = null;
 
-    private Class<K> eventType = null;
-
-    public ObservableBean(Class<T> returnType, Class<K> eventType, WebBeansType definedType)
+    /**
+     * Creates a new instance of event bean.
+     * 
+     * @param returnType Event class
+     * @param eventType event type
+     * @param definedType webbeans type
+     */
+    public EventBean(Class<T> returnType, Type eventType, WebBeansType definedType)
     {
-        super(returnType);
-        this.definedType = definedType;
+        super(definedType,returnType);
         this.eventType = eventType;
     }
-
+    
+    /**
+     * {@inheritDoc}
+     */
     @Override
     protected T createInstance(CreationalContext<T> creationalContext)
     {
@@ -50,36 +59,26 @@
 
         try
         {
-            instance = getConstructor().newInstance(new Object[] { bindingTypes, eventType });
+            Constructor<T> constructor = null;
+            constructor = returnType.getConstructor(new Class<?>[] { Annotation[].class, Type.class });
 
+            instance = constructor.newInstance(new Object[] { bindingTypes, eventType });
         }
         catch (Exception e)
         {
-            throw new WebBeansException("Exception in creating Observable implicit component for event type : " + eventType.getName());
+            throw new WebBeansException("Exception in creating Event implicit component for event type : " + eventType);
         }
 
         return instance;
 
     }
 
-    @Override
-    protected void destroyInstance(T instance)
-    {
-        super.destroyInstance(instance);
-    }
-
-    /**
-     * @return the definedType
-     */
-    public WebBeansType getDefinedType()
-    {
-        return definedType;
-    }
-
     /**
+     * Returns the event type.
+     * 
      * @return the eventType
      */
-    public Class<K> getEventType()
+    public Type getEventType()
     {
         return eventType;
     }

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java Sat Jul  4 19:00:12 2009
@@ -24,7 +24,7 @@
  *
  * @param <T> type info
  */
-public class ExtensionBean<T> extends AbstractObservesBean<T>
+public class ExtensionBean<T> extends AbstractInjectionTargetBean<T>
 {
     /**
      * Creates a new extesion bean.

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/IBeanHasParent.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/IBeanHasParent.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/IBeanHasParent.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/IBeanHasParent.java Sat Jul  4 19:00:12 2009
@@ -16,7 +16,9 @@
  */
 package org.apache.webbeans.component;
 
-public interface IBeanHasParent
+public interface IBeanHasParent<T>
 {
     public AbstractBean<?> getParent();
+    
+    public void dispose(T instance);
 }

Copied: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java (from r791061, incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ObservesMethodsOwnerBean.java)
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java?p2=incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java&p1=incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ObservesMethodsOwnerBean.java&r1=791061&r2=791166&rev=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ObservesMethodsOwnerBean.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java Sat Jul  4 19:00:12 2009
@@ -16,6 +16,8 @@
 import java.lang.reflect.Method;
 import java.util.Set;
 
+import javax.enterprise.context.spi.CreationalContext;
+
 /**
  * Defines contract for beans that coud have observable
  * method.
@@ -24,7 +26,7 @@
  *
  * @param <T> bean type
  */
-public interface ObservesMethodsOwnerBean<T>
+public interface InjectionTargetBean<T>
 {
     /**
      * Returns set of observable methods.
@@ -41,6 +43,44 @@
     public void addObservableMethod(Method observerMethod);
     
     /**
+     * Inject JavaEE resources.
+     * 
+     * @param instance bean instance
+     * @param creationalContext creational context
+     */
+    public void injectResources(T instance, CreationalContext<T> creationalContext);
+    
+    /**
+     * Inject fields of the bean instance.
+     * 
+     * @param instance bean instance
+     * @param creationalContext creational context
+     */
+    public void injectFields(T instance, CreationalContext<T> creationalContext);
+    
+    /**
+     * Inject initializer methods of the bean instance.
+     * 
+     * @param instance bean instance
+     * @param creationalContext creational context
+     */
+    public void injectMethods(T instance, CreationalContext<T> creationalContext);
+    
+    /**
+     * Calls post constrcut method.
+     * 
+     * @param instance bean instance
+     */
+    public void postConstruct(T instance);
+    
+    /**
+     * Calls predestroy method.
+     * 
+     * @param instance bean instance
+     */
+    public void preDestroy(T instance);
+    
+    /**
      * Returns true if coming from <pre>@Realization</pre>.
      * 
      * @return true if coming from <pre>@Realization</pre>

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InstanceBean.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InstanceBean.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InstanceBean.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InstanceBean.java Sat Jul  4 19:00:12 2009
@@ -42,11 +42,4 @@
         
         return InstanceFactory.getInstance(this.injectedType, anns);
     }
-
-    @Override
-    protected void destroyInstance(Instance<T> instance)
-    {
-        
-    }
-
 }
\ No newline at end of file

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java Sat Jul  4 19:00:12 2009
@@ -18,19 +18,14 @@
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 
-import org.apache.webbeans.context.creational.CreationalContextImpl;
-import org.apache.webbeans.exception.WebBeansException;
 import org.apache.webbeans.inject.InjectableConstructor;
-import org.apache.webbeans.intercept.InterceptorType;
-import org.apache.webbeans.intercept.InvocationContextImpl;
-import org.apache.webbeans.util.WebBeansUtil;
 
 /**
  * Managed bean implementation of the {@link Bean}.
  * 
  * @version $Rev$ $Date$
  */
-public class ManagedBean<T> extends AbstractObservesBean<T>
+public class ManagedBean<T> extends AbstractInjectionTargetBean<T>
 {
     /** Constructor of the web bean component */
     private Constructor<T> constructor;
@@ -70,32 +65,6 @@
 
  
     /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected void destroyComponentInstance(T instance)
-    {
-        if (WebBeansUtil.isContainsInterceptorMethod(getInterceptorStack(), InterceptorType.PRE_DESTROY))
-        {
-            InvocationContextImpl impl = new InvocationContextImpl(null,instance, null, null, WebBeansUtil.getInterceptorMethods(getInterceptorStack(), InterceptorType.PRE_DESTROY), InterceptorType.PRE_DESTROY);
-            try
-            {
-                impl.proceed();
-            }
-            catch (Exception e)
-            {
-                getLogger().error("Error is occıred while executing @PreDestroy method",e);
-                throw new WebBeansException(e);
-            }
-
-        }
-        
-        //Remove it from creational context, if any
-        CreationalContextImpl<T> cc = (CreationalContextImpl<T>)this.creationalContext;
-        cc.remove();
-    }
-
-    /**
      * Get constructor.
      * 
      * @return constructor

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java Sat Jul  4 19:00:12 2009
@@ -34,7 +34,7 @@
  * 
  * @param <T> Type of the field decleration
  */
-public class ProducerFieldBean<T> extends AbstractProducerBean<T> implements IBeanHasParent
+public class ProducerFieldBean<T> extends AbstractProducerBean<T> implements IBeanHasParent<T>
 {
     /**Producer field that defines the component*/
     private Field producerField;

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java Sat Jul  4 19:00:12 2009
@@ -32,15 +32,11 @@
  * <p>
  * It is defined as producer method component.
  * </p>
- * 
- * @author <a href="mailto:gurkanerdogdu@yahoo.com">Gurkan Erdogdu</a>
- * @since 1.0
+ *
+ * @version $Rev$ $Date$
  */
-public class ProducerMethodBean<T> extends AbstractBean<T> implements IBeanHasParent
+public class ProducerMethodBean<T> extends AbstractProducerBean<T>
 {
-    /** Parent component that this producer method belongs */
-    protected AbstractBean<?> parent;
-
     /** Creator method of the parent component */
     protected Method creatorMethod;
 
@@ -54,8 +50,7 @@
      */
     public ProducerMethodBean(AbstractBean<?> parent, Class<T> returnType)
     {
-        super(WebBeansType.PRODUCER, returnType);
-        this.parent = parent;
+        super(WebBeansType.PRODUCER, returnType, parent);
     }
 
     /**
@@ -79,16 +74,6 @@
     }
 
     /**
-     * Gets the producer method owner web bean.
-     * 
-     * @return web bean component defines producer method
-     */
-    public AbstractBean<?> getParent()
-    {
-        return parent;
-    }
-
-    /**
      * Gets the disposal method of the component.
      * 
      * @return disposal method
@@ -184,6 +169,14 @@
     @Override
     protected void destroyInstance(T instance)
     {
+        dispose(instance);
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public void dispose(T instance)
+    {
         if (disposalMethod != null)
         {
             Object parentInstance = null;
@@ -196,7 +189,7 @@
                 }
 
 
-                InjectableMethods<T> m = new InjectableMethods<T>(disposalMethod, parentInstance, parent,null);
+                InjectableMethods<T> m = new InjectableMethods<T>(disposalMethod, parentInstance, this.ownerComponent,null);
                 
                 m.doInjection();
 
@@ -209,7 +202,7 @@
 
                 }
             }
-        }
+        }        
     }
 
     @SuppressWarnings("unchecked")
@@ -220,10 +213,10 @@
         Object parentInstance = null;
         
         //Added for most specialized bean
-        Annotation[] anns = new Annotation[this.parent.getBindings().size()];
-        anns = this.parent.getBindings().toArray(anns);
+        Annotation[] anns = new Annotation[this.ownerComponent.getBindings().size()];
+        anns = this.ownerComponent.getBindings().toArray(anns);
         
-        Bean<?> specialize = WebBeansUtil.getMostSpecializedBean(getManager(), (AbstractBean<T>)this.parent);
+        Bean<?> specialize = WebBeansUtil.getMostSpecializedBean(getManager(), (AbstractBean<T>)this.ownerComponent);
         
         if(specialize != null)
         {
@@ -231,7 +224,7 @@
         }
         else
         {
-            parentInstance = getManager().getReference(this.parent, null, null);
+            parentInstance = getManager().getReference(this.ownerComponent, null, null);
         }
         
         return parentInstance;
@@ -240,13 +233,13 @@
 
     protected void checkNullInstance(Object instance)
     {
-        String errorMessage = "WebBeans producer method : " + creatorMethod.getName() + " return type in the component implementation class : " + this.parent.getReturnType().getName() + " scope type must be @Dependent to create null instance";
+        String errorMessage = "WebBeans producer method : " + creatorMethod.getName() + " return type in the component implementation class : " + this.ownerComponent.getReturnType().getName() + " scope type must be @Dependent to create null instance";
         WebBeansUtil.checkNullInstance(instance, this.getScopeType(), errorMessage);
     }
 
     protected void checkScopeType()
     {
-        String errorMessage = "WebBeans producer method : " + creatorMethod.getName() + " return type in the component implementation class : " + this.parent.getReturnType().getName() + " with passivating scope @" + this.getScopeType().getName() + " must be Serializable";
+        String errorMessage = "WebBeans producer method : " + creatorMethod.getName() + " return type in the component implementation class : " + this.ownerComponent.getReturnType().getName() + " with passivating scope @" + this.getScopeType().getName() + " must be Serializable";
         WebBeansUtil.checkSerializableScopeType(this.getScopeType(), this.isSerializable(), errorMessage);
 
     }

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/xml/XMLManagedBean.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/xml/XMLManagedBean.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/xml/XMLManagedBean.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/xml/XMLManagedBean.java Sat Jul  4 19:00:12 2009
@@ -95,7 +95,7 @@
      * )
      */
     @Override
-    protected void injectFields(T instance,CreationalContext<T> creationalContext)
+    public void injectFields(T instance,CreationalContext<T> creationalContext)
     {
         Set<Field> fieldSet = this.injectableFields.keySet();
         Iterator<Field> itField = fieldSet.iterator();
@@ -149,7 +149,7 @@
      * )
      */
     @Override
-    protected void injectMethods(T instance,CreationalContext<T> creationalContext)
+    public void injectMethods(T instance,CreationalContext<T> creationalContext)
     {
         Set<Method> methodSet = this.injectableMethods.keySet();
         Iterator<Method> itMethods = methodSet.iterator();

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/xml/XMLProducerBean.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/xml/XMLProducerBean.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/xml/XMLProducerBean.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/xml/XMLProducerBean.java Sat Jul  4 19:00:12 2009
@@ -39,7 +39,7 @@
     public XMLProducerBean(AbstractBean<?> parent, Class<T> returnType)
     {
         super(parent, returnType);
-        this.parent = parent;
+        this.ownerComponent = parent;
     }
 
     public void addProducerMethodInjectionPointModel(XMLInjectionPointModel model)

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java Sat Jul  4 19:00:12 2009
@@ -39,12 +39,10 @@
 import javax.enterprise.inject.deployment.DeploymentType;
 import javax.enterprise.inject.deployment.Specializes;
 import javax.enterprise.inject.deployment.Standard;
-import javax.enterprise.inject.spi.Annotated;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.InjectionPoint;
-import javax.event.Fires;
 
-import org.apache.webbeans.annotation.AnyScopeLiteral;
+import org.apache.webbeans.annotation.AnyLiteral;
 import org.apache.webbeans.annotation.CurrentLiteral;
 import org.apache.webbeans.annotation.DependentScopeLiteral;
 import org.apache.webbeans.annotation.ProductionLiteral;
@@ -53,7 +51,7 @@
 import org.apache.webbeans.component.BaseBean;
 import org.apache.webbeans.component.ManagedBean;
 import org.apache.webbeans.component.IBeanHasParent;
-import org.apache.webbeans.component.ObservesMethodsOwnerBean;
+import org.apache.webbeans.component.InjectionTargetBean;
 import org.apache.webbeans.component.ProducerMethodBean;
 import org.apache.webbeans.component.ProducerFieldBean;
 import org.apache.webbeans.config.inheritance.IBeanInheritedMetaData;
@@ -132,7 +130,8 @@
                 //From parent
                 if (!found && (component instanceof IBeanHasParent))
                 {
-                    IBeanHasParent child = (IBeanHasParent) component;
+                    @SuppressWarnings("unchecked")
+                    IBeanHasParent<T> child = (IBeanHasParent<T>) component;
                     component.setType(child.getParent().getType());
                 }
                 
@@ -267,7 +266,7 @@
         //Add @Any support
         if(!AnnotationUtil.isAnyBindingExist(component))
         {
-        	component.addBindingType(new AnyScopeLiteral());
+        	component.addBindingType(new AnyLiteral());
         }
         	 
     }
@@ -1084,7 +1083,7 @@
         WebBeansDecoratorConfig.configureDecarotors(component, object);
     }
 
-    public static <T> void defineObserverMethods(ObservesMethodsOwnerBean<T> component, Class<T> clazz)
+    public static <T> void defineObserverMethods(InjectionTargetBean<T> component, Class<T> clazz)
     {
         Asserts.assertNotNull(component, "component parameter can not be null");
         Asserts.nullCheckForClass(clazz);
@@ -1111,7 +1110,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    private static <T> void createObserverMethodsWithRealizes(ObservesMethodsOwnerBean<T> component, Class<?> clazz, Method[] candidateMethods, boolean isRealizes)
+    private static <T> void createObserverMethodsWithRealizes(InjectionTargetBean<T> component, Class<?> clazz, Method[] candidateMethods, boolean isRealizes)
     {
 
         for (Method candidateMethod : candidateMethods)
@@ -1177,17 +1176,13 @@
     
     public static void addImplicitComponentForInjectionPoint(InjectionPoint injectionPoint)
     {
-        Annotated annotated = injectionPoint.getAnnotated();
-        
         if(WebBeansUtil.checkObtainsInjectionPointConditions(injectionPoint))
         {
             WebBeansUtil.addInjectedImplicitInstanceComponent(injectionPoint);
         }
         
-        //If contains the @Fires, defines implicit component
-        else if(annotated.isAnnotationPresent(Fires.class))
-        {
-            EventUtil.checkObservableInjectionPointConditions(injectionPoint);
+        else if(EventUtil.checkObservableInjectionPointConditions(injectionPoint))
+        {            
             WebBeansUtil.addInjectedImplicitEventComponent(injectionPoint);
         }
         else

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java Sat Jul  4 19:00:12 2009
@@ -431,38 +431,11 @@
     }
 
     
-    public <T> BeanManager addObserver(Observer<T> observer, Class<T> eventType, Annotation... bindings)
-    {
-        this.notificationManager.addObserver(observer, eventType, bindings);
-        return this;
-    }
-
-    
-    public <T> BeanManager addObserver(Observer<T> observer, TypeLiteral<T> eventType, Annotation... bindings)
-    {
-        this.notificationManager.addObserver(observer, eventType, bindings);
-        return this;
-    }
-
     public <T> T getInstance(Bean<T> bean)
     {
         return (T)getReference(bean, null, null);
     }
-
     
-    public <T> BeanManager removeObserver(Observer<T> observer, Class<T> eventType, Annotation... bindings)
-    {
-        this.notificationManager.removeObserver(observer, eventType, bindings);
-        return this;
-    }
-
-    
-    public <T> BeanManager removeObserver(Observer<T> observer, TypeLiteral<T> eventType, Annotation... bindings)
-    {
-        this.notificationManager.removeObserver(observer, eventType, bindings);
-        return this;
-    }
-
     /**
      * {@inheritDoc}
      */

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/BeanObserverImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/BeanObserverImpl.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/BeanObserverImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/BeanObserverImpl.java Sat Jul  4 19:00:12 2009
@@ -27,7 +27,7 @@
 
 import org.apache.webbeans.annotation.CurrentLiteral;
 import org.apache.webbeans.component.AbstractBean;
-import org.apache.webbeans.component.ObservesMethodsOwnerBean;
+import org.apache.webbeans.component.InjectionTargetBean;
 import org.apache.webbeans.container.InjectionResolver;
 import org.apache.webbeans.container.BeanManagerImpl;
 import org.apache.webbeans.container.activity.ActivityManager;
@@ -64,7 +64,7 @@
     private static final WebBeansLogger logger = WebBeansLogger.getLogger(BeanObserverImpl.class);
 
     /**Observer owner bean that defines observer method*/
-    private final ObservesMethodsOwnerBean<?> bean;
+    private final InjectionTargetBean<?> bean;
 
     /**Event observer method*/
     private final Method observerMethod;
@@ -83,7 +83,7 @@
      * @param ifExist if exist parameter
      * @param type transaction type
      */
-    public BeanObserverImpl(ObservesMethodsOwnerBean<?> bean, Method observerMethod, boolean ifExist, TransactionalObserverType type)
+    public BeanObserverImpl(InjectionTargetBean<?> bean, Method observerMethod, boolean ifExist, TransactionalObserverType type)
     {
         this.bean = bean;
         this.observerMethod = observerMethod;
@@ -237,7 +237,7 @@
      * 
      * @return the bean
      */
-    public ObservesMethodsOwnerBean<?> getBean()
+    public InjectionTargetBean<?> getBean()
     {
         return bean;
     }

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java Sat Jul  4 19:00:12 2009
@@ -14,56 +14,70 @@
 package org.apache.webbeans.event;
 
 import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.List;
 
 import javax.enterprise.event.Event;
-import javax.enterprise.event.Observer;
-import javax.event.Fires;
+import javax.enterprise.inject.TypeLiteral;
 
 import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.util.AnnotationUtil;
+import org.apache.webbeans.util.ClassUtil;
 
+/**
+ * Event implementation.
+ * 
+ * @version $Rev$ $Date$
+ *
+ * @param <T> event type
+ * @see Event
+ */
 public class EventImpl<T> implements Event<T>
 {
+    /**Event binding types*/
     private Annotation[] injectedBindings;
 
-    private Class<T> eventType;
+    /**Event types*/
+    private Type eventType;
 
+    /**Bean manager*/
     private BeanManagerImpl manager = null;
 
-    public EventImpl(Annotation[] injectedBindings, Class<T> eventType)
+    /**
+     * Creates a new event.
+     * 
+     * @param injectedBindings event bindings
+     * @param eventType event type
+     */
+    public EventImpl(Annotation[] injectedBindings, Type eventType)
     {
         this.injectedBindings = injectedBindings;
         this.eventType = eventType;
         this.manager = BeanManagerImpl.getManager();
     }
 
-    public void fire(T event, Annotation... bindings)
+    /**
+     * Fires event with given event object.
+     */
+    public void fire(T event)
     {
-        EventUtil.checkEventBindings(getEventBindings(bindings));
-        this.manager.fireEvent(event, getEventBindings(bindings));
-
-    }
-
-    public void observe(Observer<T> observer, Annotation... bindings)
-    {
-        EventUtil.checkEventBindings(getEventBindings(bindings));
-        this.manager.addObserver(observer, eventType, bindings);
+        this.manager.fireEvent(event, this.injectedBindings);
     }
 
+    /**
+     * Returns total binding annotations.
+     * 
+     * @param annotations new annotations
+     * @return total binding annotations
+     */
     private Annotation[] getEventBindings(Annotation... annotations)
     {
+        AnnotationUtil.checkBindingTypeConditions(annotations);
+        
         List<Annotation> eventBindings = new ArrayList<Annotation>();
         Annotation[] anns = null;
 
-        for (Annotation binding : injectedBindings)
-        {
-            if (!binding.annotationType().equals(Fires.class))
-            {
-                eventBindings.add(binding);
-            }
-        }
-
         for (Annotation binding : annotations)
         {
             eventBindings.add(binding);
@@ -75,4 +89,47 @@
         return anns;
 
     }
-}
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Event<T> select(Annotation... bindings)
+    {
+        Event<T> sub = new EventImpl<T>(getEventBindings(bindings),this.eventType);
+        
+        return sub;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public <U extends T> Event<U> select(Class<U> subtype, Annotation... bindings)
+    {
+        if(ClassUtil.isDefinitionConstainsTypeVariables(subtype))
+        {
+            throw new IllegalArgumentException("Class : " + subtype + " cannot contain type variable");
+        }
+        
+        Type sub = subtype;
+        
+        if(sub == null)
+        {
+            sub = this.eventType;
+        }
+        
+        Event<U> subEvent = new EventImpl<U>(getEventBindings(bindings),sub);
+        
+        return subEvent;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public <U extends T> Event<U> select(TypeLiteral<U> subtype, Annotation... bindings)
+    {
+        return select(subtype.getRawType(), bindings);
+    }
+}
\ No newline at end of file

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventUtil.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventUtil.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventUtil.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventUtil.java Sat Jul  4 19:00:12 2009
@@ -18,14 +18,9 @@
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 
-import javax.enterprise.event.AfterTransactionCompletion;
-import javax.enterprise.event.AfterTransactionFailure;
-import javax.enterprise.event.AfterTransactionSuccess;
-import javax.enterprise.event.Asynchronously;
-import javax.enterprise.event.BeforeTransactionCompletion;
 import javax.enterprise.event.Event;
-import javax.enterprise.event.IfExists;
 import javax.enterprise.event.Observes;
+import javax.enterprise.event.TransactionPhase;
 import javax.enterprise.inject.Disposes;
 import javax.enterprise.inject.Initializer;
 import javax.enterprise.inject.Produces;
@@ -58,99 +53,26 @@
         AnnotationUtil.checkBindingTypeConditions(annotations);
     }
 
-    private static void checkTransactionCondition(Method observerMethod)
-    {
-        int i = 1;
-        
-        WebBeansConfigurationException excpetion = new WebBeansConfigurationException("Observer method : " + observerMethod.getName() + " in class : " 
-                + observerMethod.getDeclaringClass().getName() + " is not defined with more than two transaction annotation parameter");
-        
-        
-        if(AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, AfterTransactionCompletion.class))
-        {
-            if(i > 1)
-            {
-                throw excpetion;
-            }       
-            
-            i++;
-        }
-        
-        if(AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, BeforeTransactionCompletion.class))
-        {
-            if(i > 1)
-            {
-                throw excpetion;
-            }       
-            
-            i++;
-        }
-
-        if(AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, AfterTransactionFailure.class))
-        {
-            if(i > 1)
-            {
-                throw excpetion;
-            }       
-            
-            i++;
-        }
-
-        if(AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, AfterTransactionSuccess.class))
-        {
-            if(i > 1)
-            {
-                throw excpetion;
-            }       
-            
-            i++;
-        }
-
-    }
-    
     public static TransactionalObserverType getObserverMethodTransactionType(Method observerMethod)
     {
-        checkTransactionCondition(observerMethod);
+        Observes observes = AnnotationUtil.getMethodFirstParameterAnnotation(observerMethod, Observes.class);
         
-        if (AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, Asynchronously.class) &&
-                (AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, BeforeTransactionCompletion.class)
-                        || (AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, IfExists.class))))
-        {
-            throw new WebBeansConfigurationException("Observer method : " + observerMethod.getName() + " in class : " 
-                    + observerMethod.getDeclaringClass().getName() + " can not be both @Asynchronously and @BeforeTransactionCompletion or @IfExists");
-        }
-        
-        
-        if (AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, AfterTransactionCompletion.class))
+        if (observes.during().equals(TransactionPhase.AFTER_COMPLETION))
         {
             return TransactionalObserverType.AFTER_TRANSACTION_COMPLETION;
         }
-        else if (AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, AfterTransactionSuccess.class))
+        else if (observes.during().equals(TransactionPhase.AFTER_SUCCESS))
         {
             return TransactionalObserverType.AFTER_TRANSACTION_SUCCESS;
         }
-        else if (AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, AfterTransactionFailure.class))
+        else if (observes.during().equals(TransactionPhase.AFTER_FAILURE))
         {
             return TransactionalObserverType.AFTER_TRANSACTION_FAILURE;
         }
-        else if (AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, BeforeTransactionCompletion.class))
+        else if (observes.during().equals(TransactionPhase.BEFORE_COMPLETION))
         {
             return TransactionalObserverType.BEFORE_TRANSACTION_COMPLETION;
         }
-        else if (AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, Asynchronously.class) &&
-                (AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, AfterTransactionCompletion.class)
-                        || (AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, AfterTransactionFailure.class)
-                        || (AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, AfterTransactionSuccess.class)))))
-
-        {
-            return TransactionalObserverType.ASYNCHRONOUSLY_TRANSACTIONAL;
-        }
-        
-        else if (AnnotationUtil.isMethodParameterAnnotationExist(observerMethod, Asynchronously.class))
-        {
-            return TransactionalObserverType.ASYNCHRONOUSLY_NONE;
-        }
-        
         else
         {
             return TransactionalObserverType.NONE;
@@ -179,28 +101,45 @@
             throw new WebBeansConfigurationException("Observer method : " + candidateObserverMethod.getName() + " in class : " + clazz.getName() + " can not annotated with annotation @Disposes");
         }
 
-        Type type = AnnotationUtil.getMethodFirstParameterWithAnnotation(candidateObserverMethod, Observes.class);
+//        Type type = AnnotationUtil.getMethodFirstParameterWithAnnotation(candidateObserverMethod, Observes.class);
+//        
+//        Class<?> eventType = null;
+//       
+//        if (type instanceof ParameterizedType)
+//        {
+//            eventType = (Class<?>) ((ParameterizedType) type).getRawType();
+//        }
+//        else
+//        {
+//            eventType = (Class<?>) type;
+//        }
+
+//        if (ClassUtil.isDefinitionConstainsTypeVariables(eventType))
+//        {
+//            throw new WebBeansConfigurationException("Observer method : " + candidateObserverMethod.getName() + " in class : " + clazz.getName() + " can not defined as generic");
+//        }
+    }
+
+
+    public static boolean checkObservableInjectionPointConditions(InjectionPoint injectionPoint)
+    {
+        Type type = injectionPoint.getType();
         
-        Class<?> eventType = null;
-       
-        if (type instanceof ParameterizedType)
+        Class<?> candidateClazz = null;
+        if(type instanceof Class)
         {
-            eventType = (Class<?>) ((ParameterizedType) type).getRawType();
+            candidateClazz = (Class<?>)type;
         }
-        else
+        else if(type instanceof ParameterizedType)
         {
-            eventType = (Class<?>) type;
+            ParameterizedType pt = (ParameterizedType)type;
+            candidateClazz = (Class<?>)pt.getRawType();
         }
-
-        if (ClassUtil.isDefinitionConstainsTypeVariables(eventType))
+        
+        if(!candidateClazz.equals(Event.class))
         {
-            throw new WebBeansConfigurationException("Observer method : " + candidateObserverMethod.getName() + " in class : " + clazz.getName() + " can not defined as generic");
-        }
-    }
-
-
-    public static void checkObservableInjectionPointConditions(InjectionPoint injectionPoint)
-    {
+            return false;
+        }                
 
         if (!ClassUtil.isParametrizedType(injectionPoint.getType()))
         {
@@ -218,7 +157,7 @@
                 
                 if(!(rawType.equals(Event.class)))
                 {
-                    throw new WebBeansConfigurationException("@Observable field injection " + injectionPoint.toString() + " must have type javax.event.Event");
+                    return false;
                 }                
                 else
                 {                                        
@@ -228,25 +167,27 @@
                         
                         if(ClassUtil.isParametrizedType(actualArgument) || ClassUtil.isWildCardType(actualArgument) || ClassUtil.isTypeVariable(actualArgument))
                         {                            
-                            throw new WebBeansConfigurationException("@Observable field injection " + injectionPoint.toString() + " actual type argument can not be Parametrized, Wildcard type or Type variable");                            
+                            throw new IllegalArgumentException("@Observable field injection " + injectionPoint.toString() + " actual type argument can not be Parametrized, Wildcard type or Type variable");                            
                         }
                                                 
                         if(ClassUtil.isDefinitionConstainsTypeVariables((Class<?>)actualArgument))
                         {
-                            throw new WebBeansConfigurationException("@Observable field injection " + injectionPoint.toString() + " must not have TypeVariable or WildCard generic type argument");                            
+                            throw new IllegalArgumentException("@Observable field injection " + injectionPoint.toString() + " must not have TypeVariable or WildCard generic type argument");                            
                         }
                     }
                     else
                     {
-                        throw new WebBeansConfigurationException("@Observable field injection " + injectionPoint.toString() + " must not have more than one actual type argument");
+                        throw new IllegalArgumentException("@Observable field injection " + injectionPoint.toString() + " must not have more than one actual type argument");
                     }
                 }                                
             }
             else
             {
-                throw new WebBeansConfigurationException("@Observable field injection " + injectionPoint.toString() + " must be defined as ParameterizedType with one actual type argument");
+                throw new IllegalArgumentException("@Observable field injection " + injectionPoint.toString() + " must be defined as ParameterizedType with one actual type argument");
             }        
         }
+        
+        return true;
 
     }
 

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java Sat Jul  4 19:00:12 2009
@@ -15,6 +15,7 @@
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
+import java.lang.reflect.Type;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -23,7 +24,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArraySet;
 
-import javax.enterprise.event.IfExists;
+import javax.enterprise.event.Notify;
 import javax.enterprise.event.Observer;
 import javax.enterprise.event.ObserverException;
 import javax.enterprise.event.Observes;
@@ -32,7 +33,7 @@
 import javax.transaction.Synchronization;
 import javax.transaction.Transaction;
 
-import org.apache.webbeans.component.ObservesMethodsOwnerBean;
+import org.apache.webbeans.component.InjectionTargetBean;
 import org.apache.webbeans.container.BeanManagerImpl;
 import org.apache.webbeans.container.activity.ActivityManager;
 import org.apache.webbeans.exception.WebBeansException;
@@ -41,13 +42,14 @@
 import org.apache.webbeans.spi.TransactionService;
 import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.Asserts;
+import org.apache.webbeans.util.ClassUtil;
 
 @SuppressWarnings("unchecked")
 public final class NotificationManager implements Synchronization
 {
     private static final WebBeansLogger logger = WebBeansLogger.getLogger(NotificationManager.class);
 
-    private Map<Class<?>, Set<ObserverImpl<?>>> observers = new ConcurrentHashMap<Class<?>, Set<ObserverImpl<?>>>();
+    private Map<Type, Set<ObserverWrapper<?>>> observers = new ConcurrentHashMap<Type, Set<ObserverWrapper<?>>>();
 
     private Set<TransactionalNotifier> transactionSet = new CopyOnWriteArraySet<TransactionalNotifier>();
     
@@ -65,22 +67,21 @@
         return manager.getNotificationManager();
     }
 
-    public <T> void addObserver(Observer<T> observer, Class<T> eventType, Annotation... annotations)
+    public <T> void addObserver(Observer<T> observer, Type eventType, Annotation... annotations)
     {
         addObserver(observer, false, TransactionalObserverType.NONE, eventType, annotations);
     }
 
-    public <T> void addObserver(Observer<T> observer, boolean ifExist, TransactionalObserverType type, Class<T> eventType, Annotation... annotations)
+    public <T> void addObserver(Observer<T> observer, boolean ifExist, TransactionalObserverType type, Type eventType, Annotation... annotations)
     {
-        EventUtil.checkEventType(eventType);
         EventUtil.checkEventBindings(annotations);
 
-        ObserverImpl<T> observerImpl = new ObserverImpl<T>(observer, ifExist, type, eventType, annotations);
+        ObserverWrapper<T> observerImpl = new ObserverWrapper<T>(observer, ifExist, type, eventType, annotations);
 
-        Set<ObserverImpl<?>> set = observers.get(eventType);
+        Set<ObserverWrapper<?>> set = observers.get(eventType);
         if (set == null)
         {
-            set = new HashSet<ObserverImpl<?>>();
+            set = new HashSet<ObserverWrapper<?>>();
             observers.put(eventType, set);
         }
 
@@ -92,12 +93,12 @@
         EventUtil.checkEventType(eventType.getRawType());
         EventUtil.checkEventBindings(annotations);
 
-        ObserverImpl<T> observerImpl = new ObserverImpl<T>(observer, eventType.getRawType(), annotations);
+        ObserverWrapper<T> observerImpl = new ObserverWrapper<T>(observer, eventType.getRawType(), annotations);
 
-        Set<ObserverImpl<?>> set = observers.get(eventType.getRawType());
+        Set<ObserverWrapper<?>> set = observers.get(eventType.getRawType());
         if (set == null)
         {
-            set = new HashSet<ObserverImpl<?>>();
+            set = new HashSet<ObserverWrapper<?>>();
             observers.put(eventType.getRawType(), set);
         }
 
@@ -111,11 +112,11 @@
 
         if (observers.containsKey(eventType))
         {
-            Set<ObserverImpl<?>> set = observers.get(eventType);
-            Iterator<ObserverImpl<?>> it = set.iterator();
+            Set<ObserverWrapper<?>> set = observers.get(eventType);
+            Iterator<ObserverWrapper<?>> it = set.iterator();
             while (it.hasNext())
             {
-                ObserverImpl<?> s = it.next();
+                ObserverWrapper<?> s = it.next();
                 Observer<T> ob = (Observer<T>) s.getObserver();
 
                 Set<Annotation> evenBindings = s.getEventBindingTypes();
@@ -137,11 +138,11 @@
 
         if (observers.containsKey(eventType.getRawType()))
         {
-            Set<ObserverImpl<?>> set = observers.get(eventType.getRawType());
-            Iterator<ObserverImpl<?>> it = set.iterator();
+            Set<ObserverWrapper<?>> set = observers.get(eventType.getRawType());
+            Iterator<ObserverWrapper<?>> it = set.iterator();
             while (it.hasNext())
             {
-                ObserverImpl<?> s = it.next();
+                ObserverWrapper<?> s = it.next();
                 Observer<T> ob = (Observer<T>) s.getObserver();
 
                 Set<Annotation> evenBindings = s.getEventBindingTypes();
@@ -159,30 +160,39 @@
     public <T> Set<Observer<T>> resolveObservers(T event, Annotation... bindings)
     {
 
-        Set<ObserverImpl<?>> resolvedSet = new HashSet<ObserverImpl<?>>();
+        Set<ObserverWrapper<?>> resolvedSet = new HashSet<ObserverWrapper<?>>();
         Set<Observer<T>> unres = new HashSet<Observer<T>>();
 
         Class<T> eventType = (Class<T>) event.getClass();
+        
+        
+        Set<Type> types = new HashSet<Type>();
+        ClassUtil.setTypeHierarchy(types, eventType);
 
         EventUtil.checkEventType(eventType);
         EventUtil.checkEventBindings(bindings);
 
-        Set<Class<?>> keySet = this.observers.keySet();
-        Iterator<Class<?>> itKeySet = keySet.iterator();
+        Set<Type> keySet = this.observers.keySet();
+        Iterator<Type> itKeySet = keySet.iterator();
 
         while (itKeySet.hasNext())
         {
-            Class<?> type = itKeySet.next();
-            if (type.isAssignableFrom(eventType))
+            Type type = itKeySet.next();
+            
+            for(Type check : types)
             {
-                resolvedSet.addAll(this.observers.get(type));
-            }
+                if (ClassUtil.isAssignable(check, type))
+                {
+                    resolvedSet.addAll(this.observers.get(type));
+                    break;
+                }                
+            }            
         }
 
-        Iterator<ObserverImpl<?>> it = resolvedSet.iterator();
+        Iterator<ObserverWrapper<?>> it = resolvedSet.iterator();
         while (it.hasNext())
         {
-            ObserverImpl<T> impl = (ObserverImpl<T>) it.next();
+            ObserverWrapper<T> impl = (ObserverWrapper<T>) it.next();
 
             if (impl.isObserverOfBindings(bindings))
             {
@@ -203,12 +213,12 @@
         {
             Observer<Object> observer = it.next();
             try
-            {                
-                if (observer instanceof BeanObserverImpl)
+            {             
+                if(observer instanceof BeanObserverImpl)
                 {
                     BeanObserverImpl<Object> beanObserver = (BeanObserverImpl<Object>) observer;
                     TransactionalObserverType type = beanObserver.getType();
-                    if (!(type.equals(TransactionalObserverType.NONE) || type.equals(TransactionalObserverType.ASYNCHRONOUSLY_NONE)))
+                    if (!(type.equals(TransactionalObserverType.NONE)))
                     {
                         Transaction transaction = transactionService.getTransaction();
                         
@@ -242,25 +252,19 @@
                         }
                         else
                         {
-                            if(!type.equals(TransactionalObserverType.ASYNCHRONOUSLY_NONE))
-                            {
-                                observer.notify(event);   
-                            }
+                            observer.notify(event);   
                         }
                     }
                     else
                     {
-                        if(!type.equals(TransactionalObserverType.ASYNCHRONOUSLY_NONE))
-                        {
-                            observer.notify(event);   
-                        }
+                        observer.notify(event);   
                     }
+                    
                 }
                 else
                 {
                     observer.notify(event);
                 }
-
             }
             catch (WebBeansException e)
             {
@@ -286,7 +290,7 @@
         }
     }
 
-    public <T> void addObservableComponentMethods(ObservesMethodsOwnerBean<?> component)
+    public <T> void addObservableComponentMethods(InjectionTargetBean<?> component)
     {
         Asserts.assertNotNull(component, "component parameter can not be null");
         Set<Method> observableMethods = component.getObservableMethods();
@@ -295,11 +299,13 @@
         while (itMethods.hasNext())
         {
             Method observableMethod = itMethods.next();
+            Observes observes = AnnotationUtil.getMethodFirstParameterAnnotation(observableMethod, Observes.class);
+            
             Annotation[] bindingTypes = AnnotationUtil.getMethodFirstParameterBindingTypesWithGivenAnnotation(observableMethod, Observes.class);
-
+            
             boolean ifExist = false;
 
-            if (AnnotationUtil.isMethodParameterAnnotationExist(observableMethod, IfExists.class))
+            if (observes.notifyObserver().equals(Notify.IF_EXISTS))
             {
                 ifExist = true;
             }

Copied: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverWrapper.java (from r788743, incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverImpl.java)
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverWrapper.java?p2=incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverWrapper.java&p1=incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverImpl.java&r1=788743&r2=791166&rev=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverWrapper.java Sat Jul  4 19:00:12 2009
@@ -14,6 +14,7 @@
 package org.apache.webbeans.event;
 
 import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -21,24 +22,25 @@
 
 
 /**
- * Implementation of the {@link Observer} interface contract.
+ * Wrapper around the {@link Observer} instance.
  * 
- * @author <a href="mailto:gurkanerdogdu@yahoo.com">Gurkan Erdogdu</a>
- * @since 1.0
  * @param <T> generic event type
  */
-public class ObserverImpl<T>
+public class ObserverWrapper<T>
 {
     /** Event binding types apeearing on the parameter */
     private Set<Annotation> eventBindingTypes = new HashSet<Annotation>();
 
     /** Event object type */
-    private Class<T> eventType;
+    private Type eventType;
 
+    /**Wrapped observer instance*/
     private Observer<T> observer;
 
+    /**Using <code>@IfExist</code>*/
     private boolean ifExist;
 
+    /**Transactional observer type*/
     private TransactionalObserverType transObserverType;
 
     /**
@@ -48,12 +50,12 @@
      * @param observerMethod observer method
      * @param eventType event type
      */
-    public ObserverImpl(Observer<T> observer, Class<T> eventType, Annotation... annotations)
+    public ObserverWrapper(Observer<T> observer, Class<T> eventType, Annotation... annotations)
     {
         this(observer, false, TransactionalObserverType.NONE, eventType, annotations);
     }
 
-    public ObserverImpl(Observer<T> observer, boolean ifExist, TransactionalObserverType type, Class<T> eventType, Annotation... annotations)
+    public ObserverWrapper(Observer<T> observer, boolean ifExist, TransactionalObserverType type, Type eventType, Annotation... annotations)
     {
         for (Annotation annotation : annotations)
         {
@@ -117,7 +119,7 @@
     /**
      * Gets event type.
      */
-    public Class<T> getEventType()
+    public Type getEventType()
     {
         return this.eventType;
     }

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/TransactionalObserverType.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/TransactionalObserverType.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/TransactionalObserverType.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/TransactionalObserverType.java Sat Jul  4 19:00:12 2009
@@ -19,7 +19,5 @@
     AFTER_TRANSACTION_SUCCESS, 
     AFTER_TRANSACTION_FAILURE, 
     BEFORE_TRANSACTION_COMPLETION,
-    ASYNCHRONOUSLY_NONE,
-    ASYNCHRONOUSLY_TRANSACTIONAL,
     NONE
 }

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/xml/BeanObserverXMLImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/xml/BeanObserverXMLImpl.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/xml/BeanObserverXMLImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/xml/BeanObserverXMLImpl.java Sat Jul  4 19:00:12 2009
@@ -19,7 +19,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.apache.webbeans.component.ObservesMethodsOwnerBean;
+import org.apache.webbeans.component.InjectionTargetBean;
 import org.apache.webbeans.container.InjectionResolver;
 import org.apache.webbeans.container.BeanManagerImpl;
 import org.apache.webbeans.event.BeanObserverImpl;
@@ -30,7 +30,7 @@
 {
     private List<XMLInjectionPointModel> observersParameters = new ArrayList<XMLInjectionPointModel>();
 
-    public BeanObserverXMLImpl(ObservesMethodsOwnerBean<?> bean, Method observerMethod, boolean ifExist, TransactionalObserverType type)
+    public BeanObserverXMLImpl(InjectionTargetBean<?> bean, Method observerMethod, boolean ifExist, TransactionalObserverType type)
     {
         super(bean, observerMethod, ifExist, type);
     }

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java Sat Jul  4 19:00:12 2009
@@ -22,7 +22,6 @@
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.InjectionPoint;
-import javax.event.Fires;
 
 import org.apache.webbeans.component.AbstractBean;
 import org.apache.webbeans.container.InjectionResolver;
@@ -84,18 +83,12 @@
         }
         
         Annotation[] injectionAnnotations = injectionPoint.getAnnotated().getAnnotations().toArray(new Annotation[0]);
-        Annotation[] annotations = injectionPoint.getBindings().toArray(new Annotation[0]);
         
         if (isResource(injectionAnnotations))
         {
             return injectResource(injectionPoint.getType(),injectionAnnotations);
         }
                     
-        if (isObservableBinding(annotations))
-        {
-            return injectForObservable(injectionPoint.getType(), annotations);
-        }
-        
         //Get injection point Bean component
         Bean<?> component = InjectionResolver.getInstance().getInjectionPointBean(injectionPoint);
         
@@ -145,19 +138,6 @@
         return AnnotationUtil.hasResourceAnnotation(annotations); 
     }
 
-    private boolean isObservableBinding(Annotation... annotations)
-    {
-        for (Annotation ann : annotations)
-        {
-            if (ann.annotationType().equals(Fires.class))
-            {
-                return true;
-            }
-        }
-
-        return false;
-    }
-    
     /**
      * If the annotation is a resource annotation, we create 
      * the instance for injecting web beans resources.
@@ -181,13 +161,6 @@
         return null;
     }
     
-    private Object injectForObservable(Type type, Annotation... annotations)
-    {
-        Bean<?> bean = InjectionResolver.getInstance().implResolveByType(type, annotations).iterator().next();
-        
-        return injectForDependent(bean,null);
-    }
-    
     private Object injectForDependent(Bean<?> component, InjectionPoint injectionPoint)
     {
         Object object = null;

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java Sat Jul  4 19:00:12 2009
@@ -167,19 +167,20 @@
      * {@inheritDoc}
      */
     @Override
-    @SuppressWarnings("unchecked")
     public <U extends T> Instance<U> select(Class<U> subtype, Annotation... bindings)
     {
         AnnotationUtil.checkBindingTypeConditions(bindings);
         
-        if(subtype == null)
+        Type sub = subtype;
+        
+        if(sub == null)
         {
-            subtype = (Class<U>)this.injectionClazz;
+            sub = this.injectionClazz;
         }
         
         Annotation[] newBindings = getAdditionalBindings(bindings);
         
-        InstanceImpl<U> newInstance = new InstanceImpl<U>(subtype, newBindings);
+        InstanceImpl<U> newInstance = new InstanceImpl<U>(sub, newBindings);
                     
         return newInstance;
     }

Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java?rev=791166&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java Sat Jul  4 19:00:12 2009
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You 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.apache.webbeans.portable.creation;
+
+import java.util.Set;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.Producer;
+
+import org.apache.webbeans.component.AbstractBean;
+
+/**
+ * Abstract implementation of {@link Producer} contract.
+ * 
+ * @version $Rev$ $Date$
+ *
+ * @param <T> bean type info
+ */
+public abstract class AbstractProducer<T> implements Producer<T> 
+{
+    /**Bean instance*/
+    private AbstractBean<T> bean;
+
+    /**
+     * Create a new producer with given bean.
+     * 
+     * @param bean bean instance
+     */
+    protected AbstractProducer(AbstractBean<T> bean)
+    {
+        this.bean = bean;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Set<InjectionPoint> getInjectionPoints()
+    {
+        return bean.getInjectionPoints();
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public T produce(CreationalContext<T> creationalContext)
+    {
+        return bean.create(creationalContext);
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public void dispose(T instance)
+    {
+        //Do nothing as default
+    }
+
+    /**
+     * Returns actual bean instance.
+     * 
+     * @param <X> bean type info
+     * @param clazz bean type class
+     * @return actual bean
+     */
+    protected <X> X getBean(Class<X> clazz)
+    {
+        return clazz.cast(this.bean);
+    }
+}
\ No newline at end of file

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java?rev=791166&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java Sat Jul  4 19:00:12 2009
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You 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.apache.webbeans.portable.creation;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.InjectionTarget;
+
+import org.apache.webbeans.component.AbstractInjectionTargetBean;
+import org.apache.webbeans.component.InjectionTargetBean;
+
+/**
+ * InjectionTargetProducer implementation.
+ * 
+ * @version $Rev$ $Date$
+ *
+ * @param <T> bean type info
+ */
+public class InjectionTargetProducer<T> extends AbstractProducer<T> implements InjectionTarget<T>
+{
+    public InjectionTargetProducer(AbstractInjectionTargetBean<T> bean)
+    {
+        super(bean);
+    }
+    
+    @Override
+    public void inject(T instance, CreationalContext<T> ctx)
+    {
+        @SuppressWarnings("unchecked")
+        InjectionTargetBean<T> bean = getBean(InjectionTargetBean.class);
+        
+        bean.injectResources(instance, ctx);
+        bean.injectFields(instance, ctx);
+        bean.injectMethods(instance, ctx);
+    }
+
+    @Override
+    public void postConstruct(T instance)
+    {
+        @SuppressWarnings("unchecked")
+        InjectionTargetBean<T> bean = getBean(InjectionTargetBean.class);
+        
+        bean.postConstruct(instance);
+    }
+
+    @Override
+    public void preDestroy(T instance)
+    {
+        @SuppressWarnings("unchecked")
+        InjectionTargetBean<T> bean = getBean(InjectionTargetBean.class);
+        
+        bean.preDestroy(instance);
+    }
+
+}
\ No newline at end of file

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/ProducerBeansProducer.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/ProducerBeansProducer.java?rev=791166&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/ProducerBeansProducer.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/ProducerBeansProducer.java Sat Jul  4 19:00:12 2009
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You 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.apache.webbeans.portable.creation;
+
+import org.apache.webbeans.component.AbstractProducerBean;
+
+/**
+ * Implementation for producer beans.
+ * 
+ * @version $Rev$ $Date$
+ *
+ * @param <T> producer return type info
+ */
+public class ProducerBeansProducer<T> extends AbstractProducer<T>
+{
+    /**
+     * Creats a new producer bean producer.
+     * 
+     * @param bean producer bean
+     */
+    public ProducerBeansProducer(AbstractProducerBean<T> bean)
+    {
+        super(bean);
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    @SuppressWarnings("unchecked")
+    public void dispose(T instance)
+    {
+        AbstractProducer<T> producer = getBean(AbstractProducer.class);
+        producer.dispose(instance);
+    }
+    
+}
\ No newline at end of file

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/ProducerBeansProducer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/ProducerBeansProducer.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java?rev=791166&r1=791165&r2=791166&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java Sat Jul  4 19:00:12 2009
@@ -329,6 +329,37 @@
         result = new Annotation[0];
         return result;
     }
+    
+    /**
+     * Gets the method first found parameter annotation with given type.
+     * 
+     * @param method method
+     * @param annotation checking annotation
+     * @return annotation
+     */
+    public static <T extends Annotation> T getMethodFirstParameterAnnotation(Method method, Class<T> clazz)
+    {
+        Asserts.assertNotNull(method, "Method argument can not be null");
+        Asserts.assertNotNull(clazz, "Clazz argument can not be null");
+
+        Annotation[][] parameterAnns = method.getParameterAnnotations();
+
+        for (Annotation[] parameters : parameterAnns)
+        {
+            for (Annotation param : parameters)
+            {
+                Class<? extends Annotation> btype = param.annotationType();
+                if (btype.equals(clazz))
+                {
+                    return clazz.cast(param);
+                }
+
+            }
+
+        }
+
+        return null;
+    }    
 
     /**
      * Check given annotation cross ref exist in the any parameter of the given