@PostConstruct public void init() { queue = queueFactory.getQueue(MailQueueFactory.SPOOL); }
private MailQueue getMailQueue(String targetQueue) { return mailQueueFactory.getQueue(targetQueue) .orElseThrow(() -> new RuntimeException("Can not find queue " + targetQueue)); } }
/** * Initialises the spool manager. */ @PostConstruct public void init() throws Exception { logger.info("JamesSpoolManager init..."); queue = queueFactory.getQueue(MailQueueFactory.SPOOL); if (logger.isInfoEnabled()) { StringBuffer infoBuffer = new StringBuffer(64) .append("Spooler Manager uses ") .append(numThreads) .append(" Thread(s)"); logger.info(infoBuffer.toString()); } active.set(true); spoolThreads = new java.util.ArrayList<Thread>(numThreads); for ( int i = 0 ; i < numThreads ; i++ ) { Thread reader = new Thread(this, "Spool Thread #" + i); spoolThreads.add(reader); reader.start(); } }
private MailQueueDTO getMailQueue(Request request) { String mailQueueName = request.params(MAIL_QUEUE_NAME); return mailQueueFactory.getQueue(mailQueueName).map(this::toDTO) .orElseThrow( () -> ErrorResponder.builder() .message(String.format("%s can not be found", mailQueueName)) .statusCode(HttpStatus.NOT_FOUND_404) .type(ErrorResponder.ErrorType.NOT_FOUND) .haltError()); }
private ManageableMailQueue assertMailQueueExists(Request request) { String mailQueueName = request.params(MAIL_QUEUE_NAME); return mailQueueFactory.getQueue(mailQueueName) .orElseThrow(() -> ErrorResponder.builder() .message(String.format("%s can not be found", mailQueueName)) .statusCode(HttpStatus.NOT_FOUND_404) .type(ErrorType.NOT_FOUND) .haltError()); }
private List<MailQueueItemDTO> listMails(Request request) { String mailQueueName = request.params(MAIL_QUEUE_NAME); return mailQueueFactory.getQueue(mailQueueName) .map(name -> listMails(name, isDelayed(request.queryParams(DELAYED_QUERY_PARAM)), ParametersExtractor.extractLimit(request))) .orElseThrow( () -> ErrorResponder.builder() .message(String.format("%s can not be found", mailQueueName)) .statusCode(HttpStatus.NOT_FOUND_404) .type(ErrorResponder.ErrorType.NOT_FOUND) .haltError()); }
private Object deleteMails(Request request, Response response) { String mailQueueName = request.params(MAIL_QUEUE_NAME); Task task = mailQueueFactory.getQueue(mailQueueName) .map(name -> deleteMailsTask(name, sender(request.queryParams(SENDER_QUERY_PARAM)), name(request.queryParams(NAME_QUERY_PARAM)), recipient(request.queryParams(RECIPIENT_QUERY_PARAM)))) .orElseThrow( () -> ErrorResponder.builder() .message(String.format("%s can not be found", mailQueueName)) .statusCode(HttpStatus.NOT_FOUND_404) .type(ErrorResponder.ErrorType.NOT_FOUND) .haltError()); TaskId taskId = taskManager.submit(task); return TaskIdDto.respond(response, taskId); }
@Test public void reprocessingShouldNotFailOnConcurrentDeletion() throws Exception { MailRepository repository = mailRepositoryStore.select(MailRepositoryUrl.fromPathAndProtocol(PATH, MEMORY_PROTOCOL)); repository.store(mail1); repository.store(mail2); repository.store(mail3); AtomicBoolean shouldPerformRemove = new AtomicBoolean(true); ConsumerChainer<MailKey> concurrentRemoveConsumer = Throwing.consumer(key -> { if (shouldPerformRemove.get()) { shouldPerformRemove.set(false); MailKey toRemove = ImmutableList.of(NAME_1, NAME_2, NAME_3) .stream() .map(MailKey::new) .filter(candidateForRemoval -> !candidateForRemoval.equals(key)) .findFirst() .get(); repository.remove(toRemove); } }); reprocessingService.reprocessAll(PATH, NO_TARGET_PROCESSOR, SPOOL, concurrentRemoveConsumer); assertThat(queueFactory.getQueue(SPOOL).get() .browse()) .hasSize(2); }
@Test public void reprocessingOneShouldEnqueueMail() throws Exception { MailRepository repository = mailRepositoryStore.select(MailRepositoryUrl.fromPathAndProtocol(PATH, MEMORY_PROTOCOL)); repository.store(mail1); repository.store(mail2); repository.store(mail3); reprocessingService.reprocess(PATH, KEY_2, NO_TARGET_PROCESSOR, SPOOL); assertThat(queueFactory.getQueue(SPOOL).get() .browse()) .extracting(item -> item.getMail().getName()) .containsOnly(NAME_2); }
@Test public void reprocessingShouldEnqueueAllMails() throws Exception { MailRepository repository = mailRepositoryStore.select(MailRepositoryUrl.fromPathAndProtocol(PATH, MEMORY_PROTOCOL)); repository.store(mail1); repository.store(mail2); repository.store(mail3); reprocessingService.reprocessAll(PATH, NO_TARGET_PROCESSOR, SPOOL, NOOP_CONSUMER); assertThat(queueFactory.getQueue(SPOOL).get() .browse()) .extracting(item -> item.getMail().getName()) .containsOnly(NAME_1, NAME_2, NAME_3); }