01: package org.compass.core.cache.first;
02:
03: import org.apache.commons.logging.Log;
04: import org.apache.commons.logging.LogFactory;
05: import org.compass.core.CompassException;
06: import org.compass.core.config.CompassConfigurable;
07: import org.compass.core.config.CompassEnvironment;
08: import org.compass.core.config.CompassSettings;
09: import org.compass.core.config.ConfigurationException;
10: import org.compass.core.util.ClassUtils;
11:
12: /**
13: * @author kimchy
14: */
15: public class FirstLevelCacheFactory implements CompassConfigurable {
16:
17: private static final Log log = LogFactory
18: .getLog(FirstLevelCacheFactory.class);
19:
20: private Class firstLevelCacheClass;
21:
22: public void configure(CompassSettings settings)
23: throws CompassException {
24: // create the first level cache based on the transaction isolation level
25: String transIsolationSetting = settings.getSetting(
26: CompassEnvironment.Transaction.ISOLATION, null);
27:
28: if (transIsolationSetting != null
29: && (transIsolationSetting
30: .equalsIgnoreCase(CompassEnvironment.Transaction.ISOLATION_BATCH_INSERT) || transIsolationSetting
31: .equalsIgnoreCase(CompassEnvironment.Transaction.ISOLATION_LUCENE))) {
32: firstLevelCacheClass = NullFirstLevelCache.class;
33: } else {
34: String firstLevelCacheSetting = settings.getSetting(
35: CompassEnvironment.Cache.FirstLevel.TYPE,
36: DefaultFirstLevelCache.class.getName());
37: try {
38: firstLevelCacheClass = ClassUtils.forName(
39: firstLevelCacheSetting, settings
40: .getClassLoader());
41: } catch (ClassNotFoundException e) {
42: throw new ConfigurationException(
43: "Failed to find class name ["
44: + firstLevelCacheSetting
45: + "] for first level cache", e);
46: }
47: }
48: if (log.isDebugEnabled()) {
49: log.debug("Using first level cache ["
50: + firstLevelCacheClass.getName() + "]");
51: }
52: }
53:
54: public FirstLevelCache createFirstLevelCache()
55: throws CompassException {
56: try {
57: return (FirstLevelCache) firstLevelCacheClass.newInstance();
58: } catch (Exception e) {
59: throw new CompassException(
60: "Failed to create first level cache", e);
61: }
62: }
63: }
|