java清除maxRows/queryTimeout&结果集未打开,不允许执行“下一步”操作。使用ScrollableResults验证autocommit是否已关闭
我需要迭代ScrollableResults,这实际上是在一个cron上执行的,它读取一个表的信息(Informix DB)大约100000条记录,并将一些信息保存在另一个DB的另一个表(Oracle 11g)上,但在过去30分钟内它抛出了两个异常;首先是“异常清除maxRows/queryTimeout java.sql.SQLException:'语句'已关闭'”,然后是“sql错误:-79878,SQLState:IX000结果集未打开,不允许操作'下一步'。请验证自动提交已关闭”
Jboss : jboss-as-7.1.1 setting up default-timeout
<subsystem xmlns="urn:jboss:domain:transactions:1.1">
<core-environment>
<process-id>
<uuid/>
</process-id>
</core-environment>
<recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>
<coordinator-environment default-timeout="10800"/>
Java JDK : 1.6
Hibernate 3.6.7
Spring 3.0.7 setting up defaultTimeout
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="defaultTimeout" value="10800" />
<property name="allowCustomIsolationLevels" value="true" />
</bean>
public void getArticulos(Consumer<Articulos> consumer) throws SQLException {
StatelessSession session = null;
try {
session = getSessionFactory().openStatelessSession();
session.connection().setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
Criteria criteria = session.createCriteria(getPersistentClass());
ScrollableResults results = criteria.scroll(ScrollMode.FORWARD_ONLY);
int cantidad = 0;
while (results.next()) {
Articulo item = (Articulo) results.get()[0];
amount ++;
LOG.debug(amount + " articulos");
consumer.accept(item, cantidad);
}
consumer.finish();
} finally {
if (session != null) {
try {
session.close();
} catch (Exception e) {
LOG.error("Unexpecting Error",
e);
}
}
}
}
我希望它能够读取和处理所有行而不会出现问题
共 (0) 个答案