[jboss-user] [JBossCache] - Re: java.io.NotSerializableException: java.lang.Object -Clus

catchupvijay do-not-reply at jboss.com
Mon Jul 24 12:20:18 EDT 2006


Well, I think this has got to do with the way Ibatis is implemented. Here's an example.

private List runQueryForList(SqlStatement localSql, Connection conn, Object parameterObject, int skipResults, int maxResults, RowHandler rowHandler)        throws SQLException
    {
        List list;
        if(log.isDebugEnabled())
        {
            log.debug("executeQueryForList: " + name);
            conn = ConnectionLogProxy.newInstance(conn);
        }
        ErrorField errorField = new ErrorField();
        if(rowHandler == null)
            list = new ArrayList();
        else
            list = null;
        ResultSet rs = null;
        PreparedStatement ps = null;
        String errorMessage = "Check the SQL statement.";
        try
        {
            sqlMap.incrementExecutionThrottle(conn);
            ps = createStatement(conn, localSql, parameterObject);
            if(sqlMap.isDriverHintsEnabled() && maxResults != -1 && skipResults != -1)
            {
                ps.setFetchSize(maxResults + skipResults);
                ps.setMaxRows(maxResults + skipResults);
            }
            errorMessage = "Check the Parameter Map (or inline parameters).";
            applyParameterMap(localSql, ps, parameterObject, errorField);
            errorField.errorField = null;
            errorMessage = "Check the SQL statement.";
            rs = ps.executeQuery();
            for(int i = 0; i < skipResults; i++)
                if(!rs.next())
                    break;

            errorMessage = "Check the Result Map.";
            int n = 0;
            if(rowHandler == null)
            {
                for(; (maxResults == -1 || n < maxResults) && rs.next(); n++)
                {
                    Object object = applyResultMap(conn, rs, null, errorField);
                    list.add(object);
                }

                errorField.errorField = null;
            } else
            {
                for(; (maxResults == -1 || n < maxResults) && rs.next(); n++)
                {
                    Object object = applyResultMap(conn, rs, null, errorField);
                    rowHandler.handleRow(object);
                }

                errorField.errorField = null;
            }
        }
        catch(Throwable t)
        {
            Throwable tt = unwrapProxyException(t);
            String msg = "";
            if(errorField.errorField != null)
                msg = "Error executing '" + name + "' in '" + resourceName + "'. " + errorMessage + "  Check the '" + errorField + "' property. Cause: " + t;
            else
                msg = "Error executing '" + name + "' in '" + resourceName + "'. " + errorMessage + " Cause: " + t;
            if(log.isErrorEnabled())
                log.error(msg, t.fillInStackTrace());
            if(t instanceof SQLException)
                throw (SQLException)t;
            else
                throw new SQLException(msg);
        }
        finally
        {
            closeResultSet(rs);
            closeStatement(ps);
            sqlMap.decrementExecutionThrottle(conn);
        }
        notifyListeners();
        return list;
    }

BELOW IS THE  applyResultMap METHOD

private Object applyResultMap(Connection conn, ResultSet rs, Object resultObject, ErrorField errorField)
        throws SQLException
    {        Object object = resultObject;
        String typeName = null;
        if(getResultMapName() != null)
        {
            ResultMap map = getSqlMap().getResultMap(getResultMapName());
            typeName = map.getClassName();
            if(object == null)
                object = instantiate(map.getClassName());
            ResultMapping mapping;
            for(Iterator names = map.getMappedPropertyNames(); names.hasNext(); setBeanProperty(mapping, object, conn, rs, errorField))
            {
                String propertyName = (String)names.next();
                mapping = map.getResultMapping(propertyName);
            }

        } else
        if(resultClass != null)
        {
            typeName = resultClass;
            if(object == null)
                object = instantiate(resultClass);
            if(object instanceof BaseValue)
            {
                ResultMapping mapping = new ResultMapping();
                mapping.setPropertyName("value");
                mapping.setColumnName("VALUE");
                mapping.setColumnIndex(new Integer(1));
                setBeanProperty(mapping, object, conn, rs, errorField);
            } else
            if(object instanceof Map)
            {
                ResultSetMetaData rsmd = rs.getMetaData();
                int i = 0;
                for(int n = rsmd.getColumnCount(); i < n; i++)
                {
                    String columnName = rsmd.getColumnLabel(i + 1);
                    ((Map)object).put(columnName, rs.getObject(i + 1));
                }

            } else
            {
                autoMapResultSet(conn, rs, object, errorField);
            }
        }
        if(typeName != null && object != null && (object instanceof BaseValue) && !object.getClass().getName().equals(typeName))
            object = StaticBeanProbe.getObject(object, "value");
        return object;
    }

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3960458#3960458

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3960458



More information about the jboss-user mailing list