Usando javamail em tomcat (centos 5.5)

2

Então, essa pode ser uma pergunta divertida. Eu instalei o tomcat5 no centos 5.5 x64, e consigo colocá-lo em funcionamento e tudo mais. Meu problema é que um dos webapps precisa usar o javamail, no entanto, no log catalina, recebo o erro:

javax.mail.NoSuchProviderException: smtp

(+ várias centenas de linhas de "stacktrace" completamente significativas que todos nós conhecemos e amamos ...)

Agora eu li em muitos lugares que isso significa que smtp.jar não está no meu caminho de classe - mas não tenho certeza sobre como ter certeza de que este é o caso. Em catalina log recebo o aviso:

    INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server:
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64:
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/../lib/amd64:
/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

(eu adicionei novas linhas para que você possa lê-lo). 1. Este é o meu caminho de classe? Eu provavelmente posso responder isso e dizer não, não é esse o caminho da biblioteca java.

Assim, posso encontrar um diretório chamado:

/usr/share/java/classpathx-mail

que contém:

imap-1.3.1.jar            mail-1.3.1-api.jar              mailapi.jar     pop3-1.3.1.jar  smtp-1.3.1.jar
imap.jar                  mail-1.3.1-providers-1.1.1.jar  nntp-1.3.1.jar  pop3.jar        smtp.jar
mail-1.3.1-api-1.1.1.jar  mail-1.3.1-providers.jar        nntp.jar        providers.jar

Isso parece com o que eu quero ... Além disso, em $ CATALINA_HOME / common / lib eu tenho a seguinte entrada:

 [javamail].jar -> /usr/share/java/javamail.jar

O que me leva a acreditar que eu tenho o javamail, e o caminho está configurado corretamente, exceto que de alguma forma este javamail não é compatível com o openjdk1.6 (instalado por padrão para o tomcat5). Eu notei que o javamail não é mencionado na lista de arquivos dada por rpm -ql openjdk1.6. também esta é a minha configuração de alternativas:

alternatives --config java

There are 3 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
   2           /usr/lib/jvm/jre-1.4.2-gcj/bin/java
   3           /opt/jre1.6.0_22/bin/java

(ignore /opt/jre1.6.0_22/bin/java foi uma tentativa fracassada que eu vou deletar - foi completamente isolada de outras instalações). Eu sinto que as javas gcc e openjdk estão em conflito, posso remover com segurança uma?

Então, finalmente, dada esta informação é:

  1. Minha suspeita de que /usr/share/java/javamail.jar não é compatível com o openjdk1.6 correto
  2. Se não for 1, onde posso procurar a seguir (talvez a ativação dos logs do dbg?)
  3. Se 1 então o que devo usar como alternativa, e alguém pode mostrar uma página que fará o tomcat5 como a nova versão (ou seja, usá-lo corretamente)?

Então, parece que eu tenho o javamail, mas não tenho certeza se é a versão correta (bem, o tomcat5 certamente não gosta disso).

Também estou executando código idêntico que eu tinha rodando no ubuntu (que eu tinha configurado com o Sun jdk) e tudo funcionou bem lá, então isso não é um erro de implementação, apenas um erro de configuração.

    
por Marm0t 31.10.2010 / 02:46

1 resposta

1

Então, basicamente, isso é o que aprendi com essa experiência: não use a versão empacotada do gjc e instale o java em cima disso (mesmo quando estiver usando alternativas!).

Eu acho que esta poderia ser a regra das "melhores práticas":

  • Instale o Sun Java antes de instalar qualquer coisa (extração automática). Instale o tarball do tomcat (não a versão do rpm!) E aponte o tomcat em JAVA_HOME e outros caminhos necessários.

Então agora eu tenho uma nova versão do tomcat (tomcat 7) rodando com a nova versão do sol jdk1.6. Cheira quase tão bom quanto um novo pacote de memória do servidor ECC - MMMMMMMMMM rammmmm.

    
por 01.11.2010 / 02:58