|
Author: adrianc
Date: Fri Jun 7 08:39:44 2013 New Revision: 1490541 URL: http://svn.apache.org/r1490541 Log: First pass at removing cached DOM tree code from EntityConfigUtil.java. I converted some of the code to use the new thread-safe models. I also fixed some concurrency problems in related classes by replacing DCL with java.util.concurrent classes. I discovered the new multi-threaded component loader was creating duplicate resources, so these changes fix that. Removed: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/DatasourceInfo.java Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearch.java ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityComparisonOperator.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityCondition.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionBase.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionFunction.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionListBase.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionSubSelect.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionValue.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityDateFilterCondition.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityExpr.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityFieldValue.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityFunction.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityJoinOperator.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityOperator.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityWhereString.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/OrderByItem.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/OrderByList.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigListener.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigUtil.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityConfig.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/ConnectionFactoryInterface.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/DBCPConnectionFactory.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericHelperFactory.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/MemoryHelper.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/ConnectionFactory.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/DatabaseUtil.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/SQLProcessor.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/SqlJdbcUtil.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldTypeReader.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/DumbFactory.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/JNDIFactory.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionFactory.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionUtil.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityDataLoader.java ofbiz/trunk/framework/geronimo/src/org/ofbiz/geronimo/GeronimoTransactionFactory.java ofbiz/trunk/framework/service/src/org/ofbiz/service/ServiceDispatcher.java Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearch.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearch.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearch.java (original) +++ ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearch.java Fri Jun 7 08:39:44 2013 @@ -647,7 +647,7 @@ public class ProductSearch { this.entityConditionList.add(topCond); - Debug.logInfo("topCond=" + topCond.makeWhereString(null, FastList.<EntityConditionParam>newInstance(), EntityConfigUtil.getDatasourceInfo(delegator.getEntityHelperName("Product"))), module); + Debug.logInfo("topCond=" + topCond.makeWhereString(null, FastList.<EntityConditionParam>newInstance(), EntityConfigUtil.getDatasource(delegator.getEntityHelperName("Product"))), module); } public EntityListIterator doQuery(Delegator delegator) { Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java (original) +++ ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java Fri Jun 7 08:39:44 2013 @@ -56,6 +56,7 @@ import org.ofbiz.base.util.UtilMisc; import org.ofbiz.base.util.UtilProperties; import org.ofbiz.base.util.UtilValidate; import org.ofbiz.entity.Delegator; +import org.ofbiz.entity.GenericEntityConfException; import org.ofbiz.entity.GenericEntityException; import org.ofbiz.entity.GenericValue; import org.ofbiz.entity.model.ModelEntity; @@ -367,14 +368,18 @@ public class CommonServices { } public static Map<String, Object> displayXaDebugInfo(DispatchContext dctx, Map<String, ?> context) { - if (TransactionUtil.debugResources) { - if (UtilValidate.isNotEmpty(TransactionUtil.debugResMap)) { - TransactionUtil.logRunningTx(); + try { + if (TransactionUtil.debugResources()) { + if (UtilValidate.isNotEmpty(TransactionUtil.debugResMap)) { + TransactionUtil.logRunningTx(); + } else { + Debug.logInfo("No running transaction to display.", module); + } } else { - Debug.logInfo("No running transaction to display.", module); + Debug.logInfo("Debug resources is disabled.", module); } - } else { - Debug.logInfo("Debug resources is disabled.", module); + } catch (GenericEntityConfException e) { + return ServiceUtil.returnError(e.getMessage()); } return ServiceUtil.returnSuccess(); Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java Fri Jun 7 08:39:44 2013 @@ -48,9 +48,9 @@ import org.ofbiz.base.util.UtilValidate; import org.ofbiz.base.util.UtilXml; import org.ofbiz.entity.cache.Cache; import org.ofbiz.entity.condition.EntityCondition; -import org.ofbiz.entity.config.DatasourceInfo; import org.ofbiz.entity.config.DelegatorInfo; import org.ofbiz.entity.config.EntityConfigUtil; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.datasource.GenericHelper; import org.ofbiz.entity.datasource.GenericHelperFactory; import org.ofbiz.entity.datasource.GenericHelperInfo; @@ -271,16 +271,16 @@ public class GenericDelegator implements // get the helper and if configured, do the datasource check GenericHelper helper = GenericHelperFactory.getHelper(helperInfo); - DatasourceInfo datasourceInfo = EntityConfigUtil.getDatasourceInfo(helperBaseName); - if (datasourceInfo.checkOnStart) { - if (Debug.infoOn()) { - Debug.logInfo("Doing database check as requested in entityengine.xml with addMissing=" + datasourceInfo.addMissingOnStart, module); - } - try { - helper.checkDataSource(this.getModelEntityMapByGroup(groupName), null, datasourceInfo.addMissingOnStart); - } catch (GenericEntityException e) { - Debug.logWarning(e, e.getMessage(), module); + try { + Datasource datasource = EntityConfigUtil.getDatasource(helperBaseName); + if (datasource.getCheckOnStart()) { + if (Debug.infoOn()) { + Debug.logInfo("Doing database check as requested in entityengine.xml with addMissing=" + datasource.getAddMissingOnStart(), module); + } + helper.checkDataSource(this.getModelEntityMapByGroup(groupName), null, datasource.getAddMissingOnStart()); } + } catch (GenericEntityException e) { + Debug.logWarning(e, e.getMessage(), module); } } } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityComparisonOperator.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityComparisonOperator.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityComparisonOperator.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityComparisonOperator.java Fri Jun 7 08:39:44 2013 @@ -30,7 +30,7 @@ import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.base.util.UtilValidate; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericModelException; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.model.ModelEntity; import org.ofbiz.entity.model.ModelField; @@ -76,7 +76,7 @@ public abstract class EntityComparisonOp } @Override - public void addSqlValue(StringBuilder sql, ModelEntity entity, List<EntityConditionParam> entityConditionParams, boolean compat, L lhs, R rhs, DatasourceInfo datasourceInfo) { + public void addSqlValue(StringBuilder sql, ModelEntity entity, List<EntityConditionParam> entityConditionParams, boolean compat, L lhs, R rhs, Datasource datasourceInfo) { //Debug.logInfo("EntityComparisonOperator.addSqlValue field=" + lhs + ", value=" + rhs + ", value type=" + (rhs == null ? "null object" : rhs.getClass().getName()), module); // if this is an IN operator and the rhs Object isEmpty, add "1=0" instead of the normal SQL. Note that "FALSE" does not work with all databases. @@ -110,12 +110,12 @@ public abstract class EntityComparisonOp return false; } - protected void makeRHSWhereString(ModelEntity entity, List<EntityConditionParam> entityConditionParams, StringBuilder sql, ModelField field, R rhs, DatasourceInfo datasourceInfo) { + protected void makeRHSWhereString(ModelEntity entity, List<EntityConditionParam> entityConditionParams, StringBuilder sql, ModelField field, R rhs, Datasource datasourceInfo) { sql.append(' ').append(getCode()).append(' '); makeRHSWhereStringValue(entity, entityConditionParams, sql, field, rhs, datasourceInfo); } - protected void makeRHSWhereStringValue(ModelEntity entity, List<EntityConditionParam> entityConditionParams, StringBuilder sql, ModelField field, R rhs, DatasourceInfo datasourceInfo) { + protected void makeRHSWhereStringValue(ModelEntity entity, List<EntityConditionParam> entityConditionParams, StringBuilder sql, ModelField field, R rhs, Datasource datasourceInfo) { if (rhs instanceof EntityConditionValue) { EntityConditionValue ecv = (EntityConditionValue) rhs; ecv.addSqlValue(sql, entity, entityConditionParams, false, datasourceInfo); Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityCondition.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityCondition.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityCondition.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityCondition.java Fri Jun 7 08:39:44 2013 @@ -30,7 +30,7 @@ import org.ofbiz.base.lang.IsEmpty; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericEntity; import org.ofbiz.entity.GenericModelException; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.model.ModelEntity; /** @@ -146,7 +146,7 @@ public abstract class EntityCondition ex throw new IllegalArgumentException(getClass().getName() + ".accept not implemented"); } - abstract public String makeWhereString(ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, DatasourceInfo datasourceInfo); + abstract public String makeWhereString(ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, Datasource datasourceInfo); abstract public void checkCondition(ModelEntity modelEntity) throws GenericModelException; Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionBase.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionBase.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionBase.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionBase.java Fri Jun 7 08:39:44 2013 @@ -25,7 +25,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.jdbc.SqlJdbcUtil; import org.ofbiz.entity.model.ModelEntity; import org.ofbiz.entity.model.ModelField; @@ -58,7 +58,7 @@ public abstract class EntityConditionBas return modelField; } - protected String getColName(Map<String, String> tableAliases, ModelEntity modelEntity, String fieldName, boolean includeTableNamePrefix, DatasourceInfo datasourceInfo) { + protected String getColName(Map<String, String> tableAliases, ModelEntity modelEntity, String fieldName, boolean includeTableNamePrefix, Datasource datasourceInfo) { if (modelEntity == null) return fieldName; return getColName(tableAliases, modelEntity, getField(modelEntity, fieldName), fieldName, includeTableNamePrefix, datasourceInfo); } @@ -73,11 +73,11 @@ public abstract class EntityConditionBas return colName; } - protected String getColName(Map<String, String> tableAliases, ModelEntity modelEntity, ModelField modelField, String fieldName, boolean includeTableNamePrefix, DatasourceInfo datasourceInfo) { + protected String getColName(Map<String, String> tableAliases, ModelEntity modelEntity, ModelField modelField, String fieldName, boolean includeTableNamePrefix, Datasource datasourceInfo) { if (modelEntity == null || modelField == null) return fieldName; // if this is a view entity and we are configured to alias the views, use the alias here instead of the composite (ie table.column) field name - if (datasourceInfo != null && datasourceInfo.aliasViews && modelEntity instanceof ModelViewEntity) { + if (datasourceInfo != null && datasourceInfo.getAliasViewColumns() && modelEntity instanceof ModelViewEntity) { ModelViewEntity modelViewEntity = (ModelViewEntity) modelEntity; ModelAlias modelAlias = modelViewEntity.getAlias(fieldName); if (modelAlias != null) { Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionFunction.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionFunction.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionFunction.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionFunction.java Fri Jun 7 08:39:44 2013 @@ -24,7 +24,7 @@ import java.util.Map; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericModelException; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.model.ModelEntity; /** @@ -106,7 +106,7 @@ public abstract class EntityConditionFun } @Override - public String makeWhereString(ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, DatasourceInfo datasourceInfo) { + public String makeWhereString(ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, Datasource datasourceInfo) { StringBuilder sb = new StringBuilder(); sb.append(codeString).append('('); sb.append(condition.makeWhereString(modelEntity, entityConditionParams, datasourceInfo)); Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionListBase.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionListBase.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionListBase.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionListBase.java Fri Jun 7 08:39:44 2013 @@ -26,7 +26,7 @@ import java.util.Map; import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericModelException; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.model.ModelEntity; /** @@ -92,7 +92,7 @@ public abstract class EntityConditionLis } @Override - public String makeWhereString(ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, DatasourceInfo datasourceInfo) { + public String makeWhereString(ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, Datasource datasourceInfo) { // if (Debug.verboseOn()) Debug.logVerbose("makeWhereString for entity " + modelEntity.getEntityName(), module); StringBuilder sql = new StringBuilder(); operator.addSqlValue(sql, modelEntity, entityConditionParams, conditionList, datasourceInfo); Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionSubSelect.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionSubSelect.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionSubSelect.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionSubSelect.java Fri Jun 7 08:39:44 2013 @@ -25,7 +25,7 @@ import org.ofbiz.base.util.Debug; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericEntityException; import org.ofbiz.entity.GenericModelException; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.jdbc.SqlJdbcUtil; import org.ofbiz.entity.model.ModelEntity; import org.ofbiz.entity.model.ModelField; @@ -58,7 +58,7 @@ public class EntityConditionSubSelect ex @Override public void addSqlValue(StringBuilder sql, Map<String, String> tableAliases, ModelEntity parentModelEntity, List<EntityConditionParam> entityConditionParams, - boolean includeTableNamePrefix, DatasourceInfo datasourceInfo) { + boolean includeTableNamePrefix, Datasource datasourceInfo) { if (localModelEntity instanceof ModelViewEntity && datasourceInfo == null) { throw new IllegalArgumentException("Call to EntityConditionSubSelect.addSqlValue with datasourceInfo=null which is not allowed because the local entity [" + this.localModelEntity.getEntityName() + "] is a view entity"); } @@ -85,7 +85,7 @@ public class EntityConditionSubSelect ex entityCondWhereString = this.whereCond.makeWhereString(localModelEntity, entityConditionParams, datasourceInfo); } - String viewClause = SqlJdbcUtil.makeViewWhereClause(localModelEntity, (datasourceInfo != null ? datasourceInfo.joinStyle : null)); + String viewClause = SqlJdbcUtil.makeViewWhereClause(localModelEntity, (datasourceInfo != null ? datasourceInfo.getJoinStyle() : null)); if (viewClause.length() > 0) { if (entityCondWhereString.length() > 0) { whereString.append("("); Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionValue.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionValue.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionValue.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityConditionValue.java Fri Jun 7 08:39:44 2013 @@ -25,7 +25,7 @@ import java.util.Map; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericEntity; import org.ofbiz.entity.GenericModelException; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.model.ModelEntity; import org.ofbiz.entity.model.ModelField; @@ -39,12 +39,12 @@ public abstract class EntityConditionVal public abstract ModelField getModelField(ModelEntity modelEntity); public void addSqlValue(StringBuilder sql, ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, boolean includeTableNamePrefix, - DatasourceInfo datasourceinfo) { + Datasource datasourceinfo) { addSqlValue(sql, emptyAliases, modelEntity, entityConditionParams, includeTableNamePrefix, datasourceinfo); } public abstract void addSqlValue(StringBuilder sql, Map<String, String> tableAliases, ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, - boolean includeTableNamePrefix, DatasourceInfo datasourceinfo); + boolean includeTableNamePrefix, Datasource datasourceinfo); public abstract void validateSql(ModelEntity modelEntity) throws GenericModelException; Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityDateFilterCondition.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityDateFilterCondition.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityDateFilterCondition.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityDateFilterCondition.java Fri Jun 7 08:39:44 2013 @@ -26,7 +26,7 @@ import java.util.Map; import org.ofbiz.base.util.UtilDateTime; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericModelException; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.model.ModelEntity; /** @@ -55,7 +55,7 @@ public class EntityDateFilterCondition e } @Override - public String makeWhereString(ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, DatasourceInfo datasourceInfo) { + public String makeWhereString(ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, Datasource datasourceInfo) { EntityCondition condition = makeCondition(); return condition.makeWhereString(modelEntity, entityConditionParams, datasourceInfo); } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityExpr.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityExpr.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityExpr.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityExpr.java Fri Jun 7 08:39:44 2013 @@ -31,7 +31,7 @@ import org.ofbiz.entity.EntityCryptoExce import org.ofbiz.entity.GenericEntity; import org.ofbiz.entity.GenericEntityException; import org.ofbiz.entity.GenericModelException; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.model.ModelEntity; import org.ofbiz.entity.model.ModelField; import org.ofbiz.entity.model.ModelFieldType; @@ -119,7 +119,7 @@ public class EntityExpr extends EntityCo } @Override - public String makeWhereString(ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, DatasourceInfo datasourceInfo) { + public String makeWhereString(ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, Datasource datasourceInfo) { // if (Debug.verboseOn()) Debug.logVerbose("makeWhereString for entity " + modelEntity.getEntityName(), module); this.checkRhsType(modelEntity, null); Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityFieldValue.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityFieldValue.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityFieldValue.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityFieldValue.java Fri Jun 7 08:39:44 2013 @@ -28,7 +28,7 @@ import org.ofbiz.base.util.UtilValidate; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericEntity; import org.ofbiz.entity.GenericModelException; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.model.ModelEntity; import org.ofbiz.entity.model.ModelField; import org.ofbiz.entity.model.ModelViewEntity; @@ -123,7 +123,7 @@ public class EntityFieldValue extends En } @Override - public void addSqlValue(StringBuilder sql, Map<String, String> tableAliases, ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, boolean includeTableNamePrefix, DatasourceInfo datasourceInfo) { + public void addSqlValue(StringBuilder sql, Map<String, String> tableAliases, ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, boolean includeTableNamePrefix, Datasource datasourceInfo) { if (this.modelViewEntity != null) { // NOTE: this section is a bit of a hack; the other code is terribly complex and really needs to be refactored to incorporate support for this Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityFunction.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityFunction.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityFunction.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityFunction.java Fri Jun 7 08:39:44 2013 @@ -28,7 +28,7 @@ import javolution.lang.Reusable; import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericModelException; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.model.ModelEntity; import org.ofbiz.entity.model.ModelField; @@ -246,7 +246,7 @@ public abstract class EntityFunction<T e } @Override - public void addSqlValue(StringBuilder sql, Map<String, String> tableAliases, ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, boolean includeTableNamePrefix, DatasourceInfo datasourceinfo) { + public void addSqlValue(StringBuilder sql, Map<String, String> tableAliases, ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, boolean includeTableNamePrefix, Datasource datasourceinfo) { sql.append(function.name()).append('('); if (nested != null) { nested.addSqlValue(sql, tableAliases, modelEntity, entityConditionParams, includeTableNamePrefix, datasourceinfo); Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityJoinOperator.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityJoinOperator.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityJoinOperator.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityJoinOperator.java Fri Jun 7 08:39:44 2013 @@ -29,7 +29,7 @@ import org.ofbiz.base.util.UtilValidate; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericEntity; import org.ofbiz.entity.GenericModelException; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.model.ModelEntity; /** @@ -47,14 +47,14 @@ public class EntityJoinOperator extends } @Override - public void addSqlValue(StringBuilder sql, ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, boolean compat, EntityCondition lhs, EntityCondition rhs, DatasourceInfo datasourceInfo) { + public void addSqlValue(StringBuilder sql, ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, boolean compat, EntityCondition lhs, EntityCondition rhs, Datasource datasourceInfo) { List<EntityCondition> conditions = new LinkedList<EntityCondition>(); conditions.add(lhs); conditions.add(rhs); addSqlValue(sql, modelEntity, entityConditionParams, conditions, datasourceInfo); } - public void addSqlValue(StringBuilder sql, ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, List<? extends EntityCondition> conditionList, DatasourceInfo datasourceInfo) { + public void addSqlValue(StringBuilder sql, ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, List<? extends EntityCondition> conditionList, Datasource datasourceInfo) { if (UtilValidate.isNotEmpty(conditionList)) { boolean hadSomething = false; Iterator<? extends EntityCondition> conditionIter = conditionList.iterator(); Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityOperator.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityOperator.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityOperator.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityOperator.java Fri Jun 7 08:39:44 2013 @@ -30,7 +30,7 @@ import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericEntity; import org.ofbiz.entity.GenericModelException; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.model.ModelEntity; import org.ofbiz.entity.model.ModelField; @@ -96,7 +96,7 @@ public abstract class EntityOperator<L, @Override public boolean compare(Comparable<Object> lhs, Object rhs) { return EntityComparisonOperator.compareEqual(lhs, rhs); } @Override - protected void makeRHSWhereString(ModelEntity entity, List<EntityConditionParam> entityConditionParams, StringBuilder sb, ModelField field, Object rhs, DatasourceInfo datasourceInfo) { + protected void makeRHSWhereString(ModelEntity entity, List<EntityConditionParam> entityConditionParams, StringBuilder sb, ModelField field, Object rhs, Datasource datasourceInfo) { if (rhs == null || rhs == GenericEntity.NULL_FIELD) { //Debug.logInfo("makeRHSWhereString: field IS NULL: " + field.getName(), module); sb.append(" IS NULL"); @@ -112,7 +112,7 @@ public abstract class EntityOperator<L, @Override public boolean compare(Comparable<Object> lhs, Object rhs) { return EntityComparisonOperator.compareNotEqual(lhs, rhs); } @Override - protected void makeRHSWhereString(ModelEntity entity, List<EntityConditionParam> entityConditionParams, StringBuilder sb, ModelField field, Object rhs, DatasourceInfo datasourceInfo) { + protected void makeRHSWhereString(ModelEntity entity, List<EntityConditionParam> entityConditionParams, StringBuilder sb, ModelField field, Object rhs, Datasource datasourceInfo) { if (rhs == null || rhs == GenericEntity.NULL_FIELD) { sb.append(" IS NOT NULL"); } else { @@ -161,14 +161,14 @@ public abstract class EntityOperator<L, @Override public boolean compare(Comparable<Object> lhs, Collection<Comparable<Object>> rhs) { return EntityComparisonOperator.compareIn(lhs, rhs); } @Override - protected void makeRHSWhereStringValue(ModelEntity entity, List<EntityConditionParam> entityConditionParams, StringBuilder sb, ModelField field, Collection<Comparable<Object>> rhs, DatasourceInfo datasourceInfo) { appendRHSList(entityConditionParams, sb, field, rhs); } + protected void makeRHSWhereStringValue(ModelEntity entity, List<EntityConditionParam> entityConditionParams, StringBuilder sb, ModelField field, Collection<Comparable<Object>> rhs, Datasource datasourceInfo) { appendRHSList(entityConditionParams, sb, field, rhs); } }; static { register("in", IN); } public static final EntityComparisonOperator<?,?> BETWEEN = new CollectionEntityComparisonOperator<Object>(ID_BETWEEN, "BETWEEN") { @Override public boolean compare(Comparable<Object> lhs, Collection<Comparable<Object>> rhs) { return EntityComparisonOperator.compareIn(lhs, rhs); } @Override - protected void makeRHSWhereStringValue(ModelEntity entity, List<EntityConditionParam> entityConditionParams, StringBuilder sb, ModelField field, Collection<Comparable<Object>> rhs, DatasourceInfo datasourceInfo) { appendRHSBetweenList(entityConditionParams, sb, field, rhs); } + protected void makeRHSWhereStringValue(ModelEntity entity, List<EntityConditionParam> entityConditionParams, StringBuilder sb, ModelField field, Collection<Comparable<Object>> rhs, Datasource datasourceInfo) { appendRHSBetweenList(entityConditionParams, sb, field, rhs); } }; static { register("between", BETWEEN); } public static final EntityComparisonOperator<?,?> NOT = new EntityComparisonOperator<Object, EntityCondition>(ID_NOT, "NOT") { @@ -194,7 +194,7 @@ public abstract class EntityOperator<L, @Override public boolean compare(Comparable<Object> lhs, Collection<Comparable<Object>> rhs) { return !EntityComparisonOperator.compareIn(lhs, rhs); } @Override - protected void makeRHSWhereStringValue(ModelEntity entity, List<EntityConditionParam> entityConditionParams, StringBuilder sb, ModelField field, Collection<Comparable<Object>> rhs, DatasourceInfo datasourceInfo) { appendRHSList(entityConditionParams, sb, field, rhs); } + protected void makeRHSWhereStringValue(ModelEntity entity, List<EntityConditionParam> entityConditionParams, StringBuilder sb, ModelField field, Collection<Comparable<Object>> rhs, Datasource datasourceInfo) { appendRHSList(entityConditionParams, sb, field, rhs); } }; static { register("not-in", NOT_IN); } @@ -290,11 +290,11 @@ public abstract class EntityOperator<L, public abstract boolean isEmpty(L lhs, R rhs); public abstract boolean mapMatches(Delegator delegator, Map<String, ? extends Object> map, L lhs, R rhs); public abstract void validateSql(ModelEntity entity, L lhs, R rhs) throws GenericModelException; - public void addSqlValue(StringBuilder sql, ModelEntity entity, List<EntityConditionParam> entityConditionParams, L lhs, R rhs, DatasourceInfo datasourceInfo) { + public void addSqlValue(StringBuilder sql, ModelEntity entity, List<EntityConditionParam> entityConditionParams, L lhs, R rhs, Datasource datasourceInfo) { addSqlValue(sql, entity, entityConditionParams, true, lhs, rhs, datasourceInfo); } - public abstract void addSqlValue(StringBuilder sql, ModelEntity entity, List<EntityConditionParam> entityConditionParams, boolean compat, L lhs, R rhs, DatasourceInfo datasourceInfo); + public abstract void addSqlValue(StringBuilder sql, ModelEntity entity, List<EntityConditionParam> entityConditionParams, boolean compat, L lhs, R rhs, Datasource datasourceInfo); public abstract EntityCondition freeze(L lhs, R rhs); public abstract void visit(EntityConditionVisitor visitor, L lhs, R rhs); Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityWhereString.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityWhereString.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityWhereString.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/EntityWhereString.java Fri Jun 7 08:39:44 2013 @@ -25,7 +25,7 @@ import org.ofbiz.base.util.UtilValidate; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericEntity; import org.ofbiz.entity.GenericModelException; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.model.ModelEntity; /** @@ -58,7 +58,7 @@ public class EntityWhereString extends E } @Override - public String makeWhereString(ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, DatasourceInfo datasourceInfo) { + public String makeWhereString(ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, Datasource datasourceInfo) { return sqlString; } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/OrderByItem.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/OrderByItem.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/OrderByItem.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/OrderByItem.java Fri Jun 7 08:39:44 2013 @@ -24,7 +24,7 @@ import java.util.Comparator; import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.entity.GenericEntity; import org.ofbiz.entity.GenericModelException; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.model.ModelEntity; public class OrderByItem implements Comparator<GenericEntity> { @@ -167,14 +167,14 @@ public class OrderByItem implements Comp return descending ? -result : result; } - public String makeOrderByString(ModelEntity modelEntity, boolean includeTablenamePrefix, DatasourceInfo datasourceInfo) { + public String makeOrderByString(ModelEntity modelEntity, boolean includeTablenamePrefix, Datasource datasourceInfo) { StringBuilder sb = new StringBuilder(); makeOrderByString(sb, modelEntity, includeTablenamePrefix, datasourceInfo); return sb.toString(); } - public void makeOrderByString(StringBuilder sb, ModelEntity modelEntity, boolean includeTablenamePrefix, DatasourceInfo datasourceInfo) { - if ((nullsFirst != null) && (!datasourceInfo.useOrderByNulls)) { + public void makeOrderByString(StringBuilder sb, ModelEntity modelEntity, boolean includeTablenamePrefix, Datasource datasourceInfo) { + if ((nullsFirst != null) && (!datasourceInfo.getUseOrderByNulls())) { sb.append("CASE WHEN "); getValue().addSqlValue(sb, modelEntity, null, includeTablenamePrefix, datasourceInfo); sb.append(" IS NULL THEN "); @@ -187,7 +187,7 @@ public class OrderByItem implements Comp getValue().addSqlValue(sb, modelEntity, null, includeTablenamePrefix, datasourceInfo); sb.append(descending ? " DESC" : " ASC"); - if ((nullsFirst != null) && (datasourceInfo.useOrderByNulls)) { + if ((nullsFirst != null) && (datasourceInfo.getUseOrderByNulls())) { sb.append(nullsFirst ? " NULLS FIRST" : " NULLS LAST"); } } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/OrderByList.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/OrderByList.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/OrderByList.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/condition/OrderByList.java Fri Jun 7 08:39:44 2013 @@ -26,7 +26,7 @@ import java.util.List; import org.ofbiz.entity.GenericEntity; import org.ofbiz.entity.GenericModelException; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.model.ModelEntity; public class OrderByList implements Comparator<GenericEntity> { @@ -77,13 +77,13 @@ public class OrderByList implements Comp } } - public String makeOrderByString(ModelEntity modelEntity, boolean includeTablenamePrefix, DatasourceInfo datasourceInfo) { + public String makeOrderByString(ModelEntity modelEntity, boolean includeTablenamePrefix, Datasource datasourceInfo) { StringBuilder sb = new StringBuilder(); makeOrderByString(sb, modelEntity, includeTablenamePrefix, datasourceInfo); return sb.toString(); } - public void makeOrderByString(StringBuilder sb, ModelEntity modelEntity, boolean includeTablenamePrefix, DatasourceInfo datasourceInfo) { + public void makeOrderByString(StringBuilder sb, ModelEntity modelEntity, boolean includeTablenamePrefix, Datasource datasourceInfo) { if (!orderByList.isEmpty()) { sb.append(" ORDER BY "); } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigListener.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigListener.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigListener.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigListener.java Fri Jun 7 08:39:44 2013 @@ -30,6 +30,6 @@ public interface EntityConfigListener { * * @param entityConfig The new <code>EntityConfig</code> instance. */ - void onEntityConfigChange(EntityConfig entityConfig); + void onEntityConfigChange(EntityConfig entityConfig) throws Exception; } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigUtil.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigUtil.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigUtil.java Fri Jun 7 08:39:44 2013 @@ -19,10 +19,10 @@ package org.ofbiz.entity.config; import java.net.URL; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicReference; import org.ofbiz.base.config.GenericConfigException; @@ -35,7 +35,11 @@ import org.ofbiz.base.util.UtilXml; import org.ofbiz.base.util.cache.UtilCache; import org.ofbiz.entity.GenericEntityConfException; import org.ofbiz.entity.GenericEntityException; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.config.model.EntityConfig; +import org.ofbiz.entity.config.model.InlineJdbc; +import org.ofbiz.entity.jdbc.ConnectionFactory; +import org.ofbiz.entity.transaction.TransactionFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -49,7 +53,6 @@ public class EntityConfigUtil { public static final String ENTITY_ENGINE_XML_FILENAME = "entityengine.xml"; // Keep the EntityConfig instance in a cache - so the configuration can be reloaded at run-time. There will be only one EntityConfig instance in the cache. private static final UtilCache<String, EntityConfig> entityConfigCache = UtilCache.createUtilCache("entity.EntityConfig", 0, 0, false); - private static final List<EntityConfigListener> configListeners = new CopyOnWriteArrayList<EntityConfigListener>(); public static String createConfigFileLineNumberText(Element element) { if (element.getUserData("startLine") != null) { @@ -65,15 +68,20 @@ public class EntityConfigUtil { public static EntityConfig getEntityConfig() throws GenericEntityConfException { EntityConfig instance = entityConfigCache.get("instance"); if (instance == null) { - Element entityConfigElement = getXmlDocument().getDocumentElement(); - instance = new EntityConfig(entityConfigElement); - entityConfigCache.putIfAbsent("instance", instance); - instance = entityConfigCache.get("instance"); - for (EntityConfigListener listener : configListeners) { - try { - listener.onEntityConfigChange(instance); - } catch (Exception e) { - Debug.logError(e, "Exception thrown while notifying listener " + listener + ": ", module); + synchronized (EntityConfigUtil.class) { + // Sync ensures resources are initialized properly - do not remove. + Element entityConfigElement = getXmlDocument().getDocumentElement(); + instance = new EntityConfig(entityConfigElement); + EntityConfig previousInstance = entityConfigCache.putIfAbsent("instance", instance); + instance = entityConfigCache.get("instance"); + if (previousInstance == null) { + for (EntityConfigListener listener : getConfigListeners()) { + try { + listener.onEntityConfigChange(instance); + } catch (Exception e) { + Debug.logError(e, "Exception thrown while notifying listener " + listener + ": ", module); + } + } } } } @@ -92,20 +100,18 @@ public class EntityConfigUtil { } } + private static List<EntityConfigListener> getConfigListeners() { + // TODO: Build a list of listeners. Listeners must be notified in a specific order + // so resources can be deallocated/allocated properly and so dependencies can be followed. + List<EntityConfigListener> configListeners = new ArrayList<EntityConfigListener>(); + configListeners.add(TransactionFactory.getConfigListener()); + configListeners.add(ConnectionFactory.getConfigListener()); + return configListeners; + } + private static volatile AtomicReference<EntityConfigUtil> configRef = new AtomicReference<EntityConfigUtil>(); // ========== engine info fields ========== - private final String txFactoryClass; - private final String txFactoryUserTxJndiName; - private final String txFactoryUserTxJndiServerName; - private final String txFactoryTxMgrJndiName; - private final String txFactoryTxMgrJndiServerName; - private final String connFactoryClass; - /** - * Create Begin stacktrace when enlisting transactions - */ - private final Boolean debugXAResources; - private final Map<String, ResourceLoaderInfo> resourceLoaderInfos = new HashMap<String, ResourceLoaderInfo>(); private final Map<String, DelegatorInfo> delegatorInfos = new HashMap<String, DelegatorInfo>(); private final Map<String, EntityModelReaderInfo> entityModelReaderInfos = new HashMap<String, EntityModelReaderInfo>(); @@ -113,7 +119,6 @@ public class EntityConfigUtil { private final Map<String, EntityEcaReaderInfo> entityEcaReaderInfos = new HashMap<String, EntityEcaReaderInfo>(); private final Map<String, EntityDataReaderInfo> entityDataReaderInfos = new HashMap<String, EntityDataReaderInfo>(); private final Map<String, FieldTypeInfo> fieldTypeInfos = new HashMap<String, FieldTypeInfo>(); - private final Map<String, DatasourceInfo> datasourceInfos = new HashMap<String, DatasourceInfo>(); private static Element getXmlRootElement() throws GenericEntityConfException { try { @@ -145,46 +150,6 @@ public class EntityConfigUtil { } private EntityConfigUtil(Element rootElement) throws GenericEntityException { - // load the transaction factory - Element transactionFactoryElement = UtilXml.firstChildElement(rootElement, "transaction-factory"); - if (transactionFactoryElement == null) { - throw new GenericEntityConfException("ERROR: no transaction-factory definition was found in " + ENTITY_ENGINE_XML_FILENAME); - } - - txFactoryClass = transactionFactoryElement.getAttribute("class"); - - Element userTxJndiElement = UtilXml.firstChildElement(transactionFactoryElement, "user-transaction-jndi"); - if (userTxJndiElement != null) { - txFactoryUserTxJndiName = userTxJndiElement.getAttribute("jndi-name"); - txFactoryUserTxJndiServerName = userTxJndiElement.getAttribute("jndi-server-name"); - } else { - txFactoryUserTxJndiName = null; - txFactoryUserTxJndiServerName = null; - } - - Element txMgrJndiElement = UtilXml.firstChildElement(transactionFactoryElement, "transaction-manager-jndi"); - if (txMgrJndiElement != null) { - txFactoryTxMgrJndiName = txMgrJndiElement.getAttribute("jndi-name"); - txFactoryTxMgrJndiServerName = txMgrJndiElement.getAttribute("jndi-server-name"); - } else { - txFactoryTxMgrJndiName = null; - txFactoryTxMgrJndiServerName = null; - } - - // load the connection factory - Element connectionFactoryElement = UtilXml.firstChildElement(rootElement, "connection-factory"); - if (connectionFactoryElement == null) { - throw new GenericEntityConfException("ERROR: no connection-factory definition was found in " + ENTITY_ENGINE_XML_FILENAME); - } - - connFactoryClass = connectionFactoryElement.getAttribute("class"); - - Element debugXaResourcesElement = UtilXml.firstChildElement(rootElement, "debug-xa-resources"); - if (debugXaResourcesElement == null) { // This should not be since debug-xa-resources is required, but safer... - debugXAResources = false; - } else { - debugXAResources = "true".equals(debugXaResourcesElement.getAttribute("value")); - } // not load all of the maps... // resource-loader - resourceLoaderInfos @@ -228,43 +193,38 @@ public class EntityConfigUtil { FieldTypeInfo fieldTypeInfo = new FieldTypeInfo(curElement); fieldTypeInfos.put(fieldTypeInfo.name, fieldTypeInfo); } + } - // datasource - datasourceInfos - for (Element curElement: UtilXml.childElementList(rootElement, "datasource")) { - DatasourceInfo datasourceInfo = new DatasourceInfo(curElement); - datasourceInfos.put(datasourceInfo.name, datasourceInfo); - } + public static String getTxFactoryClass() throws GenericEntityConfException { + return getEntityConfig().getTransactionFactory().getClassName(); } - public static String getTxFactoryClass() { - return configRef.get().txFactoryClass; + public static String getTxFactoryUserTxJndiName() throws GenericEntityConfException { + return getEntityConfig().getTransactionFactory().getUserTransactionJndi().getJndiName(); } - public static String getTxFactoryUserTxJndiName() { - return configRef.get().txFactoryUserTxJndiName; + public static String getTxFactoryUserTxJndiServerName() throws GenericEntityConfException { + return getEntityConfig().getTransactionFactory().getUserTransactionJndi().getJndiServerName(); } - public static String getTxFactoryUserTxJndiServerName() { - return configRef.get().txFactoryUserTxJndiServerName; + public static String getTxFactoryTxMgrJndiName() throws GenericEntityConfException { + return getEntityConfig().getTransactionFactory().getTransactionManagerJndi().getJndiName(); } - public static String getTxFactoryTxMgrJndiName() { - return configRef.get().txFactoryTxMgrJndiName; + public static String getTxFactoryTxMgrJndiServerName() throws GenericEntityConfException { + return getEntityConfig().getTransactionFactory().getTransactionManagerJndi().getJndiServerName(); } /** * @return true Create Begin stacktrace when enlisting transactions + * @throws GenericEntityConfException */ - public static boolean isDebugXAResource() { - return configRef.get().debugXAResources; - } - - public static String getTxFactoryTxMgrJndiServerName() { - return configRef.get().txFactoryTxMgrJndiServerName; + public static boolean isDebugXAResource() throws GenericEntityConfException { + return getEntityConfig().getDebugXaResources().getValue(); } - public static String getConnectionFactoryClass() { - return configRef.get().connFactoryClass; + public static String getConnectionFactoryClass() throws GenericEntityConfException { + return getEntityConfig().getConnectionFactory().getClassName(); } public static ResourceLoaderInfo getResourceLoaderInfo(String name) { @@ -295,29 +255,37 @@ public class EntityConfigUtil { return configRef.get().fieldTypeInfos.get(name); } - public static DatasourceInfo getDatasourceInfo(String name) { - return configRef.get().datasourceInfos.get(name); + public static Datasource getDatasource(String name) { + try { + return getEntityConfig().getDatasource(name); + } catch (GenericEntityConfException e) { + // FIXME: Doing this so we don't have to rewrite the entire API. + throw new RuntimeException(e); + } } - public static Map<String, DatasourceInfo> getDatasourceInfos() { - return configRef.get().datasourceInfos; + public static Map<String, Datasource> getDatasources() throws GenericEntityConfException { + return getEntityConfig().getDatasourceMap(); } - public static String getJdbcPassword(Element inlineJdbcElement) { - String jdbcPassword = inlineJdbcElement.getAttribute("jdbc-password"); + public static String getJdbcPassword(InlineJdbc inlineJdbcElement) { + String jdbcPassword = inlineJdbcElement.getJdbcPassword(); if (UtilValidate.isNotEmpty(jdbcPassword)) { return jdbcPassword; } - String jdbcPasswordLookup = inlineJdbcElement.getAttribute("jdbc-password-lookup"); + String jdbcPasswordLookup = inlineJdbcElement.getJdbcPasswordLookup(); if (UtilValidate.isEmpty(jdbcPasswordLookup)) { - Debug.logError("no @jdbc-password or @jdbc-password-lookup specified for inline-jdbc element: %s@%d:%d", module, inlineJdbcElement.getUserData("systemId"), inlineJdbcElement.getUserData("startLine"), inlineJdbcElement.getUserData("startColumn")); + // FIXME: Include line number in model + // Debug.logError("no @jdbc-password or @jdbc-password-lookup specified for inline-jdbc element: %s@%d:%d", module, inlineJdbcElement.getUserData("systemId"), inlineJdbcElement.getUserData("startLine"), inlineJdbcElement.getUserData("startColumn")); + Debug.logError("no jdbc-password or jdbc-password-lookup specified for inline-jdbc element", module); return null; } String key = "jdbc-password." + jdbcPasswordLookup; jdbcPassword = UtilProperties.getPropertyValue("passwords.properties", key); if (UtilValidate.isEmpty(jdbcPassword)) { - // This is a warning, not an error, as the - Debug.logError("Could not find password %s specified for inline-jdbc element: %s@%d:%d", module, key, inlineJdbcElement.getUserData("systemId"), inlineJdbcElement.getUserData("startLine"), inlineJdbcElement.getUserData("startColumn")); + // FIXME: Include line number in model + // Debug.logError("no @jdbc-password or @jdbc-password-lookup specified for inline-jdbc element: %s@%d:%d", module, inlineJdbcElement.getUserData("systemId"), inlineJdbcElement.getUserData("startLine"), inlineJdbcElement.getUserData("startColumn")); + Debug.logError("no jdbc-password or jdbc-password-lookup specified for inline-jdbc element", module); } return jdbcPassword; } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityConfig.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityConfig.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityConfig.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityConfig.java Fri Jun 7 08:39:44 2013 @@ -21,6 +21,8 @@ package org.ofbiz.entity.config.model; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.HashMap; import org.ofbiz.base.lang.ThreadSafe; import org.ofbiz.base.util.UtilXml; @@ -46,6 +48,7 @@ public final class EntityConfig { private final List<EntityDataReader> entityDataReaderList; // <entity-data-reader> private final List<FieldType> fieldTypeList; // <field-type> private final List<Datasource> datasourceList; // <datasource> + private final Map<String, Datasource> datasourceMap; public EntityConfig(Element element) throws GenericEntityConfException { List<? extends Element> resourceLoaderElementList = UtilXml.childElementList(element, "resource-loader"); @@ -141,10 +144,14 @@ public final class EntityConfig { throw new GenericEntityConfException("<" + element.getNodeName() + "> element child elements <datasource> are missing"); } else { List<Datasource> datasourceList = new ArrayList<Datasource>(datasourceElementList.size()); + Map<String, Datasource> datasourceMap = new HashMap<String, Datasource>(); for (Element datasourceElement : datasourceElementList) { - datasourceList.add(new Datasource(datasourceElement)); + Datasource datasource = new Datasource(datasourceElement); + datasourceList.add(datasource); + datasourceMap.put(datasource.getName(), datasource); } this.datasourceList = Collections.unmodifiableList(datasourceList); + this.datasourceMap = Collections.unmodifiableMap(datasourceMap); } } @@ -202,4 +209,14 @@ public final class EntityConfig { public List<Datasource> getDatasourceList() { return this.datasourceList; } + + /** Returns the specified <code><datasource></code> child element or <code>null</code> if it does not exist. */ + public Datasource getDatasource(String name) { + return this.datasourceMap.get(name); + } + + /** Returns the <code><datasource></code> child elements as a <code>Map</code>. */ + public Map<String, Datasource> getDatasourceMap() { + return this.datasourceMap; + } } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/ConnectionFactoryInterface.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/ConnectionFactoryInterface.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/ConnectionFactoryInterface.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/ConnectionFactoryInterface.java Fri Jun 7 08:39:44 2013 @@ -21,8 +21,8 @@ package org.ofbiz.entity.connection; import java.sql.Connection; import java.sql.SQLException; -import org.w3c.dom.Element; import org.ofbiz.entity.GenericEntityException; +import org.ofbiz.entity.config.model.JdbcElement; import org.ofbiz.entity.datasource.GenericHelperInfo; /** @@ -30,6 +30,6 @@ import org.ofbiz.entity.datasource.Gener */ public interface ConnectionFactoryInterface { - public Connection getConnection(GenericHelperInfo helperInfo, Element configElement) throws SQLException, GenericEntityException; + public Connection getConnection(GenericHelperInfo helperInfo, JdbcElement jdbcElement) throws SQLException, GenericEntityException; public void closeAll(); } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/DBCPConnectionFactory.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/DBCPConnectionFactory.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/DBCPConnectionFactory.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/DBCPConnectionFactory.java Fri Jun 7 08:39:44 2013 @@ -38,11 +38,13 @@ import org.apache.commons.dbcp.managed.X import org.apache.commons.pool.impl.GenericObjectPool; import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.entity.GenericEntityConfException; import org.ofbiz.entity.GenericEntityException; import org.ofbiz.entity.config.EntityConfigUtil; +import org.ofbiz.entity.config.model.InlineJdbc; +import org.ofbiz.entity.config.model.JdbcElement; import org.ofbiz.entity.datasource.GenericHelperInfo; import org.ofbiz.entity.transaction.TransactionFactory; -import org.w3c.dom.Element; /** * DBCPConnectionFactory @@ -52,64 +54,31 @@ public class DBCPConnectionFactory imple public static final String module = DBCPConnectionFactory.class.getName(); protected static final ConcurrentHashMap<String, ManagedDataSource> dsCache = new ConcurrentHashMap<String, ManagedDataSource>(); - public Connection getConnection(GenericHelperInfo helperInfo, Element jdbcElement) throws SQLException, GenericEntityException { + public Connection getConnection(GenericHelperInfo helperInfo, JdbcElement abstractJdbc) throws SQLException, GenericEntityException { String cacheKey = helperInfo.getHelperFullName(); ManagedDataSource mds = dsCache.get(cacheKey); if (mds != null) { return TransactionFactory.getCursorConnection(helperInfo, mds.getConnection()); } + if (!(abstractJdbc instanceof InlineJdbc)) { + throw new GenericEntityConfException("DBCP requires an <inline-jdbc> child element in the <datasource> element"); + } + InlineJdbc jdbcElement = (InlineJdbc) abstractJdbc; // connection properties TransactionManager txMgr = TransactionFactory.getTransactionManager(); - String driverName = jdbcElement.getAttribute("jdbc-driver"); + String driverName = jdbcElement.getJdbcDriver(); - String jdbcUri = UtilValidate.isNotEmpty(helperInfo.getOverrideJdbcUri()) ? helperInfo.getOverrideJdbcUri() : jdbcElement.getAttribute("jdbc-uri"); - String jdbcUsername = UtilValidate.isNotEmpty(helperInfo.getOverrideUsername()) ? helperInfo.getOverrideUsername() : jdbcElement.getAttribute("jdbc-username"); + String jdbcUri = UtilValidate.isNotEmpty(helperInfo.getOverrideJdbcUri()) ? helperInfo.getOverrideJdbcUri() : jdbcElement.getJdbcUri(); + String jdbcUsername = UtilValidate.isNotEmpty(helperInfo.getOverrideUsername()) ? helperInfo.getOverrideUsername() : jdbcElement.getJdbcUsername(); String jdbcPassword = UtilValidate.isNotEmpty(helperInfo.getOverridePassword()) ? helperInfo.getOverridePassword() : EntityConfigUtil.getJdbcPassword(jdbcElement); // pool settings - int maxSize, minSize, timeBetweenEvictionRunsMillis; - try { - maxSize = Integer.parseInt(jdbcElement.getAttribute("pool-maxsize")); - } catch (NumberFormatException nfe) { - Debug.logError("Problems with pool settings [pool-maxsize=" + jdbcElement.getAttribute("pool-maxsize") + "]; the values MUST be numbers, using default of 20.", module); - maxSize = 20; - } catch (Exception e) { - Debug.logError("Problems with pool settings [pool-maxsize], using default of 20.", module); - maxSize = 20; - } - try { - minSize = Integer.parseInt(jdbcElement.getAttribute("pool-minsize")); - } catch (NumberFormatException nfe) { - Debug.logError("Problems with pool settings [pool-minsize=" + jdbcElement.getAttribute("pool-minsize") + "]; the values MUST be numbers, using default of 2.", module); - minSize = 2; - } catch (Exception e) { - Debug.logError("Problems with pool settings [pool-minsize], using default of 2.", module); - minSize = 2; - } - // idle-maxsize, default to half of pool-maxsize - int maxIdle = maxSize / 2; - if (jdbcElement.hasAttribute("idle-maxsize")) { - try { - maxIdle = Integer.parseInt(jdbcElement.getAttribute("idle-maxsize")); - } catch (NumberFormatException nfe) { - Debug.logError("Problems with pool settings [idle-maxsize=" + jdbcElement.getAttribute("idle-maxsize") + "]; the values MUST be numbers, using calculated default of" + (maxIdle > minSize ? maxIdle : minSize) + ".", module); - } catch (Exception e) { - Debug.logError("Problems with pool settings [idle-maxsize], using calculated default of" + (maxIdle > minSize ? maxIdle : minSize) + ".", module); - } - } + int maxSize = jdbcElement.getPoolMaxsize(); + int minSize = jdbcElement.getPoolMinsize(); + int timeBetweenEvictionRunsMillis = jdbcElement.getTimeBetweenEvictionRunsMillis(); + int maxIdle = jdbcElement.getIdleMaxsize(); // Don't allow a maxIdle of less than pool-minsize maxIdle = maxIdle > minSize ? maxIdle : minSize; - - try { - timeBetweenEvictionRunsMillis = Integer.parseInt(jdbcElement.getAttribute("time-between-eviction-runs-millis")); - } catch (NumberFormatException nfe) { - Debug.logError("Problems with pool settings [time-between-eviction-runs-millis=" + jdbcElement.getAttribute("time-between-eviction-runs-millis") + "]; the values MUST be numbers, using default of 600000.", module); - timeBetweenEvictionRunsMillis = 600000; - } catch (Exception e) { - Debug.logError("Problems with pool settings [time-between-eviction-runs-millis], using default of 600000.", module); - timeBetweenEvictionRunsMillis = 600000; - } - // load the driver Driver jdbcDriver; try { @@ -144,7 +113,7 @@ public class DBCPConnectionFactory imple factory.setValidationQuery("select 1 from entity_key_store where key_name = ''"); factory.setDefaultReadOnly(false); - String transIso = jdbcElement.getAttribute("isolation-level"); + String transIso = jdbcElement.getIsolationLevel(); if (UtilValidate.isNotEmpty(transIso)) { if ("Serializable".equals(transIso)) { factory.setDefaultTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); @@ -173,6 +142,7 @@ public class DBCPConnectionFactory imple public void closeAll() { // no methods on the pool to shutdown; so just clearing for GC + // Hmm... then how do we close the JDBC connections? dsCache.clear(); } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java Fri Jun 7 08:39:44 2013 @@ -43,6 +43,7 @@ import org.ofbiz.entity.Delegator; import org.ofbiz.entity.EntityLockedException; import org.ofbiz.entity.GenericDataSourceException; import org.ofbiz.entity.GenericEntity; +import org.ofbiz.entity.GenericEntityConfException; import org.ofbiz.entity.GenericEntityException; import org.ofbiz.entity.GenericEntityNotFoundException; import org.ofbiz.entity.GenericModelException; @@ -51,7 +52,7 @@ import org.ofbiz.entity.GenericValue; import org.ofbiz.entity.condition.EntityCondition; import org.ofbiz.entity.condition.EntityConditionParam; import org.ofbiz.entity.condition.EntityOperator; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.*; import org.ofbiz.entity.config.EntityConfigUtil; import org.ofbiz.entity.jdbc.DatabaseUtil; import org.ofbiz.entity.jdbc.SQLProcessor; @@ -78,7 +79,7 @@ public class GenericDAO { private static final ThreadGroup GENERIC_DAO_THREAD_GROUP = new ThreadGroup("GenericDAO"); private final GenericHelperInfo helperInfo; private final ModelFieldTypeReader modelFieldTypeReader; - private final DatasourceInfo datasourceInfo; + private final Datasource datasource; private final ExecutorService executor; public static GenericDAO getGenericDAO(GenericHelperInfo helperInfo) { @@ -94,8 +95,8 @@ public class GenericDAO { public GenericDAO(GenericHelperInfo helperInfo) { this.helperInfo = helperInfo; this.modelFieldTypeReader = ModelFieldTypeReader.getModelFieldTypeReader(helperInfo.getHelperBaseName()); - this.datasourceInfo = EntityConfigUtil.getDatasourceInfo(helperInfo.getHelperBaseName()); - this.executor = ExecutionPool.getExecutor(GENERIC_DAO_THREAD_GROUP, "OFBiz-entity-datasource(" + helperInfo.getHelperFullName() + ")", datasourceInfo.maxWorkerPoolSize, false); + this.datasource = EntityConfigUtil.getDatasource(helperInfo.getHelperBaseName()); + this.executor = ExecutionPool.getExecutor(GENERIC_DAO_THREAD_GROUP, "OFBiz-entity-datasource(" + helperInfo.getHelperFullName() + ")", datasource.getMaxWorkerPoolSize(), false); } public <T> Future<T> submitWork(Callable<T> callable) throws GenericEntityException { @@ -170,7 +171,7 @@ public class GenericDAO { } } - StringBuilder sqlB = new StringBuilder("INSERT INTO ").append(modelEntity.getTableName(datasourceInfo)).append(" ("); + StringBuilder sqlB = new StringBuilder("INSERT INTO ").append(modelEntity.getTableName(datasource)).append(" ("); modelEntity.colNameString(fieldsToSave, sqlB, ""); sqlB.append(") VALUES ("); @@ -276,7 +277,7 @@ public class GenericDAO { addFieldIfMissing(fieldsToSave, ModelEntity.STAMP_FIELD, modelEntity); } - StringBuilder sql = new StringBuilder().append("UPDATE ").append(modelEntity.getTableName(datasourceInfo)).append(" SET "); + StringBuilder sql = new StringBuilder().append("UPDATE ").append(modelEntity.getTableName(datasource)).append(" SET "); modelEntity.colNameString(fieldsToSave, sql, "", "=?, ", "=?", false); sql.append(" WHERE "); SqlJdbcUtil.makeWhereStringFromFields(sql, modelEntity.getPkFieldsUnmodifiable(), entity, "AND"); @@ -321,7 +322,7 @@ public class GenericDAO { throw new org.ofbiz.entity.GenericNotImplementedException("Operation updateByCondition not supported yet for view entities"); } - StringBuilder sql = new StringBuilder("UPDATE ").append(modelEntity.getTableName(datasourceInfo)); + StringBuilder sql = new StringBuilder("UPDATE ").append(modelEntity.getTableName(datasource)); sql.append(" SET "); List<EntityConditionParam> params = new LinkedList<EntityConditionParam>(); for (Map.Entry<String, ? extends Object> entry: fieldsToSet.entrySet()) { @@ -335,7 +336,7 @@ public class GenericDAO { params.add(new EntityConditionParam(field, entry.getValue())); } } - sql.append(" WHERE ").append(condition.makeWhereString(modelEntity, params, this.datasourceInfo)); + sql.append(" WHERE ").append(condition.makeWhereString(modelEntity, params, this.datasource)); try { sqlP.prepareStatement(sql.toString()); @@ -519,13 +520,13 @@ public class GenericDAO { StringBuilder sqlBuffer = new StringBuilder("SELECT "); if (modelEntity.getNopksSize() > 0) { - modelEntity.colNameString(modelEntity.getNopksCopy(), sqlBuffer, "", ", ", "", datasourceInfo.aliasViews); + modelEntity.colNameString(modelEntity.getNopksCopy(), sqlBuffer, "", ", ", "", datasource.getAliasViewColumns()); } else { sqlBuffer.append("*"); } - sqlBuffer.append(SqlJdbcUtil.makeFromClause(modelEntity, modelFieldTypeReader, datasourceInfo)); - sqlBuffer.append(SqlJdbcUtil.makeWhereClause(modelEntity, modelEntity.getPkFieldsUnmodifiable(), entity, "AND", datasourceInfo.joinStyle)); + sqlBuffer.append(SqlJdbcUtil.makeFromClause(modelEntity, modelFieldTypeReader, datasource)); + sqlBuffer.append(SqlJdbcUtil.makeWhereClause(modelEntity, modelEntity.getPkFieldsUnmodifiable(), entity, "AND", datasource.getJoinStyle())); try { sqlP.prepareStatement(sqlBuffer.toString(), true, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); @@ -589,12 +590,12 @@ public class GenericDAO { StringBuilder sqlBuffer = new StringBuilder("SELECT "); if (partialFields.size() > 0) { - modelEntity.colNameString(partialFields, sqlBuffer, "", ", ", "", datasourceInfo.aliasViews); + modelEntity.colNameString(partialFields, sqlBuffer, "", ", ", "", datasource.getAliasViewColumns()); } else { sqlBuffer.append("*"); } - sqlBuffer.append(SqlJdbcUtil.makeFromClause(modelEntity, modelFieldTypeReader, datasourceInfo)); - sqlBuffer.append(SqlJdbcUtil.makeWhereClause(modelEntity, modelEntity.getPkFieldsUnmodifiable(), entity, "AND", datasourceInfo.joinStyle)); + sqlBuffer.append(SqlJdbcUtil.makeFromClause(modelEntity, modelFieldTypeReader, datasource)); + sqlBuffer.append(SqlJdbcUtil.makeWhereClause(modelEntity, modelEntity.getPkFieldsUnmodifiable(), entity, "AND", datasource.getJoinStyle())); SQLProcessor sqlP = new SQLProcessor(helperInfo); @@ -718,15 +719,15 @@ public class GenericDAO { if (modelEntity instanceof ModelViewEntity) { // Views must have enumerated fields in SELECT. if (selectFields.isEmpty()) { - modelEntity.colNameString(modelEntity.getFieldsUnmodifiable(), sqlBuffer, "", ", ", "", datasourceInfo.aliasViews); + modelEntity.colNameString(modelEntity.getFieldsUnmodifiable(), sqlBuffer, "", ", ", "", datasource.getAliasViewColumns()); } else { - modelEntity.colNameString(selectFields, sqlBuffer, "", ", ", "", datasourceInfo.aliasViews); + modelEntity.colNameString(selectFields, sqlBuffer, "", ", ", "", datasource.getAliasViewColumns()); } } else { if (selectFields.isEmpty()) { sqlBuffer.append("*"); } else { - modelEntity.colNameString(selectFields, sqlBuffer, "", ", ", "", datasourceInfo.aliasViews); + modelEntity.colNameString(selectFields, sqlBuffer, "", ", ", "", datasource.getAliasViewColumns()); } } if (selectFields.isEmpty()) { @@ -746,7 +747,7 @@ public class GenericDAO { } // FROM clause and when necessary the JOIN or LEFT JOIN clause(s) as well - sqlBuffer.append(SqlJdbcUtil.makeFromClause(modelEntity, modelFieldTypeReader, datasourceInfo)); + sqlBuffer.append(SqlJdbcUtil.makeFromClause(modelEntity, modelFieldTypeReader, datasource)); // WHERE clause List<EntityConditionParam> whereEntityConditionParams = new LinkedList<EntityConditionParam>(); @@ -771,7 +772,7 @@ public class GenericDAO { // add to end of other order by so that those in method call will override those in view orderByExpanded.addAll(viewOrderByList); } - sqlBuffer.append(SqlJdbcUtil.makeOrderByClause(modelEntity, orderByExpanded, datasourceInfo)); + sqlBuffer.append(SqlJdbcUtil.makeOrderByClause(modelEntity, orderByExpanded, datasource)); // OFFSET clause makeOffsetString(sqlBuffer, findOptions); @@ -838,7 +839,7 @@ public class GenericDAO { } } - String viewClause = SqlJdbcUtil.makeViewWhereClause(modelEntity, datasourceInfo.joinStyle); + String viewClause = SqlJdbcUtil.makeViewWhereClause(modelEntity, datasource.getJoinStyle()); if (viewClause.length() > 0) { conditions.add(EntityCondition.makeConditionWhere(viewClause)); @@ -846,7 +847,7 @@ public class GenericDAO { if (!conditions.isEmpty()) { whereString.append(prefix); - whereString.append(EntityCondition.makeCondition(conditions, EntityOperator.AND).makeWhereString(modelEntity, whereEntityConditionParams, this.datasourceInfo)); + whereString.append(EntityCondition.makeCondition(conditions, EntityOperator.AND).makeWhereString(modelEntity, whereEntityConditionParams, this.datasource)); } return whereString; @@ -865,14 +866,14 @@ public class GenericDAO { String entityCondHavingString = ""; if (havingEntityCondition != null) { - entityCondHavingString = havingEntityCondition.makeWhereString(modelEntity, havingEntityConditionParams, this.datasourceInfo); + entityCondHavingString = havingEntityCondition.makeWhereString(modelEntity, havingEntityConditionParams, this.datasource); } String viewEntityCondHavingString = null; if (modelViewEntity != null) { EntityCondition viewHavingEntityCondition = EntityCondition.makeCondition(viewHavingConditions); if (viewHavingEntityCondition != null) { - viewEntityCondHavingString = viewHavingEntityCondition.makeWhereString(modelEntity, havingEntityConditionParams, this.datasourceInfo); + viewEntityCondHavingString = viewHavingEntityCondition.makeWhereString(modelEntity, havingEntityConditionParams, this.datasource); } } @@ -898,8 +899,8 @@ public class GenericDAO { } protected StringBuilder makeOffsetString(StringBuilder offsetString, EntityFindOptions findOptions) { - if (UtilValidate.isNotEmpty(datasourceInfo.offsetStyle)) { - if (datasourceInfo.offsetStyle.equals("limit")) { + if (UtilValidate.isNotEmpty(datasource.getOffsetStyle())) { + if (datasource.getOffsetStyle().equals("limit")) { // use the LIMIT/OFFSET style if (findOptions.getLimit() > -1) { offsetString.append(" LIMIT " + findOptions.getLimit()); @@ -907,7 +908,7 @@ public class GenericDAO { offsetString.append(" OFFSET " + findOptions.getOffset()); } } - } else if (datasourceInfo.offsetStyle.equals("fetch")) { + } else if (datasource.getOffsetStyle().equals("fetch")) { // use SQL2008 OFFSET/FETCH style by default if (findOptions.getOffset() > -1) { offsetString.append(" OFFSET ").append(findOptions.getOffset()).append(" ROWS"); @@ -925,8 +926,8 @@ public class GenericDAO { SQLProcessor sqlP = new SQLProcessor(helperInfo); // get the tables names - String atable = modelEntityOne.getTableName(datasourceInfo); - String ttable = modelEntityTwo.getTableName(datasourceInfo); + String atable = modelEntityOne.getTableName(datasource); + String ttable = modelEntityTwo.getTableName(datasource); // get the column name string to select StringBuilder selsb = new StringBuilder(); @@ -986,7 +987,7 @@ public class GenericDAO { sqlsb.append(atable).append(", ").append(ttable); sqlsb.append(" WHERE "); sqlsb.append(wheresb.toString()); - sqlsb.append(SqlJdbcUtil.makeOrderByClause(modelEntityTwo, orderBy, true, datasourceInfo)); + sqlsb.append(SqlJdbcUtil.makeOrderByClause(modelEntityTwo, orderBy, true, datasource)); // now execute the query List<GenericValue> retlist = new LinkedList<GenericValue>(); @@ -1077,7 +1078,7 @@ public class GenericDAO { sqlBuffer.append("COUNT(DISTINCT "); // this only seems to support a single column, which is not desirable but seems a lot better than no columns or in certain cases all columns sqlBuffer.append(firstSelectField.getColValue()); - // sqlBuffer.append(modelEntity.colNameString(selectFields, ", ", "", datasourceInfo.aliasViews)); + // sqlBuffer.append(modelEntity.colNameString(selectFields, ", ", "", datasource.aliasViews)); sqlBuffer.append(")"); } } else { @@ -1100,7 +1101,7 @@ public class GenericDAO { } // FROM clause and when necessary the JOIN or LEFT JOIN clause(s) as well - sqlBuffer.append(SqlJdbcUtil.makeFromClause(modelEntity, modelFieldTypeReader, datasourceInfo)); + sqlBuffer.append(SqlJdbcUtil.makeFromClause(modelEntity, modelFieldTypeReader, datasource)); // WHERE clause List<EntityConditionParam> whereEntityConditionParams = new LinkedList<EntityConditionParam>(); @@ -1185,7 +1186,7 @@ public class GenericDAO { throw new org.ofbiz.entity.GenericNotImplementedException("Operation delete not supported yet for view entities"); } - StringBuilder sql = new StringBuilder().append("DELETE FROM ").append(modelEntity.getTableName(datasourceInfo)).append(" WHERE "); + StringBuilder sql = new StringBuilder().append("DELETE FROM ").append(modelEntity.getTableName(datasource)).append(" WHERE "); SqlJdbcUtil.makeWhereStringFromFields(sql, modelEntity.getPkFieldsUnmodifiable(), entity, "AND"); int retVal; @@ -1221,9 +1222,9 @@ public class GenericDAO { throw new org.ofbiz.entity.GenericNotImplementedException("Operation deleteByCondition not supported yet for view entities"); } - StringBuilder sql = new StringBuilder("DELETE FROM ").append(modelEntity.getTableName(this.datasourceInfo)); + StringBuilder sql = new StringBuilder("DELETE FROM ").append(modelEntity.getTableName(this.datasource)); - String whereCondition = condition.makeWhereString(modelEntity, null, this.datasourceInfo); + String whereCondition = condition.makeWhereString(modelEntity, null, this.datasource); if (UtilValidate.isNotEmpty(whereCondition)) { sql.append(" WHERE ").append(whereCondition); } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericHelperFactory.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericHelperFactory.java?rev=1490541&r1=1490540&r2=1490541&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericHelperFactory.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericHelperFactory.java Fri Jun 7 08:39:44 2013 @@ -23,7 +23,7 @@ import java.util.Map; import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.UtilValidate; -import org.ofbiz.entity.config.DatasourceInfo; +import org.ofbiz.entity.config.model.Datasource; import org.ofbiz.entity.config.EntityConfigUtil; /** @@ -46,12 +46,12 @@ public class GenericHelperFactory { helper = helperCache.get(helperInfo.getHelperFullName()); if (helper == null) { try { - DatasourceInfo datasourceInfo = EntityConfigUtil.getDatasourceInfo(helperInfo.getHelperBaseName()); + Datasource datasourceInfo = EntityConfigUtil.getDatasource(helperInfo.getHelperBaseName()); if (datasourceInfo == null) { throw new IllegalStateException("Could not find datasource definition with name " + helperInfo.getHelperBaseName()); } - String helperClassName = datasourceInfo.helperClass; + String helperClassName = datasourceInfo.getHelperClass(); Class<?> helperClass = null; if (UtilValidate.isNotEmpty(helperClassName)) { |
| Free forum by Nabble | Edit this page |
