You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ar...@apache.org on 2013/01/19 11:57:27 UTC

svn commit: r1435521 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: component/ conversation/ decorator/ intercept/ portable/

Author: arne
Date: Sat Jan 19 10:57:27 2013
New Revision: 1435521

URL: http://svn.apache.org/viewvc?rev=1435521&view=rev
Log:
OWB-344: Fixed decoration of Conversation

Added:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ConversationProducer.java
Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorResolverRules.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java?rev=1435521&r1=1435520&r2=1435521&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java Sat Jan 19 10:57:27 2013
@@ -25,9 +25,11 @@ import java.util.Collections;
 import javax.enterprise.context.Conversation;
 import javax.enterprise.context.RequestScoped;
 import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedType;
 
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.conversation.ConversationImpl;
+import org.apache.webbeans.portable.ConversationProducer;
 import org.apache.webbeans.spi.ConversationService;
 import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.CollectionUtil;
@@ -37,7 +39,7 @@ import org.apache.webbeans.util.Collecti
  * @version $Rev$ $Date$
  *
  */
-public class ConversationBean extends InjectionTargetBean<Conversation>
+public class ConversationBean extends InjectionTargetBean<ConversationImpl> implements InterceptedMarker
 {
     /**
      * Default constructor.
@@ -47,14 +49,15 @@ public class ConversationBean extends In
     {
         super(webBeansContext,
               WebBeansType.CONVERSATION,
-              webBeansContext.getAnnotatedElementFactory().newAnnotatedType(Conversation.class),
+              webBeansContext.getAnnotatedElementFactory().newAnnotatedType(ConversationImpl.class),
               CollectionUtil.<Type>unmodifiableSet(Conversation.class, ConversationImpl.class, Object.class),
               AnnotationUtil.DEFAULT_AND_ANY_ANNOTATION,
               RequestScoped.class,
               "javax.enterprise.context.conversation",
-              Conversation.class,
+              ConversationImpl.class,
               Collections.<Class<? extends Annotation>>emptySet(),
               false);
         setEnabled(true);
+        setProducer(new ConversationProducer(getAnnotatedType(), webBeansContext));
     }
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java?rev=1435521&r1=1435520&r2=1435521&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java Sat Jan 19 10:57:27 2013
@@ -94,14 +94,6 @@ public abstract class InjectionTargetBea
     /**
      * {@inheritDoc}
      */
-    protected void destroyInstance(T instance, CreationalContext<T> creationalContext)
-    {
-        getInjectionTarget().preDestroy(instance);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
     public List<InterceptorData> getInterceptorStack()
     {
         return interceptorStack;

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java?rev=1435521&r1=1435520&r2=1435521&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java Sat Jan 19 10:57:27 2013
@@ -148,7 +148,7 @@ public class ConversationManager
      * @param sessionId session id
      * @return conversation
      */
-    public Conversation getPropogatedConversation(String conversationId, String sessionId)
+    public ConversationImpl getPropogatedConversation(String conversationId, String sessionId)
     {
         Asserts.assertNotNull(conversationId, "conversationId parameter can not be null");
         Asserts.assertNotNull(sessionId,"sessionId parameter can not be null");

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorResolverRules.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorResolverRules.java?rev=1435521&r1=1435520&r2=1435521&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorResolverRules.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorResolverRules.java Sat Jan 19 10:57:27 2013
@@ -31,7 +31,6 @@ public final class DecoratorResolverRule
         throw new UnsupportedOperationException();
     }
     
-    @SuppressWarnings("unchecked")
     public static boolean compareType(Type delegateType, Type beanType)
     {
         Asserts.assertNotNull(delegateType, "delegateType parameter is null");

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java?rev=1435521&r1=1435520&r2=1435521&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java Sat Jan 19 10:57:27 2013
@@ -321,6 +321,7 @@ public class InterceptorResolutionServic
         for (Type decoratedType : decoratedTypes)
         {
             if (decoratedType instanceof ParameterizedType) {
+                // TODO handle the case that method parameter types are TypeVariables
                 ParameterizedType parameterizedType = (ParameterizedType)decoratedType;
                 decoratedType = parameterizedType.getRawType();
             }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java?rev=1435521&r1=1435520&r2=1435521&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java Sat Jan 19 10:57:27 2013
@@ -91,7 +91,7 @@ public final class InterceptorUtil
     public List<Class> getReverseClassHierarchy(Class clazz)
     {
         List<Class> hierarchy = new ArrayList<Class>();
-        while (clazz != Object.class)
+        while (clazz != null && clazz != Object.class)
         {
             hierarchy.add(0, clazz);
             clazz = clazz.getSuperclass();

Added: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ConversationProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ConversationProducer.java?rev=1435521&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ConversationProducer.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ConversationProducer.java Sat Jan 19 10:57:27 2013
@@ -0,0 +1,79 @@
+/*
+ * 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 javax.enterprise.context.Conversation;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.InjectionPoint;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
+import org.apache.webbeans.conversation.ConversationImpl;
+import org.apache.webbeans.spi.ConversationService;
+
+public class ConversationProducer extends InjectionTargetImpl<ConversationImpl> {
+
+    private WebBeansContext webBeansContext;
+    
+    public ConversationProducer(AnnotatedType<ConversationImpl> annotatedType, WebBeansContext webBeansContext)
+    {
+        super(annotatedType, Collections.<InjectionPoint>emptySet(), webBeansContext, null, null);
+        this.webBeansContext = webBeansContext;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected ConversationImpl newInstance(CreationalContextImpl<ConversationImpl> creationalContext) {
+        ConversationImpl conversation = null;
+        //Gets conversation service
+        ConversationService conversationService = webBeansContext.getService(ConversationService.class);
+        //Gets conversation id
+        String conversationId = conversationService.getConversationId();       
+        //Gets session id that conversation is created
+        String sessionId = conversationService.getConversationSessionId();
+
+        //If conversation id is not null, this means that
+        //conversation is propogated
+        if (conversationId != null)
+        {
+            //Gets propogated conversation
+            conversation = webBeansContext.getConversationManager().getPropogatedConversation(conversationId,sessionId);
+        }
+        
+        if (conversation == null)
+        {
+            if(sessionId != null)
+            {
+                conversation = new ConversationImpl(conversationService.getConversationSessionId(), webBeansContext);
+            }
+            else
+            {
+                //Used in Tests
+                conversation = new ConversationImpl(webBeansContext);
+            }
+            
+        }
+
+        return conversation;
+    }
+}

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java?rev=1435521&r1=1435520&r2=1435521&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java Sat Jan 19 10:57:27 2013
@@ -164,7 +164,7 @@ public class InjectionTargetImpl<T> exte
     @Override
     public T produce(CreationalContext<T> creationalContext)
     {
-        T instance = new InjectableConstructor<T>(getConstructor().getJavaMember(), this, (CreationalContextImpl<T>) creationalContext).doInjection();
+        T instance = newInstance((CreationalContextImpl<T>) creationalContext);
 
         if (interceptorInfo != null)
         {
@@ -202,6 +202,7 @@ public class InjectionTargetImpl<T> exte
                     CreationalContextImpl<T> creationalContextImpl = (CreationalContextImpl<T>)creationalContext;
                     creationalContextImpl.putDelegate(delegate);
                     Object decoratorInstance = decorator.create((CreationalContext) creationalContext);
+                    creationalContextImpl.addDependent(instance, decorator, decoratorInstance);
                     instances.put(decorator, decoratorInstance);
                     delegate = pf.createProxyInstance(proxyClass, instance, new DecoratorHandler(interceptorInfo, instances, i - 1, instance));
                 }
@@ -214,6 +215,11 @@ public class InjectionTargetImpl<T> exte
 
         return instance;
     }
+    
+    protected T newInstance(CreationalContextImpl<T> creationalContext)
+    {
+        return new InjectableConstructor<T>(getConstructor().getJavaMember(), this, creationalContext).doInjection();
+    }
 
     @Override
     public void dispose(T instance)