BATCH-970: added call to DataSourceUtils to get connection for active transaction
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
package org.springframework.batch.item.database;
|
||||
|
||||
import static org.easymock.EasyMock.*;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.internal.runners.JUnit4ClassRunner;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.batch.item.ExecutionContext;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
import org.springframework.transaction.TransactionStatus;
|
||||
import org.springframework.transaction.support.TransactionCallback;
|
||||
import org.springframework.transaction.support.TransactionTemplate;
|
||||
|
||||
@RunWith(JUnit4ClassRunner.class)
|
||||
public class JdbcCursorItemReaderConfigTests {
|
||||
|
||||
/*
|
||||
* Should fail if trying to call getConnection() twice
|
||||
*/
|
||||
@Test
|
||||
public void testUsesCurrentTransaction() throws Exception {
|
||||
|
||||
DataSource ds = createMock(DataSource.class);
|
||||
Connection con = createMock(Connection.class);
|
||||
expect(con.getAutoCommit()).andReturn(false);
|
||||
PreparedStatement ps = createMock(PreparedStatement.class);
|
||||
expect(con.prepareStatement("select foo from bar", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY,
|
||||
ResultSet.HOLD_CURSORS_OVER_COMMIT)).andReturn(ps);
|
||||
expect(ds.getConnection()).andReturn(con);
|
||||
con.commit();
|
||||
replay(con);
|
||||
replay(ds);
|
||||
PlatformTransactionManager tm = new DataSourceTransactionManager(ds);
|
||||
TransactionTemplate tt = new TransactionTemplate(tm);
|
||||
final JdbcCursorItemReader<String> reader = new JdbcCursorItemReader<String>();
|
||||
reader.setDataSource(ds);
|
||||
reader.setSql("select foo from bar");
|
||||
final ExecutionContext ec = new ExecutionContext();
|
||||
tt.execute(
|
||||
new TransactionCallback() {
|
||||
public Object doInTransaction(TransactionStatus status) {
|
||||
reader.open(ec);
|
||||
reader.close();
|
||||
return null;
|
||||
}
|
||||
});
|
||||
verify(ds);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user