FR [ 1984794 ] DBException improvements

This commit is contained in:
teo_sarca 2008-06-05 18:07:07 +00:00
parent 2abbe97cba
commit ab2af4a206
3 changed files with 100 additions and 13 deletions

View File

@ -36,6 +36,7 @@ import org.compiere.dbPort.Convert;
import org.compiere.dbPort.Convert_Oracle;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.DBException;
import org.compiere.util.DisplayType;
import org.compiere.util.Ini;
import org.compiere.util.Language;
@ -636,8 +637,7 @@ public class DB_Oracle implements AdempiereDatabase
{
exception = e;
conn = null;
if (e instanceof SQLException
&& ((SQLException)e).getErrorCode() == 1017) // invalid username/password
if (DBException.isInvalidUserPassError(e))
{
//log might cause infinite loop since it will try to acquire database connection again
/*

View File

@ -1096,7 +1096,7 @@ public class GridTable extends AbstractTableModel
m_rowChanged = m_newRow;
else
{
fireDataStatusEEvent("SaveErrorNoChange", "", false);
fireDataStatusEEvent("SaveErrorNoChange", "", true);
return SAVE_ERROR;
}
}
@ -1671,11 +1671,11 @@ public class GridTable extends AbstractTableModel
log.log(Level.SEVERE, "Inserted row not found");
//
}
catch (SQLException e)
catch (Exception e)
{
String msg = "SaveError";
if (e.getErrorCode() == 1) // Unique Constraint
if (DBException.isUniqueContraintError(e)) // Unique Constraint
{
log.log(Level.SEVERE, "Key Not Unique", e);
msg = "SaveErrorNotUnique";
@ -1802,10 +1802,7 @@ public class GridTable extends AbstractTableModel
msg = ppE.getValue();
info = ppE.getName();
// Unique Constraint
Exception ex = CLogger.retrieveException();
if (ex != null
&& ex instanceof SQLException
&& ((SQLException)ex).getErrorCode() == 1)
if (DBException.isUniqueContraintError(CLogger.retrieveException()))
msg = "SaveErrorNotUnique";
}
fireDataStatusEEvent(msg, info, true);
@ -2281,7 +2278,7 @@ public class GridTable extends AbstractTableModel
{
log.log(Level.SEVERE, sql.toString(), e);
String msg = "DeleteError";
if (e.getErrorCode() == 2292) // Child Record Found
if (DBException.isChildRecordFoundError(e))
msg = "DeleteErrorDependent";
fireDataStatusEEvent(msg, e.getLocalizedMessage(), true);
return false;
@ -2924,7 +2921,7 @@ public class GridTable extends AbstractTableModel
catch (SQLException e0)
{
// Zoom Query may have invalid where clause
if (e0.getErrorCode() == 904) // ORA-00904: "C_x_ID": invalid identifier
if (DBException.isInvalidIdentifierError(e0))
log.warning("Count - " + e0.getLocalizedMessage() + "\nSQL=" + m_SQL_Count);
else
log.log(Level.SEVERE, "Count SQL=" + m_SQL_Count, e0);

View File

@ -16,15 +16,22 @@
*****************************************************************************/
package org.compiere.util;
import java.sql.SQLException;
import org.adempiere.exceptions.AdempiereException;
/**
* This RuntimeException is used to pass SQLException up the chain of calling
* methods to determine what to do where needed.
*
* @author Vincent Harcq
* @version $Id: DBException.java,v 1.2 2006/07/30 00:54:35 jjanke Exp $
*
* @author Teo Sarca, SC ARHIPAC SERVICE SRL
*/
public class DBException extends RuntimeException {
public class DBException extends AdempiereException {
private static final long serialVersionUID = 1L;
/**
* Create a new DBException based on a SQLException
* @param e Specicy the Exception cause
@ -42,5 +49,88 @@ public class DBException extends RuntimeException {
{
super(msg);
} // DBException
/**
* @return Wrapped SQLException or null
*/
public SQLException getSQLException() {
Throwable cause = getCause();
if (cause instanceof SQLException)
return (SQLException)cause;
return null;
}
/**
* @see java.sql.SQLException#getErrorCode()
*/
public int getErrorCode() {
SQLException e = getSQLException();
return (e != null ? e.getErrorCode() : -1);
}
/**
* @see java.sql.SQLException#getNextException()
*/
public SQLException getNextException() {
SQLException e = getSQLException();
return (e != null ? e.getNextException() : null);
}
/**
* @see java.sql.SQLException#getSQLState()
*/
public String getSQLState() {
SQLException e = getSQLException();
return (e != null ? e.getSQLState() : null);
}
private static final boolean isErrorCode(Exception e, int errorCode) {
if (e == null) {
return false;
}
else if (e instanceof SQLException) {
return ((SQLException)e).getErrorCode() == errorCode;
}
else if (e instanceof DBException) {
SQLException sqlEx = ((DBException)e).getSQLException();
if (sqlEx != null)
return sqlEx.getErrorCode() == errorCode;
else
return false;
}
return false;
}
/**
* Check if Unique Constraint Exception (aka ORA-00001)
* @param e exception
*/
public static boolean isUniqueContraintError(Exception e) {
return isErrorCode(e, 1);
}
/**
* Check if "child record found" exception (aka ORA-02292)
* @param e exception
*/
public static boolean isChildRecordFoundError(Exception e) {
return isErrorCode(e, 2292);
}
/**
* Check if "invalid identifier" exception (aka ORA-00904)
* @param e exception
*/
public static boolean isInvalidIdentifierError(Exception e) {
return isErrorCode(e, 904);
}
/**
* Check if "invalid username/password" exception (aka ORA-01017)
* @param e exception
*/
public static boolean isInvalidUserPassError(Exception e) {
return isErrorCode(e, 1017);
}
} // DBException