2015-06-24 7 views
6

In meiner Hibernate-Anwendung habe ich unten Code zum Speichern von EmployeeRegistration-Objekt in Oracle DB geschrieben.Ruhezustand inaktive Sitzung in Orakel db auch nach dem Schließen der Sitzung beibehalten

public Integer submitDetails(EmployeeRegistration es) 
{ 
    Session session = factory.openSession(); 
    Transaction tx = null; 
    Integer employeeID = null; 
    try 
    { 
     tx = session.beginTransaction(); 
     employeeID = (Integer)session.save(es); 
     session.flush(); 
     tx.commit(); 
    } 
    catch(HibernateException e) 
    { 
     if(tx != null) 
     { 
      tx.rollback(); 
     } 
     e.printStackTrace(); 
    } 
    finally 
    { 
     if(session.isOpen()) { 
     session.close(); 
     } 
    } 
    return employeeID; 
} 

Nach dem Schließen Sitzung, hält es inaktive Sitzungen in Oracle DB. Ich habe die inaktive Sitzung mit der folgenden Abfrage in Oracle überprüft.

SQL> select USERNAME,COUNT(*) FROM V$SESSION WHERE STATUS='INACTIVE' GROUP BY USERNAME ; 

Wie Sie alle inaktiven Sitzung durch den Ruhezustand beenden. Kann mir jemand bei der Lösung dieses Problems helfen?

+0

Haben Sie Verbindungspooling aktiviert? Sitzungen werden regelmäßig in Oracle geleert. Es kann nicht sofort sein. – OldProgrammer

+0

Nein Ich verwende in dieser Anwendung kein Verbindungspooling. – Badal

+0

Zeigen Sie uns die Hibernate-Konfiguration. –

Antwort

1

stellen Sie sicher, dass Sie die sessionFactory nicht mehrmals erstellen.

In Ihrem finally Code versuchen Sie Folgendes:

if (session != null && session.isOpen()) { 
    session.flush(); 
    session.close(); 
} 

Jedes Mal, wenn Sie eine neue Datenbankverbindung eine Session bekommen erstellt wird, wenn nötig (es: Transaktion gestartet). Es ist besser, einen Verbindungspool zu verwenden, um dieses Verhalten zu überwinden.

bearbeiten vom docs

eigenen Verbindungs-Pooling-Algorithmus Hibernate ist jedoch ziemlich rudimentär. Es soll Ihnen den Einstieg erleichtern und ist nicht für die Verwendung in einem Produktionssystem oder sogar für Leistungstests gedacht.

Ich würde Ihnen vorschlagen, sich mit Fragen von etwas zu tun, eine Verbindung Pooling zu nutzen, bevor rudimentär von den Machern von der Bibliothek definiert ...

+0

Glaubst du, dass das Überprüfen des Session-Objekts mit null und das Aufrufen der Flush-Methode innerhalb des Blockes das Problem lösen wird, habe ich früher den gleichen Code versucht, aber es hat mir nicht geholfen. Jedenfalls werde ich es noch einmal überprüfen. – Badal

+0

Ich habe den obigen Code ausprobiert und das Problem behoben. Danke :) – Badal

+0

Ich habe das gleiche Problem, aber es funktioniert nicht: \ –

0

Wie viele inaktive Sitzungen haben Sie in der Oracle-Datenbank Bekanntmachung dieser Benutzer?

Wenn Sie einen Eintrag sehen, ist dieser möglicherweise mit der SQL-Terminalsitzung verknüpft, die Sie mit der Datenbank geöffnet haben.

Wenn Sie sehen, dass es mehr als eins ist und der Zählerstand jedes Mal, wenn Sie Ihren Code ausführen, zunimmt, geben Sie die Verbindungen nicht richtig frei. Dies könnte ein Verbindungsleck sein.

Oder es könnte sein, dass Sie in der Tat einen Verbindungspool verwenden und die inaktiven Verbindungen zu den von ihm verwalteten Verbindungen gehören. Inaktiv bedeutet hier, dass sie gerade keine Aktion ausführen. Es bedeutet nicht, dass es ein Verbindungsleck gibt. Durch die Veröffentlichung Ihrer Konfiguration erhalten Sie ein wenig Licht. Sie können überprüfen, ob Sie einen Verbindungspool verwenden, indem Sie entweder eine Stack-Ablaufverfolgung generieren oder über den Code debuggen.

Stellen Sie außerdem sicher, dass keine andere Anwendung mit denselben Anmeldeinformationen auf die Datenbank zugreift.

+0

Die Anzahl der inaktiven Sitzung ist mehr als eins und in der Konfigurationsdatei habe ich die DB-Details, Dialekt-Klasse und den Mapping-Klassennamen nichts anderes, verwende ich nicht Irgendein Verbindungspooling-Mechanismus in dieser Anwendung und wenn Sie meinen obigen Code sehen, schließe ich auch die Sitzung. Muss noch etwas getan werden? – Badal

Verwandte Themen