📄 cachedobjectfactory.java
字号:
/*
* Licensed under the X license (see http://www.x.org/terms.htm)
*/
package org.ofbiz.minerva.pool.cache;
import java.io.PrintWriter;
/**
* Creates objects for a cache. The cache is essentially a map,
* so this factory is given a "key" and creates the appropriate "value"
* which will be cached. There are a number of other functions that
* can be overridden for more specific control, but createObject is
* the only one that's required.
*
* @author Aaron Mulder ammulder@alumni.princeton.edu
*/
public abstract class CachedObjectFactory {
public CachedObjectFactory() {
}
/**
* Creates a new object to be stored in an object cache. This is the
* instance that will actually be stored in the cache and reused. If you
* want to wrap it somehow, or return instances of a different type that
* refers to these, you can implement prepareObject.
* @see #prepareObject
*/
public abstract Object createObject(Object identifier);
/*
* Indicates to the factory that the cache has started up. This will be
* called before any other methods of the factory are called (on behalf of
* this cache).
* @param cache The cache that is starting. You may decide to allow
* multiple cached you use your factory, or to restrict it to a one-to-one
* relationship.
* @param log A writer you can use to log messages. Use this in preference
* to System.xxx.println.
* @throws java.lang.IllegalArgumentException
* Occurs when the cache is null.
*/
public void cacheStarted(ObjectCache cache, PrintWriter log) {
if (cache == null)
throw new IllegalArgumentException("Cannot start factory with null cache!");
}
/**
* Prepares an object to be returned to the client. This may be used to
* configure the object somehow, or actually return a completely different
* object (so long as the original can be recovered in translateObject.
* This will be called whenever an object is returned to the client, whether
* a new object or a cached object.
* @param cachedObject The object in the cache, as created by createObject.
* @return The object to return to the client. If different, the cached
* object must be recoverable by translateObject.
*/
public Object prepareObject(Object cachedObject) {
return cachedObject;
}
/**
* If the objects supplied to the client are different than the objects in
* the cache, extracts a cache object from a client object. This may be
* called once after an object has been released if the garbage collector
* and a client attempt to release an object at the same time. In this
* case, this method may work, return null, or throw an exception and the
* cache will handle it gracefully. The default implementation returns the
* parameter object (assumes client and cached objects are the same).
* @param clientObject The client object, as returned by prepareObject
* @return The cached object, as originally returned by createObject
*/
public Object translateObject(Object clientObject) {
return clientObject;
}
/**
* Indicates to the factory that the cache is closing down. This will be
* called before all the instances are destroyed. There may be calls to
* returnObject or translateObject after this, but no calls to
* createObject or prepareObject (on behalf of this cache).
* @param cache The cache that is closing. You may decide to allow
* multiple caches you use your factory, or to restrict it to a one-to-one
* relationship.
* @throws java.lang.IllegalArgumentException
* Occurs when the pool is null.
*/
public void cacheClosing(ObjectCache cache) {
if (cache == null)
throw new IllegalArgumentException("Cannot close factory with a null cache!");
}
/**
* Permanently closes an object, after it is removed from the cache. The
* object will not be returned to the cache - after this, it is gone. This
* is called when the cache is full and new objects are added, and when
* the cache is closed.
*/
public void deleteObject(Object pooledObject) {
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -