You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2011/03/11 18:23:27 UTC

svn commit: r1080683 - in /myfaces/extensions/cdi/trunk: core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/ jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/

Author: gpetracek
Date: Fri Mar 11 17:23:27 2011
New Revision: 1080683

URL: http://svn.apache.org/viewvc?rev=1080683&view=rev
Log:
EXTCDI-156 bean-class to conversation-group cache

Modified:
    myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/ViewAccessScoped.java
    myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/WindowScoped.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/ConversationUtils.java

Modified: myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/ViewAccessScoped.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/ViewAccessScoped.java?rev=1080683&r1=1080682&r2=1080683&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/ViewAccessScoped.java (original)
+++ myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/ViewAccessScoped.java Fri Mar 11 17:23:27 2011
@@ -38,6 +38,10 @@ import static java.lang.annotation.Eleme
 @Inherited
 @Documented
 
+//internal hint:
+//this scope doesn't support conversation-groups.
+//if such a support is requested, we lose one of the caches.
+
 //cdi annotations
 @NormalScope(passivating=true)
 public @interface ViewAccessScoped

Modified: myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/WindowScoped.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/WindowScoped.java?rev=1080683&r1=1080682&r2=1080683&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/WindowScoped.java (original)
+++ myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/scope/conversation/WindowScoped.java Fri Mar 11 17:23:27 2011
@@ -38,6 +38,10 @@ import static java.lang.annotation.Eleme
 @Inherited
 @Documented
 
+//internal hint:
+//this scope doesn't support conversation-groups.
+//if such a support is requested, we lose one of the caches.
+
 //cdi annotations
 @NormalScope(passivating=true)
 public @interface WindowScoped

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/ConversationUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/ConversationUtils.java?rev=1080683&r1=1080682&r2=1080683&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/ConversationUtils.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/ConversationUtils.java Fri Mar 11 17:23:27 2011
@@ -70,6 +70,9 @@ public abstract class ConversationUtils
     private static Map<Class, Class<? extends Annotation>> conversationGroupToScopeCache =
             new ConcurrentHashMap<Class, Class<? extends Annotation>>();
 
+    private static Map<Class, Class> beanClassToConversationGroupCache =
+            new ConcurrentHashMap<Class, Class>();
+
     private static final String REDIRECT_PERFORMED_KEY = WindowHandler.class.getName() + "redirect:KEY";
 
     private ConversationUtils()
@@ -84,22 +87,40 @@ public abstract class ConversationUtils
      */
     public static Class getConversationGroup(Bean<?> bean)
     {
-        Class<? extends Annotation> scopeType = bean.getScope();
+        Class beanClass = bean.getBeanClass();
+        Class foundGroup = beanClassToConversationGroupCache.get(beanClass);
 
-        //TODO check if we should support conversation groups for @WindowScoped
-        if(WindowScoped.class.isAssignableFrom(scopeType))
+        if(foundGroup != null)
         {
-            return WindowScoped.class;
+            return foundGroup;
         }
 
-        ConversationGroup conversationGroupAnnotation = findConversationGroupAnnotation(bean);
+        try
+        {
+            Class<? extends Annotation> scopeType = bean.getScope();
+
+            //TODO check if we should support conversation groups for @WindowScoped
+            if(WindowScoped.class.isAssignableFrom(scopeType))
+            {
+                foundGroup = WindowScoped.class;
+                return foundGroup;
+            }
+
+            ConversationGroup conversationGroupAnnotation = findConversationGroupAnnotation(bean);
 
-        if(conversationGroupAnnotation == null)
+            if(conversationGroupAnnotation == null)
+            {
+                foundGroup = beanClass;
+                return foundGroup;
+            }
+
+            foundGroup = conversationGroupAnnotation.value();
+            return foundGroup;
+        }
+        finally
         {
-            return bean.getBeanClass();
+            beanClassToConversationGroupCache.put(beanClass, foundGroup);
         }
-
-        return conversationGroupAnnotation.value();
     }
 
     private static ConversationGroup findConversationGroupAnnotation(Bean<?> bean)