You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ar...@apache.org on 2014/04/24 13:34:05 UTC

svn commit: r1589667 - in /openwebbeans/trunk: webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/ webbeans-impl/src/main/java/org/apache/webbeans/component/ webbeans-impl/src/main/java/org/apache/webbeans/config/ webbeans-impl/src/main/jav...

Author: arne
Date: Thu Apr 24 11:34:04 2014
New Revision: 1589667

URL: http://svn.apache.org/r1589667
Log:
OWB-815: Implemented injection of EventMetadata

Added:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/EventMetadataBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/EventMetadataProducer.java
Removed:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventMetadata.java
Modified:
    openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbValidator.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventMetadataImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/OwbObserverMethod.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java

Modified: openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbValidator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbValidator.java?rev=1589667&r1=1589666&r2=1589667&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbValidator.java (original)
+++ openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbValidator.java Thu Apr 24 11:34:04 2014
@@ -39,7 +39,6 @@ import org.apache.webbeans.exception.Web
 import org.apache.webbeans.portable.AnnotatedElementFactory;
 import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.Asserts;
-import org.apache.webbeans.util.ClassUtil;
 
 /**
  * Validates session beans.
@@ -121,7 +120,7 @@ public final class EjbValidator
         Asserts.assertNotNull(ejbClass, "ejbClass parameter can not be null");
         Asserts.assertNotNull(ejbClass, "scopeType parameter can not be null");
         
-        if(ClassUtil.isDefinitionContainsTypeVariables(ejbClass))
+        if (ejbClass.getTypeParameters().length > 0)
         {
             if(!scopeType.equals(Dependent.class))
             {

Added: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/EventMetadataBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/EventMetadataBean.java?rev=1589667&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/EventMetadataBean.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/EventMetadataBean.java Thu Apr 24 11:34:04 2014
@@ -0,0 +1,56 @@
+/*
+ * 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.component;
+
+import java.lang.reflect.Type;
+
+import javax.enterprise.inject.spi.EventMetadata;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.portable.EventMetadataProducer;
+import org.apache.webbeans.util.CollectionUtil;
+
+/**
+ * Implicit event metadata bean definition.
+ * 
+ * @version $Rev: 1493478 $ $Date: 2013-06-16 11:19:42 +0200 (So, 16 Jun 2013) $
+ */
+public class EventMetadataBean extends BuiltInOwbBean<EventMetadata>
+{
+
+    public EventMetadataBean(WebBeansContext webBeansContext)
+    {
+        super(webBeansContext,
+              WebBeansType.METADATA,
+              new BeanAttributesImpl<EventMetadata>(CollectionUtil.<Type>unmodifiableSet(EventMetadata.class, Object.class)),
+              EventMetadata.class,
+              false,
+              new SimpleProducerFactory<EventMetadata>(new EventMetadataProducer()));
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.webbeans.component.AbstractOwbBean#isPassivationCapable()
+     */
+    @Override
+    public boolean isPassivationCapable()
+    {
+        return true;
+    }
+    
+}

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java?rev=1589667&r1=1589666&r2=1589667&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java Thu Apr 24 11:34:04 2014
@@ -267,6 +267,7 @@ public class BeansDeployer
         
         //Register Event Bean
         beanManager.addInternalBean(webBeansUtil.getEventBean());
+        beanManager.addInternalBean(webBeansUtil.getEventMetadataBean());
         
         //Register Metadata Beans
         beanManager.addInternalBean(webBeansUtil.getBeanMetadataBean());

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=1589667&r1=1589666&r2=1589667&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java Thu Apr 24 11:34:04 2014
@@ -47,6 +47,7 @@ import javax.enterprise.inject.spi.Annot
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.enterprise.inject.spi.Decorator;
+import javax.enterprise.inject.spi.EventMetadata;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.inject.spi.InjectionTarget;
 import javax.enterprise.inject.spi.InterceptionType;
@@ -72,7 +73,6 @@ import org.apache.webbeans.config.OwbPar
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.context.creational.CreationalContextImpl;
 import org.apache.webbeans.decorator.DecoratorComparator;
-import org.apache.webbeans.event.EventMetadata;
 import org.apache.webbeans.event.EventMetadataImpl;
 import org.apache.webbeans.event.NotificationManager;
 import org.apache.webbeans.exception.WebBeansConfigurationException;

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java?rev=1589667&r1=1589666&r2=1589667&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java Thu Apr 24 11:34:04 2014
@@ -30,6 +30,7 @@ import java.util.Stack;
 import javax.enterprise.context.spi.Contextual;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.EventMetadata;
 import javax.enterprise.inject.spi.InjectionPoint;
 
 import org.apache.webbeans.config.WebBeansContext;
@@ -49,9 +50,14 @@ public class CreationalContextImpl<T> im
     private transient T delegate;
     
     /**
-     * The injection point object to be injected into injection points of type InjectionPoint
+     * The injection point objects to be injected into injection points of type InjectionPoint
      */
     private transient Stack<InjectionPoint> injectionPoints = null;
+    
+    /**
+     * The EventMetadata objects to be injected into injection points of type EventMetadata
+     */
+    private transient Stack<EventMetadata> eventMetadata = null;
 
     /**
      * Contextual bean dependent instances
@@ -138,6 +144,33 @@ public class CreationalContextImpl<T> im
         return injectionPoints.pop();
     }
 
+    public EventMetadata getEventMetadata()
+    {
+        if (eventMetadata == null || eventMetadata.isEmpty())
+        {
+            return null;
+        }
+        return eventMetadata.peek();
+    }
+
+    public void putEventMetadata(EventMetadata metadata)
+    {
+        if (eventMetadata == null)
+        {
+            eventMetadata = new Stack<EventMetadata>();
+        }
+        eventMetadata.push(metadata);
+    }
+
+    public EventMetadata removeEventMetadata()
+    {
+        if (eventMetadata == null || eventMetadata.isEmpty())
+        {
+            return null;
+        }
+        return eventMetadata.pop();
+    }
+
     /**
      * Save this incomplete instance.
      * 

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java?rev=1589667&r1=1589666&r2=1589667&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java Thu Apr 24 11:34:04 2014
@@ -26,6 +26,7 @@ import java.lang.annotation.Annotation;
 import java.util.Set;
 
 import javax.enterprise.event.Event;
+import javax.enterprise.inject.spi.EventMetadata;
 import javax.enterprise.util.TypeLiteral;
 
 import org.apache.webbeans.config.WebBeansContext;

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventMetadataImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventMetadataImpl.java?rev=1589667&r1=1589666&r2=1589667&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventMetadataImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventMetadataImpl.java Thu Apr 24 11:34:04 2014
@@ -26,6 +26,7 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
+import javax.enterprise.inject.spi.EventMetadata;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.util.TypeLiteral;
 

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java?rev=1589667&r1=1589666&r2=1589667&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java Thu Apr 24 11:34:04 2014
@@ -36,6 +36,7 @@ import javax.enterprise.event.Reception;
 import javax.enterprise.event.TransactionPhase;
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedParameter;
+import javax.enterprise.inject.spi.EventMetadata;
 import javax.enterprise.inject.spi.Extension;
 import javax.enterprise.inject.spi.ObserverMethod;
 import javax.enterprise.inject.spi.ProcessProducer;

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java?rev=1589667&r1=1589666&r2=1589667&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java Thu Apr 24 11:34:04 2014
@@ -42,6 +42,7 @@ import javax.enterprise.event.Transactio
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedParameter;
 import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.EventMetadata;
 import javax.enterprise.inject.spi.InjectionPoint;
 
 import org.apache.webbeans.annotation.AnnotationManager;
@@ -172,14 +173,15 @@ public class ObserverMethodImpl<T> imple
         Object object = null;
         
         List<ObserverParams> methodArgsMap = getMethodArguments(event, metadata);
-
+        
         BeanManagerImpl manager = bean.getWebBeansContext().getBeanManagerImpl();
         CreationalContextImpl<Object> creationalContext = manager.createCreationalContext(component);
         if (metadata != null)
         {
             creationalContext.putInjectionPoint(metadata.getInjectionPoint());
+            creationalContext.putEventMetadata(metadata);
         }
-
+        
         ObserverParams[] obargs = null;
         try
         {
@@ -273,6 +275,7 @@ public class ObserverMethodImpl<T> imple
         }
         finally
         {
+            creationalContext.removeEventMetadata();
             creationalContext.removeInjectionPoint();
             //Destory bean instance
             if (component.getScope().equals(Dependent.class) && object != null)
@@ -332,6 +335,7 @@ public class ObserverMethodImpl<T> imple
                 CreationalContextImpl<Object> creational = manager.createCreationalContext(injectedBean);
                 creational.putInjectionPoint(metadata.getInjectionPoint());
                 creational.putInjectionPoint(point);
+                creational.putEventMetadata(metadata);
                 Object instance;
                 try
                 {
@@ -339,6 +343,7 @@ public class ObserverMethodImpl<T> imple
                 }
                 finally
                 {
+                    creational.removeEventMetadata();
                     creational.removeInjectionPoint();
                     creational.removeInjectionPoint();
                 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/OwbObserverMethod.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/OwbObserverMethod.java?rev=1589667&r1=1589666&r2=1589667&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/OwbObserverMethod.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/OwbObserverMethod.java Thu Apr 24 11:34:04 2014
@@ -18,6 +18,7 @@
  */
 package org.apache.webbeans.event;
 
+import javax.enterprise.inject.spi.EventMetadata;
 import javax.enterprise.inject.spi.ObserverMethod;
 
 /**

Added: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/EventMetadataProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/EventMetadataProducer.java?rev=1589667&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/EventMetadataProducer.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/EventMetadataProducer.java Thu Apr 24 11:34:04 2014
@@ -0,0 +1,55 @@
+/*
+ * 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;
+
+import java.util.Collections;
+import java.util.Set;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.EventMetadata;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.Producer;
+
+import org.apache.webbeans.context.creational.CreationalContextImpl;
+
+public class EventMetadataProducer implements Producer<EventMetadata>
+{
+    @Override
+    public EventMetadata produce(CreationalContext<EventMetadata> creationalContext)
+    {
+        if (!(creationalContext instanceof CreationalContextImpl))
+        {
+            // TODO What to do here?
+            throw new IllegalStateException("EventMetadataProducer does work only with CreationalContextImpl");
+        }
+        CreationalContextImpl<EventMetadata> contextImpl = (CreationalContextImpl<EventMetadata>)creationalContext;
+        return contextImpl.getEventMetadata();
+    }
+
+    @Override
+    public Set<InjectionPoint> getInjectionPoints()
+    {
+        return Collections.emptySet();
+    }
+    
+    @Override
+    public void dispose(EventMetadata event)
+    {
+    }
+}
\ No newline at end of file

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=1589667&r1=1589666&r2=1589667&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java Thu Apr 24 11:34:04 2014
@@ -29,6 +29,7 @@ import org.apache.webbeans.component.Con
 import org.apache.webbeans.component.DecoratorMetadataBean;
 import org.apache.webbeans.component.EnterpriseBeanMarker;
 import org.apache.webbeans.component.EventBean;
+import org.apache.webbeans.component.EventMetadataBean;
 import org.apache.webbeans.component.ExtensionBean;
 import org.apache.webbeans.component.InjectionPointBean;
 import org.apache.webbeans.component.InjectionTargetBean;
@@ -54,7 +55,9 @@ import org.apache.webbeans.container.Bea
 import org.apache.webbeans.container.InjectionResolver;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
 import org.apache.webbeans.exception.WebBeansDeploymentException;
+
 import javax.enterprise.inject.spi.DefinitionException;
+
 import org.apache.webbeans.exception.inject.InconsistentSpecializationException;
 import org.apache.webbeans.inject.AlternativesManager;
 import org.apache.webbeans.plugins.PluginLoader;
@@ -107,6 +110,7 @@ import javax.enterprise.inject.spi.Proce
 import javax.enterprise.inject.spi.Producer;
 import javax.inject.Inject;
 import javax.inject.Named;
+
 import java.io.Serializable;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Constructor;
@@ -470,6 +474,15 @@ public final class WebBeansUtil
     }
 
     /**
+     * Creates a new event bean.
+     * @return new event bean
+     */
+    public EventMetadataBean getEventMetadataBean()
+    {
+        return new EventMetadataBean(webBeansContext);
+    }
+
+    /**
      * Creates a new bean metadata bean.
      * @return new  bean
      */