You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by ga...@apache.org on 2010/08/31 04:40:36 UTC
svn commit: r991061 - in /openejb/trunk/openejb3/container/openejb-core/src:
main/java/org/apache/openejb/assembler/classic/
test/java/org/apache/openejb/assembler/classic/
Author: gawor
Date: Tue Aug 31 02:40:36 2010
New Revision: 991061
URL: http://svn.apache.org/viewvc?rev=991061&view=rev
Log:
OPENEJB-1346: A few more updates for improved @AccessTimeout annotation processing
Added:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ConcurrentMethodTest.java (with props)
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/MethodConcurrencyBuilder.java
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/AccessTimeoutTest.java
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ConcurrentLockTypeTest.java
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/MethodConcurrencyBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/MethodConcurrencyBuilder.java?rev=991061&r1=991060&r2=991061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/MethodConcurrencyBuilder.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/MethodConcurrencyBuilder.java Tue Aug 31 02:40:36 2010
@@ -50,34 +50,52 @@ public class MethodConcurrencyBuilder {
if (deploymentInfo.isBeanManagedConcurrency()) return;
- methodConcurrencyInfos = MethodConcurrencyBuilder.normalize(methodConcurrencyInfos);
-
- Map<Method, MethodAttributeInfo> attributes = MethodInfoUtil.resolveAttributes(methodConcurrencyInfos, deploymentInfo);
-
Logger log = Logger.getInstance(LogCategory.OPENEJB_STARTUP.createChild("attributes"), MethodConcurrencyBuilder.class);
+
+ List<MethodConcurrencyInfo> lockInfos = new ArrayList<MethodConcurrencyInfo>();
+ List<MethodConcurrencyInfo> accessTimeoutInfos = new ArrayList<MethodConcurrencyInfo>();
+
+ MethodConcurrencyBuilder.normalize(methodConcurrencyInfos, lockInfos, accessTimeoutInfos);
+
+ Map<Method, MethodAttributeInfo> attributes;
+
+ // handle @Lock
+ attributes = MethodInfoUtil.resolveAttributes(lockInfos, deploymentInfo);
+
if (log.isDebugEnabled()) {
for (Map.Entry<Method, MethodAttributeInfo> entry : attributes.entrySet()) {
Method method = entry.getKey();
MethodConcurrencyInfo value = (MethodConcurrencyInfo) entry.getValue();
- log.debug("Concurrency Attribute: " + method + " -- " + MethodInfoUtil.toString(value));
+ log.debug("Lock: " + method + " -- " + MethodInfoUtil.toString(value.methods.get(0)) +
+ " " + value.concurrencyAttribute);
}
}
for (Map.Entry<Method, MethodAttributeInfo> entry : attributes.entrySet()) {
MethodConcurrencyInfo value = (MethodConcurrencyInfo) entry.getValue();
-
MethodContext methodContext = deploymentInfo.getMethodContext(entry.getKey());
+ String s = value.concurrencyAttribute.toUpperCase();
+ methodContext.setLockType(LockType.valueOf(s));
+ }
+
+ // handle @AccessTimeout
+ attributes = MethodInfoUtil.resolveAttributes(accessTimeoutInfos, deploymentInfo);
- if (value.concurrencyAttribute != null) {
- String s = value.concurrencyAttribute.toUpperCase();
- methodContext.setLockType(LockType.valueOf(s));
- }
-
- if (value.accessTimeout != null) {
- Duration accessTimeout = new Duration(value.accessTimeout.time, TimeUnit.valueOf(value.accessTimeout.unit));
- methodContext.setAccessTimeout(accessTimeout);
+ if (log.isDebugEnabled()) {
+ for (Map.Entry<Method, MethodAttributeInfo> entry : attributes.entrySet()) {
+ Method method = entry.getKey();
+ MethodConcurrencyInfo value = (MethodConcurrencyInfo) entry.getValue();
+ log.debug("AccessTimeout: " + method + " -- " + MethodInfoUtil.toString(value.methods.get(0)) + " " +
+ " " + value.accessTimeout.time + " " + value.accessTimeout.unit);
}
}
+
+ for (Map.Entry<Method, MethodAttributeInfo> entry : attributes.entrySet()) {
+ MethodConcurrencyInfo value = (MethodConcurrencyInfo) entry.getValue();
+ MethodContext methodContext = deploymentInfo.getMethodContext(entry.getKey());
+ Duration accessTimeout = new Duration(value.accessTimeout.time, TimeUnit.valueOf(value.accessTimeout.unit));
+ methodContext.setAccessTimeout(accessTimeout);
+ }
}
/**
@@ -91,8 +109,9 @@ public class MethodConcurrencyBuilder {
* @param infos
* @return a normalized list of new MethodConcurrencyInfo objects
*/
- public static List<MethodConcurrencyInfo> normalize(List<MethodConcurrencyInfo> infos){
- List<MethodConcurrencyInfo> normalized = new ArrayList<MethodConcurrencyInfo>();
+ public static void normalize(List<MethodConcurrencyInfo> infos,
+ List<MethodConcurrencyInfo> lockInfos,
+ List<MethodConcurrencyInfo> accessTimeoutInfos) {
for (MethodConcurrencyInfo oldInfo : infos) {
for (MethodInfo methodInfo : oldInfo.methods) {
MethodConcurrencyInfo newInfo = new MethodConcurrencyInfo();
@@ -101,14 +120,20 @@ public class MethodConcurrencyBuilder {
newInfo.concurrencyAttribute = oldInfo.concurrencyAttribute;
newInfo.accessTimeout = oldInfo.accessTimeout;
- normalized.add(newInfo);
+ if (oldInfo.concurrencyAttribute != null) {
+ lockInfos.add(newInfo);
+ }
+ if (oldInfo.accessTimeout != null) {
+ accessTimeoutInfos.add(newInfo);
+ }
}
}
- Collections.reverse(normalized);
- Collections.sort(normalized, new MethodConcurrencyBuilder.MethodConcurrencyComparator());
+ Collections.reverse(lockInfos);
+ Collections.sort(lockInfos, new MethodConcurrencyBuilder.MethodConcurrencyComparator());
- return normalized;
+ Collections.reverse(accessTimeoutInfos);
+ Collections.sort(accessTimeoutInfos, new MethodConcurrencyBuilder.MethodConcurrencyComparator());
}
public static class MethodConcurrencyComparator extends MethodInfoUtil.BaseComparator<MethodConcurrencyInfo> {
Modified: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/AccessTimeoutTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/AccessTimeoutTest.java?rev=991061&r1=991060&r2=991061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/AccessTimeoutTest.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/AccessTimeoutTest.java Tue Aug 31 02:40:36 2010
@@ -19,8 +19,6 @@ package org.apache.openejb.assembler.cla
import junit.framework.TestCase;
import org.apache.openejb.config.ConfigurationFactory;
import org.apache.openejb.core.CoreDeploymentInfo;
-import org.apache.openejb.jee.ConcurrentLockType;
-import org.apache.openejb.jee.ContainerConcurrency;
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.SingletonBean;
import org.apache.openejb.loader.SystemInstance;
@@ -30,13 +28,11 @@ import javax.ejb.AccessTimeout;
import javax.ejb.Local;
import javax.ejb.Remote;
import java.lang.reflect.Method;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
-import static javax.ejb.LockType.READ;
-import static javax.ejb.LockType.WRITE;
-
/**
* @version $Rev$ $Date$
*/
@@ -114,8 +110,10 @@ public class AccessTimeoutTest extends T
private void loadAttributes(EjbJarInfo ejbJarInfo, String deploymentId) {
ContainerSystem system = SystemInstance.get().getComponent(ContainerSystem.class);
CoreDeploymentInfo deploymentInfo = (CoreDeploymentInfo) system.getDeploymentInfo(deploymentId);
- List<MethodConcurrencyInfo> infos = MethodConcurrencyBuilder.normalize(ejbJarInfo.methodConcurrency);
- attributes = MethodInfoUtil.resolveAttributes(infos, deploymentInfo);
+ List<MethodConcurrencyInfo> lockInfos = new ArrayList<MethodConcurrencyInfo>();
+ List<MethodConcurrencyInfo> accessTimeoutInfos = new ArrayList<MethodConcurrencyInfo>();
+ MethodConcurrencyBuilder.normalize(ejbJarInfo.methodConcurrency, lockInfos, accessTimeoutInfos);
+ attributes = MethodInfoUtil.resolveAttributes(accessTimeoutInfos, deploymentInfo);
}
private void assertAttribute(long time, TimeUnit unit, Method method) {
Modified: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ConcurrentLockTypeTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ConcurrentLockTypeTest.java?rev=991061&r1=991060&r2=991061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ConcurrentLockTypeTest.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ConcurrentLockTypeTest.java Tue Aug 31 02:40:36 2010
@@ -30,6 +30,7 @@ import javax.ejb.Local;
import javax.ejb.Lock;
import javax.ejb.Remote;
import java.lang.reflect.Method;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -116,8 +117,10 @@ public class ConcurrentLockTypeTest exte
private void loadAttributes(EjbJarInfo ejbJarInfo, String deploymentId) {
ContainerSystem system = SystemInstance.get().getComponent(ContainerSystem.class);
CoreDeploymentInfo deploymentInfo = (CoreDeploymentInfo) system.getDeploymentInfo(deploymentId);
- List<MethodConcurrencyInfo> infos = MethodConcurrencyBuilder.normalize(ejbJarInfo.methodConcurrency);
- attributes = MethodInfoUtil.resolveAttributes(infos, deploymentInfo);
+ List<MethodConcurrencyInfo> lockInfos = new ArrayList<MethodConcurrencyInfo>();
+ List<MethodConcurrencyInfo> accessTimeoutInfos = new ArrayList<MethodConcurrencyInfo>();
+ MethodConcurrencyBuilder.normalize(ejbJarInfo.methodConcurrency, lockInfos, accessTimeoutInfos);
+ attributes = MethodInfoUtil.resolveAttributes(lockInfos, deploymentInfo);
}
private void assertAttribute(String attribute, Method method) {
Added: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ConcurrentMethodTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ConcurrentMethodTest.java?rev=991061&view=auto
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ConcurrentMethodTest.java (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ConcurrentMethodTest.java Tue Aug 31 02:40:36 2010
@@ -0,0 +1,119 @@
+/**
+ * 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.openejb.assembler.classic;
+
+import junit.framework.TestCase;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.core.CoreDeploymentInfo;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.SingletonBean;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+
+import javax.ejb.AccessTimeout;
+import javax.ejb.Local;
+import javax.ejb.Lock;
+import javax.ejb.Remote;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import static javax.ejb.LockType.READ;
+import static javax.ejb.LockType.WRITE;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ConcurrentMethodTest extends TestCase {
+ private Map<Method, MethodAttributeInfo> lockAttributes;
+ private Map<Method, MethodAttributeInfo> accessTimeoutAttributes;
+
+ public void test() throws Exception {
+ Assembler assembler = new Assembler();
+ ConfigurationFactory config = new ConfigurationFactory();
+
+ assembler.createProxyFactory(config.configureService(ProxyFactoryInfo.class));
+ assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
+ assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
+
+ EjbJar ejbJar = new EjbJar();
+ ejbJar.addEnterpriseBean(new SingletonBean(Color.class));
+
+ EjbJarInfo ejbJarInfo = config.configureApplication(ejbJar);
+ assembler.createApplication(ejbJarInfo);
+
+ loadAttributes(ejbJarInfo, "Color");
+
+ assertAccessTimeoutAttribute(1, TimeUnit.SECONDS, Color.class.getMethod("color", Object.class));
+ assertLockAttribute("Read", Color.class.getMethod("color", Object.class));
+
+ assertAccessTimeoutAttribute(1, TimeUnit.SECONDS, Color.class.getMethod("color", String.class));
+ assertLockAttribute("Write", Color.class.getMethod("color", String.class));
+
+ assertAccessTimeoutAttribute(2, TimeUnit.HOURS, Color.class.getMethod("color", Boolean.class));
+ assertLockAttribute("Read", Color.class.getMethod("color", Boolean.class));
+ }
+
+ private void loadAttributes(EjbJarInfo ejbJarInfo, String deploymentId) {
+ ContainerSystem system = SystemInstance.get().getComponent(ContainerSystem.class);
+ CoreDeploymentInfo deploymentInfo = (CoreDeploymentInfo) system.getDeploymentInfo(deploymentId);
+ List<MethodConcurrencyInfo> lockInfos = new ArrayList<MethodConcurrencyInfo>();
+ List<MethodConcurrencyInfo> accessTimeoutInfos = new ArrayList<MethodConcurrencyInfo>();
+ MethodConcurrencyBuilder.normalize(ejbJarInfo.methodConcurrency, lockInfos, accessTimeoutInfos);
+ accessTimeoutAttributes = MethodInfoUtil.resolveAttributes(accessTimeoutInfos, deploymentInfo);
+ lockAttributes = MethodInfoUtil.resolveAttributes(lockInfos, deploymentInfo);
+ }
+
+ private void assertAccessTimeoutAttribute(long time, TimeUnit unit, Method method) {
+ MethodConcurrencyInfo info = (MethodConcurrencyInfo) accessTimeoutAttributes.get(method);
+ assertTrue("Null timeout for " + method, info != null && info.accessTimeout != null);
+ assertEquals("Timeout time for " + method, time, info.accessTimeout.time);
+ assertEquals("Timeout unit for " + method, unit, TimeUnit.valueOf(info.accessTimeout.unit));
+ }
+
+ private void assertLockAttribute(String attribute, Method method) {
+ MethodConcurrencyInfo info = (MethodConcurrencyInfo) lockAttributes.get(method);
+ assertEquals(method.toString(), attribute, info.concurrencyAttribute);
+ }
+
+ @Local
+ public static interface ColorLocal {
+ }
+
+ @Remote
+ public static interface ColorRemote {
+ }
+
+ @AccessTimeout(value = 1, unit = TimeUnit.SECONDS)
+ @Lock(READ)
+ public static class Color implements ColorLocal, ColorRemote {
+
+ public void color(Object o) {
+ }
+
+ @Lock(WRITE)
+ public void color(String s) {
+ }
+
+ @AccessTimeout(value = 2, unit = TimeUnit.HOURS)
+ public void color(Boolean s) {
+ }
+ }
+
+}
Propchange: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ConcurrentMethodTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ConcurrentMethodTest.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ConcurrentMethodTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain