java.sql.SQLRecoverableException при извлечении данных CLOB с использованием Hibernate + oracle 11g

Я получаю исключение «java.sql.SQLRecoverableException: Closed Connection» при извлечении данных CLOB из Oracle 11g с использованием Hibernate в веб-приложении java. Для подключения к БД я реализовал источник данных Tomcat 7.

Ниже мой источник, где я получаю исключение:

java.sql.Clob reqClob= userBean.getRequestData();
Reader clbReader = reqClob.getCharacterStream();

В приведенном выше коде при выполнении «clob.getCharacterStream()» я получаю ниже Exception :

java.sql.SQLRecoverableException: Closed Connection
at oracle.sql.CLOB.getDBAccess(CLOB.java:1389)
at oracle.sql.CLOB.getCharacterStream(CLOB.java:309)
at org.hibernate.lob.SerializableClob.getCharacterStream(SerializableClob.java:41)

Обратите внимание, что я могу получить данные из userBean для других значений.

Ниже приведена версия приложения, которую я использовал в приложении:

jdk1.6.0_33 (64bit version)  
hibernate3.jar 
ojdbc6.jar 
Oracle 11g 11.2.0.1.0 - (64bit version)

Одно странное поведение заключается в том, что я получаю эту проблему после того, как начал использовать источник данных TOMCAT 7.

Ниже приведен код источника данных из Context.xml:

<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" 
factory="oracle.jdbc.pool.OracleDataSourceFactory" name="jdbc/XXXX" password="XXXXX" 
type="oracle.jdbc.pool.OracleDataSource" 
url="jdbc:oracle:thin:@xx.xx.xx.xxxx:xxxx:xxxxxx" user="username"
connectionProperties="SetBigStringTryClob=true;" maxActive="20"
maxIdle="10" maxWait="-1" validationQuery="select 1 from dual" />

Я пробовал все возможные параметры для приведенного выше кода, но это не сработало.

Заранее спасибо за вашу помощь, ребята...


person deval.techie    schedule 27.04.2013    source источник
comment
Пожалуйста, ответьте мне, ребята .... это шоу-пробка для меня .. :(   -  person deval.techie    schedule 29.04.2013
comment
Вам удалось пройти мимо этого?   -  person karansardana    schedule 08.07.2016


Ответы (2)


Сегодня у меня была такая же проблема, и всегда, когда я звонил getSubString или getCharacterStream, у меня была ошибка Closed Connection.

Я решил с аннотацией и удалил тип Clob:

@Column(name = "CL_JSON_OUT", nullable = false)
private Clob jsonOut;

to:

@Lob
@Column(name = "CL_JSON_OUT", nullable = false)
private String jsonOut;

Это сообщение помогло мне

person Manuel Spigolon    schedule 04.08.2016

У меня была аналогичная проблема, я изменил Clob на String, как показано ниже:

String clobAsString = clob.getSubString(1, (int)clob.length());

Убедитесь, что вы выполняете это, когда соединение активно. Как в ДАО. Это должно быть выполнено в транзакции, которая извлекает элемент Clob из БД.

person Gayathri    schedule 08.10.2013