001: /**
002: * Objective Database Abstraction Layer (ODAL)
003: * Copyright (c) 2004, The ODAL Development Group
004: * All rights reserved.
005: * For definition of the ODAL Development Group please refer to LICENCE.txt file
006: *
007: * Distributable under LGPL license.
008: * See terms of license at gnu.org.
009: */package com.completex.objective.components.persistency.core.adapter;
010:
011: import com.completex.objective.components.log.Log;
012: import com.completex.objective.components.persistency.OdalRuntimePersistencyException;
013: import com.completex.objective.components.persistency.Persistency;
014: import com.completex.objective.components.persistency.ColumnType;
015: import com.completex.objective.components.persistency.type.TypeHandler;
016: import com.completex.objective.components.persistency.core.DatabasePolicy;
017: import com.completex.objective.components.persistency.core.PolicyAware;
018: import com.completex.objective.components.persistency.core.TypeHandlerRegistry;
019: import com.completex.objective.components.persistency.core.impl.TypeHandlerRegistryImpl;
020: import com.completex.objective.components.persistency.transact.TransactionManager;
021: import com.completex.objective.components.persistency.transact.TransactionManagerFactory;
022: import com.completex.objective.util.TypeUtil;
023:
024: /**
025: * @author Gennady Krizhevsky
026: */
027: public class DefaultPersistencyFactory implements TypeHandlerRegistry {
028:
029: private TransactionManagerFactory transactionManagerFactory;
030: private boolean useBatchModify;
031: private boolean supportKeyUpdate;
032: private boolean disableQueryContext;
033: //
034: // Either databasePolicy of config propertires have to be set
035: //
036: private DatabasePolicy databasePolicy;
037: //
038: // Logger never gets set through config
039: //
040: private Log logger;
041: private final TypeHandlerRegistryImpl typeHandlerRegistry = new TypeHandlerRegistryImpl();
042:
043: public Persistency newPersistency() {
044: TypeUtil.assertNotNull(transactionManagerFactory,
045: "TransactionManagerFactory");
046: setDatabasePolicyFromTm();
047: validateInit();
048: TransactionManager transactionManager = transactionManagerFactory
049: .newTransactionManager();
050: BasicPersistencyAdapter persistency = new BasicPersistencyAdapter(
051: databasePolicy, transactionManager, logger);
052: persistency.setTypeHandlerRegistry(typeHandlerRegistry);
053: persistency.setUseBatchModify(useBatchModify);
054: persistency.setSupportKeyUpdate(supportKeyUpdate);
055: persistency.setDisableQueryContext(disableQueryContext);
056: return persistency;
057: }
058:
059: protected void validateInit() {
060: TypeUtil.assertNotNull(transactionManagerFactory,
061: "TransactionManagerFactory");
062: TypeUtil.assertNotNull(databasePolicy, "DatabasePolicy");
063: if (transactionManagerFactory instanceof PolicyAware) {
064: PolicyAware baseFactory = castToPolicyAware();
065: String policyClassName = databasePolicy.getClass()
066: .getName();
067: DatabasePolicy tmPolicy = baseFactory.getDatabasePolicy();
068: if (tmPolicy != null) {
069: String policyClassNameTm = tmPolicy.getClass()
070: .getName();
071: if (!policyClassName.equals(policyClassNameTm)) {
072: throw new OdalRuntimePersistencyException(
073: "Different database policices set for DefaultPersistencyFactory"
074: + " and TransactionManagerFactory: "
075: + policyClassName + " vs "
076: + policyClassNameTm);
077: }
078: }
079: }
080: }
081:
082: private PolicyAware castToPolicyAware() {
083: return (PolicyAware) transactionManagerFactory;
084: }
085:
086: protected void setDatabasePolicyFromTm() {
087: if (transactionManagerFactory instanceof PolicyAware) {
088: PolicyAware baseFactory = castToPolicyAware();
089: DatabasePolicy tmPolicy = baseFactory.getDatabasePolicy();
090: synchronized (this ) {
091: if (databasePolicy == null) {
092: databasePolicy = tmPolicy;
093: }
094: }
095: }
096: }
097:
098: public TransactionManagerFactory getTransactionManagerFactory() {
099: return transactionManagerFactory;
100: }
101:
102: public void setTransactionManagerFactory(
103: TransactionManagerFactory transactionManagerFactory) {
104: this .transactionManagerFactory = transactionManagerFactory;
105: }
106:
107: public DatabasePolicy getDatabasePolicy() {
108: return databasePolicy;
109: }
110:
111: public void setDatabasePolicy(DatabasePolicy databasePolicy) {
112: this .databasePolicy = databasePolicy;
113: }
114:
115: public Log getLogger() {
116: return DefaultDataSourceFactory.resolveLogger(logger);
117: }
118:
119: public void setLogger(Log logger) {
120: this .logger = DefaultDataSourceFactory.resolveLogger(logger);
121: }
122:
123: public void registerTypeHandler(ColumnType columnType,
124: TypeHandler typeHandler) {
125: typeHandlerRegistry
126: .registerTypeHandler(columnType, typeHandler);
127: }
128:
129: public void registerBindTypeHandler(Class clazz,
130: TypeHandler typeHandler) {
131: typeHandlerRegistry.registerBindTypeHandler(clazz, typeHandler);
132: }
133:
134: public TypeHandler getBindTypeHandler(Class clazz) {
135: return typeHandlerRegistry.getBindTypeHandler(clazz);
136: }
137:
138: public TypeHandler getTypeHandler(ColumnType columnType) {
139: return typeHandlerRegistry.getTypeHandler(columnType);
140: }
141:
142: public boolean isRegisteredTypeHandler(ColumnType columnType) {
143: return typeHandlerRegistry.isRegisteredTypeHandler(columnType);
144: }
145:
146: public boolean isRegisteredBindTypeHandler(Class clazz) {
147: return typeHandlerRegistry.isRegisteredBindTypeHandler(clazz);
148: }
149:
150: public boolean isUseBatchModify() {
151: return useBatchModify;
152: }
153:
154: public void setUseBatchModify(boolean useBatchModify) {
155: this .useBatchModify = useBatchModify;
156: }
157:
158: public boolean isSupportKeyUpdate() {
159: return supportKeyUpdate;
160: }
161:
162: public void setSupportKeyUpdate(boolean supportKeyUpdate) {
163: this .supportKeyUpdate = supportKeyUpdate;
164: }
165:
166: public boolean isDisableQueryContext() {
167: return disableQueryContext;
168: }
169:
170: public void setDisableQueryContext(boolean disableQueryContext) {
171: this.disableQueryContext = disableQueryContext;
172: }
173: }
|