You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2006/05/31 19:15:56 UTC
svn commit: r410605 - in /db/ojb/branches/OJB_1_0_RELEASE/src:
java/org/apache/ojb/broker/accesslayer/RowReader.java
java/org/apache/ojb/broker/accesslayer/RowReaderDefaultImpl.java
xdoclet/test/xdoclet/modules/ojb/tests/TestRowReader.java
Author: arminw
Date: Wed May 31 10:15:55 2006
New Revision: 410605
URL: http://svn.apache.org/viewvc?rev=410605&view=rev
Log:
add new method, javadoc update
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RowReader.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RowReaderDefaultImpl.java
db/ojb/branches/OJB_1_0_RELEASE/src/xdoclet/test/xdoclet/modules/ojb/tests/TestRowReader.java
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RowReader.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RowReader.java?rev=410605&r1=410604&r2=410605&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RowReader.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RowReader.java Wed May 31 10:15:55 2006
@@ -19,48 +19,71 @@
import java.util.Map;
import org.apache.ojb.broker.metadata.ClassDescriptor;
+import org.apache.ojb.broker.metadata.FieldDescriptor;
/**
+ * This class is responsible to map a query result set row to the specified
+ * {@link java.util.Map}.
+ *
* @version $Id$
*/
public interface RowReader extends Serializable
{
- static final long serialVersionUID = -1283322922537162249L; /**
- * materialize a single object from the values of the Map row.
- * the implementor of this class must not care for materializing
- * references or collection attributes, this is done later!
+ static final long serialVersionUID = -1283322922537162249L;
+
+ /**
+ * Materialize a single object from the values of the Map row.
+ * The implementor of this class must not care for materializing
+ * references or collection attributes, this is done later!
+ *
* @param row the Map containing the new values
* @return a properly created instance.
*/
public Object readObjectFrom(Map row);
/**
- * refresh an existing instance from the values of the Map row.
+ * Refresh an existing instance from the values of the Map row.
+ *
* @param instance the instance to refresh
* @param row the Map containing the new values
*/
public void refreshObject(Object instance, Map row);
- /**
- * Read all fields from the current ResultRow into the Object[] row.#
- * ConversionStrategies are applied here!
- */
- public void readObjectArrayFrom(ResultSetAndStatement rs, Map row);
-
- /**
- * Read primary key fields from the current ResultRow into the Object[] row.#
- * ConversionStrategies are applied here!
- */
- public void readPkValuesFrom(ResultSetAndStatement rs, Map row);
+ /**
+ * Read all fields from the current ResultRow into the Object[] row.#
+ * ConversionStrategies are applied here!
+ *
+ * @param rs Current result set.
+ * @param row The target map.
+ */
+ public void readObjectArrayFrom(ResultSetAndStatement rs, Map row);
+
+ /**
+ * Read primary key fields from the current ResultRow into the Object[] row.#
+ * ConversionStrategies are applied here!
+ *
+ * @param rs Current result set.
+ * @param row The target map.
+ */
+ public void readPkValuesFrom(ResultSetAndStatement rs, Map row);
/**
* Set the descriptor this <i>RowReader</i> worked with.
+ *
+ * @param cld The {@link org.apache.ojb.broker.metadata.ClassDescriptor}.
*/
public void setClassDescriptor(ClassDescriptor cld);
+ /** Returns the associated {@link org.apache.ojb.broker.metadata.ClassDescriptor} */
+ public ClassDescriptor getClassDescriptor();
+
/**
- * Returns the associated {@link org.apache.ojb.broker.metadata.ClassDescriptor}
+ * Read the specified field into the row map.
+ *
+ * @param rs Current result set.
+ * @param row The target map.
+ * @param fields The fields to read from result set.
*/
- public ClassDescriptor getClassDescriptor();
+ public void readValuesFrom(ResultSetAndStatement rs, Map row, FieldDescriptor[] fields);
}
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RowReaderDefaultImpl.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RowReaderDefaultImpl.java?rev=410605&r1=410604&r2=410605&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RowReaderDefaultImpl.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RowReaderDefaultImpl.java Wed May 31 10:15:55 2006
@@ -37,6 +37,7 @@
* Used as key in result set row map.
*/
private static final String OJB_CONCRETE_CLASS_KEY = "ojbTemporaryNoneColumnKey";
+
/**
* represents a zero sized parameter array
*/
@@ -135,7 +136,8 @@
}
catch (Exception ex)
{
- throw new PersistenceBrokerException("Unable to invoke initialization method:" + initializationMethod.getName() + " for class:" + m_cld.getClassOfObject(), ex);
+ throw new PersistenceBrokerException("Unable to invoke initialization method:"
+ + initializationMethod.getName() + " for class:" + m_cld.getClassOfObject(), ex);
}
}
}
@@ -229,7 +231,7 @@
readValuesFrom(rs_stmt, row, pkFields);
}
- protected void readValuesFrom(ResultSetAndStatement rs_stmt, Map row, FieldDescriptor[] fields)
+ public void readValuesFrom(ResultSetAndStatement rs_stmt, Map row, FieldDescriptor[] fields)
{
int size = fields.length;
Object val;
@@ -258,38 +260,41 @@
protected String extractOjbConcreteClass(ClassDescriptor cld, ResultSet rs, Map row)
{
+ String result = null;
FieldDescriptor fld = m_cld.getOjbConcreteClassField();
- if (fld == null)
+ if (fld != null)
{
- return null;
- }
- try
- {
- Object tmp = fld.getJdbcType().getObjectFromColumn(rs, fld.getColumnName());
- // allow field-conversion for discriminator column too
- String result = (String) fld.getFieldConversion().sqlToJava(tmp);
- result = result != null ? result.trim() : null;
- if (result == null || result.length() == 0)
+ // First check for already existing entry to avoid multiple result set lookup
+ result = (String) row.get(fld.getColumnName());
+ if(result == null)
{
- throw new PersistenceBrokerException(
- "ojbConcreteClass field for class " + cld.getClassNameOfObject()
- + " returned null or 0-length string");
- }
- else
- {
- /*
- arminw: Make sure that we don't read discriminator field twice from the ResultSet.
- */
- row.put(fld.getColumnName(), result);
- return result;
+ try
+ {
+ Object tmp = fld.getJdbcType().getObjectFromColumn(rs, fld.getColumnName());
+ // allow field-conversion for discriminator column too
+ result = (String) fld.getFieldConversion().sqlToJava(tmp);
+ result = result != null ? result.trim() : null;
+ if (result == null || result.length() == 0)
+ {
+ throw new PersistenceBrokerException(
+ "ojbConcreteClass field for class " + cld.getClassNameOfObject()
+ + " returned 'null' or 0-length string");
+ }
+ else
+ {
+ // Make sure that we don't read discriminator field twice from the ResultSet
+ row.put(fld.getColumnName(), result);
+ }
+ }
+ catch(SQLException e)
+ {
+ throw new PersistenceBrokerException("Unexpected error while try to read 'ojbConcretClass'" +
+ " field from result set using column name " + fld.getColumnName() + " main class" +
+ " was " + m_cld.getClassNameOfObject(), e);
+ }
}
}
- catch(SQLException e)
- {
- throw new PersistenceBrokerException("Unexpected error while try to read 'ojbConcretClass'" +
- " field from result set using column name " + fld.getColumnName() + " main class" +
- " was " + m_cld.getClassNameOfObject(), e);
- }
+ return result;
}
/**
@@ -302,12 +307,6 @@
if(ojbConcreteClass != null)
{
result = m_cld.getRepository().getDescriptorFor(ojbConcreteClass);
- // if we can't find class-descriptor for concrete class, something wrong with mapping
- if (result == null)
- {
- throw new PersistenceBrokerException("Can't find class-descriptor for ojbConcreteClass '"
- + ojbConcreteClass + "', the main class was " + m_cld.getClassNameOfObject());
- }
}
return result;
}
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/xdoclet/test/xdoclet/modules/ojb/tests/TestRowReader.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/xdoclet/test/xdoclet/modules/ojb/tests/TestRowReader.java?rev=410605&r1=410604&r2=410605&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/xdoclet/test/xdoclet/modules/ojb/tests/TestRowReader.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/xdoclet/test/xdoclet/modules/ojb/tests/TestRowReader.java Wed May 31 10:15:55 2006
@@ -21,6 +21,7 @@
import org.apache.ojb.broker.accesslayer.RowReader;
import org.apache.ojb.broker.accesslayer.ResultSetAndStatement;
import org.apache.ojb.broker.metadata.ClassDescriptor;
+import org.apache.ojb.broker.metadata.FieldDescriptor;
/**
* Row reader class used in some of the unit tests.
@@ -51,5 +52,9 @@
public ClassDescriptor getClassDescriptor()
{
return null;
+ }
+
+ public void readValuesFrom(ResultSetAndStatement rs, Map row, FieldDescriptor[] fields)
+ {
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org