java.sql.SQLRecoverableException: Geschlossene Verbindung

Dem ich arbeite, Struts 2 Framework mit Hibernate 3.3 und verwenden von Oracle 11g. Mein web-Projekt war in Ordnung arbeiten seit 5 Monaten. Aber vor kurzem bin ich vor der java.sql.SQLRecoverableException: Geschlossene Verbindung bei einige Zeit im Leerlauf. Ich erkläre das Szenario folgt..
Meine hibernate.cfg.xml Konfiguration ist

<property name="hibernate.current_session_context_class">
        thread
    </propert
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.username">user</property>
<property name="connection.password">user</property>
<property name="connection.driver_class">
        oracle.jdbc.OracleDriver
    </property>
<property name="myeclipse.connection.profile">Oracle</property>
<property name="hibernate.connection.autoReconnect">true</property>
<property name="dialect"> org.hibernate.dialect.Oracle10gDialect </property>

Und meine HibernateSessionFactory conf ist

private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
private static Configuration configuration = new Configuration();
private static org.hibernate.SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;
static {
    try {
        configuration.configure(configFile);
        sessionFactory = configuration.buildSessionFactory();
    } catch (Exception e) {
        System.err
                .println("%%%% Error Creating SessionFactory %%%%");
        //e.printStackTrace();
    }
}
private HibernateSessionFactory() {
}
public static Session getSession() throws HibernateException {
    Session session = (Session) threadLocal.get();

    if (session == null || !session.isOpen()) {
        if (sessionFactory == null) {
            rebuildSessionFactory();
        }
        session = (sessionFactory != null) ? sessionFactory.openSession()
                : null;
        threadLocal.set(session);
    }

    return session;
}
public static void rebuildSessionFactory() {
    try {
        configuration.configure(configFile);
        sessionFactory = configuration.buildSessionFactory();
    } catch (Exception e) {
        System.err
                .println("%%%% Error Creating SessionFactory %%%%");
        //e.printStackTrace();
    }
}
public static void closeSession() throws HibernateException {
    Session session = (Session) threadLocal.get();
    threadLocal.set(null);

    if (session != null) {
        session.close();
    }
}
public static org.hibernate.SessionFactory getSessionFactory() {
    return sessionFactory;
}
public static void setConfigFile(String configFile) {
    HibernateSessionFactory.configFile = configFile;
    sessionFactory = null;
}
public static Configuration getConfiguration() {
    return configuration;
}

Dann kommt der Fehler, wenn der folgende code ausgeführt wird

session = HibernateSessionFactory.getSession();
Query query = session.createQuery(SQL_QUERY);
try {
                //session.connection().close();
                System.out.println("CLOSED :"
                        + session.connection().isClosed());
                if (session.connection().isClosed()) {
                    System.out.println("RECONNECTING.......");
                    session.reconnect();
                }
                System.out.println("CLOSED :"
                        + session.connection().isClosed());
            } catch (Exception e1) {

                //TODO Auto-generated catch block
                e1.printStackTrace();
            }
try {
for (Iterator it = query.iterate(); it.hasNext();) {
                    chk = true;
                    ur = (EmagEnterpriseLogin) it.next();
} catch (Exception e) {
                //TODO Auto-generated catch block
                e.printStackTrace();
            }

Wenn das obige snippet läuft, obwohl in der Lage, die Sitzung wurde eröffnet und erstellte Abfrage erfolgreich, Aber nicht auf die Iteration der Abfrage. Erstmals kommt als

Caused By:java.sql.SQLRecoverableException: Closed Connection

Aber bevor dieser Fehler in den ersten versuchen, ich nahm die Sitzung.- Verbindung.isClosed() war falsch. Aber nach dem ersten Fehler, dann hält am kommenden SQL State=null und das zweite mal, das ich bekommen konnte-Sitzung.- Verbindung.isClosed() wahr ist. Und dann wieder anschließen, führt aber immer noch der gleiche Fehler wiederholt.Ich habe auch versucht, den Wiederaufbau sessionfactory, das auch fehlgeschlagen. Bitte helfen Sie mir, dieses Problem zu lösen.

Was ist der oracle-Fehler?
org.hibernate.Ausnahme.JDBCConnectionException: could not execute query mit Durchlaufen

InformationsquelleAutor Ram | 2013-02-07

Schreibe einen Kommentar