No effective change - format

This commit is contained in:
Robin Bygrave
2015-07-27 23:02:33 +12:00
parent 7a32c50894
commit 554c5a7bfc
2 changed files with 124 additions and 127 deletions
@@ -12,25 +12,24 @@ import java.sql.SQLException;
*/
public interface BatchPostExecute {
/**
* Check that the rowCount is correct for this execute. This is for
* performing concurrency checking in batch execution.
*/
void checkRowCount(int rowCount) throws SQLException;
/**
* Check that the rowCount is correct for this execute. This is for
* performing concurrency checking in batch execution.
*/
public void checkRowCount(int rowCount) throws SQLException;
/**
* For inserts with generated keys. Otherwise not used.
*/
void setGeneratedKey(Object idValue);
/**
* For inserts with generated keys. Otherwise not used.
*/
public void setGeneratedKey(Object idValue);
/**
* Execute the post execute processing.
* <p>
* This includes transaction logging, transaction event table modification
* and for beans resetting their 'loaded' status.
* </p>
*/
public void postExecute() throws SQLException;
/**
* Execute the post execute processing.
* <p>
* This includes transaction logging, transaction event table modification
* and for beans resetting their 'loaded' status.
* </p>
*/
void postExecute() throws SQLException;
}
@@ -19,126 +19,124 @@ import org.slf4j.LoggerFactory;
*/
public class BatchedPstmtHolder {
private static final Logger logger = LoggerFactory.getLogger(BatchedPstmtHolder.class);
/**
* A Map of the statements using a String key. This is used so that the same
* Statement,Prepared,Callable is reused.
*/
private LinkedHashMap<String,BatchedPstmt> stmtMap = new LinkedHashMap<String,BatchedPstmt>();
private static final Logger logger = LoggerFactory.getLogger(BatchedPstmtHolder.class);
/**
* The Max size across all the BatchedPstmt.
*/
private int maxSize;
public BatchedPstmtHolder() {
}
/**
* Return the PreparedStatement if it has already been used in this Batch.
* This will return null if no matching PreparedStatement is found.
*/
public PreparedStatement getStmt(String stmtKey, BatchPostExecute postExecute) {
BatchedPstmt bs = stmtMap.get(stmtKey);
if (bs == null) {
// the PreparedStatement has need been created
return null;
}
// add the post execute processing for this bean/row
bs.add(postExecute);
// maintain a max batch size for any given batched stmt.
// Used to determine when to flush.
int bsSize = bs.size();
if (bsSize > maxSize){
maxSize = bsSize;
}
return bs.getStatement();
}
/**
* A Map of the statements using a String key. This is used so that the same
* Statement,Prepared,Callable is reused.
*/
private LinkedHashMap<String, BatchedPstmt> stmtMap = new LinkedHashMap<String, BatchedPstmt>();
/**
* Add a new PreparedStatement wrapped in the BatchStatement object.
*/
public void addStmt(BatchedPstmt bs, BatchPostExecute postExecute) {
// add the batch post execute to the statement for POST processing
bs.add(postExecute);
/**
* The Max size across all the BatchedPstmt.
*/
private int maxSize;
// cache so that getStmt() can find it for additional beans/rows
stmtMap.put(bs.getSql(), bs);
}
public BatchedPstmtHolder() {
}
/**
* Return true if the batch has no statements to execute.
*/
public boolean isEmpty() {
return stmtMap.isEmpty();
}
/**
* Return the PreparedStatement if it has already been used in this Batch.
* This will return null if no matching PreparedStatement is found.
*/
public PreparedStatement getStmt(String stmtKey, BatchPostExecute postExecute) {
BatchedPstmt bs = stmtMap.get(stmtKey);
if (bs == null) {
// the PreparedStatement has need been created
return null;
}
// add the post execute processing for this bean/row
bs.add(postExecute);
/**
* Execute all batched PreparedStatements.
*
* @param getGeneratedKeys
* if true try to get generated keys for inserts
*/
public void flush(boolean getGeneratedKeys) throws PersistenceException {
// maintain a max batch size for any given batched stmt.
// Used to determine when to flush.
int bsSize = bs.size();
if (bsSize > maxSize) {
maxSize = bsSize;
}
return bs.getStatement();
}
SQLException firstError = null;
String errorSql = null;
/**
* Add a new PreparedStatement wrapped in the BatchStatement object.
*/
public void addStmt(BatchedPstmt bs, BatchPostExecute postExecute) {
// add the batch post execute to the statement for POST processing
bs.add(postExecute);
// flag set if something fails. Will not execute
// but still need to close PreparedStatements.
boolean isError = false;
// cache so that getStmt() can find it for additional beans/rows
stmtMap.put(bs.getSql(), bs);
}
for (BatchedPstmt bs : stmtMap.values()) {
try {
if (!isError) {
bs.executeBatch(getGeneratedKeys);
}
} catch (SQLException ex) {
SQLException next = ex.getNextException();
while(next != null) {
logger.error("Next Exception during batch execution", next);
next = next.getNextException();
}
if (firstError == null) {
firstError = ex;
errorSql = bs.getSql();
} else {
logger.error(null, ex);
}
isError = true;
/**
* Return true if the batch has no statements to execute.
*/
public boolean isEmpty() {
return stmtMap.isEmpty();
}
} finally {
try {
bs.close();
} catch (SQLException ex) {
// error closing PreparedStatement
logger.error(null, ex);
}
}
}
/**
* Execute all batched PreparedStatements.
*
* @param getGeneratedKeys if true try to get generated keys for inserts
*/
public void flush(boolean getGeneratedKeys) throws PersistenceException {
// clear the batch cache
stmtMap.clear();
maxSize = 0;
SQLException firstError = null;
String errorSql = null;
if (firstError != null) {
String msg = "Error when batch flush on sql: "+errorSql;
throw new PersistenceException(msg, firstError);
}
}
// flag set if something fails. Will not execute
// but still need to close PreparedStatements.
boolean isError = false;
/**
* Return the size of the biggest batched statement.
* <p>
* Used to determine when to flush the batch.
* </p>
*/
public int getMaxSize() {
return maxSize;
}
for (BatchedPstmt bs : stmtMap.values()) {
try {
if (!isError) {
bs.executeBatch(getGeneratedKeys);
}
} catch (SQLException ex) {
SQLException next = ex.getNextException();
while (next != null) {
logger.error("Next Exception during batch execution", next);
next = next.getNextException();
}
if (firstError == null) {
firstError = ex;
errorSql = bs.getSql();
} else {
logger.error(null, ex);
}
isError = true;
} finally {
try {
bs.close();
} catch (SQLException ex) {
// error closing PreparedStatement
logger.error(null, ex);
}
}
}
// clear the batch cache
stmtMap.clear();
maxSize = 0;
if (firstError != null) {
String msg = "Error when batch flush on sql: " + errorSql;
throw new PersistenceException(msg, firstError);
}
}
/**
* Return the size of the biggest batched statement.
* <p>
* Used to determine when to flush the batch.
* </p>
*/
public int getMaxSize() {
return maxSize;
}
}