我有两个问题。在我的应用程序中,我们使用javax.mail api的自定义电子邮件功能。当类加载器设置保持为Parent First但没有使用该类加载器设置生成自定义日志时,邮件可以正常运行。
当我将类加载器更新为Parent Last时,会生成日志但是自定义电子邮件功能不起作用,它会在message.saveChanges();线和服务器正在抛出超时错误。
我有mail.jar& log4j.jar包含在应用程序的WEB-INF / lib中,而log4j.properties文件存在于classes文件夹中
任何人都可以告诉我是什么导致了这个问题吗?有没有办法让日志和电子邮件功能都可以使用单个类加载器设置。
感谢。
答案 0 :(得分:0)
这很可能是因为Log4J没有加载您认为它的配置文件(log4j.xml
或log4j.properties
)。
添加log4j.debug=true
系统属性,重新启动服务器并查看日志。日志(SystemOut.log
或SystemErr.log
)将告诉您确切加载了哪个配置文件。
答案 1 :(得分:0)
由于您使用的是“mail.jar”,因此您的JavaMail版本必须相当旧。
将websphere附带的JavaMail升级到1.5.3,其中包含fix的Bug 6668 -skip unusable Store and Transport classes。来自错误报告:
在复杂的类加载情况下,有可能存在 JavaMail类的多个副本。已定义商店或运输 一个副本可能由另一个副本加载,但它不可用,因为 他们在不同的ClassLoaders中。在这种情况下,JavaMail应该跳过 在不可用的类上尝试从另一个ClassLoader加载该类。
例如,如果应用程序包含GlassFish,则会发生这种情况 JavaMail类,应用程序类加载器配置为首选 系统类上的应用程序类,以及app服务器本身的尝试 在应用程序的上下文中运行时使用JavaMail。
然后,您需要从WEB-INF / lib中删除旧版本的JavaMail,如果需要,也可以将JavaMail 1.5.3放在WEB-INF / lib中。我已经为GlassFish测试了这个修复程序,所以我假设很多其他应用程序遇到同样的问题。
您可以从latest snapshot主页下载JavaMail reference implementation和官方发布。