BF [ 2849122 ] PO.AfterSave is not rollback on error
https://sourceforge.net/tracker/?func=detail&aid=2849122&group_id=176962&atid=879332 Please help me reviewing this.
This commit is contained in:
parent
2486061559
commit
7e06648e08
|
@ -24,6 +24,7 @@ import java.sql.Clob;
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Savepoint;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
@ -73,6 +74,8 @@ import org.w3c.dom.Element;
|
||||||
* <li>FR [ 2042844 ] PO.get_Translation improvements
|
* <li>FR [ 2042844 ] PO.get_Translation improvements
|
||||||
* <li>FR [ 2818369 ] Implement PO.get_ValueAs*(columnName)
|
* <li>FR [ 2818369 ] Implement PO.get_ValueAs*(columnName)
|
||||||
* https://sourceforge.net/tracker/?func=detail&aid=2818369&group_id=176962&atid=879335
|
* https://sourceforge.net/tracker/?func=detail&aid=2818369&group_id=176962&atid=879335
|
||||||
|
* <li>BF [ 2849122 ] PO.AfterSave is not rollback on error
|
||||||
|
* https://sourceforge.net/tracker/?func=detail&aid=2849122&group_id=176962&atid=879332
|
||||||
* @author Victor Perez, e-Evolution SC
|
* @author Victor Perez, e-Evolution SC
|
||||||
* <li>[ 2195894 ] Improve performance in PO engine
|
* <li>[ 2195894 ] Improve performance in PO engine
|
||||||
* <li>http://sourceforge.net/tracker/index.php?func=detail&aid=2195894&group_id=176962&atid=879335
|
* <li>http://sourceforge.net/tracker/index.php?func=detail&aid=2195894&group_id=176962&atid=879335
|
||||||
|
@ -1941,22 +1944,39 @@ public abstract class PO
|
||||||
}
|
}
|
||||||
|
|
||||||
Trx localTrx = null;
|
Trx localTrx = null;
|
||||||
if (m_trxName == null) {
|
Trx trx = null;
|
||||||
|
Savepoint savepoint = null;
|
||||||
|
if (m_trxName == null)
|
||||||
|
{
|
||||||
m_trxName = Trx.createTrxName("POSave");
|
m_trxName = Trx.createTrxName("POSave");
|
||||||
localTrx = Trx.get(m_trxName, true);
|
localTrx = Trx.get(m_trxName, true);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
trx = Trx.get(m_trxName, false);
|
||||||
|
}
|
||||||
|
|
||||||
// Before Save
|
// Before Save
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// If not a localTrx we need to set a savepoint for rollback
|
||||||
|
if (localTrx == null)
|
||||||
|
savepoint = trx.setSavepoint(null);
|
||||||
|
|
||||||
if (!beforeSave(newRecord))
|
if (!beforeSave(newRecord))
|
||||||
{
|
{
|
||||||
log.warning("beforeSave failed - " + toString());
|
log.warning("beforeSave failed - " + toString());
|
||||||
if (localTrx != null) {
|
if (localTrx != null)
|
||||||
|
{
|
||||||
localTrx.rollback();
|
localTrx.rollback();
|
||||||
localTrx.close();
|
localTrx.close();
|
||||||
m_trxName = null;
|
m_trxName = null;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
trx.rollback(savepoint);
|
||||||
|
savepoint = null;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1964,15 +1984,25 @@ public abstract class PO
|
||||||
{
|
{
|
||||||
log.log(Level.WARNING, "beforeSave - " + toString(), e);
|
log.log(Level.WARNING, "beforeSave - " + toString(), e);
|
||||||
log.saveError("Error", e, false);
|
log.saveError("Error", e, false);
|
||||||
if (localTrx != null) {
|
if (localTrx != null)
|
||||||
|
{
|
||||||
localTrx.rollback();
|
localTrx.rollback();
|
||||||
localTrx.close();
|
localTrx.close();
|
||||||
m_trxName = null;
|
m_trxName = null;
|
||||||
}
|
}
|
||||||
|
else if (savepoint != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
trx.rollback(savepoint);
|
||||||
|
} catch (SQLException e1){}
|
||||||
|
savepoint = null;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
// Call ModelValidators TYPE_NEW/TYPE_CHANGE
|
// Call ModelValidators TYPE_NEW/TYPE_CHANGE
|
||||||
String errorMsg = ModelValidationEngine.get().fireModelChange
|
String errorMsg = ModelValidationEngine.get().fireModelChange
|
||||||
(this, newRecord ? ModelValidator.TYPE_NEW : ModelValidator.TYPE_CHANGE);
|
(this, newRecord ? ModelValidator.TYPE_NEW : ModelValidator.TYPE_CHANGE);
|
||||||
|
@ -1980,10 +2010,15 @@ public abstract class PO
|
||||||
{
|
{
|
||||||
log.warning("Validation failed - " + errorMsg);
|
log.warning("Validation failed - " + errorMsg);
|
||||||
log.saveError("Error", errorMsg);
|
log.saveError("Error", errorMsg);
|
||||||
if (localTrx != null) {
|
if (localTrx != null)
|
||||||
|
{
|
||||||
localTrx.rollback();
|
localTrx.rollback();
|
||||||
m_trxName = null;
|
m_trxName = null;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
trx.rollback(savepoint);
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Save
|
// Save
|
||||||
|
@ -2001,6 +2036,8 @@ public abstract class PO
|
||||||
{
|
{
|
||||||
if (localTrx != null)
|
if (localTrx != null)
|
||||||
localTrx.rollback();
|
localTrx.rollback();
|
||||||
|
else
|
||||||
|
trx.rollback(savepoint);
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2018,15 +2055,41 @@ public abstract class PO
|
||||||
{
|
{
|
||||||
if (localTrx != null)
|
if (localTrx != null)
|
||||||
localTrx.rollback();
|
localTrx.rollback();
|
||||||
|
else
|
||||||
|
trx.rollback(savepoint);
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
}
|
||||||
|
catch (SQLException e)
|
||||||
|
{
|
||||||
|
log.log(Level.WARNING, "afterSave - " + toString(), e);
|
||||||
|
if (localTrx != null)
|
||||||
|
{
|
||||||
|
localTrx.rollback();
|
||||||
|
}
|
||||||
|
else if (savepoint != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
trx.rollback(savepoint);
|
||||||
|
} catch (SQLException e1){}
|
||||||
|
savepoint = null;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
if (localTrx != null)
|
if (localTrx != null)
|
||||||
{
|
{
|
||||||
localTrx.close();
|
localTrx.close();
|
||||||
m_trxName = null;
|
m_trxName = null;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
savepoint = null;
|
||||||
|
trx = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} // save
|
} // save
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue