Transaktions-Manager nicht immer ROLLBACKed
In meiner Anwendung sind wir mit TX-Manager.
Meine Anwendung basiert auf JSF und RF3.3 mit JDBC-Konnektivität zu MYSQL
Hier ist das Szenario:-
- Benutzer geben Sie den Wert in der GUI.
- nach dem sammeln alle Daten, die in der Backing-Bean bekomme ich die Instanz von Transaktions-Manager.
- Dann beginne ich den TX.
- Alle Werte eingefügt werden, in DB1.
- SOAP-Aufruf zum einfügen von Werten in eine andere DB2.
- Im Fall der insertion in DB2 schlägt fehl, Eintrag aus DB1 Rollen sollten, zurück.
7.Für diese verwende ich Texas.rollBack().
Problem ist, obwohl tx.- rollBack wird noch ausgeführt, dann wird der Eintrag nicht entfernt.
Ich habe versucht deklarieren afterRollBackAction und feuerte eine delete-query in "DB1", aber es gibt mir eine Ausnahme
org.jboss.util.NestedSQLException: Transaction TransactionImple < ac, BasicAction: a7c198d:6:4eccc549:a status: ActionStatus.ABORTED > cannot proceed STATUS_ROLLEDBACK; - nested throwable: (javax.transaction.RollbackException: Transaction TransactionImple < ac, BasicAction: a7c198d:6:4eccc549:a status: ActionStatus.ABORTED > cannot proceed STATUS_ROLLEDBACK)
Überprüfte ich mein code richtig..Es ist nicht die Ausnahme (NPE oder SQL oder Jede andere Art von Ausnahme geworfen)..
Können Sie mir bitte sagen, warum der TX ist kein Rückgängigmachen und löschen den Eintrag aus der DB1?
Code-Snippet :-
try
{
txManager.begin()
cStmt.setString(1,Name);
cStmt.setString(2,Address);
cStmt.setString(3,Number);
cStmt.registerOutParameter(10, java.sql.Types.INTEGER);
cStmt.execute();
int errorCode=cStmt.getShort(10);
if(errorCode==0)
{
WebService Stub =new WebServiceStub();
CreateIdentity create=new CreateIdentity();
create.setName(Name);
create.setAddress(Address);
create.setNumber(Number);
CreateIdentityResponse createResponse=stub.createIdentity(create);
int errorCodeFromWebService=createResponse.getMsg();
switch(errorCodeFromWebService)
{
case 0:
errorCode=0;
txmanager.commit();
break;
case -1:
txManager.rollback();
break;
default:
txManager.rollback();
}
else
{
txManager.rollback();
}
return errorCode;
Obwohl txManager.rollback aufgerufen wird, aber rollback selbst nicht passiert ist. Ich habe versucht, mit Aktionen vor und nach dem rollback, aber ohne Erfolg.
- Sind Ihre Tabellen InnoDB? Wenn Sie MyISAM -, dann sind Sie nicht unter Kontrolle der Vorgänge und können nicht zurückgesetzt werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als @Mark Rotteveel darauf hingewiesen, wenn Ihre Tabellen verwenden, MyIsam-engine Transaktionen, die nicht funktioniert. Wenn Sie InnoDB-engine überprüfen Sie die autocommit-Eigenschaft in Ihrer jdbc-Verbindung/jdbc-Treiber, es sollte auf false gesetzt werden.
Etwas code helfen... ich denke, der Fehler ist, da Sie es läuft am Ende einer Transaktion-rollback, aber ich bin mir nicht sicher.