diff --git a/jpos/src/main/java/org/jpos/transaction/TransactionManager.java b/jpos/src/main/java/org/jpos/transaction/TransactionManager.java index 2a3946b3eb..e9090907d6 100644 --- a/jpos/src/main/java/org/jpos/transaction/TransactionManager.java +++ b/jpos/src/main/java/org/jpos/transaction/TransactionManager.java @@ -275,6 +275,9 @@ public void run () { if (prof != null) prof.reenable(); pausedCounter.decrementAndGet(); + + if (evt != null && abort) + evt.addMessage (" [force abort]"); } } else pt = null; @@ -312,7 +315,8 @@ public void run () { if (prof == null) prof = new Profiler(); else - prof.checkPoint("resume"); + prof.checkPoint("resume" + + (pt != null && pt.isAborting() ? " [force abort]" : "")); } snapshot (id, context, PREPARING); setThreadLocal(id, context); diff --git a/jpos/src/main/java/org/jpos/transaction/participant/QueryHost.java b/jpos/src/main/java/org/jpos/transaction/participant/QueryHost.java index 56a856826f..6a8d8ff382 100644 --- a/jpos/src/main/java/org/jpos/transaction/participant/QueryHost.java +++ b/jpos/src/main/java/org/jpos/transaction/participant/QueryHost.java @@ -100,16 +100,19 @@ public int prepare (long id, Serializable ser) { return PREPARED | NO_JOIN | READONLY; } + @Override public void responseReceived (ISOMsg resp, Object handBack) { Context ctx = (Context) handBack; ctx.put (responseName, resp); ctx.resume(); } + @Override public void expired (Object handBack) { Context ctx = (Context) handBack; String ds = ctx.getString(destination); String muxName = cfg.get ("mux." + ds , "mux." + ds); ctx.getResult().fail(CMF.HOST_UNREACHABLE, Caller.info(), "'%s' does not respond", muxName).FAIL(); + ctx.getPausedTransaction().forceAbort(); ctx.resume(); }