使用带有logback的JavaMail 1.5.x时的smtp的NoSuchProviderException 1.1.2 glassfish 4中的SMTPAppender

时间:2014-04-23 07:54:48

标签: javamail classloader logback glassfish-4

我正在尝试使用glassfish 4中的logback 1.1.2中的SMTPAppender来发送所有已记录错误的电子邮件警报,无论它们是由glassfish本身记录,是由各种组件/模块/库记录,还是由我的代码在部署的耳中。

在不同的时间,我尝试使用JavaMail 1.5.0或1.5.1; 1.5.0因为glassfish 4在其modules目录中包含JavaMail 1.5.0。我想尽量保持一致;和1.5.1,因为它是JavaMail的当前版本。

我已经配置了SMTPAppender,但是当它尝试从我耳中部署的代码中记录错误时,当logback SMTPAppenderBase调用Transport.send(MimeMessage)时,我得到了smtp的NoSuchProviderException。

这似乎是一个ClassLoader问题,但我并不精通ClassLoader,尤其是它们在glassfish,JavaMail或logback中的使用。

${GLASSFISH_HOME}/glassfish/domains/domain1/config目录中,我放置了:

  • logback.xml(我的logback配置文件)

当我在网上阅读时(我忘记了),我将以下文件放在${GLASSFISH_HOME}/glassfish/lib/endorsed directory中:

  • 的logback核-1.1.2.jar
  • 的logback-经典1.1.2.jar
  • jul-to-slf4j-1.7.7.jar(将glassfish的内置java.util.logging重定向到logback)
  • slf4j-api-1.7.7.jar(logging api使用log log to logback)
  • guava-16.0.1.jar(由我的自定义日志记录代码使用)
  • custom-logging.jar(我的自定义日志记录代码)
  • javax.mail-1.5.0.jar

Logback SMTPAppender配置失败,但未在lib/endorsed中包含javax.mail-1.5.0.jar,或者另外包含mailapi-1.5.0.jar。使用javax.mail-api-1.5.0.jar会导致在logback配置中出现大量错误,因此这不是一个选项。

如果我使用没有smtp-1.5.0.jar的mailapi-1.5.0.jar而不是使用javax.mail-1.5.0.jar,SMTPAppenderBase在尝试发送电子邮件时会抛出NoSuchProviderException玻璃鱼错误(这些不是我耳边的错误,而是来自我耳外的错误)。如果我使用javax.mail-1.5.0.jar,SMTPAppenderBase电子邮件会发现glassfish错误。

我尝试过各种包含JavaMail& amp;的排列。 logback在我耳边的战争中判断WEB-INF / lib目录,但在尝试通过电子邮件发送我的耳朵中的代码记录错误时,我一直收到NoSuchProviderExceptions。

我发现的其他与JavaMail相关的其他jar文件都在glassfish模块目录中;我不能删除它们,因为(从我听说过)它们是玻璃鱼的组成部分。

如果我在glassfish之外运行一个简单的测试java main方法,并且在类路径中使用前面提到的jar,就会正确发送错误电子邮件,没有任何例外。

非常感谢任何解决此问题的帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

在您的' $ {GLASSFISH_HOME} / glassfish / lib / endorsed'中放置包含Bug 6668 -skip unusable Store and Transport classes修正的JavaMail 1.5.3。 GlassFish使用的文件夹或升级JavaMail,通过更新您的' $ {GLASSFISH_HOME} / modules'夹。您可以从latest snapshot主页下载JavaMail reference implementation和官方发布。