public static void udpateUserRoleMappingInBatchModeForInternalRoles( Connection dbConnection, String sqlStmt, String primaryDomain, Object... params) throws UserStoreException { PreparedStatement prepStmt = null; boolean localConnection = false; try { prepStmt = dbConnection.prepareStatement(sqlStmt); int batchParamIndex = -1; if (params != null && params.length > 0) { for (int i = 0; i < params.length; i++) { Object param = params[i]; if (param == null) { throw new UserStoreException("Null data provided."); } else if (param instanceof String[]) { batchParamIndex = i; } else if (param instanceof String) { prepStmt.setString(i + 1, (String) param); } else if (param instanceof Integer) { prepStmt.setInt(i + 1, (Integer) param); } } } if (batchParamIndex != -1) { String[] values = (String[]) params[batchParamIndex]; for (String value : values) { String strParam = (String) value; // add domain if not set strParam = UserCoreUtil.addDomainToName(strParam, primaryDomain); // get domain from name String domainParam = UserCoreUtil.extractDomainFromName(strParam); if (domainParam != null) { domainParam = domainParam.toUpperCase(); } // set domain to sql prepStmt.setString(params.length + 1, domainParam); // remove domain before persisting String nameWithoutDomain = UserCoreUtil.removeDomainFromName(strParam); // set name in sql prepStmt.setString(batchParamIndex + 1, nameWithoutDomain); prepStmt.addBatch(); } } int[] count = prepStmt.executeBatch(); if (log.isDebugEnabled()) { log.debug( "Executed a batch update. Query is : " + sqlStmt + ": and result is" + Arrays.toString(count)); } if (localConnection) { dbConnection.commit(); } } catch (SQLException e) { log.error(e.getMessage(), e); log.error("Using sql : " + sqlStmt); throw new UserStoreException(e.getMessage(), e); } finally { if (localConnection) { DatabaseUtil.closeAllConnections(dbConnection); } DatabaseUtil.closeAllConnections(null, prepStmt); } }