in server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WhiteListManager.java [298:374]
private void checkAndInsert(MailAddress senderMailAddress, Collection<MailAddress> recipients) throws MessagingException {
String senderUser = senderMailAddress.getLocalPart().toLowerCase(Locale.US);
Domain senderHost = senderMailAddress.getDomain();
Connection conn = null;
PreparedStatement selectStmt = null;
PreparedStatement insertStmt = null;
boolean dbUpdated = false;
try {
for (MailAddress recipient : recipients) {
ResultSet selectRS = null;
try {
String recipientUser = recipient.getLocalPart().toLowerCase(Locale.US);
Domain recipientHost = recipient.getDomain();
if (getMailetContext().isLocalServer(recipientHost)) {
// not a remote recipient, so skip
continue;
}
if (conn == null) {
conn = datasource.getConnection();
}
if (selectStmt == null) {
selectStmt = conn.prepareStatement(selectByPK);
}
selectStmt.setString(1, senderUser);
selectStmt.setString(2, senderHost.asString());
selectStmt.setString(3, recipientUser);
selectStmt.setString(4, recipientHost.asString());
selectRS = selectStmt.executeQuery();
if (selectRS.next()) {
// This address was already in the list
continue;
}
if (insertStmt == null) {
insertStmt = conn.prepareStatement(insert);
}
insertStmt.setString(1, senderUser);
insertStmt.setString(2, senderHost.asString());
insertStmt.setString(3, recipientUser);
insertStmt.setString(4, recipientHost.asString());
insertStmt.executeUpdate();
dbUpdated = true;
} finally {
theJDBCUtil.closeJDBCResultSet(selectRS);
}
// Commit our changes if necessary.
if (conn != null && dbUpdated && !conn.getAutoCommit()) {
conn.commit();
dbUpdated = false;
}
}
} catch (SQLException sqle) {
LOGGER.error("Error accessing database", sqle);
throw new MessagingException("Exception thrown", sqle);
} finally {
theJDBCUtil.closeJDBCStatement(selectStmt);
theJDBCUtil.closeJDBCStatement(insertStmt);
// Rollback our changes if necessary.
try {
if (conn != null && dbUpdated && !conn.getAutoCommit()) {
conn.rollback();
dbUpdated = false;
}
} catch (Exception e) {
LOGGER.error("Ignored exception upon rollback", e);
}
theJDBCUtil.closeJDBCConnection(conn);
}
}