use jdbctemplate batchupdate in datatables where > 1 update in a db transaction

This commit is contained in:
John Woodlock
2013-03-15 21:32:01 +00:00
parent 0db309d692
commit b9a6e3f410
@@ -109,24 +109,9 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
// FIXME - KW - hardcoded supported app tables are m_loan or m_client? // FIXME - KW - hardcoded supported app tables are m_loan or m_client?
validateAppTable(applicationTableName); validateAppTable(applicationTableName);
try {
// TODO - JW - put in batch command later
final String registerDatatableSql = "insert into x_registered_table (registered_table_name, application_table_name) values ('" final String registerDatatableSql = "insert into x_registered_table (registered_table_name, application_table_name) values ('"
+ dataTableName + "', '" + applicationTableName + "')"; + dataTableName + "', '" + applicationTableName + "')";
this.jdbcTemplate.update(registerDatatableSql);
} catch (DataIntegrityViolationException dve) {
Throwable realCause = dve.getMostSpecificCause();
if (realCause.getMessage().contains("Duplicate entry")) { throw new PlatformDataIntegrityException(
"error.msg.datatable.registered", "Datatable `" + dataTableName
+ "` is already registered against an application table.", "dataTableName", dataTableName); }
logAsErrorUnexpectedDataIntegrityException(dve);
throw new PlatformDataIntegrityException("error.msg.unknown.data.integrity.issue",
"Unknown data integrity issue with resource.");
}
try {
final String createPermission = "'CREATE_" + dataTableName + "'"; final String createPermission = "'CREATE_" + dataTableName + "'";
final String createPermissionChecker = "'CREATE_" + dataTableName + "_CHECKER'"; final String createPermissionChecker = "'CREATE_" + dataTableName + "_CHECKER'";
final String readPermission = "'READ_" + dataTableName + "'"; final String readPermission = "'READ_" + dataTableName + "'";
@@ -171,34 +156,40 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
+ ", 'DELETE', '" + ", 'DELETE', '"
+ dataTableName + "', false)"; + dataTableName + "', false)";
this.jdbcTemplate.update(permissionsSql);
try {
String[] sqlArray = {registerDatatableSql, permissionsSql};
this.jdbcTemplate.batchUpdate(sqlArray);
} catch (DataIntegrityViolationException dve) { } catch (DataIntegrityViolationException dve) {
Throwable realCause = dve.getMostSpecificCause(); Throwable realCause = dve.getMostSpecificCause();
//even if duplicate is only due to permission duplicate, okay to show duplicate datatable error msg
if (realCause.getMessage().contains("Duplicate entry")) { throw new PlatformDataIntegrityException( if (realCause.getMessage().contains("Duplicate entry")) { throw new PlatformDataIntegrityException(
"error.msg.permissions.datatable.duplicate", "Permissions for datatable `" + dataTableName + "` already exist.", "error.msg.datatable.registered", "Datatable `" + dataTableName
"dataTableName", dataTableName); } + "` is already registered against an application table.", "dataTableName", dataTableName); }
logAsErrorUnexpectedDataIntegrityException(dve); logAsErrorUnexpectedDataIntegrityException(dve);
throw new PlatformDataIntegrityException("error.msg.unknown.data.integrity.issue", throw new PlatformDataIntegrityException("error.msg.unknown.data.integrity.issue",
"Unknown data integrity issue with resource."); "Unknown data integrity issue with resource.");
} }
} }
@Override @Override
public void deregisterDatatable(final String datatable) { public void deregisterDatatable(final String datatable) {
// TODO - JW - put in batch command later
final String permissionList = "('CREATE_" + datatable + "', 'CREATE_" + datatable + "_CHECKER', 'READ_" + datatable + "', 'UPDATE_" final String permissionList = "('CREATE_" + datatable + "', 'CREATE_" + datatable + "_CHECKER', 'READ_" + datatable + "', 'UPDATE_"
+ datatable + "', 'UPDATE_" + datatable + "_CHECKER', 'DELETE_" + datatable + "', 'DELETE_" + datatable + "_CHECKER')"; + datatable + "', 'UPDATE_" + datatable + "_CHECKER', 'DELETE_" + datatable + "', 'DELETE_" + datatable + "_CHECKER')";
final String deleteRolePermissionsSql = "delete from m_role_permission where m_role_permission.permission_id in (select id from m_permission where code in " final String deleteRolePermissionsSql = "delete from m_role_permission where m_role_permission.permission_id in (select id from m_permission where code in "
+ permissionList + ")"; + permissionList + ")";
this.jdbcTemplate.update(deleteRolePermissionsSql);
final String deletePermissionsSql = "delete from m_permission where code in " + permissionList; final String deletePermissionsSql = "delete from m_permission where code in " + permissionList;
this.jdbcTemplate.update(deletePermissionsSql);
final String deleteRegisteredDatatableSql = "delete from x_registered_table where registered_table_name = '" + datatable + "'"; final String deleteRegisteredDatatableSql = "delete from x_registered_table where registered_table_name = '" + datatable + "'";
this.jdbcTemplate.update(deleteRegisteredDatatableSql);
String[] sqlArray = {deleteRolePermissionsSql, deletePermissionsSql, deleteRegisteredDatatableSql};
this.jdbcTemplate.batchUpdate(sqlArray);
} }
@Override @Override