powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Closed Statement
9 сообщений из 9, страница 1 из 1
Closed Statement
    #38375642
Pektoralis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеем GlassFish Server Open Source Edition 3.1.1 (build 12) и Oracle 11.2.0.1.0
После увеличения количества возвращаемых данных получаем следующее:

Код: java
1.
2.
3.
4.
5.
6.
[#|2013-08-22T17:43:01.241+0400|INFO|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=179;_ThreadName=Thread-2;|2013-08-22 17:43:01,241 ERROR [http-thread-pool-8088(3)] (CommonCoreUtil.java:93) - Exception is caught:java.sql.SQLRecoverableException: Closed Statement
	at oracle.jdbc.driver.OracleStatement.ensureOpen(OracleStatement.java:6289)
	at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:5757)
	at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:5662)
	at oracle.jdbc.driver.OracleResultSet.getLong(OracleResultSet.java:797)
	at com.sun.gjc.spi.base.ResultSetWrapper.getLong(ResultSetWrapper.java:496)
...
Рейтинг: 0 / 0
Closed Statement
    #38375649
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-то закрыл statement, а кто-то другой пытается его использовать. Stacktrace как всегда обрезан, чтобы не было своего кода. И нельзя было понять где ошибка происходит.
...
Рейтинг: 0 / 0
Closed Statement
    #38375809
Pektoralis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
[#|2013-08-22T17:43:01.241+0400|INFO|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=179;_ThreadName=Thread-2;|2013-08-22 17:43:01,241 ERROR [http-thread-pool-8088(3)] (CommonCoreUtil.java:93) - Exception is caught:java.sql.SQLRecoverableException: Closed Statement
	at oracle.jdbc.driver.OracleStatement.ensureOpen(OracleStatement.java:6289)
	at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:5757)
	at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:5662)
	at oracle.jdbc.driver.OracleResultSet.getLong(OracleResultSet.java:797)
	at com.sun.gjc.spi.base.ResultSetWrapper.getLong(ResultSetWrapper.java:496)
	at promo.dao.promolifecycle.AnswerDAOJdbc.extractAnswerGoods(AnswerDAOJdbc.java:1977)
	at promo.dao.promolifecycle.AnswerDAOJdbc.fetchAnswers(AnswerDAOJdbc.java:549)
	at promo.dao.promolifecycle.AnswerDAOJdbc.getAnswersForNeeds(AnswerDAOJdbc.java:230)


...
 rs = stm.executeQuery();
 answers = fetchAnswers(rs);   // 230 строка
...
private Collection<Answer> fetchAnswers(ResultSet rs) throws SQLException, DAOException {
...
AnswerGoods answerGoodsItem = extractAnswerGoods(rs); // 549 строка
...
private AnswerGoods extractAnswerGoods(ResultSet rs) throws SQLException, DAOException {
        AnswerGoods answerGoods = new AnswerGoods();
        answerGoods.setId(rs.getLong("ANSWER_GOODS.ID")); // 1977 строка
...



Опять же - ошибка возникает при увеличении количества возвращаемых данных
...
Рейтинг: 0 / 0
Closed Statement
    #38375812
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже лучше. Осталось совсем чуть-чуть. Увидеть где закрывается ResultSet и Statement. Они закрываются?
...
Рейтинг: 0 / 0
Closed Statement
    #38375824
Pektoralis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
 
            rs = stm.executeQuery();
            answers = fetchAnswers(rs);   //   here we are
        } catch (SQLException e) {
            DBUtil.logAndThrowDAOException(LOG, e);
        } finally {
            releaseResources(conn, rs, stm);
        }
...
protected void releaseResources(Connection connection, ResultSet[] resultSets,
			Statement[] statements) {
		if (resultSets != null) {
			for (ResultSet resultSet : resultSets) {
				try {
					if (resultSet != null) {
						resultSet.close();
					}
				}
				catch (SQLException e) {
					logger.warn("Could not close result set: " + e);
				}
			}
		}

		if (statements != null) {
			for (Statement statement : statements) {
				try {
					if (statement != null) {
						statement.close();
					}
				}
				catch (SQLException e) {
					logger.warn("Could not close statement: " + e);
				}
			}
		}

		DataSourceUtils.releaseConnection(connection, dataSource);
	}
...
Рейтинг: 0 / 0
Closed Statement
    #38375856
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
conn, rs, stm - не являются полями?
в настройках пула нет никаких таймаутов?
После "увеличения количества возвращаемых данных", этот метод как долго работает?
...
Рейтинг: 0 / 0
Closed Statement
    #38375876
Pektoralis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    
public AnswerCollection getAnswersForNeeds(Collection<? extends Identifiable> needIds, boolean isOperation) throws DAOException {
...
	Connection conn = getConnection();
        PreparedStatement stm = null;
        ResultSet rs = null;
        Collection<Answer> answers = null;
        ...
            rs = stm.executeQuery();
            answers = fetchAnswers(rs);   //   here we are
        } catch (SQLException e) {
            DBUtil.logAndThrowDAOException(LOG, e);
        } finally {
            releaseResources(conn, rs, stm);
        }




1. conn, rs, stm - не являются полями?
Не являются.

2. в настройках пула нет никаких таймаутов
Нет.

3. После "увеличения количества возвращаемых данных", этот метод как долго работает?
Так же.

P.S.: Под отладчиком - все нормально работает, без ошибок.
...
Рейтинг: 0 / 0
Closed Statement
    #38375892
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PektoralisP.S.: Под отладчиком - все нормально работает, без ошибок.
А вот это уже интересно и наводит на мысли о проблемах с многопоточностью.
Но ошибка всегда одна и та же да?
Можно попробовать сделать обертку для PreparedStatement через Proxy и логировать там вызов метода close().
Можно настротиь логирование в драйвере:
http://docs.oracle.com/cd/B28359_01/java.111/b31224/diagnose.htm#CIAGBGFI
...
Рейтинг: 0 / 0
Closed Statement
    #38376006
Pektoralis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, попробую.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Closed Statement
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]