@Nonnegative @MustBeLocked (ELockType.READ) private static int _getTotalQueueLength () { int ret = 0; // count over all queues for (final MailQueuePerSMTP aQueue : s_aQueueCache.values ()) ret += aQueue.getQueueLength (); return ret; }
/** * Constructor * * @param nMaxQueueSize * Maximum objects to queue * @param nMaxPerformCount * Maximum number of emails to send at once * @param aSMTPSettings * SMTP settings to use. May not be <code>null</code>. * @param aFailedMailQueue * The queue for unsent mails. May not be <code>null</code>. */ public MailQueuePerSMTP (@Nonnegative final int nMaxQueueSize, @Nonnegative final int nMaxPerformCount, @Nonnull final ISMTPSettings aSMTPSettings, @Nonnull final FailedMailQueue aFailedMailQueue) { super (nMaxQueueSize, nMaxPerformCount); ValueEnforcer.notNull (aSMTPSettings, "SMTPSettings"); // Mail mail transport object m_aTransport = new MailTransport (aSMTPSettings); setFailedMailQueue (aFailedMailQueue); // Set the callback of the concurrent collector setPerformer (this); }
if (aSMTPQueue.isStopped ()) try if (aSMTPQueue.queueObject (aEmailData).isSuccess ()) aSMTPQueue.getFailedMailQueue () .add (new FailedMailData (aSMTPSettings, aEmailData, new MailTransportError (aException)));
/** * Set a new global failed mail queue. Updates all existing queues. * * @param aFailedMailQueue * The new failed mail queue to set. May not be <code>null</code>. */ public static void setFailedMailQueue (@Nonnull final FailedMailQueue aFailedMailQueue) { ValueEnforcer.notNull (aFailedMailQueue, "FailedMailQueue"); s_aRWLock.writeLocked ( () -> { s_aFailedMailQueue = aFailedMailQueue; // Update all existing queues for (final MailQueuePerSMTP aMailQueue : s_aQueueCache.values ()) aMailQueue.setFailedMailQueue (aFailedMailQueue); }); if (LOGGER.isInfoEnabled ()) LOGGER.info ("Set FailedMailQueue to " + aFailedMailQueue); }
@Nonnull @MustBeLocked (ELockType.WRITE) private static MailQueuePerSMTP _getOrCreateMailQueuePerSMTP (@Nonnull final ISMTPSettings aSMTPSettings) { ValueEnforcer.notNull (aSMTPSettings, "SmtpSettings"); if (s_aSenderThreadPool.isShutdown ()) throw new IllegalStateException ("Cannot submit to mailqueues that are already stopped!"); // get queue per SMTP MailQueuePerSMTP aSMTPQueue = s_aQueueCache.get (aSMTPSettings); if (aSMTPQueue == null) { // create a new queue aSMTPQueue = new MailQueuePerSMTP (EmailGlobalSettings.getMaxMailQueueLength (), EmailGlobalSettings.getMaxMailSendCount (), aSMTPSettings, s_aFailedMailQueue); // put queue in cache s_aQueueCache.put (aSMTPSettings, aSMTPQueue); // and start running the queue s_aSenderThreadPool.submit (aSMTPQueue::collect); } return aSMTPQueue; }
aQueue.stopQueuingNewObjects (bStopImmediately);
if (!aLeftOvers.isEmpty ()) final ISMTPSettings aSMTPSettings = getSMTPSettings (); for (final Object aLeftOver : aLeftOvers) m_aFailedMailQueue.add (new FailedMailData (aSMTPSettings, (IMutableEmailData) aLeftOver));