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]