Fields Summary |
---|
protected Vector | keyThe key holds the vector of primary key values for the object. |
protected int | hashCalculated hash value for CacheKey from primary key values. |
protected Object | object |
protected IdentityMap | mapOwner |
protected Object | writeLockValueThe writeLock value is being held as an object so that it might contain a number or timestamp. |
protected Object | wrapperThe cached wrapper for the object, used in EJB. |
protected ConcurrencyManager | mutexThe cache key hold a reference to the concurrency manager to perform the cache key level locking. |
protected Record | recordThis is used for Document Preservation to cache the record that this object was built from |
protected long | lastUpdatedQueryIdThis attribute is the system time in milli seconds that the object was last refreshed on |
protected int | invalidationStateInvalidation State can be used to indicate whether this cache key is considered valid |
public static final int | CHECK_INVALIDATION_POLICYThe following constants are used for the invalidationState variable |
public static final int | CACHE_KEY_INVALID |
protected long | readTimeThe read time stores the millisecond value of the last time the object help by
this cache key was confirmed as up to date. |
Methods Summary |
---|
public void | acquire()Acquire the lock on the cachek key object.
getMutex().acquire(false);
|
public void | acquire(boolean forMerge)Acquire the lock on the cachek key object. For the merge process
called with true from the merge process, if true then the refresh will not refresh the object
getMutex().acquire(forMerge);
|
public void | acquireDeferredLock()Acquire the deferred lcok.
getMutex().acquireDeferredLock();
|
public boolean | acquireNoWait()Acquire the lock on the cache key object. But only if the object has no lock on it
Added for CR 2317
return getMutex().acquireNoWait(false);
|
public boolean | acquireNoWait(boolean forMerge)Acquire the lock on the cache key object. But only if the object has no lock on it
Added for CR 2317
called with true from the merge process, if true then the refresh will not refresh the object
return getMutex().acquireNoWait(forMerge);
|
public void | acquireReadLock()Acquire the read lock on the cachek key object.
getMutex().acquireReadLock();
|
public boolean | acquireReadLockNoWait()Acquire the read lock on the cache key object.
return getMutex().acquireReadLockNoWait();
|
public void | checkReadLock()Check the read lock on the cachek key object.
This can be called to ensure the cache key has a valid built object.
It does not hold a lock, so the object could be refreshed afterwards.
getMutex().checkReadLock();
|
public java.lang.Object | clone()INTERNAL:
Clones itself.
Object object = null;
try {
object = super.clone();
} catch (Exception exception) {
throw new InternalError(exception.toString());
}
return object;
|
private int | computeArrayHashCode(java.lang.Object obj)Compute the hashcode for supported array types
if (obj.getClass() == ClassConstants.APBYTE) {
return Arrays.hashCode((byte []) obj);
} else if (obj.getClass() == ClassConstants.APCHAR) {
return Arrays.hashCode((char []) obj);
} else {
return Arrays.hashCode((Object []) obj);
}
|
protected int | computeHash(java.util.Vector primaryKey)Compute a hash value for the CacheKey dependent upon the values of the primary key
instead of the identity of the receiver.
This method is intended for use by constructors only.
int computedHashValue = 0;
for (int index = 0; index < primaryKey.size(); index++) {
Object value = primaryKey.elementAt(index);
if (value != null) {
//gf bug 1193: fix to handle array hashcodes properly
if (value.getClass().isArray()) {
computedHashValue = computedHashValue ^ computeArrayHashCode(value);
} else {
computedHashValue = computedHashValue ^ (value.hashCode());
}
}
}
return computedHashValue;
|
public boolean | equals(java.lang.Object object)Determine if the receiver is equal to anObject.
If anObject is a CacheKey, do further comparison, otherwise, return false.
if (object instanceof CacheKey) {
return equals((CacheKey)object);
}
return false;
|
public boolean | equals(oracle.toplink.essentials.internal.identitymaps.CacheKey key)Determine if the receiver is equal to key.
Use an index compare, because it is much faster than enumerations.
if (this == key) {
return true;
}
if (getKey().size() == key.getKey().size()) {
for (int index = 0; index < getKey().size(); index++) {
Object myValue = getKey().elementAt(index);
Object comparisionValue = key.getKey().elementAt(index);
if (myValue == null) {
if (comparisionValue != null) {
return false;
}
} else if (myValue.getClass().isArray()) {
//gf bug 1193: fix array comparison logic to exit if they don't match, and continue the loop if they do
if (((myValue.getClass() == ClassConstants.APBYTE) && (comparisionValue.getClass() == ClassConstants.APBYTE)) ) {
if (!Helper.compareByteArrays((byte[])myValue, (byte[])comparisionValue)){
return false;
}
} else if (((myValue.getClass() == ClassConstants.APCHAR) && (comparisionValue.getClass() == ClassConstants.APCHAR)) ) {
if (!Helper.compareCharArrays((char[])myValue, (char[])comparisionValue)){
return false;
}
} else {
if (!Helper.compareArrays((Object[])myValue, (Object[])comparisionValue)) {
return false;
}
}
} else {
if (!(myValue.equals(comparisionValue))) {
return false;
}
}
}
return true;
}
return false;
|
public int | getInvalidationState()INTERNAL:
Return the value of the invalidationState Variable
The return value will be a constant
CHECK_INVALIDATION_POLICY - The Invalidation policy is must be checked for this cache key's sate
CACHE_KEY_INVALID - This cache key has been labeled invalid.
return invalidationState;
|
public java.util.Vector | getKey()
return key;
|
public long | getLastUpdatedQueryId()INTERNAL:
This method returns the system time in millis seconds at which this object was last refreshed
CR #4365
CR #2698903 ... instead of using millis we will now use id's instead. Method
renamed appropriately.
return this.lastUpdatedQueryId;
|
public synchronized oracle.toplink.essentials.internal.helper.ConcurrencyManager | getMutex()Return the concurrency manager.
if (mutex == null) {
mutex = new ConcurrencyManager(this);
}
return mutex;
|
public java.lang.Object | getObject()
return object;
|
public oracle.toplink.essentials.internal.identitymaps.IdentityMap | getOwningMap()
return this.mapOwner;
|
public long | getReadTime()INTERNAL:
Return the current value of the Read Time variable
return readTime;
|
public oracle.toplink.essentials.sessions.Record | getRecord()
return record;
|
public java.lang.Object | getWrapper()
return wrapper;
|
public java.lang.Object | getWriteLockValue()
return writeLockValue;
|
public int | hashCode()Overrides hashCode() in Object to use the primaryKey's hashCode for storage in data structures.
return hash;
|
public boolean | isAcquired()Return if the lock is acquired
return getMutex().isAcquired();
|
public void | release()Release the lock on the cachek key object.
getMutex().release();
|
public void | releaseDeferredLock()Release the deferred lock
getMutex().releaseDeferredLock();
|
public void | releaseReadLock()Release the read lock on the cachek key object.
getMutex().releaseReadLock();
|
public void | setInvalidationState(int invalidationState)INTERNAL:
Set the value of the invalidationState Variable
The possible values are from an enumeration of constants
CHECK_INVALIDATION_POLICY - The invalidation policy is must be checked for this cache key's sate
CACHE_KEY_INVALID - This cache key has been labeled invalid.
this.invalidationState = invalidationState;
|
public void | setKey(java.util.Vector key)
this.key = key;
this.hash = computeHash(key);
|
public void | setLastUpdatedQueryId(long id)INTERNAL:
This method sets the system time in millis seconds at which this object was last refreshed
CR #4365
CR #2698903 ... instead of using millis we will now use ids instead. Method
renamed appropriately.
this.lastUpdatedQueryId = id;
|
public void | setMutex(oracle.toplink.essentials.internal.helper.ConcurrencyManager mutex)Set the concurrency manager.
this.mutex = mutex;
|
public void | setObject(java.lang.Object object)
this.object = object;
|
public void | setOwningMap(oracle.toplink.essentials.internal.identitymaps.IdentityMap map)
this.mapOwner = map;
|
public void | setReadTime(long readTime)INTERNAL:
Set the read time of this cache key
this.readTime = readTime;
invalidationState = CHECK_INVALIDATION_POLICY;
|
public void | setRecord(oracle.toplink.essentials.sessions.Record newRecord)
this.record = newRecord;
|
public void | setWrapper(java.lang.Object wrapper)
this.wrapper = wrapper;
|
public void | setWriteLockValue(java.lang.Object writeLockValue)
this.writeLockValue = writeLockValue;
|
public java.lang.String | toString()
int hashCode = 0;
if (getObject() != null) {
hashCode = getObject().hashCode();
}
return "[" + getKey() + ": " + hashCode + ": " + getWriteLockValue() + ": " + getReadTime() + ": " + getObject() + "]";
|
public void | updateAccess()Notifies that cache key that it has been accessed.
Allows the LRU sub-cache to be maintained.
// Nothing required by default.
|