#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. Не зная, где и как вы запускаете свое приложение, трудно дать вам еще какой-либо совет о том, что делать.