Meine Anwendung hat lang laufende Transaktionen und deshalb habe ich die Option session.close() am Ende jeder Methode ausprobiert, um sicherzustellen, dass die Verbindungsobjekte nicht unbegrenzt lange gehalten werden.
Wenn die Option session.close() verwendet wird, konnte ich sehen, dass das Hibernate-Sitzungsobjekt und das entsprechende Verbindungsobjekt, das von session.connection() erhalten wurde, ordnungsgemäß zerstört werden. Aber das Problem liegt beim Verbindungspool. Die Verbindung, die von der Sitzung erhalten wurde, wird auch nach dem Schließen der Sitzung nicht an den Verbindungspool zurückgegeben. Andere Anfragen warten auf eine Verbindung aus dem Pool.
Ich verwende in meiner Anwendung JTA-Transaktionen. In der hibernate.cfg.xml habe ich die connection.release_mode auf auto (Standard) und connection.autocommit auf true gesetzt.
Hat jemand dieses Problem gehabt? Bitte lassen Sie mich wissen, was ich hier übersehe.
Nachfrage: Dies sind die Details meiner Hibernate-Konfigurationsdatei:
MXoraDS
org.hibernate.dialect.Oracle9Dialect
after_statement
org.hibernate.transaction.WeblogicTransactionManagerLookup
org.hibernate.transaction.JTATransactionFactory
org.hibernate.context.JTASessionContext
true
2
Wir verwenden JSF und EJB 2.1 auf der Anwendungsebene, die eine Verbindung zur Oracle-Datenbank herstellen. Das after_statement
scheint die Verbindung zum Pool nicht freizugeben. Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.