Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Closed Statement / 9 сообщений из 9, страница 1 из 1
23.08.2013, 11:56:41
    #38375642
Pektoralis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closed Statement
Имеем 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
23.08.2013, 11:59:55
    #38375649
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closed Statement
Кто-то закрыл statement, а кто-то другой пытается его использовать. Stacktrace как всегда обрезан, чтобы не было своего кода. И нельзя было понять где ошибка происходит.
...
Рейтинг: 0 / 0
23.08.2013, 13:46:08
    #38375809
Pektoralis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closed Statement
Код: 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
23.08.2013, 13:48:07
    #38375812
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closed Statement
Уже лучше. Осталось совсем чуть-чуть. Увидеть где закрывается ResultSet и Statement. Они закрываются?
...
Рейтинг: 0 / 0
23.08.2013, 13:52:53
    #38375824
Pektoralis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closed Statement
Код: 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
23.08.2013, 14:09:48
    #38375856
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closed Statement
conn, rs, stm - не являются полями?
в настройках пула нет никаких таймаутов?
После "увеличения количества возвращаемых данных", этот метод как долго работает?
...
Рейтинг: 0 / 0
23.08.2013, 14:23:42
    #38375876
Pektoralis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closed Statement
Код: 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
23.08.2013, 14:31:28
    #38375892
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closed Statement
PektoralisP.S.: Под отладчиком - все нормально работает, без ошибок.
А вот это уже интересно и наводит на мысли о проблемах с многопоточностью.
Но ошибка всегда одна и та же да?
Можно попробовать сделать обертку для PreparedStatement через Proxy и логировать там вызов метода close().
Можно настротиь логирование в драйвере:
http://docs.oracle.com/cd/B28359_01/java.111/b31224/diagnose.htm#CIAGBGFI
...
Рейтинг: 0 / 0
23.08.2013, 15:34:25
    #38376006
Pektoralis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closed Statement
Спасибо, попробую.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Closed Statement / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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