2016-07-29 8 views
0

Der Server, den ich verwende, ist GlassFish, aber dieses Problem tritt auch auf Weblogic.Erkennen von EJB-Datenquelle Client trennen

Meine Client-Maschine beginnt eine Transaktion, sucht mehrere EJBs vom Server und beginnt einige Arbeiten, die eine Weile dauern. Während des Prozesses stirbt der Client-Computer (sagen wir einen Stromausfall).

Die vom Client-Computer geöffneten Datenbankabfragen werden nie geschlossen (weil der Client beendet wurde) und dies führt zu Deadlocks und anderen Problemen.

Gibt es eine Möglichkeit, diese tote Transaktion zu erkennen und alle Ressourcen zurückzufordern?

Pseudocode Beispiel unten

transaction.begin(); 

MyBean bean = (MyBean)ctx.lookup("MyBean"); 

bean.doComplicatedWorkPart1(); 

bean.writeResultsToTheDatabase(); 

// Client dies during this method (powercut), so the transaction 
// is simply left hanging. 
bean.doComplicatedWorkPart2(); 

bean.writeResultsToTheDatabase(); 

transaction.commit(); 

Antwort

0

IIRC ist dies nicht leicht gehandhabt werden. Es hängt von der Datenbank ab, die Sie verwenden, was Sie tun müssen, um die hängenden Transaktionen mithilfe der DB-Verwaltung zu finden.

Um eine zuverlässigere Umgebung zu haben, sollten Sie eine serverseitige Bean dafür erstellen, hier ist es eher unwahrscheinlich, dass der Prozess irgendwo während der Transaktion abstürzt oder eine Verbindung verliert.

+0

Danke, ich dachte, das könnte eine schwierige Situation sein. Es passiert nicht allzu oft, aber es kann ein Ärgernis sein, wenn es passiert. –