читать сабл из оракула, используя спящий режим - PullRequest
0 голосов
/ 07 февраля 2011

У меня большая головная боль, когда я выясняю, в чем здесь проблема ..

Я получаю сессию от фабрики сессий, а затем получаю сгусток из персистентного объекта. Когда дело доходит до clob.getCharcterStream () или getAsciiStream (), возникает исключение - закрытое соединение.

Может ли кто-нибудь помочь мне с этим.

код:

    Session session = Dao.getSession(connId);
    Package pack = (Package) session.load(Package.class, packId);
    Hibernate.initialize(pack);

    Clob reportClob = pack.getExpReportFile();

    String result = null;
    InputStream stream = null;
    try
    {
        System.out.println(session.isConnected() + " " + session.isOpen());
        stream = reportClob.getAsciiStream();
        result = IOUtils.toString(stream);

    }
    catch (SQLException e)
    {
        e.printStackTrace();
    }
    return result;

Исключение:

true true
 java.sql.SQLException: Closed Connection
at oracle.sql.CLOB.getDBAccess(CLOB.java:1389)
at oracle.sql.CLOB.getAsciiStream(CLOB.java:330)
at org.hibernate.lob.SerializableClob.getAsciiStream(SerializableClob.java:68)
at com.server.WebServiceImpl.fetchPackageReport(WebServiceImpl.java:2070)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:562)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:188)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:224)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)

Ответы [ 3 ]

2 голосов
/ 07 февраля 2011

Причина этой ошибки в том, что сеанс, к которому присоединен ваш объект, теперь закрыт.

попробуйте соединение дБ с отключенной автоматической фиксацией (hibernate.connection.autocommit) или вам нужна открытая транзакция.

0 голосов
/ 09 июня 2011

Вы можете попробовать добавить системное свойство hibernate.jdbc.use_streams_for_binary = true (это исправило ошибки закрытого соединения для меня)

0 голосов
/ 08 февраля 2011

Есть ли конкретная причина, по которой вам нужно, чтобы это был Клоб? Глядя на пример кода, похоже, что вы помещаете его в строку, и Hibernate поддерживает помещение Clobs в String, char[] и Clob. Это должно решить проблему.

Если требуется, чтобы в строке были только символы ASCII, вы всегда можете сделать что-то вроде:

String ascii = new String(oldString.getBytes("ASCII"),"ASCII");

Предупреждение: если вы перейдете на String, вы можете столкнуться с этой ошибкой , однако попробовать все же стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...