Re: error handling in ModelBasedResultSetIterator

Peter Doyle <[email protected]>
Newsgroups gmane.comp.jakarta.ojb.user
Message-ID <[email protected]>
sorry, i sent this to the wrong group all together - i intended it to go 
to the ddlutils group.


Peter Doyle wrote:
> How do I request less-strict error handling? Specifically I had to 
> modify org.apache.ddlutils.platform.ModelBasedResultSetIterator class 
> to skip setting bean values for allowable(in mysql 5.x) but unusual 
> timestamp values of "0000-00-00 00:00:00" (set by default). If this is 
> not the right forum for this request, please redirect me. The existing 
> source code in question looks like this:
>
> 45 /**
> 46  * This is an iterator that is specifically targeted at traversing 
> result sets.
> 47  * If the query is against a known table, then {@link 
> org.apache.ddlutils.dynabean.SqlDynaBean} instances
> 48  * are created from the rows, otherwise normal {@link 
> org.apache.commons.beanutils.DynaBean} instances
> 49  * are created.
> 50  * 51  * @version $Revision: 289996 $
> 52  */
>
> ...
>
> 218     /**
> 219      * {@inheritDoc}
> 220      */
> 221     public Object next() throws DatabaseOperationException
> 222     {
> 223         advanceIfNecessary();
> 224         if (_isAtEnd)
> 225         {
> 226             throw new NoSuchElementException("No more elements in 
> the resultset");
> 227         }
> 228         else
> 229         {
> 230             try
> 231             {
> 232                 DynaBean bean  = _dynaClass.newInstance();
> 233                 Table    table = null;
> 234 235                 if (bean instanceof SqlDynaBean)
> 236                 {
> 237                     SqlDynaClass dynaClass = 
> (SqlDynaClass)((SqlDynaBean)bean).getDynaClass();
> 238 239                     table = dynaClass.getTable();
> 240                 }
> 241 242                 for (Iterator it = 
> _columnsToProperties.entrySet().iterator(); it.hasNext();)
> 243                 {
> 244                     Map.Entry entry      = (Map.Entry)it.next();
> 245                     String    columnName = (String)entry.getKey();
> 246                     String    propName   = (String)entry.getValue();
> 247                     Table     curTable   = table;
> 248 249                     if (curTable == null)
> 250                     {
> 251                         curTable = 
> (Table)_preparedQueryHints.get(_caseSensitive ? columnName : 
> columnName.toLowerCase());
> 252                     }
> 253                     Object value = 
> _platform.getObjectFromResultSet(_resultSet, columnName, curTable);
> 254 255                     bean.set(propName, value);
> 256                 }
> 257                 _needsAdvancing = true;
> 258                 return bean;
> 259             }
> 260             catch (Exception ex)
> 261             {
> 262                 cleanUp();
> 263                 throw new DatabaseOperationException("Exception 
> while reading the row from the resultset", ex);
> 264             }
> 265         }
> 266     }
>
>
> The data extraction fails with the existing code with a "Exception 
> while reading the row from the resultset" error when it encounters the 
> "0000-00-00 00:00:00" timestamp values in the database. I am 
> suggesting a more lax error handling around the value setting code 
> (lines 253 - 255) as such (using some logging api wrapped with 
> commons-logging) to display the actual error message encountered and 
> proceed with the extraction rather than just fail. Perhaps this could 
> be regulated with an appropriate configuration directive 
> "errorHandling" in the ant task that could be checked at execution 
> time for a more elegant solution:
>
> 258                     Object value=null;
> 259                     260                     try {
> 261                         value = 
> _platform.getObjectFromResultSet(_resultSet, columnName, curTable);
> 262                         bean.set(propName, value);
> 263                     } catch (SQLException ex) {
> 264                         log.error(ex.getMessage());
> 265                     }
>
>
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.