Frage

Wir sind mit Spring 2.5.4 / Hibernate 3.2 / Websphere Application Server 6.1.0.17. Wir haben die Anwendung auf einer AIX-Box zum Einsatz. Am nächsten Tag, wenn ich komme in, versuche ich in die Anwendung zu protokollieren. Ich erhalte diese Ausnahme auf der Seite:

Error 500: Request processing failed; nested exception is org.springframework.dao.DataAccessResourceFailureException: could not execute query; nested exception is org.hibernate.exception.JDBCConnectionException: could not execute query

Ich habe die system.out Protokolle und weitere Details zu sehen. (Verwendet Pastebin da das Protokoll Formatierung war wirklich das Seitenlayout zu vermasseln)


Die Linie unseres Codes, die unsere Ausnahme verursacht ist:

List loginList = getHibernateTemplate().find("from Login  
    where storeId =" + id + " and password ='" + password + "'");

Wir sind die Verdrahtung der Verbindung in Spring applicationContext.xml. Wir sind uns bewusst, dass die Verbindung auf der AS400 manchmal fällt (sie können das System neu starten über Nacht - ich bin nicht sicher). Wir würden jedoch vorzugsweise nicht um eine neue Verbindung öffnen möchten, wenn wir alles in den application verdrahten.

Dieses Problem tritt unabhängig davon, mit einer Datasource / JNDI oder JDBC

Weiß jemand von irgendwelchen Einstellungen entweder Frühling hinzuzufügen oder zu überprüfen, Hibernate, wenn die Verbindung abgestanden wird, und wenn ja, lassen Sie sie und erstellen Sie einen neuen? Oder irgendwelche andere Ideen, dieses Problem zu lösen? Lassen Sie uns wissen, wenn Sie weitere Informationen / Code benötigen.

Sehr geschätzt,

Chris

Update:

einige Beiträge auf dem Frühling Community Forum ausgecheckt und ich habe meine Datasource mit commons-dbcp implementiert, die einige Eigenschaften wie ‚testWhileIdle‘ und ‚validation‘ hat. Ich werde die App laufen und überprüfen Sie es wieder in die Uhr verlassen. Wird ein Update veröffentlichen auf die Ergebnisse.

Update # 2:

Mit dbcp-Commons BasicDataSource scheint dieses Problem zu beheben, die ein Netzwerkproblem zu sein scheint. Websphere hat Verbindungen vereinigt, und wenn es ein Netzwerkproblem auf der AS400 Seite ist, wird es versuchen, die Verbindung zu verwenden, es hat, die er nicht kennt ‚abgestanden‘ ist. ein validation mit einem Zeitintervall zu verwenden ist ein billig (aber effizient) Weg, um dieses Problem zu lösen - aber es kann eine bessere Art und Weise auf der Websphere Seite unter Konfiguration sein. Aber, könnte genauso gut nicht ändern, was kaputt ist nicht so, bis dies nicht gelingt, wird es wohl sein, unsere Lösung der Zukunft.

War es hilfreich?

Lösung

Ach, das ist, was ich sagen wird ... das Problem in dem Verbindungspool gelöst werden muß, durch die Verbindungen vor der Rückkehr sie zu validieren. DBCP hat validation und JBoss hat auch etwas Ähnliches; Ich bin sicher, Websphere etwas Ähnliches in seinem Verbindungspool muss Verbindungen zu validieren, bevor sie aus reichend. Auch wenn Sie nicht testWhileIdle verwenden, wenn die Verbindung als ungültig erkannt wird, wird ein neuer angelegt und überreichen Sie am Pool statt der unwirksamen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top