Author: adrianc
Date: Mon Nov 16 21:09:34 2009
New Revision: 880957

URL: http://svn.apache.org/viewvc?rev=880957&view=rev
Log:
Small performance enhancement to the entity engine converter code. If a 
SQL->Java converter is needed, keep a reference to it in ModelFieldType.

Modified:
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/SqlJdbcUtil.java
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldType.java

Modified: 
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/SqlJdbcUtil.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/SqlJdbcUtil.java?rev=880957&r1=880956&r2=880957&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/SqlJdbcUtil.java 
(original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/SqlJdbcUtil.java Mon 
Nov 16 21:09:34 2009
@@ -511,16 +511,30 @@
         }
         Class<?> targetClass = mft.getJavaClass();
         if (targetClass != null) {
-            if (targetClass.equals(sourceObject.getClass())) {
+            Class<?> sourceClass = sourceObject.getClass();
+            if (targetClass.equals(sourceClass)) {
                 entity.dangerousSetNoCheckButFast(curField, sourceObject);
                 return;
             }
-            try {
-                Converter<Object, Object> converter = (Converter<Object, 
Object>) Converters.getConverter(sourceObject.getClass(), targetClass);
-                entity.dangerousSetNoCheckButFast(curField, 
converter.convert(sourceObject));
-                return;
-            } catch (Exception e) {
-                Debug.logError(e, module);
+            Converter<Object, Object> converter = (Converter<Object, Object>) 
mft.getSqlToJavaConverter();
+            if (converter == null) {
+                if (mft.getSqlClass() == null) {
+                    mft.setSqlClass(sourceClass);
+                }
+                try {
+                    converter = (Converter<Object, Object>) 
Converters.getConverter(sourceClass, targetClass);
+                    mft.setSqlToJavaConverter(converter);
+                } catch (Exception e) {
+                    Debug.logError(e, module);
+                }
+            }
+            if (converter != null) {
+                try {
+                    entity.dangerousSetNoCheckButFast(curField, 
converter.convert(sourceObject));
+                    return;
+                } catch (Exception e) {
+                    Debug.logError(e, module);
+                }
             }
             Debug.logInfo("Unable to convert, falling back on switch 
statement", module);
         }

Modified: 
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldType.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldType.java?rev=880957&r1=880956&r2=880957&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldType.java 
(original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldType.java 
Mon Nov 16 21:09:34 2009
@@ -22,6 +22,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.ofbiz.base.conversion.Converter;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
@@ -56,6 +57,8 @@
 
     /** The sql-type-alias of the Field, this is optional */
     protected String sqlTypeAlias = null;
+    
+    protected Converter<?, ?> sqlToJavaConverter = null;
 
     /** validators to be called when an update is done */
     protected List<ModelFieldValidator> validators = new 
ArrayList<ModelFieldValidator>();
@@ -104,11 +107,6 @@
         return this.javaClass;
     }
 
-    /** The sql-type of the Field */
-    public String getSqlType() {
-        return this.sqlType;
-    }
-
     /** Returns the SQL <code>Class</code> of the Field. The returned value 
might
      * be <code>null</code>. The SQL class is unknown until a connection is 
made
      * to the database. */
@@ -116,6 +114,18 @@
         return this.sqlClass;
     }
 
+    /** Returns the SQL-object-type to Java-object-type <code>Converter</code> 
for
+     * the Field. The returned value might be <code>null</code>. The converter
+     * type is unknown until a connection is made to the database. */
+    public Converter<?, ?> getSqlToJavaConverter() {
+        return this.sqlToJavaConverter;
+    }
+
+    /** The sql-type of the Field */
+    public String getSqlType() {
+        return this.sqlType;
+    }
+
     /** The sql-type-alias of the Field */
     public String getSqlTypeAlias() {
         return this.sqlTypeAlias;
@@ -134,6 +144,13 @@
         this.sqlClass = sqlClass;
     }
 
+    /** Sets the SQL-object-type to Java-object-type <code>Converter</code> for
+     * the Field.
+     */
+    public synchronized void setSqlToJavaConverter(Converter<?, ?> converter) {
+        this.sqlToJavaConverter = converter;
+    }
+
     /** A simple function to derive the max length of a String created from 
the field value, based on the sql-type
      * @return max length of a String representing the Field value
      */


Reply via email to