0

I am attempting to use the SMTPAppender from logback 1.1.2 in glassfish 4 to send email alerts for all logged errors, whether they are logged by glassfish itself, by its various components / modules / libraries, or by my code in a deployed ear.

At different times, I tried using either JavaMail 1.5.0 or 1.5.1; 1.5.0 because glassfish 4 includes JavaMail 1.5.0 in its modules directory. and I wanted to try to be consistent; and 1.5.1 because it is the current version of JavaMail.

I have configured the SMTPAppender, but when it tries to log an error from code deployed in my ear, I get a NoSuchProviderException for smtp when logback SMTPAppenderBase calls Transport.send(MimeMessage).

This seems to be a ClassLoader issue, but I'm not well versed in ClassLoaders, especially with their use in glassfish, JavaMail, or logback.

In the ${GLASSFISH_HOME}/glassfish/domains/domain1/config directory, I have placed:

  • logback.xml (my logback config file)

As I read online somewhere (I forget where), I placed the following files in the ${GLASSFISH_HOME}/glassfish/lib/endorsed directory:

  • logback-core-1.1.2.jar
  • logback-classic-1.1.2.jar
  • jul-to-slf4j-1.7.7.jar (to redirect glassfish's built-in java.util.logging to logback)
  • slf4j-api-1.7.7.jar (the logging api used log to logback)
  • guava-16.0.1.jar (used by my custom logback logging code)
  • custom-logging.jar (my custom logback logging code)
  • javax.mail-1.5.0.jar

Logback SMTPAppender configuration fails without including javax.mail-1.5.0.jar in lib/endorsed, or, alternately, mailapi-1.5.0.jar. Using javax.mail-api-1.5.0.jar instead results in numerous errors in logback configuration, so that is not an option.

If I use mailapi-1.5.0.jar without smtp-1.5.0.jar instead of using javax.mail-1.5.0.jar, SMTPAppenderBase throws a NoSuchProviderException when attempting to email glassfish errors (these are not errors from my ear, but errors from outside my ear). If I use javax.mail-1.5.0.jar, SMTPAppenderBase emails glassfish errors perfectly fine.

I have tried various permutations of included JavaMail & logback jars the WEB-INF/lib directory in the war in my ear, but I keep getting NoSuchProviderExceptions when attempting to email errors that where logged by code from my ear.

The only other JavaMail-related jars that I've found are in the glassfish modules directory; I cannot remove them since (from what I've heard) they are an integral part of glassfish.

If I run a simple test java main method outside of glassfish, with the aforementioned jars in the classpath, error emails are sent correctly, without any exceptions.

Any help resolving this issue would be greatly appreciated.

Thanks.

xav
  • 5,452
  • 7
  • 48
  • 57
XDR
  • 4,070
  • 3
  • 30
  • 54
  • Do you use custom-logging.jar from more than one war/ear? Wether or not the endorsed directory is not the right place for anything other than libraries which overrides JDK bundled classes. I guess the right place for your libs (if you want share across war/ear) is the Applib Classloader, see https://glassfish.java.net/docs/4.0/application-development-guide.pdf Chapter 2 (especially chapter 2-4) – salyh May 04 '14 at 18:45

1 Answers1

0

Place JavaMail 1.5.3 which contains the fix for Bug 6668 -skip unusable Store and Transport classes in your '${GLASSFISH_HOME}/glassfish/lib/endorsed' folder or upgrade JavaMail used by GlassFish by updating your '${GLASSFISH_HOME}/modules' folder. You can download the latest snapshot and official releases from the JavaMail reference implementation home page.

jmehrens
  • 10,580
  • 1
  • 38
  • 47