2014-04-23 20 views
0

我試圖使用從glassback 4中的logback 1.1.2 SMTPAppender發送電子郵件警報爲所有記錄的錯誤,他們是否記錄glassfish本身,通過它的各種組件/模塊/庫,或通過我的代碼在部署的耳朵。NoSuchProviderException對於smtp當使用JavaMail 1.5.x與logback 1.1.2 SMTPAppender在glassfish 4

在不同的時間,我嘗試使用JavaMail 1.5.0或1.5.1; 1.5.0,因爲glassfish 4的模塊目錄中包含JavaMail 1.5.0。我想盡量保持一致;和1.5.1,因爲它是JavaMail的當前版本。

我配置了SMTPAppender,但是當它試圖從部署在我耳邊的代碼中記錄錯誤時,當logback SMTPAppenderBase調用Transport.send(MimeMessage)時,我得到一個用於smtp的NoSuchProviderException。

這似乎是一個ClassLoader問題,但我並不熟悉ClassLoaders,尤其是在glassfish,JavaMail或logback中的使用。

${GLASSFISH_HOME}/glassfish/domains/domain1/config目錄,我把:

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

當我讀到某個地方(我忘了在哪裏),我把以下文件在${GLASSFISH_HOME}/glassfish/lib/endorsed directory

  • 的logback核-1.1.2.jar
  • 的logback狀態的分類c-1.1.2.jar
  • jul-to-slf4j-1.7.7.jar(將glassfish的內置java.util.logging重定向到logback)
  • slf4j-api-1.7.7.jar(the日誌記錄API用於日誌的logback)
  • 番石榴16.0.1.jar(由我定製的logback日誌代碼中使用)
  • 定製logging.jar(我自定義的logback日誌代碼)
  • javax.mail-1.5。 0.jar

Logback SMTPAppender配置失敗,不包括javax.mail-1.5.0.jar在lib/endorsed,或者,也可以選擇mailapi-1.5.0.jar。相反,使用javax.mail-api-1.5.0.jar會導致logback配置中出現大量錯誤,因此這不是一個選項。

如果我使用mailapi-1.5.0.jar沒有SMTP-1.5.0.jar而不是使用javax.mail-1.5.0.jar,SMTPAppenderBase試圖以電子郵件GlassFish的錯誤,當(這些都不是錯誤拋出一個NoSuchProviderException從我的耳朵,但從我耳朵外面的錯誤)。如果我使用javax.mail-1.5.0.jar,SMTPAppenderBase電子郵件glassfish錯誤非常好。

我曾嘗試包括JavaMail的&的logback罐子的WEB-INF/lib目錄中在我耳邊戰爭目錄的各種排列,但我不斷收到NoSuchProviderExceptions試圖通過電子郵件發送錯誤時,其中通過代碼從我耳邊記錄。

我找到的唯一一個與JavaMail相關的jar文件位於glassfish模塊目錄中;因爲(從我聽說的)他們是玻璃魚的一個組成部分,我無法刪除它們。

如果我在glassfish之外運行一個簡單的測試java main方法,並在類路徑中使用前面提到的jar,那麼錯誤電子郵件會正確發送,沒有任何例外。

任何幫助解決這個問題將不勝感激。

謝謝。

+0

您是否使用來自多個戰爭/耳朵的custom-logging.jar?無論是否認可的目錄不是除了覆蓋JDK捆綁類的庫以外的任何其他地方。我想你的庫的正確位置(如果你想分享戰爭/耳朵)是Applib類加載器,請參閱https://glassfish.java.net/docs/4.0/application-development-guide.pdf第2章(尤其是章節2-4) – salyh

回答