You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/02/05 17:06:21 UTC

svn commit: r1240756 - in /openejb/trunk/openejb/container/openejb-core/src: main/java/org/apache/openejb/assembler/classic/DelegatePermissionCollection.java test/java/org/apache/openejb/core/stateful/StatefulSecurityPermissionsTest.java

Author: rmannibucau
Date: Sun Feb  5 16:06:21 2012
New Revision: 1240756

URL: http://svn.apache.org/viewvc?rev=1240756&view=rev
Log:
reactivating our own PermissionCollection implementation

Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/DelegatePermissionCollection.java
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulSecurityPermissionsTest.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/DelegatePermissionCollection.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/DelegatePermissionCollection.java?rev=1240756&r1=1240755&r2=1240756&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/DelegatePermissionCollection.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/DelegatePermissionCollection.java Sun Feb  5 16:06:21 2012
@@ -4,10 +4,11 @@ import org.apache.openejb.util.ArrayEnum
 
 import java.security.Permission;
 import java.security.PermissionCollection;
-import java.security.Permissions;
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 public class DelegatePermissionCollection extends PermissionCollection {
     private static final String PERMISSION_COLLECTION_CLASS = "openejb.permission-collection.class";
@@ -34,15 +35,17 @@ public class DelegatePermissionCollectio
             return (PermissionCollection) DelegatePermissionCollection.class.getClassLoader()
                     .loadClass(
                             System.getProperty(PERMISSION_COLLECTION_CLASS,
-                                    Permissions.class.getName()))
+                                    FastPermissionCollection.class.getName()))
                     .newInstance();
         } catch (Exception cnfe) {
-            return new Permissions();
+            // return new Permissions(); // the jdk implementation, it seems slow at least for startup up
+            return new FastPermissionCollection();
         }
     }
 
     public static class FastPermissionCollection extends PermissionCollection {
         private final List<Permission> permissions = new ArrayList<Permission>();
+        private final Map<Permission, Boolean> alreadyEvaluatedPermissions = new ConcurrentHashMap<Permission, Boolean>();
 
         @Override
         public synchronized void add(Permission permission) {
@@ -51,11 +54,17 @@ public class DelegatePermissionCollectio
 
         @Override
         public synchronized boolean implies(Permission permission) {
+            if (alreadyEvaluatedPermissions.containsKey(permission)) {
+                return alreadyEvaluatedPermissions.get(permission);
+            }
+
             for (Permission perm : permissions) {
-                if (perm.implies(perm)) {
+                if (perm.implies(permission)) {
+                    alreadyEvaluatedPermissions.put(permission, true);
                     return true;
                 }
             }
+            alreadyEvaluatedPermissions.put(permission, false);
             return false;
         }
 

Modified: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulSecurityPermissionsTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulSecurityPermissionsTest.java?rev=1240756&r1=1240755&r2=1240756&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulSecurityPermissionsTest.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulSecurityPermissionsTest.java Sun Feb  5 16:06:21 2012
@@ -16,32 +16,6 @@
  */
 package org.apache.openejb.core.stateful;
 
-import java.rmi.RemoteException;
-import java.security.*;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.UUID;
-import javax.annotation.security.DenyAll;
-import javax.annotation.security.PermitAll;
-import javax.annotation.security.RolesAllowed;
-import javax.ejb.CreateException;
-import javax.ejb.EJBAccessException;
-import javax.ejb.EJBHome;
-import javax.ejb.EJBLocalHome;
-import javax.ejb.EJBLocalObject;
-import javax.ejb.EJBObject;
-import javax.ejb.Init;
-import javax.ejb.Local;
-import javax.ejb.LocalHome;
-import javax.ejb.Remote;
-import javax.ejb.RemoteHome;
-import javax.ejb.Remove;
-import javax.naming.InitialContext;
-import javax.security.auth.Subject;
-import javax.security.auth.login.LoginException;
-
 import junit.framework.TestCase;
 import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.assembler.classic.EjbJarInfo;
@@ -61,6 +35,35 @@ import org.apache.openejb.jee.StatefulBe
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.spi.SecurityService;
 
+import javax.annotation.security.DenyAll;
+import javax.annotation.security.PermitAll;
+import javax.annotation.security.RolesAllowed;
+import javax.ejb.CreateException;
+import javax.ejb.EJBAccessException;
+import javax.ejb.EJBHome;
+import javax.ejb.EJBLocalHome;
+import javax.ejb.EJBLocalObject;
+import javax.ejb.EJBObject;
+import javax.ejb.Init;
+import javax.ejb.Local;
+import javax.ejb.LocalHome;
+import javax.ejb.Remote;
+import javax.ejb.RemoteHome;
+import javax.ejb.Remove;
+import javax.naming.InitialContext;
+import javax.security.auth.Subject;
+import javax.security.auth.login.LoginException;
+import java.rmi.RemoteException;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.Principal;
+import java.security.ProtectionDomain;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
 /**
  * @version $Rev$ $Date$
  */