Package org.masukomi.aspirin.core.delivery

Source Code of org.masukomi.aspirin.core.delivery.DeliveryMaintenanceThread

package org.masukomi.aspirin.core.delivery;

import java.util.List;

import org.masukomi.aspirin.core.AspirinInternal;
import org.masukomi.aspirin.core.store.mail.MailStore;
import org.masukomi.aspirin.core.store.queue.QueueStore;

/**
* This is a maintenance thread, to clean up stores - remove all finished
* mails from these objects. This is very useful for long-time runs.
*
* @author Laszlo Solova
*
*/
public class DeliveryMaintenanceThread extends Thread {
 
  private boolean running = false;
 
  public DeliveryMaintenanceThread() {
    this.setDaemon(true);
  }
 
  @Override
  public void run() {
    AspirinInternal.getLogger().info("Maintenance thread started.");
    running = true;
    while( running )
    {
      try {
        synchronized (this) {
          wait(3600000);
        }
      } catch (InterruptedException ie) {
        running = false;
        AspirinInternal.getLogger().info("Maintenance thread goes down.");
      }
      // Maintain queues in every hour
      try {
        QueueStore queueStore = AspirinInternal.getConfiguration().getQueueStore();
        MailStore mailStore = AspirinInternal.getConfiguration().getMailStore();
        List<String> usedMailIds = queueStore.clean();
        List<String> mailStoreMailIds = mailStore.getMailIds();
        AspirinInternal.getLogger().debug("Maintenance running: usedMailIds: {}, mailStoreMailIds: {}.",new Object[]{usedMailIds.size(), mailStoreMailIds.size()});
        if( mailStoreMailIds.removeAll(usedMailIds) )
        {
          for( String unusedMailId : mailStoreMailIds )
            mailStore.remove(unusedMailId);
        }
      } catch (Exception e) {
        AspirinInternal.getLogger().error("Maintenance failed.",e);
      }
    }
  }
 
  public void shutdown() {
    running = false;
    synchronized (this) {
      notify();
    }
  }

}
TOP

Related Classes of org.masukomi.aspirin.core.delivery.DeliveryMaintenanceThread

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.