00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 package org.objectweb.cjdbc.controller.cache.result;
00026
00027 import java.util.Hashtable;
00028
00029 import org.objectweb.cjdbc.common.xml.DatabasesXmlTags;
00030 import org.objectweb.cjdbc.controller.cache.result.rules.EagerCaching;
00031 import org.objectweb.cjdbc.controller.cache.result.rules.NoCaching;
00032 import org.objectweb.cjdbc.controller.cache.result.rules.RelaxedCaching;
00033
00034
00035
00036
00037
00038
00039
00040 public class ResultCacheFactory
00041 {
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 public static AbstractResultCache getCacheInstance(int granularityValue,
00053 int maxEntries, int pendingTimeout) throws InstantiationException
00054 {
00055 AbstractResultCache currentRequestCache = null;
00056 switch (granularityValue)
00057 {
00058 case CachingGranularities.TABLE :
00059 currentRequestCache = new ResultCacheTable(maxEntries, pendingTimeout);
00060 break;
00061 case CachingGranularities.DATABASE :
00062 currentRequestCache = new ResultCacheDatabase(maxEntries,
00063 pendingTimeout);
00064 break;
00065 case CachingGranularities.COLUMN :
00066 currentRequestCache = new ResultCacheColumn(maxEntries, pendingTimeout);
00067 break;
00068 case CachingGranularities.COLUMN_UNIQUE :
00069 currentRequestCache = new ResultCacheColumnUnique(maxEntries,
00070 pendingTimeout);
00071 break;
00072 default :
00073 throw new InstantiationException("Invalid Granularity Value");
00074 }
00075 return currentRequestCache;
00076 }
00077
00078
00079
00080
00081
00082
00083
00084
00085 public static CacheBehavior getCacheBehaviorInstance(String behaviorString,
00086 Hashtable options)
00087 {
00088 if (behaviorString.equalsIgnoreCase(DatabasesXmlTags.ELT_NoCaching))
00089 return new NoCaching();
00090 if (behaviorString.equals(DatabasesXmlTags.ELT_EagerCaching))
00091 {
00092
00093
00094 long timeout = 1000 * Long.parseLong((String) options
00095 .get(DatabasesXmlTags.ATT_timeout));
00096 return new EagerCaching(timeout);
00097 }
00098 if (behaviorString.equals(DatabasesXmlTags.ELT_RelaxedCaching))
00099 {
00100
00101 long timeout = 1000 * Long.parseLong((String) options
00102 .get(DatabasesXmlTags.ATT_timeout));
00103 boolean keepIfNotDirty = new Boolean((String) options
00104 .get(DatabasesXmlTags.ATT_keepIfNotDirty)).booleanValue();
00105 return new RelaxedCaching(keepIfNotDirty, timeout);
00106 }
00107 else
00108 return null;
00109 }
00110 }