You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by st...@apache.org on 2010/07/27 20:04:12 UTC

svn commit: r979787 - in /myfaces/extensions/cdi/trunk: core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/utils/ jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/

Author: struberg
Date: Tue Jul 27 18:04:11 2010
New Revision: 979787

URL: http://svn.apache.org/viewvc?rev=979787&view=rev
Log:
EXTCDI-33 special performance tuning for @ViewAccessScoped beans

Added:
    myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/utils/DefaultLiteral.java
Modified:
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultConversationKey.java

Added: myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/utils/DefaultLiteral.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/utils/DefaultLiteral.java?rev=979787&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/utils/DefaultLiteral.java (added)
+++ myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/utils/DefaultLiteral.java Tue Jul 27 18:04:11 2010
@@ -0,0 +1,30 @@
+/*
+ * 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.myfaces.extensions.cdi.core.impl.utils;
+
+import javax.enterprise.inject.Default;
+import javax.enterprise.util.AnnotationLiteral;
+
+/**
+ * Literal for the {@link Default} annotation.
+ * <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+public class DefaultLiteral extends AnnotationLiteral<Default> implements Default
+{
+}
\ No newline at end of file

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultConversationKey.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultConversationKey.java?rev=979787&r1=979786&r2=979787&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultConversationKey.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultConversationKey.java Tue Jul 27 18:04:11 2010
@@ -18,8 +18,8 @@
  */
 package org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation;
 
+import org.apache.myfaces.extensions.cdi.core.impl.utils.DefaultLiteral;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.ConversationKey;
-import org.apache.myfaces.extensions.cdi.core.api.tools.annotate.DefaultAnnotation;
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowScoped;
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ViewAccessScoped;
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ConversationGroup;
@@ -45,14 +45,15 @@ class DefaultConversationKey implements 
     private static final String INVALID_VIEW_ACCESS_SCOPE_DEFINITION =
             ": It isn't allowed to use qualifiers in combination with " + WindowScoped.class.getName();
 
-    private final Class<?> groupKey;
-    private final Set<Annotation> qualifiers = new HashSet<Annotation>();
+    private Class<?> groupKey;
+    private Set<Annotation> qualifiers;
 
-    //TODO remove as soon as the new version is tested
-    //old version
-    //workaround
-    //private static final ViewAccessScoped VIEW_ACCESS_SCOPED = DefaultAnnotation.of(ViewAccessScoped.class);
-    private static final Default DEFAULT_QUALIFIER = DefaultAnnotation.of(Default.class);
+    private final static Annotation DEFAULT_LITERAL = new DefaultLiteral();
+
+    private final static Set<Annotation> DEFAULT_QUALIFIERS = new HashSet<Annotation>();
+    static {
+        DEFAULT_QUALIFIERS.add(DEFAULT_LITERAL);
+    }
 
     //workaround
     private boolean viewAccessScopedAnnotationPresent;
@@ -73,26 +74,29 @@ class DefaultConversationKey implements 
             }
             else if(Any.class.isAssignableFrom(annotationType) ||
                     Default.class.isAssignableFrom(annotationType) ||
-                    Named.class.isAssignableFrom(annotationType) && "".equals(((Named)qualifier).value()) ||
+                    Named.class.isAssignableFrom(annotationType)   ||
                     ConversationGroup.class.isAssignableFrom(annotationType))
             {
                 //won't be used for this key!
             }
             else
             {
+                if (this.qualifiers == null)
+                {
+                    this.qualifiers = new HashSet<Annotation>();
+                }
                 this.qualifiers.add(qualifier);
             }
         }
 
-        //for easier manual usage of the WindowContextManager
-        if(this.qualifiers.isEmpty())
-        {
-            this.qualifiers.add(DEFAULT_QUALIFIER);
-        }
-
+        //X TODO drop and move validation to deploy time!
         validate();
     }
 
+
+    /**
+     * @deprecated TODO this must be validated at deploy time instead !
+     */
     private void validate()
     {
         boolean defaultQualifierUsed = isDefaultQualifier();
@@ -126,6 +130,11 @@ class DefaultConversationKey implements 
 
     private boolean isDefaultQualifier()
     {
+        if (qualifiers == null)
+        {
+            return true;
+        }
+
         for(Annotation qualifier : this.qualifiers)
         {
             if(Default.class.isAssignableFrom(qualifier.getClass()))
@@ -143,6 +152,10 @@ class DefaultConversationKey implements 
 
     public Set<Annotation> getQualifiers()
     {
+        if (qualifiers == null)
+        {
+            return Collections.EMPTY_SET;
+        }
         return Collections.unmodifiableSet(this.qualifiers);
     }
 
@@ -164,6 +177,15 @@ class DefaultConversationKey implements 
         {
             return false;
         }
+        if (qualifiers == null && that.qualifiers == null)
+        {
+            return true;
+        }
+        if (qualifiers != null && that.qualifiers == null)
+        {
+            return false;
+        }
+
         if (!qualifiers.equals(that.qualifiers))
         {
             return false;
@@ -176,7 +198,10 @@ class DefaultConversationKey implements 
     public int hashCode()
     {
         int result = groupKey.hashCode();
-        result = 31 * result + qualifiers.hashCode();
+        if (qualifiers != null)
+        {
+            result = 31 * result + qualifiers.hashCode();
+        }
         return result;
     }
 }