Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

org.apache.ojb.broker.cache
Class ObjectCacheDefaultImpl  view ObjectCacheDefaultImpl download ObjectCacheDefaultImpl.java

java.lang.Object
  extended byorg.apache.ojb.broker.cache.ObjectCacheDefaultImpl
All Implemented Interfaces:
ObjectCache

public class ObjectCacheDefaultImpl
extends java.lang.Object
implements ObjectCache

The ObjectCache stores all Objects loaded by the PersistenceBroker from a DB. When the PersistenceBroker tries to get an Object by its Primary key values it first lookups the cache if the object has been already loaded and cached. Using an ObjectCache has several advantages: - it increases performance as it reduces DB lookups. - it allows to perform circular lookups (as by crossreferenced objects) that would result in non-terminating loops without such a cache. - it maintains the uniqueness of objects as any Db row will be mapped to exactly one object. The cache uses soft-references which allows objects (softly) referenced by the cache to be reclaimed by the Java Garbage Collector when they are not longer referenced elsewhere.

Version:
$Id: ObjectCacheDefaultImpl.java,v 1.4 2002/09/21 15:39:53 brj Exp $

Field Summary
private  long failCount
           
private  long gcCount
           
private  long hitCount
           
protected  java.util.Hashtable objectTable
          the hashtable holding all cached object
 
Constructor Summary
ObjectCacheDefaultImpl()
          public Default Constructor
 
Method Summary
 void cache(org.apache.ojb.broker.Identity oid, java.lang.Object obj)
          makes object persistent to the Objectcache.
 void cache(java.lang.Object obj)
          Make object obj persistent to Objectcache.
 void clear()
          clear ObjectCache.
 void finalize()
          Called on an object by the Virtual Machine at most once, at some point after the Object is determined unreachable but before it is destroyed.
 java.lang.Object lookup(org.apache.ojb.broker.Identity oid)
          Lookup object with Identity oid in objectTable.
 void remove(java.lang.Object obj)
          removes an Object from the cache.
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

objectTable

protected java.util.Hashtable objectTable
the hashtable holding all cached object


hitCount

private long hitCount

failCount

private long failCount

gcCount

private long gcCount
Constructor Detail

ObjectCacheDefaultImpl

public ObjectCacheDefaultImpl()
public Default Constructor

Method Detail

cache

public void cache(java.lang.Object obj)
           throws org.apache.ojb.broker.metadata.ClassNotPersistenceCapableException
Make object obj persistent to Objectcache. compute objects identity and use it as key for the hashmap

Specified by:
cache in interface ObjectCache

clear

public void clear()
clear ObjectCache. I.e. remove all entries for classes and objects.

Specified by:
clear in interface ObjectCache

cache

public void cache(org.apache.ojb.broker.Identity oid,
                  java.lang.Object obj)
makes object persistent to the Objectcache. I'm using soft-references to allow gc reclaim unused objects even if they are still cached.

Specified by:
cache in interface ObjectCache

lookup

public java.lang.Object lookup(org.apache.ojb.broker.Identity oid)
Lookup object with Identity oid in objectTable. returns null if no matching id is found

Specified by:
lookup in interface ObjectCache

remove

public void remove(java.lang.Object obj)
removes an Object from the cache.

Specified by:
remove in interface ObjectCache

finalize

public void finalize()
Description copied from class: java.lang.Object
Called on an object by the Virtual Machine at most once, at some point after the Object is determined unreachable but before it is destroyed. You would think that this means it eventually is called on every Object, but this is not necessarily the case. If execution terminates abnormally, garbage collection does not always happen. Thus you cannot rely on this method to always work. For finer control over garbage collection, use references from the java.lang.ref package.

Virtual Machines are free to not call this method if they can determine that it does nothing important; for example, if your class extends Object and overrides finalize to do simply super.finalize().

finalize() will be called by a java.lang.Thread that has no locks on any Objects, and may be called concurrently. There are no guarantees on the order in which multiple objects are finalized. This means that finalize() is usually unsuited for performing actions that must be thread-safe, and that your implementation must be use defensive programming if it is to always work.

If an Exception is thrown from finalize() during garbage collection, it will be patently ignored and the Object will still be destroyed.

It is allowed, although not typical, for user code to call finalize() directly. User invocation does not affect whether automatic invocation will occur. It is also permitted, although not recommended, for a finalize() method to "revive" an object by making it reachable from normal code again.

Unlike constructors, finalize() does not get called for an object's superclass unless the implementation specifically calls super.finalize().

The default implementation does nothing.