RESOLVED - BATCH-650: Use FORWARD_ONLY as scroll mode in HibernateCursorItemReader

added item buffer and made the cursor forward-only (+ had to fix samples using stateful items with rollback)
This commit is contained in:
robokaso
2008-06-04 13:43:00 +00:00
parent c21032332b
commit d377e4c5c3
7 changed files with 95 additions and 55 deletions

View File

@@ -108,10 +108,13 @@ public abstract class AbstractCustomerCreditIncreaseTests extends AbstractValida
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
final BigDecimal creditBeforeUpdate = (BigDecimal) creditsBeforeUpdate.get(rowNum);
System.out.print("BEFORE:" + creditBeforeUpdate);
final BigDecimal expectedCredit = creditBeforeUpdate.add(CREDIT_INCREASE);
System.out.print(" EXPECTED:" + expectedCredit);
if (expectedCredit.equals(rs.getBigDecimal(CREDIT_COLUMN))) {
matches.add(rs.getBigDecimal(ID_COLUMN));
}
System.out.println(" ACTUAL: " + rs.getBigDecimal(CREDIT_COLUMN));
return null;
}

View File

@@ -4,50 +4,41 @@ import java.math.BigDecimal;
import junit.framework.TestCase;
import org.easymock.MockControl;
import org.springframework.batch.sample.dao.CustomerCreditDao;
import org.springframework.batch.sample.domain.CustomerCredit;
import org.springframework.batch.sample.item.writer.CustomerCreditIncreaseWriter;
/**
* Tests for {@link CustomerCreditIncreaseWriter}.
*
* @author Robert Kasanicky
*/
public class CustomerCreditIncreaseProcessorTests extends TestCase{
public class CustomerCreditIncreaseProcessorTests extends TestCase {
private CustomerCreditIncreaseWriter writer = new CustomerCreditIncreaseWriter();
private CustomerCreditDao outputSource;
private MockControl outputSourceControl = MockControl.createStrictControl(CustomerCreditDao.class);
private CustomerCredit customerCredit = new CustomerCredit();
protected void setUp() throws Exception {
customerCredit.setId(1);
customerCredit.setName("testCustomer");
outputSource = (CustomerCreditDao) outputSourceControl.getMock();
writer.setCustomerCreditDao(outputSource);
}
/**
* Increases customer's credit by fixed value
*/
public void testProcess() throws Exception {
BigDecimal oldCredit = new BigDecimal(10.54);
final BigDecimal oldCredit = new BigDecimal(10.54);
class CustomerDaoStub implements CustomerCreditDao {
public void writeCredit(CustomerCredit customerCredit) throws Exception {
BigDecimal expectedCredit = oldCredit.add(CustomerCreditIncreaseWriter.FIXED_AMOUNT);
assertTrue(customerCredit.getCredit().compareTo(expectedCredit) == 0);
}
}
CustomerCredit customerCredit = new CustomerCredit();
customerCredit.setId(1);
customerCredit.setName("testCustomer");
writer.setCustomerCreditDao(new CustomerDaoStub());
customerCredit.setCredit(oldCredit);
outputSource.writeCredit(customerCredit);
outputSourceControl.setVoidCallable();
outputSourceControl.replay();
writer.write(customerCredit);
BigDecimal newCredit = customerCredit.getCredit();
BigDecimal expectedCredit = oldCredit.add(CustomerCreditIncreaseWriter.FIXED_AMOUNT);
assertTrue(newCredit.compareTo(expectedCredit) == 0);
outputSourceControl.verify();
}
}