Назад | Перейти на главную страницу

Использование javamail под tomcat (centos 5.5)

Так что это может быть забавный вопрос. Я установил tomcat5 на centos 5.5 x64 и могу запустить его и еще много чего. Моя проблема в том, что одно из веб-приложений должно использовать javamail, однако в журнале catalina я получаю сообщение об ошибке:

javax.mail.NoSuchProviderException: smtp

(+ несколько сотен строк полностью осмысленного "stacktrace", который мы все знаем и любим ...)

Я уже во многих местах читал, что это означает, что smtp.jar отсутствует в моем пути к классам, но я не уверен, как это сделать. В журнале каталины я получаю уведомление:

    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). Я заметил, что javamail не упоминается в списке файлов, предоставленном rpm -ql openjdk1.6. также это моя конфигурация альтернатив:

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, это была неудачная попытка, которую я буду удалять - она ​​была полностью изолирована от других установок). Я чувствую, что javas-файлы gcc и openjdk конфликтуют, могу ли я безопасно удалить их?

Итак, наконец, с учетом этой информации:

  1. Мое подозрение, что /usr/share/java/javamail.jar не совместим с openjdk1.6 правильно
  2. Если не 1, то где я могу посмотреть дальше (возможно, журналы включения dbg?)
  3. Если 1, то что я должен использовать в качестве альтернативы, и может ли кто-нибудь показать страницу, которая сделает tomcat5 похожей на новую версию (т.е. правильно ее использовать)?

Так что это похоже на то, что у меня есть javamail, я просто не уверен, правильная ли это версия (ну, Tomcat5 определенно не любит).

Также я запускаю идентичный код, который у меня был запущен на ubuntu (который я настроил с помощью Sun jdk), и там все отлично работало, так что это не ошибка реализации, а просто ошибка конфигурации.

В основном это то, что я узнал из этого опыта: не используйте упакованную версию gjc, а затем устанавливайте другую Java поверх нее (даже при использовании альтернатив!).

Думаю, это могло быть правилом «лучшей практики»:

  • Установите Sun Java перед установкой чего-либо (самораспаковывающийся). Установите tar-архив tomcat (не версию rpm!), А затем укажите tomcat на JAVA_HOME и другие необходимые пути.

Итак, теперь у меня есть хорошая свежая версия tomcat (tomcat 7), работающая с красивой свежей версией sun jdk1.6. Пахнет почти так же хорошо, как свежий пакет серверной памяти ECC - MMMMMMMMMM rammmmm.