2009-05-28 20 views
2

Ich habe einen Umstand, bei dem eine JDBC-Verbindung die Oracle-Sitzung, an die sie angeschlossen ist, in einen bestimmten Status versetzt (d. H. DBMS_FLASHBACK-Modus). Es ist möglich, dass der Ausgang dieses Modus (zumindest theoretisch) fehlschlägt, was bedeutet, dass die Sitzung irrtümlich in diesem Zustand verbleibt. In diesem Fall kann die Verbindung zum Pool zurückgegeben und von einem anderen Thread abgerufen werden, wobei sich die Oracle-Sitzung noch im aktivierten Modus DBMS_FLASHBACK befindet.Kann eine JBoss-JDBC-Verbindung ungültig gemacht werden, sodass sie nicht erneut aus dem Verbindungspool bereitgestellt wird?

Ich habe bewiesen, dass das tatsächlich passieren würde. (JBoss 4.2.1)

Ideal wäre es, die SQLException zu fangen, wenn der Modus beenden fehlschlägt, und markieren Sie die Verbindung als "schlecht", so dass JBoss die Verbindung zerstören würde, sobald es in den Pool zurückgegeben wurde und erstelle ein neues.

Aber ich kann keine Möglichkeit finden, die Verbindung für die sofortige Zerstörung zu markieren. Kennt jemand einen Weg?

Antwort

2

Ihre Oracle-Datenbank-Verbindungskonfiguration sollte eine Ausnahme Sortierer enthält:

<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name> 

Diese versucht zu bestimmen, wann eine Ausnahme auftritt, wenn die Verbindung wieder verwendet werden kann, oder muss getrennt werden. Dies ist auf der besten Basis und funktioniert nicht in jedem Fall. Meine Präferenz für Produktionsinstallationen lautet mark all exceptions as fatal. Setzen Sie dazu Ihren Ausnahmesorter auf org.jboss.resource.adapter.jdbc.GenericExceptionSorter.

0

Es ist eine gute Frage, und ich weiß nicht die vollständige Antwort, aber einige Möglichkeiten zu untersuchen wäre, mit dem JBoss-Failover-Mechanismus zu beginnen, wo es die Gültigkeit der Verbindung testet. Die Dokumentation dafür lautet here. Wenn dann im SQL, das die Gültigkeit testet, etwas eingefügt werden kann, das fehlschlägt, wenn die Verbindung im DBMS_FLASHBACK-Modus aktiviert ist, sollte JBoss die Verbindung verwerfen. Es testet wahrscheinlich bei der nächsten Anfrage nach einer Verbindung, nicht wenn es in den Pool zurückgegeben wird, obwohl das akzeptabel sein sollte.

Verwandte Themen