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/01/21 18:38:23 UTC
svn commit: r371091 - in
/db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides:
advanced-technique.xml repository.xml
Author: arminw
Date: Sat Jan 21 09:38:15 2006
New Revision: 371091
URL: http://svn.apache.org/viewcvs?rev=371091&view=rev
Log:
add notes about declaration of RowReader
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/advanced-technique.xml
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/repository.xml
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/advanced-technique.xml
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/advanced-technique.xml?rev=371091&r1=371090&r2=371091&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/advanced-technique.xml (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/advanced-technique.xml Sat Jan 21 09:38:15 2006
@@ -1333,8 +1333,17 @@
</ul>
<p>
RowReader setting on <em>class-descriptor</em> level will override the standard
- reader set in <code>OJB.properties</code> file. If neither a RowReader was set in
- OJB.properties file nor in class-descriptor was set, OJB use an default implementation.
+ reader set in <code>OJB.properties</code> file.
+ </p>
+ <note>
+ Please read carefully the notes about using <em>RowReader</em> on class level
+ (and specific handling in class hierarchies) in
+ <a href="site:repository/class-descriptor">class-descriptor section</a>.
+ </note>
+ <p>
+ If neither a RowReader was set in
+ OJB.properties file nor in <a href="site:repository/class-descriptor">class-descriptor</a>
+ was set, OJB use an default implementation.
</p>
<p>
To understand how to use them we must know some of the details of the load mechanism.
@@ -1353,101 +1362,21 @@
<source><![CDATA[
protected Object getObjectFromResultSet() throws PersistenceBrokerException
{
- if (getItemProxyClass() != null)
- {
- // provide m_row with primary key data of current row
- getQueryObject().getClassDescriptor().getRowReader()
- .readPkValuesFrom(getRsAndStmt().m_rs, getRow());
- // assert: m_row is filled with primary key values from db
- return getProxyFromResultSet();
- }
- else
- {
- // 0. provide m_row with data of current row
- getQueryObject().getClassDescriptor().getRowReader()
- .readObjectArrayFrom(getRsAndStmt().m_rs, getRow());
- // assert: m_row is filled from db
-
- // 1.read Identity
- Identity oid = getIdentityFromResultSet();
- Object result = null;
-
- // 2. check if Object is in cache. if so return cached version.
- result = getCache().lookup(oid);
- if (result == null)
- {
- // 3. If Object is not in cache
- // materialize Object with primitive attributes filled from
- // current row
- result = getQueryObject().getClassDescriptor()
- .getRowReader().readObjectFrom(getRow());
- // result may still be null!
- if (result != null)
- {
- synchronized (result)
- {
- getCache().enableMaterializationCache();
- getCache().cache(oid, result);
- // fill reference and collection attributes
- ClassDescriptor cld = getQueryObject().getClassDescriptor()
- .getRepository().getDescriptorFor(result.getClass());
- // don't force loading of reference
- final boolean unforced = false;
- // Maps ReferenceDescriptors to HashSets of owners
- getBroker().getReferenceBroker().retrieveReferences(result, cld, unforced);
- getBroker().getReferenceBroker().retrieveCollections(result, cld, unforced);
- getCache().disableMaterializationCache();
- }
- }
- }
- else // Object is in cache
- {
- ClassDescriptor cld = getQueryObject().getClassDescriptor()
- .getRepository().getDescriptorFor(result.getClass());
- // if refresh is required, update the cache instance from the db
- if (cld.isAlwaysRefresh())
- {
- getQueryObject().getClassDescriptor()
- .getRowReader().refreshObject(result, getRow());
- }
- getBroker().refreshRelationships(result, cld);
- }
- return result;
- }
+ ...
+ RowReader rowReader = getQueryObject().getClassDescriptor().getRowReader();
+ ...
+ return result;
}]]></source>
<p>
This method first uses a RowReader to instantiate a new object array
and to fill it with primitive attributes from the
current ResultSet row.
<br/>
- The RowReader to be used for a Class can be configured in the XML
- repository with the attribute
+ The RowReader to be used for a Class can be configured in the
+ <a href="site:repository">metadata repository</a> with the attribute
<a href="site:repository/class-descriptor"><code>row-reader</code></a>.
- If no RowReader is specified, the standard <code>RowReader</code> is used. The
- method
- <code>readObjectArrayFrom(...)</code> of this class looks like follows:
+ If no RowReader is specified, the standard <code>RowReader</code> is used.
</p>
- <source><![CDATA[
-public void readObjectArrayFrom(ResultSet rs, ClassDescriptor cld, Map row)
-{
- try
- {
- Collection fields = cld.getRepository().
- getFieldDescriptorsForMultiMappedTable(cld);
- Iterator it = fields.iterator();
- while (it.hasNext())
- {
- FieldDescriptor fmd = (FieldDescriptor) it.next();
- FieldConversion conversion = fmd.getFieldConversion();
- Object val = JdbcAccess.getObjectFromColumn(rs, fmd);
- row.put(fmd.getColumnName() , conversion.sqlToJava(val));
- }
- }
- catch (SQLException t)
- {
- throw new PersistenceBrokerException("Error reading from result set",t);
- }
-}]]></source>
<p>
In the second step OJB checks if there is
already a cached version of the object to materialize.
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/repository.xml
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/repository.xml?rev=371091&r1=371090&r2=371091&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/repository.xml (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/repository.xml Sat Jan 21 09:38:15 2006
@@ -1068,10 +1068,22 @@
The <em>table</em> attribute speciefies the table name this class is mapped to.
</p>
<p>
- The <em>row-reader</em> attribute may contain a full qualified class name. This class will be
- used as the <a href="site:advanced-technique/using-rowreader">RowReader</a> implementation used
- to materialize instances of the persistent class.
+ The <em>row-reader</em> attribute may contain a full qualified class name. The specified
+ class will be used as the <a href="site:advanced-technique/using-rowreader">RowReader</a>
+ implementation which materialize instances of the persistent class.
+ <br/>
+ If not set always the default implementation specified in
+ <a href="site:ojb-properties">OJB.prperties</a> file will be used.
</p>
+ <note>
+ Setting a specific <em>RowReader</em> (on class level) for a class using some kind of
+ <a href="site:advanced-technique/polymorphism">Polymorphism or Inheritance</a>
+ it's strongly recommended to set the same <em>RowReader</em> for each class in the
+ inheritance class graph. When OJB materialize the associated object of a result set row
+ it always use the <em>RowReader</em> of the class specified in the query, e.g. the
+ <em>RowReader</em> defined in the base class or interface of the class graph or a
+ sub-class in the "middle" of the hierarchy.
+ </note>
<p>
The <em>extends</em> attribute is <strong>deprecated</strong> and will be removed
or reintroduced with changed funcitonality in future. DON'T USE IT!
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org