[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