You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2013/06/06 10:02:15 UTC

svn commit: r1490187 [1/2] - in /ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config: ./ model/

Author: adrianc
Date: Thu Jun  6 08:02:14 2013
New Revision: 1490187

URL: http://svn.apache.org/r1490187
Log:
New models for the entityengine.xml file. These will be used to replace the DOM caching/parsing code in the same way as the service engine.

Added:
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigListener.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/ConnectionFactory.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/Datasource.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/DebugXaResources.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/Delegator.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityConfig.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityDataReader.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityEcaReader.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityGroupReader.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityModelReader.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/FieldType.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/GroupMap.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/InlineJdbc.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/JndiJdbc.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/ReadData.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/Resource.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/ResourceLoader.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/SqlLoadPath.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/TransactionFactory.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/TransactionManagerJndi.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/TyrexDataSource.java   (with props)
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/UserTransactionJndi.java   (with props)
Modified:
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigUtil.java

Added: 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=1490187&view=auto
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigListener.java (added)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigListener.java Thu Jun  6 08:02:14 2013
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.entity.config;
+
+import org.ofbiz.entity.config.model.EntityConfig;
+
+/**
+ * An object that receives notifications when the <code>entityengine.xml</code> file is reloaded.
+ */
+public interface EntityConfigListener {
+
+    /**
+     * Processes <code>entityengine.xml</code> changes.
+     * 
+     * @param entityConfig The new <code>EntityConfig</code> instance.
+     */
+    void onEntityConfigChange(EntityConfig entityConfig);
+
+}

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigListener.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

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=1490187&r1=1490186&r2=1490187&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 Thu Jun  6 08:02:14 2013
@@ -18,18 +18,25 @@
  *******************************************************************************/
 package org.ofbiz.entity.config;
 
+import java.net.URL;
 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;
 import org.ofbiz.base.config.ResourceLoader;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilProperties;
+import org.ofbiz.base.util.UtilURL;
 import org.ofbiz.base.util.UtilValidate;
 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.EntityConfig;
+import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
 /**
@@ -40,6 +47,43 @@ public class EntityConfigUtil {
 
     public static final String module = EntityConfigUtil.class.getName();
     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>();
+
+    /**
+     * Returns the <code>EntityConfig</code> instance.
+     * @throws GenericEntityConfException
+     */
+    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);
+                }
+            }
+        }
+        return instance;
+    }
+
+    private static Document getXmlDocument() throws GenericEntityConfException {
+        URL confUrl = UtilURL.fromResource(ENTITY_ENGINE_XML_FILENAME);
+        if (confUrl == null) {
+            throw new GenericEntityConfException("Could not find the " + ENTITY_ENGINE_XML_FILENAME + " file");
+        }
+        try {
+            return UtilXml.readXmlDocument(confUrl, true, true);
+        } catch (Exception e) {
+            throw new GenericEntityConfException("Exception thrown while reading " + ENTITY_ENGINE_XML_FILENAME + ": ", e);
+        }
+    }
 
     private static volatile AtomicReference<EntityConfigUtil> configRef = new AtomicReference<EntityConfigUtil>();
 

Added: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/ConnectionFactory.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/ConnectionFactory.java?rev=1490187&view=auto
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/ConnectionFactory.java (added)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/ConnectionFactory.java Thu Jun  6 08:02:14 2013
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.entity.config.model;
+
+import org.ofbiz.base.lang.ThreadSafe;
+import org.ofbiz.entity.GenericEntityConfException;
+import org.w3c.dom.Element;
+
+/**
+ * An object that models the <code>&lt;connection-factory&gt;</code> element.
+ *
+ * @see <code>entity-config.xsd</code>
+ */
+@ThreadSafe
+public final class ConnectionFactory {
+
+    private final String className; // type = xs:string
+
+    public ConnectionFactory(Element element) throws GenericEntityConfException {
+        String className = element.getAttribute("class").intern();
+        if (className.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element class attribute is empty");
+        }
+        this.className = className;
+    }
+
+    /** Returns the value of the <code>class</code> attribute. */
+    public String getClassName() {
+        return this.className;
+    }
+}

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/ConnectionFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/ConnectionFactory.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Added: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/Datasource.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/Datasource.java?rev=1490187&view=auto
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/Datasource.java (added)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/Datasource.java Thu Jun  6 08:02:14 2013
@@ -0,0 +1,420 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.entity.config.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.ofbiz.base.lang.ThreadSafe;
+import org.ofbiz.base.util.UtilXml;
+import org.ofbiz.entity.GenericEntityConfException;
+import org.w3c.dom.Element;
+
+/**
+ * An object that models the <code>&lt;datasource&gt;</code> element.
+ *
+ * @see <code>entity-config.xsd</code>
+ */
+@ThreadSafe
+public final class Datasource {
+
+    private final String name; // type = xs:string
+    private final String helperClass; // type = xs:string
+    private final String fieldTypeName; // type = xs:string
+    private final String useSchemas;
+    private final String schemaName; // type = xs:string
+    private final String checkOnStart;
+    private final String addMissingOnStart;
+    private final String usePkConstraintNames;
+    private final String checkPksOnStart;
+    private final String constraintNameClipLength; // type = xs:nonNegativeInteger
+    private final String useProxyCursor;
+    private final String proxyCursorName; // type = xs:string
+    private final String resultFetchSize; // type = xs:integer
+    private final String useForeignKeys;
+    private final String useForeignKeyIndices;
+    private final String checkFksOnStart;
+    private final String checkFkIndicesOnStart;
+    private final String fkStyle;
+    private final String useFkInitiallyDeferred;
+    private final String useIndices;
+    private final String useIndicesUnique;
+    private final String checkIndicesOnStart;
+    private final String joinStyle;
+    private final String aliasViewColumns;
+    private final String alwaysUseConstraintKeyword;
+    private final String dropFkUseForeignKeyKeyword;
+    private final String useBinaryTypeForBlob;
+    private final String useOrderByNulls;
+    private final String offsetStyle;
+    private final String tableType; // type = xs:string
+    private final String characterSet; // type = xs:string
+    private final String collate; // type = xs:string
+    private final String maxWorkerPoolSize; // type = xs:integer
+    private final List<SqlLoadPath> sqlLoadPathList; // <sql-load-path>
+    private final List<ReadData> readDataList; // <read-data>
+
+    public Datasource(Element element) throws GenericEntityConfException {
+        String name = element.getAttribute("name").intern();
+        if (name.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element name attribute is empty");
+        }
+        this.name = name;
+        String helperClass = element.getAttribute("helper-class").intern();
+        if (helperClass.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element helper-class attribute is empty");
+        }
+        this.helperClass = helperClass;
+        String fieldTypeName = element.getAttribute("field-type-name").intern();
+        if (fieldTypeName.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element field-type-name attribute is empty");
+        }
+        this.fieldTypeName = fieldTypeName;
+        String useSchemas = element.getAttribute("use-schemas").intern();
+        if (useSchemas.isEmpty()) {
+            useSchemas = "true";
+        }
+        this.useSchemas = useSchemas;
+        this.schemaName = element.getAttribute("schema-name").intern();
+        String checkOnStart = element.getAttribute("check-on-start").intern();
+        if (checkOnStart.isEmpty()) {
+            checkOnStart = "true";
+        }
+        this.checkOnStart = checkOnStart;
+        String addMissingOnStart = element.getAttribute("add-missing-on-start").intern();
+        if (addMissingOnStart.isEmpty()) {
+            addMissingOnStart = "false";
+        }
+        this.addMissingOnStart = addMissingOnStart;
+        String usePkConstraintNames = element.getAttribute("use-pk-constraint-names").intern();
+        if (usePkConstraintNames.isEmpty()) {
+            usePkConstraintNames = "true";
+        }
+        this.usePkConstraintNames = usePkConstraintNames;
+        String checkPksOnStart = element.getAttribute("check-pks-on-start").intern();
+        if (checkPksOnStart.isEmpty()) {
+            checkPksOnStart = "true";
+        }
+        this.checkPksOnStart = checkPksOnStart;
+        String constraintNameClipLength = element.getAttribute("constraint-name-clip-length").intern();
+        if (constraintNameClipLength.isEmpty()) {
+            constraintNameClipLength = "30";
+        }
+        this.constraintNameClipLength = constraintNameClipLength;
+        String useProxyCursor = element.getAttribute("use-proxy-cursor").intern();
+        if (useProxyCursor.isEmpty()) {
+            useProxyCursor = "false";
+        }
+        this.useProxyCursor = useProxyCursor;
+        String proxyCursorName = element.getAttribute("proxy-cursor-name").intern();
+        if (proxyCursorName.isEmpty()) {
+            proxyCursorName = "p_cursor";
+        }
+        this.proxyCursorName = proxyCursorName;
+        String resultFetchSize = element.getAttribute("result-fetch-size").intern();
+        if (resultFetchSize.isEmpty()) {
+            resultFetchSize = "-1";
+        }
+        this.resultFetchSize = resultFetchSize;
+        String useForeignKeys = element.getAttribute("use-foreign-keys").intern();
+        if (useForeignKeys.isEmpty()) {
+            useForeignKeys = "true";
+        }
+        this.useForeignKeys = useForeignKeys;
+        String useForeignKeyIndices = element.getAttribute("use-foreign-key-indices").intern();
+        if (useForeignKeyIndices.isEmpty()) {
+            useForeignKeyIndices = "true";
+        }
+        this.useForeignKeyIndices = useForeignKeyIndices;
+        String checkFksOnStart = element.getAttribute("check-fks-on-start").intern();
+        if (checkFksOnStart.isEmpty()) {
+            checkFksOnStart = "false";
+        }
+        this.checkFksOnStart = checkFksOnStart;
+        String checkFkIndicesOnStart = element.getAttribute("check-fk-indices-on-start").intern();
+        if (checkFkIndicesOnStart.isEmpty()) {
+            checkFkIndicesOnStart = "false";
+        }
+        this.checkFkIndicesOnStart = checkFkIndicesOnStart;
+        String fkStyle = element.getAttribute("fk-style").intern();
+        if (fkStyle.isEmpty()) {
+            fkStyle = "name_constraint";
+        }
+        this.fkStyle = fkStyle;
+        String useFkInitiallyDeferred = element.getAttribute("use-fk-initially-deferred").intern();
+        if (useFkInitiallyDeferred.isEmpty()) {
+            useFkInitiallyDeferred = "false";
+        }
+        this.useFkInitiallyDeferred = useFkInitiallyDeferred;
+        String useIndices = element.getAttribute("use-indices").intern();
+        if (useIndices.isEmpty()) {
+            useIndices = "true";
+        }
+        this.useIndices = useIndices;
+        String useIndicesUnique = element.getAttribute("use-indices-unique").intern();
+        if (useIndicesUnique.isEmpty()) {
+            useIndicesUnique = "true";
+        }
+        this.useIndicesUnique = useIndicesUnique;
+        String checkIndicesOnStart = element.getAttribute("check-indices-on-start").intern();
+        if (checkIndicesOnStart.isEmpty()) {
+            checkIndicesOnStart = "false";
+        }
+        this.checkIndicesOnStart = checkIndicesOnStart;
+        String joinStyle = element.getAttribute("join-style").intern();
+        if (joinStyle.isEmpty()) {
+            joinStyle = "ansi";
+        }
+        this.joinStyle = joinStyle;
+        String aliasViewColumns = element.getAttribute("alias-view-columns").intern();
+        if (aliasViewColumns.isEmpty()) {
+            aliasViewColumns = "false";
+        }
+        this.aliasViewColumns = aliasViewColumns;
+        String alwaysUseConstraintKeyword = element.getAttribute("always-use-constraint-keyword").intern();
+        if (alwaysUseConstraintKeyword.isEmpty()) {
+            alwaysUseConstraintKeyword = "false";
+        }
+        this.alwaysUseConstraintKeyword = alwaysUseConstraintKeyword;
+        String dropFkUseForeignKeyKeyword = element.getAttribute("drop-fk-use-foreign-key-keyword").intern();
+        if (dropFkUseForeignKeyKeyword.isEmpty()) {
+            dropFkUseForeignKeyKeyword = "false";
+        }
+        this.dropFkUseForeignKeyKeyword = dropFkUseForeignKeyKeyword;
+        String useBinaryTypeForBlob = element.getAttribute("use-binary-type-for-blob").intern();
+        if (useBinaryTypeForBlob.isEmpty()) {
+            useBinaryTypeForBlob = "false";
+        }
+        this.useBinaryTypeForBlob = useBinaryTypeForBlob;
+        String useOrderByNulls = element.getAttribute("use-order-by-nulls").intern();
+        if (useOrderByNulls.isEmpty()) {
+            useOrderByNulls = "false";
+        }
+        this.useOrderByNulls = useOrderByNulls;
+        String offsetStyle = element.getAttribute("offset-style").intern();
+        if (offsetStyle.isEmpty()) {
+            offsetStyle = "none";
+        }
+        this.offsetStyle = offsetStyle;
+        this.tableType = element.getAttribute("table-type").intern();
+        this.characterSet = element.getAttribute("character-set").intern();
+        this.collate = element.getAttribute("collate").intern();
+        String maxWorkerPoolSize = element.getAttribute("max-worker-pool-size").intern();
+        if (maxWorkerPoolSize.isEmpty()) {
+            maxWorkerPoolSize = "0";
+        }
+        this.maxWorkerPoolSize = maxWorkerPoolSize;
+        List<? extends Element> sqlLoadPathElementList = UtilXml.childElementList(element, "sql-load-path");
+        if (sqlLoadPathElementList.isEmpty()) {
+            this.sqlLoadPathList = Collections.emptyList();
+        } else {
+            List<SqlLoadPath> sqlLoadPathList = new ArrayList<SqlLoadPath>(sqlLoadPathElementList.size());
+            for (Element sqlLoadPathElement : sqlLoadPathElementList) {
+                sqlLoadPathList.add(new SqlLoadPath(sqlLoadPathElement));
+            }
+            this.sqlLoadPathList = Collections.unmodifiableList(sqlLoadPathList);
+        }
+        List<? extends Element> readDataElementList = UtilXml.childElementList(element, "read-data");
+        if (readDataElementList.isEmpty()) {
+            this.readDataList = Collections.emptyList();
+        } else {
+            List<ReadData> readDataList = new ArrayList<ReadData>(readDataElementList.size());
+            for (Element readDataElement : readDataElementList) {
+                readDataList.add(new ReadData(readDataElement));
+            }
+            this.readDataList = Collections.unmodifiableList(readDataList);
+        }
+    }
+
+    /** Returns the value of the <code>name</code> attribute. */
+    public String getName() {
+        return this.name;
+    }
+
+    /** Returns the value of the <code>helper-class</code> attribute. */
+    public String getHelperClass() {
+        return this.helperClass;
+    }
+
+    /** Returns the value of the <code>field-type-name</code> attribute. */
+    public String getFieldTypeName() {
+        return this.fieldTypeName;
+    }
+
+    /** Returns the value of the <code>use-schemas</code> attribute. */
+    public String getUseSchemas() {
+        return this.useSchemas;
+    }
+
+    /** Returns the value of the <code>schema-name</code> attribute. */
+    public String getSchemaName() {
+        return this.schemaName;
+    }
+
+    /** Returns the value of the <code>check-on-start</code> attribute. */
+    public String getCheckOnStart() {
+        return this.checkOnStart;
+    }
+
+    /** Returns the value of the <code>add-missing-on-start</code> attribute. */
+    public String getAddMissingOnStart() {
+        return this.addMissingOnStart;
+    }
+
+    /** Returns the value of the <code>use-pk-constraint-names</code> attribute. */
+    public String getUsePkConstraintNames() {
+        return this.usePkConstraintNames;
+    }
+
+    /** Returns the value of the <code>check-pks-on-start</code> attribute. */
+    public String getCheckPksOnStart() {
+        return this.checkPksOnStart;
+    }
+
+    /** Returns the value of the <code>constraint-name-clip-length</code> attribute. */
+    public String getConstraintNameClipLength() {
+        return this.constraintNameClipLength;
+    }
+
+    /** Returns the value of the <code>use-proxy-cursor</code> attribute. */
+    public String getUseProxyCursor() {
+        return this.useProxyCursor;
+    }
+
+    /** Returns the value of the <code>proxy-cursor-name</code> attribute. */
+    public String getProxyCursorName() {
+        return this.proxyCursorName;
+    }
+
+    /** Returns the value of the <code>result-fetch-size</code> attribute. */
+    public String getResultFetchSize() {
+        return this.resultFetchSize;
+    }
+
+    /** Returns the value of the <code>use-foreign-keys</code> attribute. */
+    public String getUseForeignKeys() {
+        return this.useForeignKeys;
+    }
+
+    /** Returns the value of the <code>use-foreign-key-indices</code> attribute. */
+    public String getUseForeignKeyIndices() {
+        return this.useForeignKeyIndices;
+    }
+
+    /** Returns the value of the <code>check-fks-on-start</code> attribute. */
+    public String getCheckFksOnStart() {
+        return this.checkFksOnStart;
+    }
+
+    /** Returns the value of the <code>check-fk-indices-on-start</code> attribute. */
+    public String getCheckFkIndicesOnStart() {
+        return this.checkFkIndicesOnStart;
+    }
+
+    /** Returns the value of the <code>fk-style</code> attribute. */
+    public String getFkStyle() {
+        return this.fkStyle;
+    }
+
+    /** Returns the value of the <code>use-fk-initially-deferred</code> attribute. */
+    public String getUseFkInitiallyDeferred() {
+        return this.useFkInitiallyDeferred;
+    }
+
+    /** Returns the value of the <code>use-indices</code> attribute. */
+    public String getUseIndices() {
+        return this.useIndices;
+    }
+
+    /** Returns the value of the <code>use-indices-unique</code> attribute. */
+    public String getUseIndicesUnique() {
+        return this.useIndicesUnique;
+    }
+
+    /** Returns the value of the <code>check-indices-on-start</code> attribute. */
+    public String getCheckIndicesOnStart() {
+        return this.checkIndicesOnStart;
+    }
+
+    /** Returns the value of the <code>join-style</code> attribute. */
+    public String getJoinStyle() {
+        return this.joinStyle;
+    }
+
+    /** Returns the value of the <code>alias-view-columns</code> attribute. */
+    public String getAliasViewColumns() {
+        return this.aliasViewColumns;
+    }
+
+    /** Returns the value of the <code>always-use-constraint-keyword</code> attribute. */
+    public String getAlwaysUseConstraintKeyword() {
+        return this.alwaysUseConstraintKeyword;
+    }
+
+    /** Returns the value of the <code>drop-fk-use-foreign-key-keyword</code> attribute. */
+    public String getDropFkUseForeignKeyKeyword() {
+        return this.dropFkUseForeignKeyKeyword;
+    }
+
+    /** Returns the value of the <code>use-binary-type-for-blob</code> attribute. */
+    public String getUseBinaryTypeForBlob() {
+        return this.useBinaryTypeForBlob;
+    }
+
+    /** Returns the value of the <code>use-order-by-nulls</code> attribute. */
+    public String getUseOrderByNulls() {
+        return this.useOrderByNulls;
+    }
+
+    /** Returns the value of the <code>offset-style</code> attribute. */
+    public String getOffsetStyle() {
+        return this.offsetStyle;
+    }
+
+    /** Returns the value of the <code>table-type</code> attribute. */
+    public String getTableType() {
+        return this.tableType;
+    }
+
+    /** Returns the value of the <code>character-set</code> attribute. */
+    public String getCharacterSet() {
+        return this.characterSet;
+    }
+
+    /** Returns the value of the <code>collate</code> attribute. */
+    public String getCollate() {
+        return this.collate;
+    }
+
+    /** Returns the value of the <code>max-worker-pool-size</code> attribute. */
+    public String getMaxWorkerPoolSize() {
+        return this.maxWorkerPoolSize;
+    }
+
+    /** Returns the <code>&lt;sql-load-path&gt;</code> child elements. */
+    public List<SqlLoadPath> getSqlLoadPathList() {
+        return this.sqlLoadPathList;
+    }
+
+    /** Returns the <code>&lt;read-data&gt;</code> child elements. */
+    public List<ReadData> getReadDataList() {
+        return this.readDataList;
+    }
+}

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/Datasource.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/Datasource.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Added: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/DebugXaResources.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/DebugXaResources.java?rev=1490187&view=auto
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/DebugXaResources.java (added)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/DebugXaResources.java Thu Jun  6 08:02:14 2013
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.entity.config.model;
+
+import org.ofbiz.base.lang.ThreadSafe;
+import org.ofbiz.entity.GenericEntityConfException;
+import org.w3c.dom.Element;
+
+/**
+ * An object that models the <code>&lt;debug-xa-resources&gt;</code> element.
+ *
+ * @see <code>entity-config.xsd</code>
+ */
+@ThreadSafe
+public final class DebugXaResources {
+
+    private final String value; // type = xs:string
+
+    public DebugXaResources(Element element) throws GenericEntityConfException {
+        String value = element.getAttribute("value").intern();
+        if (value.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element value attribute is empty");
+        }
+        this.value = value;
+    }
+
+    /** Returns the value of the <code>value</code> attribute. */
+    public String getValue() {
+        return this.value;
+    }
+}

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/DebugXaResources.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/DebugXaResources.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Added: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/Delegator.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/Delegator.java?rev=1490187&view=auto
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/Delegator.java (added)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/Delegator.java Thu Jun  6 08:02:14 2013
@@ -0,0 +1,177 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.entity.config.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.ofbiz.base.lang.ThreadSafe;
+import org.ofbiz.base.util.UtilXml;
+import org.ofbiz.entity.GenericEntityConfException;
+import org.w3c.dom.Element;
+
+/**
+ * An object that models the <code>&lt;delegator&gt;</code> element.
+ *
+ * @see <code>entity-config.xsd</code>
+ */
+@ThreadSafe
+public final class Delegator {
+
+    private final String name; // type = xs:string
+    private final String entityModelReader; // type = xs:string
+    private final String entityGroupReader; // type = xs:string
+    private final String entityEcaReader; // type = xs:string
+    private final String entityEcaEnabled;
+    private final String entityEcaHandlerClassName; // type = xs:string
+    private final String distributedCacheClearEnabled;
+    private final String distributedCacheClearClassName; // type = xs:string
+    private final String distributedCacheClearUserLoginId; // type = xs:string
+    private final String sequencedIdPrefix; // type = xs:string
+    private final String defaultGroupName; // type = xs:string
+    private final String keyEncryptingKey; // type = xs:string
+    private final List<GroupMap> groupMapList; // <group-map>
+
+    public Delegator(Element element) throws GenericEntityConfException {
+        String name = element.getAttribute("name").intern();
+        if (name.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element name attribute is empty");
+        }
+        this.name = name;
+        String entityModelReader = element.getAttribute("entity-model-reader").intern();
+        if (entityModelReader.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element entity-model-reader attribute is empty");
+        }
+        this.entityModelReader = entityModelReader;
+        String entityGroupReader = element.getAttribute("entity-group-reader").intern();
+        if (entityGroupReader.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element entity-group-reader attribute is empty");
+        }
+        this.entityGroupReader = entityGroupReader;
+        this.entityEcaReader = element.getAttribute("entity-eca-reader").intern();
+        String entityEcaEnabled = element.getAttribute("entity-eca-enabled").intern();
+        if (entityEcaEnabled.isEmpty()) {
+            entityEcaEnabled = "true";
+        }
+        this.entityEcaEnabled = entityEcaEnabled;
+        String entityEcaHandlerClassName = element.getAttribute("entity-eca-handler-class-name").intern();
+        if (entityEcaHandlerClassName.isEmpty()) {
+            entityEcaHandlerClassName = "org.ofbiz.entityext.eca.DelegatorEcaHandler";
+        }
+        this.entityEcaHandlerClassName = entityEcaHandlerClassName;
+        String distributedCacheClearEnabled = element.getAttribute("distributed-cache-clear-enabled").intern();
+        if (distributedCacheClearEnabled.isEmpty()) {
+            distributedCacheClearEnabled = "false";
+        }
+        this.distributedCacheClearEnabled = distributedCacheClearEnabled;
+        String distributedCacheClearClassName = element.getAttribute("distributed-cache-clear-class-name").intern();
+        if (distributedCacheClearClassName.isEmpty()) {
+            distributedCacheClearClassName = "org.ofbiz.entityext.cache.EntityCacheServices";
+        }
+        this.distributedCacheClearClassName = distributedCacheClearClassName;
+        String distributedCacheClearUserLoginId = element.getAttribute("distributed-cache-clear-user-login-id").intern();
+        if (distributedCacheClearUserLoginId.isEmpty()) {
+            distributedCacheClearUserLoginId = "system";
+        }
+        this.distributedCacheClearUserLoginId = distributedCacheClearUserLoginId;
+        this.sequencedIdPrefix = element.getAttribute("sequenced-id-prefix").intern();
+        String defaultGroupName = element.getAttribute("default-group-name").intern();
+        if (defaultGroupName.isEmpty()) {
+            defaultGroupName = "org.ofbiz";
+        }
+        this.defaultGroupName = defaultGroupName;
+        this.keyEncryptingKey = element.getAttribute("key-encrypting-key").intern();
+        List<? extends Element> groupMapElementList = UtilXml.childElementList(element, "group-map");
+        if (groupMapElementList.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element child elements <group-map> are missing");
+        } else {
+            List<GroupMap> groupMapList = new ArrayList<GroupMap>(groupMapElementList.size());
+            for (Element groupMapElement : groupMapElementList) {
+                groupMapList.add(new GroupMap(groupMapElement));
+            }
+            this.groupMapList = Collections.unmodifiableList(groupMapList);
+        }
+    }
+
+    /** Returns the value of the <code>name</code> attribute. */
+    public String getName() {
+        return this.name;
+    }
+
+    /** Returns the value of the <code>entity-model-reader</code> attribute. */
+    public String getEntityModelReader() {
+        return this.entityModelReader;
+    }
+
+    /** Returns the value of the <code>entity-group-reader</code> attribute. */
+    public String getEntityGroupReader() {
+        return this.entityGroupReader;
+    }
+
+    /** Returns the value of the <code>entity-eca-reader</code> attribute. */
+    public String getEntityEcaReader() {
+        return this.entityEcaReader;
+    }
+
+    /** Returns the value of the <code>entity-eca-enabled</code> attribute. */
+    public String getEntityEcaEnabled() {
+        return this.entityEcaEnabled;
+    }
+
+    /** Returns the value of the <code>entity-eca-handler-class-name</code> attribute. */
+    public String getEntityEcaHandlerClassName() {
+        return this.entityEcaHandlerClassName;
+    }
+
+    /** Returns the value of the <code>distributed-cache-clear-enabled</code> attribute. */
+    public String getDistributedCacheClearEnabled() {
+        return this.distributedCacheClearEnabled;
+    }
+
+    /** Returns the value of the <code>distributed-cache-clear-class-name</code> attribute. */
+    public String getDistributedCacheClearClassName() {
+        return this.distributedCacheClearClassName;
+    }
+
+    /** Returns the value of the <code>distributed-cache-clear-user-login-id</code> attribute. */
+    public String getDistributedCacheClearUserLoginId() {
+        return this.distributedCacheClearUserLoginId;
+    }
+
+    /** Returns the value of the <code>sequenced-id-prefix</code> attribute. */
+    public String getSequencedIdPrefix() {
+        return this.sequencedIdPrefix;
+    }
+
+    /** Returns the value of the <code>default-group-name</code> attribute. */
+    public String getDefaultGroupName() {
+        return this.defaultGroupName;
+    }
+
+    /** Returns the value of the <code>key-encrypting-key</code> attribute. */
+    public String getKeyEncryptingKey() {
+        return this.keyEncryptingKey;
+    }
+
+    /** Returns the <code>&lt;group-map&gt;</code> child elements. */
+    public List<GroupMap> getGroupMapList() {
+        return this.groupMapList;
+    }
+}

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/Delegator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/Delegator.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Added: 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=1490187&view=auto
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityConfig.java (added)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityConfig.java Thu Jun  6 08:02:14 2013
@@ -0,0 +1,205 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.entity.config.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.ofbiz.base.lang.ThreadSafe;
+import org.ofbiz.base.util.UtilXml;
+import org.ofbiz.entity.GenericEntityConfException;
+import org.w3c.dom.Element;
+
+/**
+ * An object that models the <code>&lt;entity-config&gt;</code> element.
+ *
+ * @see <code>entity-config.xsd</code>
+ */
+@ThreadSafe
+public final class EntityConfig {
+
+    private final List<ResourceLoader> resourceLoaderList; // <resource-loader>
+    private final TransactionFactory transactionFactory; // <transaction-factory>
+    private final ConnectionFactory connectionFactory; // <connection-factory>
+    private final DebugXaResources debugXaResources; // <debug-xa-resources>
+    private final List<Delegator> delegatorList; // <delegator>
+    private final List<EntityModelReader> entityModelReaderList; // <entity-model-reader>
+    private final List<EntityGroupReader> entityGroupReaderList; // <entity-group-reader>
+    private final List<EntityEcaReader> entityEcaReaderList; // <entity-eca-reader>
+    private final List<EntityDataReader> entityDataReaderList; // <entity-data-reader>
+    private final List<FieldType> fieldTypeList; // <field-type>
+    private final List<Datasource> datasourceList; // <datasource>
+
+    public EntityConfig(Element element) throws GenericEntityConfException {
+        List<? extends Element> resourceLoaderElementList = UtilXml.childElementList(element, "resource-loader");
+        if (resourceLoaderElementList.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element child elements <resource-loader> are missing");
+        } else {
+            List<ResourceLoader> resourceLoaderList = new ArrayList<ResourceLoader>(resourceLoaderElementList.size());
+            for (Element resourceLoaderElement : resourceLoaderElementList) {
+                resourceLoaderList.add(new ResourceLoader(resourceLoaderElement));
+            }
+            this.resourceLoaderList = Collections.unmodifiableList(resourceLoaderList);
+        }
+        Element transactionFactoryElement = UtilXml.firstChildElement(element, "transaction-factory");
+        if (transactionFactoryElement == null) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element child element <transaction-factory> is missing");
+        } else {
+            this.transactionFactory = new TransactionFactory(transactionFactoryElement);
+        }
+        Element connectionFactoryElement = UtilXml.firstChildElement(element, "connection-factory");
+        if (connectionFactoryElement == null) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element child element <connection-factory> is missing");
+        } else {
+            this.connectionFactory = new ConnectionFactory(connectionFactoryElement);
+        }
+        Element debugXaResourcesElement = UtilXml.firstChildElement(element, "debug-xa-resources");
+        if (debugXaResourcesElement == null) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element child element <debug-xa-resources> is missing");
+        } else {
+            this.debugXaResources = new DebugXaResources(debugXaResourcesElement);
+        }
+        List<? extends Element> delegatorElementList = UtilXml.childElementList(element, "delegator");
+        if (delegatorElementList.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element child elements <delegator> are missing");
+        } else {
+            List<Delegator> delegatorList = new ArrayList<Delegator>(delegatorElementList.size());
+            for (Element delegatorElement : delegatorElementList) {
+                delegatorList.add(new Delegator(delegatorElement));
+            }
+            this.delegatorList = Collections.unmodifiableList(delegatorList);
+        }
+        List<? extends Element> entityModelReaderElementList = UtilXml.childElementList(element, "entity-model-reader");
+        if (entityModelReaderElementList.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element child elements <entity-model-reader> are missing");
+        } else {
+            List<EntityModelReader> entityModelReaderList = new ArrayList<EntityModelReader>(entityModelReaderElementList.size());
+            for (Element entityModelReaderElement : entityModelReaderElementList) {
+                entityModelReaderList.add(new EntityModelReader(entityModelReaderElement));
+            }
+            this.entityModelReaderList = Collections.unmodifiableList(entityModelReaderList);
+        }
+        List<? extends Element> entityGroupReaderElementList = UtilXml.childElementList(element, "entity-group-reader");
+        if (entityGroupReaderElementList.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element child elements <entity-group-reader> are missing");
+        } else {
+            List<EntityGroupReader> entityGroupReaderList = new ArrayList<EntityGroupReader>(entityGroupReaderElementList.size());
+            for (Element entityGroupReaderElement : entityGroupReaderElementList) {
+                entityGroupReaderList.add(new EntityGroupReader(entityGroupReaderElement));
+            }
+            this.entityGroupReaderList = Collections.unmodifiableList(entityGroupReaderList);
+        }
+        List<? extends Element> entityEcaReaderElementList = UtilXml.childElementList(element, "entity-eca-reader");
+        if (entityEcaReaderElementList.isEmpty()) {
+            this.entityEcaReaderList = Collections.emptyList();
+        } else {
+            List<EntityEcaReader> entityEcaReaderList = new ArrayList<EntityEcaReader>(entityEcaReaderElementList.size());
+            for (Element entityEcaReaderElement : entityEcaReaderElementList) {
+                entityEcaReaderList.add(new EntityEcaReader(entityEcaReaderElement));
+            }
+            this.entityEcaReaderList = Collections.unmodifiableList(entityEcaReaderList);
+        }
+        List<? extends Element> entityDataReaderElementList = UtilXml.childElementList(element, "entity-data-reader");
+        if (entityDataReaderElementList.isEmpty()) {
+            this.entityDataReaderList = Collections.emptyList();
+        } else {
+            List<EntityDataReader> entityDataReaderList = new ArrayList<EntityDataReader>(entityDataReaderElementList.size());
+            for (Element entityDataReaderElement : entityDataReaderElementList) {
+                entityDataReaderList.add(new EntityDataReader(entityDataReaderElement));
+            }
+            this.entityDataReaderList = Collections.unmodifiableList(entityDataReaderList);
+        }
+        List<? extends Element> fieldTypeElementList = UtilXml.childElementList(element, "field-type");
+        if (fieldTypeElementList.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element child elements <field-type> are missing");
+        } else {
+            List<FieldType> fieldTypeList = new ArrayList<FieldType>(fieldTypeElementList.size());
+            for (Element fieldTypeElement : fieldTypeElementList) {
+                fieldTypeList.add(new FieldType(fieldTypeElement));
+            }
+            this.fieldTypeList = Collections.unmodifiableList(fieldTypeList);
+        }
+        List<? extends Element> datasourceElementList = UtilXml.childElementList(element, "datasource");
+        if (datasourceElementList.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element child elements <datasource> are missing");
+        } else {
+            List<Datasource> datasourceList = new ArrayList<Datasource>(datasourceElementList.size());
+            for (Element datasourceElement : datasourceElementList) {
+                datasourceList.add(new Datasource(datasourceElement));
+            }
+            this.datasourceList = Collections.unmodifiableList(datasourceList);
+        }
+    }
+
+    /** Returns the <code>&lt;resource-loader&gt;</code> child elements. */
+    public List<ResourceLoader> getResourceLoaderList() {
+        return this.resourceLoaderList;
+    }
+
+    /** Returns the <code>&lt;transaction-factory&gt;</code> child element, or <code>null</code> if no child element was found. */
+    public TransactionFactory getTransactionFactory() {
+        return this.transactionFactory;
+    }
+
+    /** Returns the <code>&lt;connection-factory&gt;</code> child element, or <code>null</code> if no child element was found. */
+    public ConnectionFactory getConnectionFactory() {
+        return this.connectionFactory;
+    }
+
+    /** Returns the <code>&lt;debug-xa-resources&gt;</code> child element, or <code>null</code> if no child element was found. */
+    public DebugXaResources getDebugXaResources() {
+        return this.debugXaResources;
+    }
+
+    /** Returns the <code>&lt;delegator&gt;</code> child elements. */
+    public List<Delegator> getDelegatorList() {
+        return this.delegatorList;
+    }
+
+    /** Returns the <code>&lt;entity-model-reader&gt;</code> child elements. */
+    public List<EntityModelReader> getEntityModelReaderList() {
+        return this.entityModelReaderList;
+    }
+
+    /** Returns the <code>&lt;entity-group-reader&gt;</code> child elements. */
+    public List<EntityGroupReader> getEntityGroupReaderList() {
+        return this.entityGroupReaderList;
+    }
+
+    /** Returns the <code>&lt;entity-eca-reader&gt;</code> child elements. */
+    public List<EntityEcaReader> getEntityEcaReaderList() {
+        return this.entityEcaReaderList;
+    }
+
+    /** Returns the <code>&lt;entity-data-reader&gt;</code> child elements. */
+    public List<EntityDataReader> getEntityDataReaderList() {
+        return this.entityDataReaderList;
+    }
+
+    /** Returns the <code>&lt;field-type&gt;</code> child elements. */
+    public List<FieldType> getFieldTypeList() {
+        return this.fieldTypeList;
+    }
+
+    /** Returns the <code>&lt;datasource&gt;</code> child elements. */
+    public List<Datasource> getDatasourceList() {
+        return this.datasourceList;
+    }
+}

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityConfig.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityConfig.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Added: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityDataReader.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityDataReader.java?rev=1490187&view=auto
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityDataReader.java (added)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityDataReader.java Thu Jun  6 08:02:14 2013
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.entity.config.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.ofbiz.base.lang.ThreadSafe;
+import org.ofbiz.base.util.UtilXml;
+import org.ofbiz.entity.GenericEntityConfException;
+import org.w3c.dom.Element;
+
+/**
+ * An object that models the <code>&lt;entity-data-reader&gt;</code> element.
+ *
+ * @see <code>entity-config.xsd</code>
+ */
+@ThreadSafe
+public final class EntityDataReader {
+
+    private final String name; // type = xs:string
+    private final List<Resource> resourceList; // <resource>
+
+    public EntityDataReader(Element element) throws GenericEntityConfException {
+        String name = element.getAttribute("name").intern();
+        if (name.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element name attribute is empty");
+        }
+        this.name = name;
+        List<? extends Element> resourceElementList = UtilXml.childElementList(element, "resource");
+        if (resourceElementList.isEmpty()) {
+            this.resourceList = Collections.emptyList();
+        } else {
+            List<Resource> resourceList = new ArrayList<Resource>(resourceElementList.size());
+            for (Element resourceElement : resourceElementList) {
+                resourceList.add(new Resource(resourceElement));
+            }
+            this.resourceList = Collections.unmodifiableList(resourceList);
+        }
+    }
+
+    /** Returns the value of the <code>name</code> attribute. */
+    public String getName() {
+        return this.name;
+    }
+
+    /** Returns the <code>&lt;resource&gt;</code> child elements. */
+    public List<Resource> getResourceList() {
+        return this.resourceList;
+    }
+}

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityDataReader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityDataReader.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Added: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityEcaReader.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityEcaReader.java?rev=1490187&view=auto
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityEcaReader.java (added)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityEcaReader.java Thu Jun  6 08:02:14 2013
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.entity.config.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.ofbiz.base.lang.ThreadSafe;
+import org.ofbiz.base.util.UtilXml;
+import org.ofbiz.entity.GenericEntityConfException;
+import org.w3c.dom.Element;
+
+/**
+ * An object that models the <code>&lt;entity-eca-reader&gt;</code> element.
+ *
+ * @see <code>entity-config.xsd</code>
+ */
+@ThreadSafe
+public final class EntityEcaReader {
+
+    private final String name; // type = xs:string
+    private final List<Resource> resourceList; // <resource>
+
+    public EntityEcaReader(Element element) throws GenericEntityConfException {
+        String name = element.getAttribute("name").intern();
+        if (name.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element name attribute is empty");
+        }
+        this.name = name;
+        List<? extends Element> resourceElementList = UtilXml.childElementList(element, "resource");
+        if (resourceElementList.isEmpty()) {
+            this.resourceList = Collections.emptyList();
+        } else {
+            List<Resource> resourceList = new ArrayList<Resource>(resourceElementList.size());
+            for (Element resourceElement : resourceElementList) {
+                resourceList.add(new Resource(resourceElement));
+            }
+            this.resourceList = Collections.unmodifiableList(resourceList);
+        }
+    }
+
+    /** Returns the value of the <code>name</code> attribute. */
+    public String getName() {
+        return this.name;
+    }
+
+    /** Returns the <code>&lt;resource&gt;</code> child elements. */
+    public List<Resource> getResourceList() {
+        return this.resourceList;
+    }
+}

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityEcaReader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityEcaReader.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Added: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityGroupReader.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityGroupReader.java?rev=1490187&view=auto
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityGroupReader.java (added)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityGroupReader.java Thu Jun  6 08:02:14 2013
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.entity.config.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.ofbiz.base.lang.ThreadSafe;
+import org.ofbiz.base.util.UtilXml;
+import org.ofbiz.entity.GenericEntityConfException;
+import org.w3c.dom.Element;
+
+/**
+ * An object that models the <code>&lt;entity-group-reader&gt;</code> element.
+ *
+ * @see <code>entity-config.xsd</code>
+ */
+@ThreadSafe
+public final class EntityGroupReader {
+
+    private final String name; // type = xs:string
+    private final String loader; // type = xs:string
+    private final String location; // type = xs:string
+    private final List<Resource> resourceList; // <resource>
+
+    public EntityGroupReader(Element element) throws GenericEntityConfException {
+        String name = element.getAttribute("name").intern();
+        if (name.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element name attribute is empty");
+        }
+        this.name = name;
+        this.loader = element.getAttribute("loader").intern();
+        this.location = element.getAttribute("location").intern();
+        List<? extends Element> resourceElementList = UtilXml.childElementList(element, "resource");
+        if (resourceElementList.isEmpty()) {
+            this.resourceList = Collections.emptyList();
+        } else {
+            List<Resource> resourceList = new ArrayList<Resource>(resourceElementList.size());
+            for (Element resourceElement : resourceElementList) {
+                resourceList.add(new Resource(resourceElement));
+            }
+            this.resourceList = Collections.unmodifiableList(resourceList);
+        }
+    }
+
+    /** Returns the value of the <code>name</code> attribute. */
+    public String getName() {
+        return this.name;
+    }
+
+    /** Returns the value of the <code>loader</code> attribute. */
+    public String getLoader() {
+        return this.loader;
+    }
+
+    /** Returns the value of the <code>location</code> attribute. */
+    public String getLocation() {
+        return this.location;
+    }
+
+    /** Returns the <code>&lt;resource&gt;</code> child elements. */
+    public List<Resource> getResourceList() {
+        return this.resourceList;
+    }
+}

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityGroupReader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityGroupReader.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Added: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityModelReader.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityModelReader.java?rev=1490187&view=auto
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityModelReader.java (added)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityModelReader.java Thu Jun  6 08:02:14 2013
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.entity.config.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.ofbiz.base.lang.ThreadSafe;
+import org.ofbiz.base.util.UtilXml;
+import org.ofbiz.entity.GenericEntityConfException;
+import org.w3c.dom.Element;
+
+/**
+ * An object that models the <code>&lt;entity-model-reader&gt;</code> element.
+ *
+ * @see <code>entity-config.xsd</code>
+ */
+@ThreadSafe
+public final class EntityModelReader {
+
+    private final String name; // type = xs:string
+    private final List<Resource> resourceList; // <resource>
+
+    public EntityModelReader(Element element) throws GenericEntityConfException {
+        String name = element.getAttribute("name").intern();
+        if (name.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element name attribute is empty");
+        }
+        this.name = name;
+        List<? extends Element> resourceElementList = UtilXml.childElementList(element, "resource");
+        if (resourceElementList.isEmpty()) {
+            this.resourceList = Collections.emptyList();
+        } else {
+            List<Resource> resourceList = new ArrayList<Resource>(resourceElementList.size());
+            for (Element resourceElement : resourceElementList) {
+                resourceList.add(new Resource(resourceElement));
+            }
+            this.resourceList = Collections.unmodifiableList(resourceList);
+        }
+    }
+
+    /** Returns the value of the <code>name</code> attribute. */
+    public String getName() {
+        return this.name;
+    }
+
+    /** Returns the <code>&lt;resource&gt;</code> child elements. */
+    public List<Resource> getResourceList() {
+        return this.resourceList;
+    }
+}

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityModelReader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/EntityModelReader.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Added: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/FieldType.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/FieldType.java?rev=1490187&view=auto
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/FieldType.java (added)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/FieldType.java Thu Jun  6 08:02:14 2013
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.entity.config.model;
+
+import org.ofbiz.base.lang.ThreadSafe;
+import org.ofbiz.entity.GenericEntityConfException;
+import org.w3c.dom.Element;
+
+/**
+ * An object that models the <code>&lt;field-type&gt;</code> element.
+ *
+ * @see <code>entity-config.xsd</code>
+ */
+@ThreadSafe
+public final class FieldType {
+
+    private final String name; // type = xs:string
+    private final String loader; // type = xs:string
+    private final String location; // type = xs:string
+
+    public FieldType(Element element) throws GenericEntityConfException {
+        String name = element.getAttribute("name").intern();
+        if (name.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element name attribute is empty");
+        }
+        this.name = name;
+        String loader = element.getAttribute("loader").intern();
+        if (loader.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element loader attribute is empty");
+        }
+        this.loader = loader;
+        String location = element.getAttribute("location").intern();
+        if (location.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element location attribute is empty");
+        }
+        this.location = location;
+    }
+
+    /** Returns the value of the <code>name</code> attribute. */
+    public String getName() {
+        return this.name;
+    }
+
+    /** Returns the value of the <code>loader</code> attribute. */
+    public String getLoader() {
+        return this.loader;
+    }
+
+    /** Returns the value of the <code>location</code> attribute. */
+    public String getLocation() {
+        return this.location;
+    }
+}

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/FieldType.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/FieldType.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Added: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/GroupMap.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/GroupMap.java?rev=1490187&view=auto
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/GroupMap.java (added)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/GroupMap.java Thu Jun  6 08:02:14 2013
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.entity.config.model;
+
+import org.ofbiz.base.lang.ThreadSafe;
+import org.ofbiz.entity.GenericEntityConfException;
+import org.w3c.dom.Element;
+
+/**
+ * An object that models the <code>&lt;group-map&gt;</code> element.
+ *
+ * @see <code>entity-config.xsd</code>
+ */
+@ThreadSafe
+public final class GroupMap {
+
+    private final String groupName; // type = xs:string
+    private final String datasourceName; // type = xs:string
+
+    public GroupMap(Element element) throws GenericEntityConfException {
+        String groupName = element.getAttribute("group-name").intern();
+        if (groupName.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element group-name attribute is empty");
+        }
+        this.groupName = groupName;
+        String datasourceName = element.getAttribute("datasource-name").intern();
+        if (datasourceName.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element datasource-name attribute is empty");
+        }
+        this.datasourceName = datasourceName;
+    }
+
+    /** Returns the value of the <code>group-name</code> attribute. */
+    public String getGroupName() {
+        return this.groupName;
+    }
+
+    /** Returns the value of the <code>datasource-name</code> attribute. */
+    public String getDatasourceName() {
+        return this.datasourceName;
+    }
+}

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/GroupMap.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/GroupMap.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Added: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/InlineJdbc.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/InlineJdbc.java?rev=1490187&view=auto
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/InlineJdbc.java (added)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/InlineJdbc.java Thu Jun  6 08:02:14 2013
@@ -0,0 +1,188 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.entity.config.model;
+
+import org.ofbiz.base.lang.ThreadSafe;
+import org.ofbiz.entity.GenericEntityConfException;
+import org.w3c.dom.Element;
+
+/**
+ * An object that models the <code>&lt;inline-jdbc&gt;</code> element.
+ *
+ * @see <code>entity-config.xsd</code>
+ */
+@ThreadSafe
+public final class InlineJdbc {
+
+    private final String jdbcDriver; // type = xs:string
+    private final String jdbcUri; // type = xs:string
+    private final String jdbcUsername; // type = xs:string
+    private final String jdbcPassword; // type = xs:string
+    private final String jdbcPasswordLookup; // type = xs:string
+    private final String isolationLevel;
+    private final String poolMaxsize; // type = xs:nonNegativeInteger
+    private final String poolMinsize; // type = xs:nonNegativeInteger
+    private final String idleMaxsize; // type = xs:nonNegativeInteger
+    private final String timeBetweenEvictionRunsMillis; // type = xs:nonNegativeInteger
+    private final String poolSleeptime; // type = xs:nonNegativeInteger
+    private final String poolLifetime; // type = xs:nonNegativeInteger
+    private final String poolDeadlockMaxwait; // type = xs:nonNegativeInteger
+    private final String poolDeadlockRetrywait; // type = xs:nonNegativeInteger
+    private final String poolJdbcTestStmt; // type = xs:string
+    private final String poolXaWrapperClass; // type = xs:string
+
+    public InlineJdbc(Element element) throws GenericEntityConfException {
+        String jdbcDriver = element.getAttribute("jdbc-driver").intern();
+        if (jdbcDriver.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element jdbc-driver attribute is empty");
+        }
+        this.jdbcDriver = jdbcDriver;
+        String jdbcUri = element.getAttribute("jdbc-uri").intern();
+        if (jdbcUri.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element jdbc-uri attribute is empty");
+        }
+        this.jdbcUri = jdbcUri;
+        String jdbcUsername = element.getAttribute("jdbc-username").intern();
+        if (jdbcUsername.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element jdbc-username attribute is empty");
+        }
+        this.jdbcUsername = jdbcUsername;
+        this.jdbcPassword = element.getAttribute("jdbc-password").intern();
+        this.jdbcPasswordLookup = element.getAttribute("jdbc-password-lookup").intern();
+        this.isolationLevel = element.getAttribute("isolation-level").intern();
+        String poolMaxsize = element.getAttribute("pool-maxsize").intern();
+        if (poolMaxsize.isEmpty()) {
+            poolMaxsize = "50";
+        }
+        this.poolMaxsize = poolMaxsize;
+        String poolMinsize = element.getAttribute("pool-minsize").intern();
+        if (poolMinsize.isEmpty()) {
+            poolMinsize = "2";
+        }
+        this.poolMinsize = poolMinsize;
+        this.idleMaxsize = element.getAttribute("idle-maxsize").intern();
+        String timeBetweenEvictionRunsMillis = element.getAttribute("time-between-eviction-runs-millis").intern();
+        if (timeBetweenEvictionRunsMillis.isEmpty()) {
+            timeBetweenEvictionRunsMillis = "600000";
+        }
+        this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
+        String poolSleeptime = element.getAttribute("pool-sleeptime").intern();
+        if (poolSleeptime.isEmpty()) {
+            poolSleeptime = "300000";
+        }
+        this.poolSleeptime = poolSleeptime;
+        String poolLifetime = element.getAttribute("pool-lifetime").intern();
+        if (poolLifetime.isEmpty()) {
+            poolLifetime = "600000";
+        }
+        this.poolLifetime = poolLifetime;
+        String poolDeadlockMaxwait = element.getAttribute("pool-deadlock-maxwait").intern();
+        if (poolDeadlockMaxwait.isEmpty()) {
+            poolDeadlockMaxwait = "300000";
+        }
+        this.poolDeadlockMaxwait = poolDeadlockMaxwait;
+        String poolDeadlockRetrywait = element.getAttribute("pool-deadlock-retrywait").intern();
+        if (poolDeadlockRetrywait.isEmpty()) {
+            poolDeadlockRetrywait = "10000";
+        }
+        this.poolDeadlockRetrywait = poolDeadlockRetrywait;
+        this.poolJdbcTestStmt = element.getAttribute("pool-jdbc-test-stmt").intern();
+        this.poolXaWrapperClass = element.getAttribute("pool-xa-wrapper-class").intern();
+    }
+
+    /** Returns the value of the <code>jdbc-driver</code> attribute. */
+    public String getJdbcDriver() {
+        return this.jdbcDriver;
+    }
+
+    /** Returns the value of the <code>jdbc-uri</code> attribute. */
+    public String getJdbcUri() {
+        return this.jdbcUri;
+    }
+
+    /** Returns the value of the <code>jdbc-username</code> attribute. */
+    public String getJdbcUsername() {
+        return this.jdbcUsername;
+    }
+
+    /** Returns the value of the <code>jdbc-password</code> attribute. */
+    public String getJdbcPassword() {
+        return this.jdbcPassword;
+    }
+
+    /** Returns the value of the <code>jdbc-password-lookup</code> attribute. */
+    public String getJdbcPasswordLookup() {
+        return this.jdbcPasswordLookup;
+    }
+
+    /** Returns the value of the <code>isolation-level</code> attribute. */
+    public String getIsolationLevel() {
+        return this.isolationLevel;
+    }
+
+    /** Returns the value of the <code>pool-maxsize</code> attribute. */
+    public String getPoolMaxsize() {
+        return this.poolMaxsize;
+    }
+
+    /** Returns the value of the <code>pool-minsize</code> attribute. */
+    public String getPoolMinsize() {
+        return this.poolMinsize;
+    }
+
+    /** Returns the value of the <code>idle-maxsize</code> attribute. */
+    public String getIdleMaxsize() {
+        return this.idleMaxsize;
+    }
+
+    /** Returns the value of the <code>time-between-eviction-runs-millis</code> attribute. */
+    public String getTimeBetweenEvictionRunsMillis() {
+        return this.timeBetweenEvictionRunsMillis;
+    }
+
+    /** Returns the value of the <code>pool-sleeptime</code> attribute. */
+    public String getPoolSleeptime() {
+        return this.poolSleeptime;
+    }
+
+    /** Returns the value of the <code>pool-lifetime</code> attribute. */
+    public String getPoolLifetime() {
+        return this.poolLifetime;
+    }
+
+    /** Returns the value of the <code>pool-deadlock-maxwait</code> attribute. */
+    public String getPoolDeadlockMaxwait() {
+        return this.poolDeadlockMaxwait;
+    }
+
+    /** Returns the value of the <code>pool-deadlock-retrywait</code> attribute. */
+    public String getPoolDeadlockRetrywait() {
+        return this.poolDeadlockRetrywait;
+    }
+
+    /** Returns the value of the <code>pool-jdbc-test-stmt</code> attribute. */
+    public String getPoolJdbcTestStmt() {
+        return this.poolJdbcTestStmt;
+    }
+
+    /** Returns the value of the <code>pool-xa-wrapper-class</code> attribute. */
+    public String getPoolXaWrapperClass() {
+        return this.poolXaWrapperClass;
+    }
+}

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/InlineJdbc.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/InlineJdbc.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Added: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/JndiJdbc.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/JndiJdbc.java?rev=1490187&view=auto
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/JndiJdbc.java (added)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/JndiJdbc.java Thu Jun  6 08:02:14 2013
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.entity.config.model;
+
+import org.ofbiz.base.lang.ThreadSafe;
+import org.ofbiz.entity.GenericEntityConfException;
+import org.w3c.dom.Element;
+
+/**
+ * An object that models the <code>&lt;jndi-jdbc&gt;</code> element.
+ *
+ * @see <code>entity-config.xsd</code>
+ */
+@ThreadSafe
+public final class JndiJdbc {
+
+    private final String jndiServerName; // type = xs:string
+    private final String jndiName; // type = xs:string
+    private final String isolationLevel;
+
+    public JndiJdbc(Element element) throws GenericEntityConfException {
+        String jndiServerName = element.getAttribute("jndi-server-name").intern();
+        if (jndiServerName.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element jndi-server-name attribute is empty");
+        }
+        this.jndiServerName = jndiServerName;
+        String jndiName = element.getAttribute("jndi-name").intern();
+        if (jndiName.isEmpty()) {
+            throw new GenericEntityConfException("<" + element.getNodeName() + "> element jndi-name attribute is empty");
+        }
+        this.jndiName = jndiName;
+        this.isolationLevel = element.getAttribute("isolation-level").intern();
+    }
+
+    /** Returns the value of the <code>jndi-server-name</code> attribute. */
+    public String getJndiServerName() {
+        return this.jndiServerName;
+    }
+
+    /** Returns the value of the <code>jndi-name</code> attribute. */
+    public String getJndiName() {
+        return this.jndiName;
+    }
+
+    /** Returns the value of the <code>isolation-level</code> attribute. */
+    public String getIsolationLevel() {
+        return this.isolationLevel;
+    }
+}

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/JndiJdbc.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/model/JndiJdbc.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL