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.
org.hibernate.Ausnahme.JDBCConnectionException: could not execute query mit Durchlaufen
InformationsquelleAutor Ram | 2013-02-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schließlich fand ich die Lösung für mein problem ist die Verwendung von Drittanbieter-Anschluss-Provider anstelle der Verwendung von Hibernate Systemeigene Verbindung Anbieter. Ich verwendet c3p0 Verbindung provider zu , dass auch mir einige Probleme und ich haben das Problem auch. Die Referenz-link für c3p0 ist hier.. Hibernate c3p0 Verbindung NewPooledConnection schließen Ausnahme
InformationsquelleAutor Ram