I am trying to iterate over a result set of 2million records, for a large
bulk load and transformation into a new ODS.  It appears that I am getting
an OutOfMemoryException because the DefaultResultSetHandler is caching the
object in the nestedResultObjects property.  Is there some property I should
set or statement/ method call I should be using that will allow me to
process one line at a time and not have the nestedResultObjects store each
object?

My goal:
* Grab a row
* Send it to be processed
* Once processed, move on to the next row.
Note: Once a row is processed I no longer need a tie back to the object.



I have included the custom ResultHandler, the unit test and the
configuration file.  Please let me know if you need other information.

package com.primetherapeutics.benplanmgr.entity.rxclaim;

import org.apache.ibatis.executor.result.ResultContext;
import org.apache.ibatis.executor.result.ResultHandler;
import org.apache.log4j.Logger;

/**
 * @author kjarnold
 *
 */
public class GroupEligibilityResultHandler implements ResultHandler {
        Logger logger = Logger.getLogger(GroupEligibilityResultHandler.class);
        
        int count = 0;
        
        public void handleResult(ResultContext context) {
                if(context.getResultObject() != null) {
                        count++;
                        logger.debug(count);
                }       
                //context.stop();
        }
        
        public int getCount() {
                return count;
        }

}

        @Test
        public void getGroupElibibilitiesByResultHandler() {
                Map<String, String> parameterMap = new HashMap<String, 
String>();
                parameterMap.put("gelThruDate", "1090101");
                parameterMap.put("addDate", "1090911");
                parameterMap.put("chgDate", "1090911");
                parameterMap.put("planDate", "1090101");
                try {
                        GroupEligibilityResultHandler handler = new
GroupEligibilityResultHandler();
                
session.select("com.primetherapeutics.benplanmgr.entity.rxclaim.data.GroupEligibilityMapper.getGroupEligibilities",
 
                                        parameterMap, handler);
                        logger.debug(handler.getCount());
                        
                } finally {
                        session.close();
                }
                
        }


Here are my mapping files:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" 
        "http://ibatis.apache.org/dtd/ibatis-3-config.dtd";>
<configuration>
<settings>
        <setting name="multipleResultSetsEnabled" value="false"/>
        <setting name="defaultExecutorType" value="BATCH"/>
</settings>
        <mappers>
                <mapper
resource="com/primetherapeutics/benplanmgr/entity/rxclaim/data/BenefitMaxSchedule.xml"/>
                <mapper
resource="com/primetherapeutics/benplanmgr/entity/rxclaim/data/GroupEligibility.xml"/>
        </mappers>
</configuration>



-- 
View this message in context: 
http://www.nabble.com/ResultHandler---OutOfMemory-Exception-tp25442025p25442025.html
Sent from the iBATIS - User - Java mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org
For additional commands, e-mail: user-java-h...@ibatis.apache.org

Reply via email to