Почему Geronimo Javamail не извлекает тему сообщения и сталкивается с реализацией JVM по умолчанию?

#java #jakarta-mail

#java #джакарта-почта

Вопрос:

В нашей непрерывной интеграции у нас произошел сбой теста, потому что новое электронное письмо, отправленное во время теста, не было загружено. Покопавшись в проблеме и включив javamail debug, мы обнаружили, что локально

ОТЛАДКА: getProvider() возвращает javax.mail.Поставщик [ХРАНИЛИЩЕ, pop3s, com.sun.mail.pop3.POP3SSLStore, Oracle]

находясь на CI

ОТЛАДКА: getProvider() возвращает протокол поставщика = pop3s; тип=javax.mail.Поставщик $Type@728749b3; класс=org.apache.geronimo.javamail.store.pop3.POP3SSLStore; поставщик = Apache Software Foundation; версия = 1.0

Это то, что наше расследование нам:

  • Даже если вы используете ту же версию SBT и другую младшую версию Java, вы не можете полагаться на classloading, чтобы вести себя одинаково
  • Javamail позволяет вам специально принудительно использовать свойство для каждого класса хранилища, задав mail.pop3s.class которое можно переопределить поведение и принудительно использовать Pop3SSLStore .
  • Даже с этой настройкой тема сообщения не извлекается в CI, когда мы это делаем message.getSubject , который всегда возвращает null. Включение отладки javamail показывает, что ни одна команда TOP никогда не выполняется в CI, хотя она выполняется локально. Таким образом, сообщения не извлекаются с сервера
  • Явное исключение всех зависимостей из «org.apache.geronimo.javamail» решает проблему

Зачем использовать Geronimo и почему это мешает реализации jvm по умолчанию, которая так хорошо работает на нашей машине?

Комментарии:

1. Geronimo — это сервер приложений, аналогичный Jboss. Так же, как у JBoss есть поставщик JMS по умолчанию (JBossMQ / HornetQ и т.д.), у Geronimo есть реализация JavaMail по умолчанию, Которую он предоставляет. Я предполагаю, что вы предпочли бы использовать их вместо эталонной реализации, потому что она хорошо сочетается с другими функциями (например, управлением, оповещением) внутри Geronimo. Почему не удается загрузить новые электронные письма по сравнению эталонная реализация? Предполагаю, что это скрыто в конфигурации, как это часто бывает с такими вещами : (

2. Мы все еще испытываем трудности, даже при использовании mail.pop3.class при использовании POP3SSLStore по умолчанию сообщения не извлекаются ( getSubject возвращает null)

3. Вы на самом деле работаете на сервере приложений Geronimo? Или вы просто закончили с этой реализацией JavaMail API, потому что она была установлена в вашу среду выполнения JDK в вашей системе Linux? Если последнее, просто удалите его и используйте ссылочную реализацию JavaMail.

4. Спасибо @BillShannon, мы учли это, но проблема в том, что если другие приложения, которые мы создаем на том же CI, используют ту же библиотеку, она будет извлечена снова

5. Не зная, где и как вы запускаете свое приложение, трудно дать вам еще какой-либо совет о том, что делать.