Попытка развернуть приложение Spring Boot на Tomcat (не на встроенном Tomcat). Я настроил почтовый сеанс Java в конфигурации сервера Tomcat и пытаюсь получить доступ к нему в качестве значения JNDI в моем приложении. По какой-то причине мое приложение получает ошибку и показывает это:
Caused by: java.lang.IllegalArgumentException: The local resource link [support] that refers to global resource [mail/support] was expected to return an instance of [javax.mail.Session] but returned an instance of [javax.mail.Session]
at org.apache.naming.factory.ResourceLinkFactory.getObjectInstance(ResourceLinkFactory.java:163)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
at org.apache.naming.NamingContext.lookup(NamingContext.java:840)
Я включил javax.mail.jar
в папку Tomcat /lib
. Я также включил spring-boot-starter-mail
в мои pom.xml
Я попытался удалить javax.mail.jar
из библиотеки Tomcat, но это вызывает ошибку при запуске Tomcat, поскольку он не может создать почтовый сеанс. Я также пытался удалить spring-boot-starter-mail, но это мешает некоторым из моего кода, который требует JavaMailSender и других почтовых компонентов. Я пытался возиться с импортом JNDI и тому подобным, но безрезультатно Я также попытался проверить версию почтового фляги, включенную spring-boot-starter-mail
, и обновить флягу в Tomcat, чтобы соответствовать. Я также проверил свои транзитивные зависимости в Maven, чтобы увидеть, загружается ли другая реализация почты, и ничего нет. Так что я отчасти из идей.
Вот где я получаю значение JNDI в моем файле web.xml:
<resource-ref>
<description>The mail session configured in Tomcat</description>
<res-ref-name>mail/support</res-ref-name>
<res-type>javax.mail.Session</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Вот что я настроил в Tomcat server.xml
:
<GlobalNamingResources>
<Resource name="mail/support"
auth="Container"
type="javax.mail.Session"
mail.smtp.host="smtp.XXX.XXX"
mail.smtp.user="support"
mail.smtp.from="support@XXX.org" />
</GlobalNamingResources>
А вот что находится в context.xml:
<Context>
<ResourceLink global="mail/support" name="mail/support" type="javax.mail.Session" />
</Context>
Я бы хотел использовать spring-boot-starter-mail
и использовать глобально настроенный почтовый сеанс JNDI. Я не знаю, являются ли это просто несовместимыми желаниями, но я не понимаю, почему они должны быть такими.