Очистка maxRows / queryTimeout & ResultSet не открыта, операция «следующий» не разрешена. Убедитесь, что автокоммит выключен, исключение, используя ScrollableResults - PullRequest
1 голос
/ 11 октября 2019

Мне нужно перебрать ScrollableResults, это на самом деле выполняется в cron, это читает информацию таблицы (Informix DB) около 100000 записей и сохраняет некоторую информацию в другой таблице другой DB (Oracle 11g), но за 30минуты это бросает два исключения;сначала «очистка исключений maxRows / queryTimeout java.sql.SQLException:« оператор «уже закрыт», а затем «ошибка SQL: -79878, SQLState: IX000 ResultSet не открыт, операция« следующий »не разрешена. Убедитесь, что автокоммит выключен».

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);
                }
            }
        }
    }

Я ожидаю, что он прочитает и обработает все строки без проблем

...