luetzkendorf    2005/02/28 03:19:18

  Modified:    src/share/org/apache/slide/store ExtendedStore.java
  Log:
  optimization: permission and lock cache store  mostly empty vectors and
  clones those if locks of permissions are requested. Now we use a single
  object denoting an empty vector ant return a contant empty enumeration.
  
  Revision  Changes    Path
  1.30      +81 -42    
jakarta-slide/src/share/org/apache/slide/store/ExtendedStore.java
  
  Index: ExtendedStore.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/share/org/apache/slide/store/ExtendedStore.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- ExtendedStore.java        10 Feb 2005 01:49:59 -0000      1.29
  +++ ExtendedStore.java        28 Feb 2005 11:19:18 -0000      1.30
  @@ -52,6 +52,7 @@
   import org.apache.slide.structure.ObjectNode;
   import org.apache.slide.structure.ObjectNotFoundException;
   import org.apache.slide.util.ByteSizeLimitedObjectCache;
  +import org.apache.slide.util.EmptyEnumeration;
   import org.apache.slide.util.Messages;
   import org.apache.slide.util.ObjectCache;
   import org.apache.slide.util.TxLRUObjectCache;
  @@ -65,6 +66,7 @@
    */
   public class ExtendedStore extends AbstractStore {
   
  +    private static final Vector EMPTY_VECTOR = new Vector(0);
       private static final String LOG_CHANNEL = ExtendedStore.class.getName();
   
       protected static final int DEFAULT_OBJECT_GLOBAL_CACHE_SIZE = 10000;
  @@ -703,8 +705,13 @@
               enlist(this);
               try {
                   Vector permissionsVector = fillPermissionsCache(uri);
  -                // operate on a copy
  -                Vector tempPermissions = (Vector )permissionsVector.clone();
  +                Vector tempPermissions; 
  +                if (permissionsVector == EMPTY_VECTOR) {
  +                    tempPermissions = new Vector();
  +                } else {
  +                    // operate on a copy
  +                    tempPermissions = (Vector)permissionsVector.clone();
  +                }
                   tempPermissions.addElement(permission);
                   permissionsCache.put(uri.toString(), tempPermissions);
               } finally {
  @@ -725,10 +732,12 @@
               enlist(this);
               try {
                   Vector permissionsVector = fillPermissionsCache(uri);
  -                // operate on a copy
  -                Vector tempPermissions = (Vector )permissionsVector.clone();
  -                tempPermissions.removeElement(permission);
  -                permissionsCache.put(uri.toString(), tempPermissions);
  +                if (permissionsVector != EMPTY_VECTOR) {
  +                    // operate on a copy
  +                    Vector tempPermissions = 
(Vector)permissionsVector.clone();
  +                    tempPermissions.removeElement(permission);
  +                    permissionsCache.put(uri.toString(), tempPermissions);
  +                }
               } finally {
                   delist(this);
               }
  @@ -749,7 +758,7 @@
               try {
                   Object value = permissionsCache.get(uri.toString());
                   if (value != null) {
  -                    permissionsCache.put(uri.toString(), new Vector());
  +                    permissionsCache.put(uri.toString(), EMPTY_VECTOR);
                   }
               } finally {
                   delist(this);
  @@ -765,7 +774,11 @@
               }
               try {
                   Vector permissionsVector = fillPermissionsCache(uri);
  -                return ((Vector) permissionsVector.clone()).elements();
  +                if (permissionsVector == EMPTY_VECTOR) {
  +                    return EmptyEnumeration.INSTANCE;
  +                } else {
  +                    return ((Vector) permissionsVector.clone()).elements();
  +                }
               } finally {
                   if (isForceStoreEnlistment(uri)) {
                       delist(this);
  @@ -793,8 +806,13 @@
               enlist(this);
               try {
                   Vector locks = fillLocksCache(uri);
  -                // operate on a copy
  -                Vector tempLocks = (Vector) locks.clone();
  +                Vector tempLocks;
  +                if (locks == EMPTY_VECTOR) {
  +                    tempLocks = new Vector();
  +                } else {
  +                    // operate on a copy
  +                    tempLocks = (Vector) locks.clone();
  +                }
                   tempLocks.addElement(lock.cloneObject());
                   locksCache.put(uri.toString(), tempLocks);
               } finally {
  @@ -815,16 +833,19 @@
               enlist(this);
               try {
                   Object value = locksCache.get(uri.toString());
  -                Vector locksVector = null;
                   if (value != null) {
  -                    locksVector = new Vector((Vector) value);
  -                    boolean wasPresent = locksVector.removeElement(lock);
  -                    if (!wasPresent) {
  +                    if (value != EMPTY_VECTOR) {
  +                        Vector locksVector = new Vector((Vector) value);
  +                        boolean wasPresent = locksVector.removeElement(lock);
  +                        if (!wasPresent) {
  +                            throw new LockTokenNotFoundException(lock);
  +                        }
  +                        locksVector.addElement(lock.cloneObject());
  +                        locksCache.put(uri.toString(), locksVector);
  +                    } else {
                           throw new LockTokenNotFoundException(lock);
                       }
  -                    locksVector.addElement(lock.cloneObject());
  -                    locksCache.put(uri.toString(), locksVector);
  -                }
  +                } 
               } finally {
                   delist(this);
               }
  @@ -843,14 +864,17 @@
               enlist(this);
               try {
                   Object value = locksCache.get(uri.toString());
  -                Vector locksVector = null;
                   if (value != null) {
  -                    locksVector = new Vector((Vector) value);
  -                    boolean wasPresent = locksVector.removeElement(lock);
  -                    if (!wasPresent) {
  +                    if (value != EMPTY_VECTOR) {
  +                        Vector locksVector = new Vector((Vector) value);
  +                        boolean wasPresent = locksVector.removeElement(lock);
  +                        if (!wasPresent) {
  +                            throw new LockTokenNotFoundException(lock);
  +                        }
  +                        locksCache.put(uri.toString(), locksVector);
  +                    } else {
                           throw new LockTokenNotFoundException(lock);
                       }
  -                    locksCache.put(uri.toString(), locksVector);
                   }
               } finally {
                   delist(this);
  @@ -870,14 +894,16 @@
               enlist(this);
               try {
                   Object value = locksCache.get(uri.toString());
  -                Vector locksVector = null;
                   if (value != null) {
  -                    locksVector = new Vector((Vector) value);
  -                    boolean wasPresent = locksVector.removeElement(lock);
  -                    if (!wasPresent) {
  +                    if (value != EMPTY_VECTOR) {
  +                        Vector locksVector = new Vector((Vector) value);
  +                        if (!locksVector.removeElement(lock)) {
  +                            throw new LockTokenNotFoundException(lock);
  +                        }
  +                        locksCache.put(uri.toString(), locksVector);
  +                    } else {
                           throw new LockTokenNotFoundException(lock);
                       }
  -                    locksCache.put(uri.toString(), locksVector);
                   }
               } finally {
                   delist(this);
  @@ -893,7 +919,11 @@
               }
               try {
                   Vector locks = fillLocksCache(uri);
  -                return ((Vector) locks.clone()).elements();
  +                if (locks == EMPTY_VECTOR) {
  +                    return EmptyEnumeration.INSTANCE;
  +                } else {
  +                    return ((Vector) locks.clone()).elements();
  +                }
               } finally {
                   if (isForceStoreEnlistment(uri)) {
                       delist(this);
  @@ -1192,12 +1222,16 @@
           if (permissions != null) {
               return permissions;
           } else {
  -            permissions = new Vector();
               Enumeration permissionsList = super.enumeratePermissions(uri);
  -            while (permissionsList.hasMoreElements()) {
  -                NodePermission tempPermission = (NodePermission) 
permissionsList.nextElement();
  -                tempPermission.validate(uri.toString());
  -                permissions.addElement(tempPermission);
  +            if (permissionsList.hasMoreElements()) {
  +                permissions = new Vector();
  +                while (permissionsList.hasMoreElements()) {
  +                    NodePermission tempPermission = (NodePermission) 
permissionsList.nextElement();
  +                    tempPermission.validate(uri.toString());
  +                    permissions.addElement(tempPermission);
  +                }
  +            } else {
  +                permissions = EMPTY_VECTOR;
               }
               permissionsCache.put(uri.toString(), permissions);
               return permissions;
  @@ -1209,12 +1243,17 @@
           if (locksVector != null) {
               return locksVector;
           } else {
  -            locksVector = new Vector();
               Enumeration lockList = super.enumerateLocks(uri);
  -            while (lockList.hasMoreElements()) {
  -                NodeLock tempLock = (NodeLock) lockList.nextElement();
  -                tempLock.validate(uri.toString());
  -                locksVector.addElement(tempLock);
  +            if (lockList.hasMoreElements()) {
  +                locksVector = new Vector();
  +                while (lockList.hasMoreElements()) {
  +                    NodeLock tempLock = (NodeLock) lockList.nextElement();
  +                    tempLock.validate(uri.toString());
  +                    locksVector.addElement(tempLock);
  +                }
  +            } else {
  +                // store null if no locks are available
  +                locksVector = EMPTY_VECTOR;
               }
               locksCache.put(uri.toString(), locksVector);
               return locksVector;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to