ozeigermann 2004/02/25 07:15:15
Modified: src/share/org/apache/slide/store ExtendedStore.java
Log:
- Fixed initialization bug when caching it turned off
- Cleaned code for permission and lock caching
Revision Changes Path
1.7 +61 -73
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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ExtendedStore.java 25 Feb 2004 13:10:19 -0000 1.6
+++ ExtendedStore.java 25 Feb 2004 15:15:14 -0000 1.7
@@ -528,25 +528,11 @@
if (securityStore.cacheResults()) {
enlist(this);
try {
- NodePermission tempPermission = permission.cloneObject();
- Object value = permissionsCache.get(uri.toString());
- if (value == null) {
- // populate the cache with the existing entries
- enumeratePermissions(uri);
- // and check if the cache contains a corresponding entry now
- value = permissionsCache.get(uri.toString());
- if (value == null) {
- // no permissions for the Uri in the cache, so create a new
- // entry
- Vector permissionsVector = new Vector();
- permissionsVector.addElement(tempPermission);
- permissionsCache.put(uri.toString(), permissionsVector);
- }
- } else {
- Vector permissionsVector = new Vector((Vector) value);
- permissionsVector.addElement(tempPermission);
- permissionsCache.put(uri.toString(), permissionsVector);
- }
+ Vector permissionsVector = fillPermissionsCache(uri);
+ // operate on a copy
+ Vector tempPermissions = (Vector )permissionsVector.clone();
+ tempPermissions.addElement(permission);
+ permissionsCache.put(uri.toString(), tempPermissions);
} finally {
delist(this);
}
@@ -558,13 +544,11 @@
if (securityStore.cacheResults()) {
enlist(this);
try {
- Object value = permissionsCache.get(uri.toString());
- Vector permissionsVector = null;
- if (value != null) {
- permissionsVector = new Vector((Vector) value);
- permissionsVector.removeElement(permission);
- permissionsCache.put(uri.toString(), permissionsVector);
- }
+ Vector permissionsVector = fillPermissionsCache(uri);
+ // operate on a copy
+ Vector tempPermissions = (Vector )permissionsVector.clone();
+ tempPermissions.removeElement(permission);
+ permissionsCache.put(uri.toString(), tempPermissions);
} finally {
delist(this);
}
@@ -593,20 +577,7 @@
enlist(this);
}
try {
- Object value = permissionsCache.get(uri.toString());
- Vector permissionsVector = null;
- if (value != null) {
- permissionsVector = (Vector) value;
- } else {
- permissionsVector = new Vector();
- Enumeration tempEnum = securityStore.enumeratePermissions(uri);
- while (tempEnum.hasMoreElements()) {
- NodePermission tempPermission = (NodePermission)
tempEnum.nextElement();
- tempPermission.validate(uri.toString());
- permissionsVector.addElement(tempPermission);
- }
- permissionsCache.put(uri.toString(), permissionsVector);
- }
+ Vector permissionsVector = fillPermissionsCache(uri);
return ((Vector) permissionsVector.clone()).elements();
} finally {
if (isForceStoreEnlistment(uri)) {
@@ -623,15 +594,11 @@
if (lockStore.cacheResults()) {
enlist(this);
try {
- Object value = locksCache.get(uri.toString());
- Vector locksVector = null;
- if (value == null) {
- locksVector = new Vector();
- } else {
- locksVector = new Vector((Vector)value);
- }
- locksVector.addElement(lock.cloneObject());
- locksCache.put(uri.toString(), locksVector);
+ Vector locks = fillLocksCache(uri);
+ // operate on a copy
+ Vector tempLocks = (Vector) locks.clone();
+ tempLocks.addElement(lock.cloneObject());
+ locksCache.put(uri.toString(), tempLocks);
} finally {
delist(this);
}
@@ -646,7 +613,7 @@
Object value = locksCache.get(uri.toString());
Vector locksVector = null;
if (value != null) {
- locksVector = new Vector((Vector)value);
+ locksVector = new Vector((Vector) value);
boolean wasPresent = locksVector.removeElement(lock);
if (!wasPresent) {
throw new LockTokenNotFoundException(lock);
@@ -668,13 +635,13 @@
Object value = locksCache.get(uri.toString());
Vector locksVector = null;
if (value != null) {
- locksVector = new Vector((Vector)value);
+ locksVector = new Vector((Vector) value);
boolean wasPresent = locksVector.removeElement(lock);
if (!wasPresent) {
throw new LockTokenNotFoundException(lock);
}
+ locksCache.put(uri.toString(), locksVector);
}
- locksCache.put(uri.toString(), locksVector);
} finally {
delist(this);
}
@@ -689,13 +656,13 @@
Object value = locksCache.get(uri.toString());
Vector locksVector = null;
if (value != null) {
- locksVector = new Vector((Vector)value);
+ locksVector = new Vector((Vector) value);
boolean wasPresent = locksVector.removeElement(lock);
if (!wasPresent) {
throw new LockTokenNotFoundException(lock);
}
+ locksCache.put(uri.toString(), locksVector);
}
- locksCache.put(uri.toString(), locksVector);
} finally {
delist(this);
}
@@ -708,21 +675,8 @@
enlist(this);
}
try {
- Object value = locksCache.get(uri.toString());
- Vector locksVector = null;
- if (value == null) {
- locksVector = new Vector();
- Enumeration lockList = lockStore.enumerateLocks(uri);
- while (lockList.hasMoreElements()) {
- NodeLock tempLock = (NodeLock) lockList.nextElement();
- tempLock.validate(uri.toString());
- locksVector.addElement(tempLock);
- }
- locksCache.put(uri.toString(), locksVector);
- } else {
- locksVector = (Vector) value;
- }
- return ((Vector) locksVector.clone()).elements();
+ Vector locks = fillLocksCache(uri);
+ return ((Vector) locks.clone()).elements();
} finally {
if (isForceStoreEnlistment(uri)) {
delist(this);
@@ -937,6 +891,40 @@
public String toString() {
return getName() + "(" + getClass().getName() + ")";
+ }
+
+ protected Vector fillPermissionsCache(Uri uri) throws ServiceAccessException {
+ Vector permissions = (Vector) permissionsCache.get(uri.toString());
+ if (permissions != null) {
+ return permissions;
+ } else {
+ permissions = new Vector();
+ Enumeration permissionsList = securityStore.enumeratePermissions(uri);
+ while (permissionsList.hasMoreElements()) {
+ NodePermission tempPermission = (NodePermission)
permissionsList.nextElement();
+ tempPermission.validate(uri.toString());
+ permissions.addElement(tempPermission);
+ }
+ permissionsCache.put(uri.toString(), permissions);
+ return permissions;
+ }
+ }
+
+ protected Vector fillLocksCache(Uri uri) throws ServiceAccessException {
+ Vector locksVector = (Vector) locksCache.get(uri.toString());
+ if (locksVector != null) {
+ return locksVector;
+ } else {
+ locksVector = new Vector();
+ Enumeration lockList = lockStore.enumerateLocks(uri);
+ while (lockList.hasMoreElements()) {
+ NodeLock tempLock = (NodeLock) lockList.nextElement();
+ tempLock.validate(uri.toString());
+ locksVector.addElement(tempLock);
+ }
+ locksCache.put(uri.toString(), locksVector);
+ return locksVector;
+ }
}
//
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]