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