在tomcat下使用javamail(centos 5.5)

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

javax.mail.NoSuchProviderException:smtp

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

现在我读了很多地方,这意味着smtp.jar不在我的类path – 但我不知道如何确保这是事实。 在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 

(我添加了新行,所以你可以阅读它)。 这是我的class级路线吗? 我可以回答这个问题,并说不是它不是这个java库的path。

所以我可以find一些名为:

 /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,并且path设置正确,除了javamail与openjdk1.6(tomcat5的默认安装)不兼容。 我注意到在rpm -ql openjdk1.6给出的文件列表中没有提到javamail。 aslo这是我的替代品configuration:

 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 jdkconfiguration了它),并且所有的代码都在那里运行,所以这不是一个实现错误,只是configuration错误。

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

我想这可能是“最佳做法”的规则:

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

所以现在我有一个不错的新版本的tomcat(tomcat 7),运行的是新版本的sun jdk1.6。 闻起来几乎和新鲜的ECC服务器内存一样好 – MMMMMMMMMM rammmmm。