Most Popular
Recently Added
Recently Updated

Email Notification on Error

A load filter can be used to send an email when a batch has an error. Starting with SymmetricDS 3.3.2, a single load filter can be applied to all tables to handle errors.

Configure Load Filter

1 - Create a new load filter. Go to Configure->Load Filters and click the "New" button. Enter the following information:

Filter Id:  EMAIL_ERROR
Group Link: server waits for pull from client
Type:  BSH
Target Catalog: (left blank)
Target Schema: (left blank)
Target Table: (left blank)
Filter on Update: (selected)
Filter on Insert: (selected)
Filter on Delete: (selected)
Filter Order: 0
Fail on Error: (selected)

2 - Save the filter. It will show up on the list of filters.

3 - Highlight the row with the filter by clicking it, then click the "Edit Scripts" button.

4 - Change the drop down to "Handle Error Script".

5 - Enter the following BeanShell script:

authListener = new javax.mail.Authenticator() {
  protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
    return new javax.mail.PasswordAuthentication(engine.getParameterService().getString("mail.smtp.username"), 
       engine.getParameterService().getString("mail.smtp.password"));
  }
};

if (bsh.shared.mailMap == void) {
  bsh.shared.mailMap = new HashMap();
}

String batchId = context.getBatch().getSourceNodeBatchId();
String targetNodeId = context.getBatch().getTargetNodeId();
if (!bsh.shared.mailMap.containsKey(batchId)) {
  bsh.shared.mailMap.put(batchId, Boolean.TRUE);
  javax.mail.Session session = javax.mail.Session.getInstance
    (engine.getParameterService().getAllParameters(), authListener);
  javax.mail.internet.MimeMessage msg = new 
    javax.mail.internet.MimeMessage(session);
  msg.setFrom(new javax.mail.internet.InternetAddress
    (engine.getParameterService().getString("mail.smtp.from")));
  msg.setRecipients(javax.mail.Message.RecipientType.TO, 
    engine.getParameterService().getString("mail.smtp.to"));
  msg.setSubject("SymmetricDS - batch " + batchId + " is in error at node " + targetNodeId);
  msg.setSentDate(new java.util.Date());
  msg.setText(org.apache.commons.lang.exception.ExceptionUtils.
    getFullStackTrace(error));
  javax.mail.Transport.send(msg);

}

6 - Set the following properties in your properties files:

mail.smtp.auth=true
mail.smtp.starttls.enable=true
mail.smtp.host=
mail.smtp.port=
mail.smtp.username=
mail.smtp.password=
mail.smtp.from=
mail.smtp.to=

Properties ID: 000017   Views: 1875   Updated: 3 years ago