[jboss-cvs] JBossAS SVN: r109751 - in projects/metadata/ejb/trunk/src: main/java/org/jboss/metadata/ejb/jboss and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Dec 7 09:12:05 EST 2010


Author: wolfc
Date: 2010-12-07 09:12:03 -0500 (Tue, 07 Dec 2010)
New Revision: 109751

Added:
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/ConcurrentMethodsMetaData.java
Removed:
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/ConcurrentMethodsCollectionToMapAdapter.java
Modified:
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AccessTimeoutMethodProcessor.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/LockMethodProcessor.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/StatefulProcessor.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBean31MetaData.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/ConcurrentMethodMetaData.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/NamedMethodMetaData.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java
   projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/concurrency/unit/ConcurrencyManagementTestCase.java
Log:
JBMETA-320: added scanning on stateful and best match processing

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AccessTimeoutMethodProcessor.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AccessTimeoutMethodProcessor.java	2010-12-07 13:38:48 UTC (rev 109750)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/AccessTimeoutMethodProcessor.java	2010-12-07 14:12:03 UTC (rev 109751)
@@ -21,13 +21,6 @@
 */
 package org.jboss.metadata.annotation.creator.ejb.jboss;
 
-import java.lang.annotation.Annotation;
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Method;
-import java.util.Collection;
-
-import javax.ejb.AccessTimeout;
-
 import org.jboss.metadata.annotation.creator.AbstractFinderUser;
 import org.jboss.metadata.annotation.creator.Processor;
 import org.jboss.metadata.annotation.creator.ProcessorUtils;
@@ -35,9 +28,16 @@
 import org.jboss.metadata.ejb.jboss.JBossSessionBean31MetaData;
 import org.jboss.metadata.ejb.spec.AccessTimeoutMetaData;
 import org.jboss.metadata.ejb.spec.ConcurrentMethodMetaData;
+import org.jboss.metadata.ejb.spec.ConcurrentMethodsMetaData;
 import org.jboss.metadata.ejb.spec.MethodParametersMetaData;
 import org.jboss.metadata.ejb.spec.NamedMethodMetaData;
 
+import javax.ejb.AccessTimeout;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+import java.util.Collection;
+
 /**
  * Processes method level {@link AccessTimeout} annotation and creates metadata out of it
  *
@@ -79,6 +79,14 @@
       {
          return;
       }
+      
+      ConcurrentMethodsMetaData concurrentMethods = metaData.getConcurrentMethods();
+      if(concurrentMethods == null)
+      {
+         concurrentMethods = new ConcurrentMethodsMetaData();
+         metaData.setConcurrentMethods(concurrentMethods);
+      }
+
       // create an AccessTimeoutMetaData
       AccessTimeoutMetaData accessTimeoutMetaData = new AccessTimeoutMetaData();
       accessTimeoutMetaData.setTimeout(accessTimeout.value());
@@ -100,13 +108,13 @@
       }
       namedMethod.setMethodParams(methodParamsMetaData);
       // get the concurrent method for this named method
-      ConcurrentMethodMetaData concurrentMethod = metaData.getConcurrentMethods().get(namedMethod);
+      ConcurrentMethodMetaData concurrentMethod = metaData.getConcurrentMethods().find(namedMethod);
       if (concurrentMethod == null)
       {
          concurrentMethod = new ConcurrentMethodMetaData();
          // set the named method in the concurrent method metadata
          concurrentMethod.setMethod(namedMethod);
-         metaData.getConcurrentMethods().put(namedMethod, concurrentMethod);
+         metaData.getConcurrentMethods().add(concurrentMethod);
       }
       // set the access timeout metadata on the concurrent method metadata
       concurrentMethod.setAccessTimeout(accessTimeoutMetaData);

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/LockMethodProcessor.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/LockMethodProcessor.java	2010-12-07 13:38:48 UTC (rev 109750)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/LockMethodProcessor.java	2010-12-07 14:12:03 UTC (rev 109751)
@@ -21,22 +21,22 @@
 */
 package org.jboss.metadata.annotation.creator.ejb.jboss;
 
-import java.lang.annotation.Annotation;
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Method;
-import java.util.Collection;
-
-import javax.ejb.Lock;
-
 import org.jboss.metadata.annotation.creator.AbstractFinderUser;
+import org.jboss.metadata.annotation.creator.EjbProcessorUtils;
 import org.jboss.metadata.annotation.creator.Processor;
 import org.jboss.metadata.annotation.creator.ProcessorUtils;
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
 import org.jboss.metadata.ejb.jboss.JBossSessionBean31MetaData;
 import org.jboss.metadata.ejb.spec.ConcurrentMethodMetaData;
-import org.jboss.metadata.ejb.spec.MethodParametersMetaData;
+import org.jboss.metadata.ejb.spec.ConcurrentMethodsMetaData;
 import org.jboss.metadata.ejb.spec.NamedMethodMetaData;
 
+import javax.ejb.Lock;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+import java.util.Collection;
+
 /**
  * Processes method level {@link Lock} annotation and creates metadata out of it
  *
@@ -75,23 +75,25 @@
          return;
       }
 
+      ConcurrentMethodsMetaData concurrentMethods = metaData.getConcurrentMethods();
+      if(concurrentMethods == null)
+      {
+         concurrentMethods = new ConcurrentMethodsMetaData();
+         metaData.setConcurrentMethods(concurrentMethods);
+      }
+      
       // create a named method metadata for this method
       NamedMethodMetaData namedMethod = new NamedMethodMetaData();
       namedMethod.setName(method.getName());
-      MethodParametersMetaData methodParamsMetaData = new MethodParametersMetaData();
-      for (Class<?> parameterType : method.getParameterTypes())
-      {
-         methodParamsMetaData.add(parameterType.getName());
-      }
-      namedMethod.setMethodParams(methodParamsMetaData);
+      namedMethod.setMethodParams(EjbProcessorUtils.getMethodParameters(method));
       // get the concurrent method for this named method
-      ConcurrentMethodMetaData concurrentMethod = metaData.getConcurrentMethods().get(namedMethod);
+      ConcurrentMethodMetaData concurrentMethod = metaData.getConcurrentMethods().find(namedMethod);
       if (concurrentMethod == null)
       {
          concurrentMethod = new ConcurrentMethodMetaData();
          // set the named method in the concurrent method metadata
          concurrentMethod.setMethod(namedMethod);
-         metaData.getConcurrentMethods().put(namedMethod, concurrentMethod);
+         metaData.getConcurrentMethods().add(concurrentMethod);
       }
       // if the lock type has been set on the annotation, then set it in the concurrent method metadata
       if (lock.value() != null)

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/StatefulProcessor.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/StatefulProcessor.java	2010-12-07 13:38:48 UTC (rev 109750)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/StatefulProcessor.java	2010-12-07 14:12:03 UTC (rev 109751)
@@ -57,6 +57,8 @@
       // concurrency management annotation is applicable for stateful bean
       addTypeProcessor(new ConcurrencyManagementProcessor(finder));
 
+      addTypeProcessor(new AccessTimeoutClassProcessor(finder));      
+      addMethodProcessor(new AccessTimeoutMethodProcessor(finder));
    }
 
    @Override

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBean31MetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBean31MetaData.java	2010-12-07 13:38:48 UTC (rev 109750)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBean31MetaData.java	2010-12-07 14:12:03 UTC (rev 109751)
@@ -21,24 +21,12 @@
  */
 package org.jboss.metadata.ejb.jboss;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.ejb.ConcurrencyManagementType;
-import javax.ejb.LockType;
-import javax.ejb.Schedule;
-import javax.ejb.Startup;
-import javax.xml.bind.annotation.XmlElement;
-
 import org.jboss.metadata.common.ejb.IScheduleTarget;
 import org.jboss.metadata.common.ejb.ITimeoutTarget;
 import org.jboss.metadata.ejb.spec.AccessTimeoutMetaData;
 import org.jboss.metadata.ejb.spec.AsyncMethodsMetaData;
 import org.jboss.metadata.ejb.spec.ConcurrentMethodMetaData;
+import org.jboss.metadata.ejb.spec.ConcurrentMethodsMetaData;
 import org.jboss.metadata.ejb.spec.EnterpriseBeanMetaData;
 import org.jboss.metadata.ejb.spec.NamedMethodMetaData;
 import org.jboss.metadata.ejb.spec.SessionBean31MetaData;
@@ -46,6 +34,18 @@
 import org.jboss.metadata.ejb.spec.TimerMetaData;
 import org.jboss.metadata.merge.MergeUtil;
 
+import javax.ejb.ConcurrencyManagementType;
+import javax.ejb.LockType;
+import javax.ejb.Schedule;
+import javax.ejb.Startup;
+import javax.xml.bind.annotation.XmlElement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 /**
  * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
  * @version $Revision: $
@@ -69,7 +69,7 @@
    /**
     * Concurrent methods of this bean
     */
-   private Map<NamedMethodMetaData, ConcurrentMethodMetaData> concurrentMethods;
+   private ConcurrentMethodsMetaData concurrentMethods;
 
    /**
     * Bean level access timeout
@@ -197,17 +197,12 @@
     * @param concurrentMethods
     * @throws IllegalArgumentException If the passed <code>concurrentMethods</code> is null
     */
-   public void setConcurrentMethods(Set<ConcurrentMethodMetaData> concurrentMethods)
+   public void setConcurrentMethods(ConcurrentMethodsMetaData concurrentMethods)
    {
       if (concurrentMethods == null)
-      {
          throw new IllegalArgumentException("Concurrent methods cannot be set to null");
-      }
-      this.concurrentMethods = new HashMap<NamedMethodMetaData, ConcurrentMethodMetaData>();
-      for (ConcurrentMethodMetaData concurrentMethod : concurrentMethods)
-      {
-         this.concurrentMethods.put(concurrentMethod.getMethod(), concurrentMethod);
-      }
+
+      this.concurrentMethods = concurrentMethods;
    }
 
    /**
@@ -216,12 +211,8 @@
     * there are no concurrent methods for this bean
     * @return
     */
-   public Map<NamedMethodMetaData, ConcurrentMethodMetaData> getConcurrentMethods()
+   public ConcurrentMethodsMetaData getConcurrentMethods()
    {
-      if (this.concurrentMethods == null)
-      {
-         this.concurrentMethods = new HashMap<NamedMethodMetaData, ConcurrentMethodMetaData>();
-      }
       return this.concurrentMethods;
    }
 
@@ -400,7 +391,12 @@
       this.setAfterBeginMethod(override(joverride != null ? joverride.getAfterBeginMethod() : null, soriginal != null ? soriginal.getAfterBeginMethod() : null));
       this.setBeforeCompletionMethod(override(joverride != null ? joverride.getBeforeCompletionMethod() : null, soriginal != null ? soriginal.getBeforeCompletionMethod() : null));
       this.setAfterCompletionMethod(override(joverride != null ? joverride.getAfterCompletionMethod() : null, soriginal != null ? soriginal.getAfterCompletionMethod() : null));
-      
+
+      this.concurrentMethods = new ConcurrentMethodsMetaData();
+      this.concurrentMethods.merge(joverride != null ? joverride.getConcurrentMethods() : null, soriginal != null ? soriginal.getConcurrentMethods() : null);
+
+      this.beanLevelAccessTimeout = override(joverride != null ? joverride.getAccessTimeout() : null, soriginal != null ? soriginal.getAccessTimeout() : null);
+
       if (joverride != null)
       {
          this.noInterfaceBean = joverride.isNoInterfaceBean();
@@ -409,22 +405,10 @@
          {
             this.concurrencyManagementType = joverride.concurrencyManagementType;
          }
-         if (joverride.concurrentMethods != null)
-         {
-            if (this.concurrentMethods == null)
-            {
-               this.concurrentMethods = new HashMap<NamedMethodMetaData, ConcurrentMethodMetaData>();
-            }
-            this.concurrentMethods.putAll(joverride.concurrentMethods);
-         }
          if (joverride.beanLevelLockType != null)
          {
             this.beanLevelLockType = joverride.beanLevelLockType;
          }
-         if (joverride.beanLevelAccessTimeout != null)
-         {
-            this.beanLevelAccessTimeout = joverride.beanLevelAccessTimeout;
-         }
          if (joverride.dependsOn != null)
          {
             this.dependsOn = joverride.dependsOn;
@@ -438,22 +422,10 @@
          {
             this.concurrencyManagementType = soriginal.getConcurrencyManagementType();
          }
-         if (soriginal.concurrentMethods != null)
-         {
-            if (this.concurrentMethods == null)
-            {
-               this.concurrentMethods = new HashMap<NamedMethodMetaData, ConcurrentMethodMetaData>();
-            }
-            this.concurrentMethods.putAll(soriginal.concurrentMethods);
-         }
          if (soriginal.beanLevelLockType != null)
          {
             this.beanLevelLockType = soriginal.beanLevelLockType;
          }
-         if (soriginal.beanLevelAccessTimeout != null)
-         {
-            this.beanLevelAccessTimeout = soriginal.beanLevelAccessTimeout;
-         }
          if (soriginal.dependsOn != null)
          {
             this.dependsOn = soriginal.dependsOn;
@@ -481,6 +453,11 @@
       this.setBeforeCompletionMethod(override(joverride != null ? joverride.getBeforeCompletionMethod() : null, soriginal != null ? soriginal.getBeforeCompletionMethod() : null));
       this.setAfterCompletionMethod(override(joverride != null ? joverride.getAfterCompletionMethod() : null, soriginal != null ? soriginal.getAfterCompletionMethod() : null));
 
+      this.concurrentMethods = new ConcurrentMethodsMetaData();
+      this.concurrentMethods.merge(joverride != null ? joverride.getConcurrentMethods() : null, soriginal != null ? soriginal.getConcurrentMethods() : null);
+      
+      this.beanLevelAccessTimeout = override(joverride != null ? joverride.getAccessTimeout() : null, soriginal != null ? soriginal.getAccessTimeout() : null);
+
       if (joverride != null)
       {
          this.noInterfaceBean = joverride.isNoInterfaceBean();
@@ -489,22 +466,10 @@
          {
             this.concurrencyManagementType = joverride.concurrencyManagementType;
          }
-         if (joverride.concurrentMethods != null)
-         {
-            if (this.concurrentMethods == null)
-            {
-               this.concurrentMethods = new HashMap<NamedMethodMetaData, ConcurrentMethodMetaData>();
-            }
-            this.concurrentMethods.putAll(joverride.concurrentMethods);
-         }
          if (joverride.beanLevelLockType != null)
          {
             this.beanLevelLockType = joverride.beanLevelLockType;
          }
-         if (joverride.beanLevelAccessTimeout != null)
-         {
-            this.beanLevelAccessTimeout = joverride.beanLevelAccessTimeout;
-         }
          if (joverride.dependsOn != null)
          {
             this.dependsOn = joverride.dependsOn;
@@ -519,22 +484,10 @@
          {
             this.concurrencyManagementType = soriginal.getConcurrencyManagementType();
          }
-         if (soriginal.getConcurrentMethods() != null)
-         {
-            if (this.concurrentMethods == null)
-            {
-               this.concurrentMethods = new HashMap<NamedMethodMetaData, ConcurrentMethodMetaData>();
-            }
-            this.concurrentMethods.putAll(soriginal.getConcurrentMethods());
-         }
          if (soriginal.getLockType() != null)
          {
             this.beanLevelLockType = soriginal.getLockType();
          }
-         if (soriginal.getAccessTimeout() != null)
-         {
-            this.beanLevelAccessTimeout = soriginal.getAccessTimeout();
-         }
          if (soriginal.getDependsOn() != null)
          {
             this.dependsOn = soriginal.getDependsOn();

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/ConcurrentMethodMetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/ConcurrentMethodMetaData.java	2010-12-07 13:38:48 UTC (rev 109750)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/ConcurrentMethodMetaData.java	2010-12-07 14:12:03 UTC (rev 109751)
@@ -21,13 +21,12 @@
 */
 package org.jboss.metadata.ejb.spec;
 
-import java.io.Serializable;
-
 import javax.ejb.Lock;
 import javax.ejb.LockType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import java.io.Serializable;
 
 /**
  * Metadata for methods which specify {@link Lock} for concurrency management
@@ -103,4 +102,9 @@
       }
       return this.method.equals(anotherConcurrentMethod.method);
    }
+
+   public boolean matches(String methodName, String params[])
+   {
+      return getMethod().matches(methodName, params);
+   }
 }

Deleted: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/ConcurrentMethodsCollectionToMapAdapter.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/ConcurrentMethodsCollectionToMapAdapter.java	2010-12-07 13:38:48 UTC (rev 109750)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/ConcurrentMethodsCollectionToMapAdapter.java	2010-12-07 14:12:03 UTC (rev 109751)
@@ -1,85 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-*/
-package org.jboss.metadata.ejb.spec;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-
-/**
- * An implementation of {@link XmlAdapter} responsible for converting a {@link Collection} of
- * {@link ConcurrentMethodMetaData} to a {@link Map} whose key is a {@link NamedMethodMetaData}
- * (returned by {@link ConcurrentMethodMetaData#getMethod()}) and the value is the {@link ConcurrentMethodMetaData} 
- * and vice-versa
- *
- * @author Jaikiran Pai
- * @version $Revision: $
- */
-public class ConcurrentMethodsCollectionToMapAdapter
-      extends
-         XmlAdapter<Collection<ConcurrentMethodMetaData>, Map<NamedMethodMetaData, ConcurrentMethodMetaData>>
-{
-
-   /**
-    * Returns the collection of {@link ConcurrentMethodMetaData} from the passed <code>concurrentMethods</code>
-    * {@link Map}
-    * 
-    * @see javax.xml.bind.annotation.adapters.XmlAdapter#marshal(java.lang.Object)
-    */
-   @Override
-   public Collection<ConcurrentMethodMetaData> marshal(
-         Map<NamedMethodMetaData, ConcurrentMethodMetaData> concurrentMethods) throws Exception
-   {
-      if (concurrentMethods == null)
-      {
-         return Collections.EMPTY_SET;
-      }
-      return new HashSet<ConcurrentMethodMetaData>(concurrentMethods.values());
-   }
-
-   /**
-    * Converts the <code>concurrentMethods</code> into a {@link Map} whose key is a {@link NamedMethodMetaData}
-    * (returned by {@link ConcurrentMethodMetaData#getMethod()}) and the value is the {@link ConcurrentMethodMetaData} 
-    * 
-    * @see javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal(java.lang.Object)
-    */
-   @Override
-   public Map<NamedMethodMetaData, ConcurrentMethodMetaData> unmarshal(
-         Collection<ConcurrentMethodMetaData> concurrentMethods) throws Exception
-   {
-      if (concurrentMethods == null)
-      {
-         return Collections.EMPTY_MAP;
-      }
-      Map<NamedMethodMetaData, ConcurrentMethodMetaData> concurrentMethodsMap = new HashMap<NamedMethodMetaData, ConcurrentMethodMetaData>();
-      for (ConcurrentMethodMetaData concurrentMethod : concurrentMethods)
-      {
-         concurrentMethodsMap.put(concurrentMethod.getMethod(), concurrentMethod);
-      }
-      return concurrentMethodsMap;
-   }
-
-}

Added: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/ConcurrentMethodsMetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/ConcurrentMethodsMetaData.java	                        (rev 0)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/ConcurrentMethodsMetaData.java	2010-12-07 14:12:03 UTC (rev 109751)
@@ -0,0 +1,93 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright (c) 2010, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.metadata.ejb.spec;
+
+import org.jboss.metadata.javaee.support.IdMetaData;
+import org.jboss.metadata.merge.MergeUtil;
+
+import java.util.ArrayList;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ */
+public class ConcurrentMethodsMetaData extends ArrayList<ConcurrentMethodMetaData> implements IdMetaData
+{
+   private static final long serialVersionUID = 1L;
+   
+   private String id;
+
+   public ConcurrentMethodMetaData bestMatch(String methodName, String params[])
+   {
+      ConcurrentMethodMetaData bestMatch = null;
+      for (ConcurrentMethodMetaData method : this)
+      {
+         if (method.matches(methodName, params))
+         {
+            // No previous best match
+            if (bestMatch == null)
+               bestMatch = method;
+            // better match because the previous was a wildcard
+            else if ("*".equals(bestMatch.getMethod().getMethodName()))
+               bestMatch = method;
+            // better because it specifies parameters
+            else if (method.getMethod().getMethodParams() != null)
+               bestMatch = method;
+         }
+      }
+      return bestMatch;
+   }
+
+   public ConcurrentMethodMetaData find(NamedMethodMetaData equivalent)
+   {
+      for (ConcurrentMethodMetaData method : this)
+      {
+         if (method.getMethod().equals(equivalent))
+         {
+            return method;
+         }
+      }
+      return null;
+   }
+
+   @Deprecated
+   public ConcurrentMethodMetaData get(NamedMethodMetaData key)
+   {
+      return find(key);
+   }
+
+   @Override
+   public String getId()
+   {
+      return id;
+   }
+
+   @Override
+   public void setId(String id)
+   {
+      this.id = id;
+   }
+
+   public void merge(ConcurrentMethodsMetaData override, ConcurrentMethodsMetaData original)
+   {
+      MergeUtil.merge(this, override, original);
+   }
+}

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/NamedMethodMetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/NamedMethodMetaData.java	2010-12-07 13:38:48 UTC (rev 109750)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/NamedMethodMetaData.java	2010-12-07 14:12:03 UTC (rev 109751)
@@ -21,10 +21,10 @@
 */
 package org.jboss.metadata.ejb.spec;
 
+import org.jboss.metadata.javaee.support.NamedMetaData;
+
 import javax.xml.bind.annotation.XmlType;
 
-import org.jboss.metadata.javaee.support.NamedMetaData;
-
 /**
  * NamedMethodMetaData.
  * 
@@ -130,4 +130,36 @@
       
       return false;
    }
+
+   public boolean matches(String methodName, String params[])
+   {
+      // the wildcard matches everything
+      if(getMethodName().equals("*"))
+         return true;
+
+      // Method name does not match
+      if(!getMethodName().equals(methodName))
+         return false;
+
+      // No parameters to match
+      if (methodParams == null)
+         return true;
+
+      // Wrong number of paremters
+      if(params == null && methodParams.size() > 0)
+         return false;
+      else if(params != null && params.length != methodParams.size())
+         return false;
+
+      // Check each parameter
+      int i = 0;
+      for (String param : methodParams)
+      {
+         if (param.equals(params[i++]) == false)
+            return false;
+      }
+
+      // We match
+      return true;
+   }
 }

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java	2010-12-07 13:38:48 UTC (rev 109750)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java	2010-12-07 14:12:03 UTC (rev 109751)
@@ -68,7 +68,7 @@
    /**
     * Concurrent methods against each {@link NamedMethodMetaData}
     */
-   private Map<NamedMethodMetaData, ConcurrentMethodMetaData> concurrentMethods;
+   private ConcurrentMethodsMetaData concurrentMethods;
 
    /**
     * The lock type that is set at the bean level
@@ -216,8 +216,7 @@
     * @throws IllegalArgumentException If the passed <code>concurrentMethods</code> is null
     */
    @XmlElement(name = "concurrent-method", required = false)
-   @XmlJavaTypeAdapter (ConcurrentMethodsCollectionToMapAdapter.class)
-   public void setConcurrentMethods(Map<NamedMethodMetaData, ConcurrentMethodMetaData> concurrentMethods)
+   public void setConcurrentMethods(ConcurrentMethodsMetaData concurrentMethods)
    {
       this.concurrentMethods = concurrentMethods;
    }
@@ -228,12 +227,8 @@
     * there are no concurrent methods for this bean
     * @return
     */
-   public Map<NamedMethodMetaData, ConcurrentMethodMetaData> getConcurrentMethods()
+   public ConcurrentMethodsMetaData getConcurrentMethods()
    {
-      if (this.concurrentMethods == null)
-      {
-         this.concurrentMethods = new HashMap<NamedMethodMetaData, ConcurrentMethodMetaData>();
-      }
       return this.concurrentMethods;
    }
 
@@ -415,6 +410,9 @@
       this.setBeforeCompletionMethod(override(override != null ? override.getBeforeCompletionMethod() : null, original != null ? original.getBeforeCompletionMethod() : null));
       this.setAfterCompletionMethod(override(override != null ? override.getAfterCompletionMethod() : null, original != null ? original.getAfterCompletionMethod() : null));
 
+      this.concurrentMethods = new ConcurrentMethodsMetaData();
+      this.concurrentMethods.merge(override != null ? override.getConcurrentMethods() : null, original != null ? original.getConcurrentMethods() : null);
+
       if (override != null)
       {
          if (override.localBean != null)
@@ -429,14 +427,6 @@
          {
             this.concurrencyManagementType = override.concurrencyManagementType;
          }
-         if (override.concurrentMethods != null)
-         {
-            if (this.concurrentMethods == null)
-            {
-               this.concurrentMethods = new HashMap<NamedMethodMetaData, ConcurrentMethodMetaData>();
-            }
-            this.concurrentMethods.putAll(override.concurrentMethods);
-         }
          if (override.beanLevelLockType != null)
          {
             this.beanLevelLockType = override.beanLevelLockType;
@@ -464,14 +454,6 @@
          {
             this.concurrencyManagementType = original.concurrencyManagementType;
          }
-         if (original.concurrentMethods != null)
-         {
-            if (this.concurrentMethods == null)
-            {
-               this.concurrentMethods = new HashMap<NamedMethodMetaData, ConcurrentMethodMetaData>();
-            }
-            this.concurrentMethods.putAll(original.concurrentMethods);
-         }
          if (original.beanLevelLockType != null)
          {
             this.beanLevelLockType = original.beanLevelLockType;

Modified: projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/concurrency/unit/ConcurrencyManagementTestCase.java
===================================================================
--- projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/concurrency/unit/ConcurrencyManagementTestCase.java	2010-12-07 13:38:48 UTC (rev 109750)
+++ projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/concurrency/unit/ConcurrencyManagementTestCase.java	2010-12-07 14:12:03 UTC (rev 109751)
@@ -21,23 +21,6 @@
 */
 package org.jboss.metadata.ejb.test.concurrency.unit;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.util.Collection;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-import javax.ejb.ConcurrencyManagement;
-import javax.ejb.ConcurrencyManagementType;
-import javax.ejb.Lock;
-import javax.ejb.LockType;
-
 import org.jboss.metadata.annotation.creator.ejb.jboss.JBoss50Creator;
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
 import org.jboss.metadata.annotation.finder.DefaultAnnotationFinder;
@@ -46,6 +29,7 @@
 import org.jboss.metadata.ejb.jboss.JBossSessionBean31MetaData;
 import org.jboss.metadata.ejb.spec.AccessTimeoutMetaData;
 import org.jboss.metadata.ejb.spec.ConcurrentMethodMetaData;
+import org.jboss.metadata.ejb.spec.ConcurrentMethodsMetaData;
 import org.jboss.metadata.ejb.spec.EjbJar31MetaData;
 import org.jboss.metadata.ejb.spec.EjbJarMetaData;
 import org.jboss.metadata.ejb.spec.EnterpriseBeanMetaData;
@@ -70,6 +54,21 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import javax.ejb.ConcurrencyManagement;
+import javax.ejb.ConcurrencyManagementType;
+import javax.ejb.Lock;
+import javax.ejb.LockType;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.util.Collection;
+import java.util.concurrent.TimeUnit;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
 /**
  * Test that the metadata for concurrency management related annotations and 
  * their equivalent xml elements are processed correctly
@@ -193,15 +192,14 @@
       this.assertSessionBean(enterpriseBean);
       SessionBean31MetaData sessionBean = (SessionBean31MetaData) enterpriseBean;
 
-      Map<NamedMethodMetaData, ConcurrentMethodMetaData> concurrentMethods = sessionBean.getConcurrentMethods();
+      ConcurrentMethodsMetaData concurrentMethods = sessionBean.getConcurrentMethods();
       assertNotNull("Concurrent methods metdata was null for bean " + beanName, concurrentMethods);
 
       NamedMethodMetaData allMethods = new NamedMethodMetaData();
       allMethods.setMethodName("*");
 
-      assertTrue("Concurrent methods metadata does not contain method '*'", concurrentMethods.containsKey(allMethods));
-
-      ConcurrentMethodMetaData concurrentMethodMetaData = concurrentMethods.get(allMethods);
+      ConcurrentMethodMetaData concurrentMethodMetaData = concurrentMethods.find(allMethods);
+      assertNotNull("Concurrent methods metadata does not contain method '*'", concurrentMethodMetaData);
       assertEquals("Unexpected locktype on method", LockType.READ, concurrentMethodMetaData.getLockType());
 
       AccessTimeoutMetaData accessTimeout = concurrentMethodMetaData.getAccessTimeout();
@@ -231,8 +229,7 @@
       this.assertSessionBean(bean);
       SessionBean31MetaData oneMethodWriteLockBean = (SessionBean31MetaData) bean;
 
-      Map<NamedMethodMetaData, ConcurrentMethodMetaData> concurrentMethodsOnBean = oneMethodWriteLockBean
-            .getConcurrentMethods();
+      ConcurrentMethodsMetaData concurrentMethodsOnBean = oneMethodWriteLockBean.getConcurrentMethods();
       assertNotNull("Concurrent methods metdata was null for bean " + oneMethodWriteLockBeanName,
             concurrentMethodsOnBean);
 
@@ -245,10 +242,8 @@
 
       methodWithWriteLock.setMethodParams(methodParams);
 
-      assertTrue("Concurrent methods metadata does not contain method named " + methodName, concurrentMethodsOnBean
-            .containsKey(methodWithWriteLock));
-
-      ConcurrentMethodMetaData concurrentMethodWithWriteLock = concurrentMethodsOnBean.get(methodWithWriteLock);
+      ConcurrentMethodMetaData concurrentMethodWithWriteLock = concurrentMethodsOnBean.find(methodWithWriteLock);
+      assertNotNull("Concurrent methods metadata does not contain method named " + methodName, concurrentMethodWithWriteLock);
       assertEquals("Unexpected locktype on method", LockType.WRITE, concurrentMethodWithWriteLock.getLockType());
 
       assertNull("Unexpectedly found access timeout on method " + methodName, concurrentMethodWithWriteLock
@@ -310,7 +305,7 @@
          }
          readMethodMetaData.setMethodParams(methodParamsMetaData);
       }
-      ConcurrentMethodMetaData concurrentMethod = sessionBean.getConcurrentMethods().get(readMethodMetaData);
+      ConcurrentMethodMetaData concurrentMethod = sessionBean.getConcurrentMethods().find(readMethodMetaData);
       assertNotNull("Concurrent method metadata not found on method " + readMethodMetaData.getName(), concurrentMethod);
       assertEquals("Unexpected locktype on method " + readMethodMetaData.getName(), lockType, concurrentMethod
             .getLockType());
@@ -334,7 +329,7 @@
          }
          readMethodMetaData.setMethodParams(methodParamsMetaData);
       }
-      ConcurrentMethodMetaData concurrentMethod = sessionBean.getConcurrentMethods().get(readMethodMetaData);
+      ConcurrentMethodMetaData concurrentMethod = sessionBean.getConcurrentMethods().find(readMethodMetaData);
       assertNull("Unexpectedly found concurrent method metadata on method " + readMethodMetaData.getName(), concurrentMethod);
    }
 



More information about the jboss-cvs-commits mailing list