tomcat下使用javamail(centos 5.5)

tomcat下使用javamail(centos 5.5)

所以这可能是一个有趣的问题。我在 centos 5.5 x64 上安装了 tomcat5,并且能够启动和运行它等等。我的问题是其中一个 webapps 需要使用 javamail,但是在 catalina 日志中我收到错误:

javax.mail.NoSuchProviderException: smtp

(+ 几百行我们都知道并且喜爱的完全有意义的“堆栈跟踪”...)

现在我在很多地方都看到,这意味着 smtp.jar 不在我的类路径中 - 但我不确定如何确保情况确实如此。在 catalina 日志中我收到通知:

    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

(我添加了换行符,以便您可以阅读)。1. 这是我的类路径吗?我可能会回答说不是,这是 Java 库路径。

因此我可以找到一个名为的目录:

/usr/share/java/classpathx-mail

其中包含:

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

这看起来就像我想要的...此外,在 $CATALINA_HOME/common/lib 中我有以下条目:

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

这让我相信我有 javamail,并且路径设置正确,但不知何故,这个 javamail 与 openjdk1.6(默认情况下为 tomcat5 安装)不兼容。我注意到 rpm -ql openjdk1.6 给出的文件列表中没有提到 javamail。此外,这是我的替代配置:

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

(忽略 /opt/jre1.6.0_22/bin/java,这是一次失败的尝试,我将删除它 - 它与其他安装完全隔离)。我觉得 gcc 和 openjdk javas 有冲突,我可以安全地删除一个吗?

最后,给出以下信息:

  1. 我怀疑 /usr/share/java/javamail.jar 与 openjdk1.6 不兼容,正确
  2. 如果不是 1 那么我下一步应该去哪里查看(也许是启用 dbg 日志?)
  3. 如果是 1 那么我应该使用什么作为替代方案,有人可以显示一个页面让 tomcat5 像新版本一样(即正确使用它)吗?

所以看起来我有 javamail,我只是不确定它是否是正确的版本(当然 tomcat5 不喜欢它)。

另外,我正在运行与在 ubuntu 上运行的相同的代码(我已使用 Sun jdk 配置),并且一切都运行良好,所以这不是实现错误,只是配置错误。

答案1

所以基本上这就是我从这次经历中学到的:不要使用打包版本的 gjc,然后在其上安装其他 java(即使使用替代方案!)。

我想这可能是“最佳实践”规则:

  • 在安装任何程序之前,请先安装 Sun Java(自解压)。安装 tomcat tarball(不是 rpm 版本!),然后将 tomcat 指向 JAVA_HOME 和其他必要的路径。

现在我有一个运行着新版 sun jdk1.6 的全新版 tomcat(tomcat 7)。味道几乎和一包全新的 ECC 服务器内存一样好 - MMMMMMMMMM rammmmm。

相关内容