相关文章推荐
帅气的枕头  ·  Excel 中如何用 countif ...·  1 年前    · 
年轻有为的楼房  ·  React Native ...·  1 年前    · 
酒量大的蟠桃  ·  set maxlength for ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

First of all, I already read posts relating to this error prior to posting this question. However, most of them are not using PostgreSQL, so this error might be handled differently. Here's the stack trace of this error:

    WARN  org.hibernate.util.JDBCExceptionReporter  - SQL Error: 0, SQLState: 08006
 4450102501 [XmlBlaster.socket_ssl.cbWorkerThread] ERROR org.hibernate.util.JDBCExceptionReporter  - An I/O error occured while sending to the backend.
 java.lang.RuntimeException: org.hibernate.exception.JDBCConnectionException: could not execute query using iterate
    at edu.umd.cattlab.vatraffic.listener.output.VaTrafficDbModule.processSingleMessage(VaTrafficDbModule.java:380)
    at edu.umd.cattlab.vatraffic.listener.output.VaTrafficDbModule.processMessage(VaTrafficDbModule.java:266)
    at edu.umd.cattlab.vatraffic.listener.input.InputModule.sendMessageToOuputModules(InputModule.java:36)
    at edu.umd.cattlab.vatraffic.listener.input.XmlBlaster.update(XmlBlaster.java:173)
    at org.xmlBlaster.client.XmlBlasterAccess.update(XmlBlasterAccess.java:1043)
    at org.xmlBlaster.client.protocol.AbstractCallbackExtended.update(AbstractCallbackExtended.java:111)
    at org.xmlBlaster.client.protocol.AbstractCallbackExtended.update(AbstractCallbackExtended.java:199)
    at org.xmlBlaster.util.protocol.RequestReplyExecutor.receiveReply(RequestReplyExecutor.java:444)
    at org.xmlBlaster.client.protocol.socket.WorkerThread.run(WorkerThread.java:51)
 Caused by: org.hibernate.exception.JDBCConnectionException: could not execute query using iterate
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:74)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.loader.hql.QueryLoader.iterate(QueryLoader.java:427)
    at org.hibernate.hql.ast.QueryTranslatorImpl.iterate(QueryTranslatorImpl.java:380)
    at org.hibernate.engine.query.HQLQueryPlan.performIterate(HQLQueryPlan.java:224)
    at org.hibernate.impl.SessionImpl.iterate(SessionImpl.java:1192)
    at org.hibernate.impl.QueryImpl.iterate(QueryImpl.java:46)
    at edu.umd.cattlab.schema.hibernate.cattXML.extensions.VaTraffic.VaTrafficHelper.laneMap(VaTrafficHelper.java:165)
    at edu.umd.cattlab.vatraffic.listener.output.VaTrafficDbModule.processIncidentDescription(VaTrafficDbModule.java:396)
    at edu.umd.cattlab.vatraffic.listener.output.VaTrafficDbModule.processSingleMessage(VaTrafficDbModule.java:360)
    ... 8 more
 Caused by: org.postgresql.util.PSQLException: An I/O error occured while sending to the backend.
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:218)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
    at org.hibernate.loader.hql.QueryLoader.iterate(QueryLoader.java:404)
    ... 15 more
 Caused by: java.net.SocketException: Broken pipe
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
    at java.net.SocketOutputStream.write(Unknown Source)
    at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
    at java.io.BufferedOutputStream.write(Unknown Source)
    at org.postgresql.core.PGStream.SendChar(PGStream.java:174)
    at org.postgresql.core.v3.QueryExecutorImpl.sendBind(QueryExecutorImpl.java:829)
    at org.postgresql.core.v3.QueryExecutorImpl.sendOneQuery(QueryExecutorImpl.java:1053)
    at org.postgresql.core.v3.QueryExecutorImpl.sendQueryPreamble(QueryExecutorImpl.java:373)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:189)

Our application uses Hibernate, so here's the Hibernate configuration:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <!-- Database connection settings -->
    <property name="connection.driver_class">org.postgresql.Driver</property>
    <property name="connection.url">jdbc:postgresql://cannottell.umd.edu</property>
    <property name="connection.username"></property>
    <property name="connection.password"></property>
    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>
    <!-- Enable C3P0 database connection pool -->
    <!----> <!--<property name="c3p0.min_size">2</property>
    <property name="c3p0.max_size">5</property>
    <property name="c3p0.timeout">600</property>
    <property name="c3p0.max_statements">0</property>
    <property name="hibernate.c3p0.idle_test_period">300</property>
    <property name="hibernate.c3p0.acquire_increment">1</property>-->
    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
    <!-- Oracle doesn't handle prepared statement caching very well.  This disables prepared statements. -->
    <property name="statement_cache.size">0</property>
    <!-- Enable Hibernate's automatic session context management -->
    <property name="current_session_context_class">thread</property>
    <!-- Disable the second-level cache  -->
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">false</property>
    <!-- Drop and re-create the database schema on startup -->
    <property name="hbm2ddl.auto">false</property>
    <!-- ritis schema mappings -->
    <mapping resource="edu/umd/cattlab/schema/hibernate/cattXML/cattXML.hbm.xml"/>
    <mapping resource="edu/umd/cattlab/schema/hibernate/cattXML/cattXMLLookup.hbm.xml"/>
    <!-- vatraffic schema mappings -->
    <mapping resource="edu/umd/cattlab/schema/hibernate/cattXML/extensions/VaTraffic/vaTraffic.hbm.xml"/>
    <mapping resource="edu/umd/cattlab/schema/hibernate/cattXML/extensions/VaTraffic/vaTrafficLookup.hbm.xml"/>
</session-factory>
</hibernate-configuration>

Here's my questions:

  • Is this error really comes from the lost connection to the database, or is it an error from my code? (If the latter is true, then I'll provide the codes involved)
  • Either way, how should I deal with this error?
  • If the error comes from the database, how can I replicate this error (for testing purpose), provided that I do not have direct access to the database?
  • I'm sorry if I'm asking too many questions.By the way, I would love to add more information regarding to this question if necessary. I really appreciate any response from you all. Thank you.

    ADDED

    Here's the code for opening and closing the hibernate session:

    Session sess = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = null;
        String eventId = null;
        try {
            sess.getTransaction().setTimeout(new Integer(configuration
                            .getProperty("messageProcessingTimeout")));
            if (!sess.isConnected()) {
                attemptReconnect();
            } else {
                log.debug("Database connection open.");
            //tx = sess.beginTransaction();
            //log.debug("After transaction");
            eventId = processIncidentDescription(message, sess);
            //tx.commit();
            // Sending jmsNotify.
            if (Boolean.valueOf(configuration.getProperty("sendJmsNotify"))
                    && eventId != null) {
                log.debug("Sending jmsNotify message " + "<notify id=\""
                        + eventId + "\"/>");
                jmsSender.sendMessage("<notify id=\"" + eventId + "\"/>");
        } catch (Exception e) {
            try {
                if (tx != null)
                    tx.rollback();
            } catch (TransactionException te) {
                log.warn("Unable to roll back transaction.");
            throw new RuntimeException(e);
        } finally {
            sess.close();
    

    ADDED

    Here's the code that might cause the error:

    public static HashMap<String,HashMap<String,Object>> laneMap(Session sess){
        HashMap<String,HashMap<String,Object>> table = new HashMap<String,HashMap<String,Object>>();
        Query query = sess.createQuery("from Direction");
        Iterator<Object> iterate = query.iterate();
        while (iterate.hasNext()){
            Object obj = iterate.next();
            Direction direct = (Direction) obj;
            if (table.get("direction") == null){
                table.put("direction", new HashMap<String,Object>());
            String directDesc = direct.getDirectionDescription();
            table.get("direction").put(directDesc, direct);
        Query query2 = sess.createQuery("from LaneStatus");
        Iterator<Object> iterate2 = query2.iterate();
        while (iterate2.hasNext()){
            Object obj = iterate2.next();
            LaneStatus laneStatus = (LaneStatus) obj;
            if (table.get("lane_status") == null){
                table.put("lane_status", new HashMap<String,Object>());
            String directDesc = laneStatus.getLaneStatusDescription();
            table.get("lane_status").put(directDesc, laneStatus);
        Query query3 = sess.createQuery("from LaneType");
        Iterator<Object> iterate3 = query3.iterate();
        while (iterate3.hasNext()){
            Object obj = iterate3.next();
            LaneType laneType = (LaneType) obj;
            if (table.get("lane_type") == null){
                table.put("lane_type", new HashMap<String,Object>());
            String directDesc = laneType.getLaneTypeDescription();
            table.get("lane_type").put(directDesc, laneType);
        return table;
    

    This issue happens when your application can no longer connect to the Postgres DB. I've had it happen when I've been VPN'ed in to my office, and then close the VPN connection, which severs the DB connection. My local server will then show the above. If this issue is happening in your server environment, you need to see if there are network connectivity issues.

    Does that mean I don't have any control on what's going on there? I've read about MySQL has auto_connect property so that it can reconnect whenever such error happens. I'm not sure if postgres has the same feature. – vandershraaf Oct 5, 2011 at 15:17 How are you connecting? If you are using a connection pool, then this issue should really only happen when there is a network failure, or if the DB crashes, or something along those lines. – atrain Oct 5, 2011 at 15:27 Well, I don't think the DB crashes though. Basically I just have to restart the application with the DB is just fine. Might be from my code? – vandershraaf Oct 5, 2011 at 15:46 I'm sorry but i don't quite understand your question though. What i can say is the connection is not pooled by other pooling than the internal Hibernate pooling. (It's not using c3p0 either because this application is already in production server) – vandershraaf Oct 7, 2011 at 15:33 If that's the case, you might need to check for network blips that could sever the Postgres connection. When I'm working locally and a pipe breaks, all I need to do is restart, but obviously that's unacceptable for a Production server. You might also want to look at connection pooling at the server level. – atrain Oct 7, 2011 at 15:46 That would lead to a different error message (indicating that too many connections are open). – a_horse_with_no_name Oct 4, 2011 at 16:35 @Gandalf That makes sense but yeah, as a_horse_with_no_name points out, that would've been different error. Do you have anything that proves your claim though? – vandershraaf Oct 5, 2011 at 15:20

    Thanks for contributing an answer to Stack Overflow!

    • Please be sure to answer the question. Provide details and share your research!

    But avoid

    • Asking for help, clarification, or responding to other answers.
    • Making statements based on opinion; back them up with references or personal experience.

    To learn more, see our tips on writing great answers.