IDEMPIERE-644 Transaction timeout with long runnig process
This commit is contained in:
parent
b9bfc63cec
commit
9e343a0ec4
|
@ -2399,8 +2399,10 @@ public final class DB
|
||||||
private static void verifyTrx(String trxName, String sql) {
|
private static void verifyTrx(String trxName, String sql) {
|
||||||
if (trxName != null && Trx.get(trxName, false) == null) {
|
if (trxName != null && Trx.get(trxName, false) == null) {
|
||||||
// Using a trx that was previously closed or never opened
|
// Using a trx that was previously closed or never opened
|
||||||
// this is equivalent to commit without trx (autocommit)
|
// probably timed out - throw Exception (IDEMPIERE-644)
|
||||||
log.severe("Transaction closed or never opened ("+trxName+") => this is equivalent to commit without trx (autocommit) --> " + sql); // severe?
|
String msg = "Transaction closed or never opened ("+trxName+") => (maybe timed out)";
|
||||||
|
log.severe(msg); // severe
|
||||||
|
throw new DBException(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -405,6 +405,36 @@ public class Trx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rollback and End Transaction, Close Connection and Throws an Exception
|
||||||
|
* @return true if success
|
||||||
|
*/
|
||||||
|
public synchronized boolean rollbackAndCloseOnTimeout() {
|
||||||
|
s_cache.remove(getTrxName());
|
||||||
|
|
||||||
|
//local
|
||||||
|
if (m_connection == null)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (isActive())
|
||||||
|
rollback();
|
||||||
|
|
||||||
|
// Close Connection
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_connection.close();
|
||||||
|
m_connection = null;
|
||||||
|
m_active = false;
|
||||||
|
fireAfterCloseEvent();
|
||||||
|
}
|
||||||
|
catch (SQLException e)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, m_trxName, e);
|
||||||
|
}
|
||||||
|
log.config(m_trxName);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* End Transaction and Close Connection
|
* End Transaction and Close Connection
|
||||||
* @return true if success
|
* @return true if success
|
||||||
|
@ -651,7 +681,7 @@ public class Trx
|
||||||
if (since > trxs[i].getTimeout() * 1000)
|
if (since > trxs[i].getTimeout() * 1000)
|
||||||
{
|
{
|
||||||
trxs[i].log.log(Level.WARNING, "Transaction timeout. Name="+trxs[i].getTrxName() + ", timeout(sec)="+(since / 1000));
|
trxs[i].log.log(Level.WARNING, "Transaction timeout. Name="+trxs[i].getTrxName() + ", timeout(sec)="+(since / 1000));
|
||||||
trxs[i].close();
|
trxs[i].rollbackAndCloseOnTimeout();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue