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 */ |
Free forum by Nabble | Edit this page |