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

Невозможно настроить tomcat 7 для использования собственного JDK

У меня следующая проблема с настройкой кот 7 для запуска как службы в Windows.

В частности, tomcat является частью веб-приложения, установленного на серверах наших клиентов, и должен иметь все его зависимости внутри.

В этом случае tomcat зависит от Java JDK / JRE, поэтому я загрузил автономный jdk (версия 1.7u21) с его jre и поместил его в папку tomcat.

Итак, теперь мое дерево каталогов выглядит так:

tomcat7
  - bin
  - conf
  - jdk
    - jre
  - logs
  - temp
  - webapps
  - work

Затем я установил его как службу, используя команду

tomcat\bin\service.bat install

И он устанавливается без проблем, в jvm Режим.

Обратите внимание, что я изменил файл service.bat, чтобы все необходимые переменные были правильно установлены, то есть CATALINA_HOME, CATALINA_BASE, JAVA_HOME и JRE_HOME, а последние две указывают на внутренний jdk / jre.

Однако, если я пытаюсь запустить службу, я получаю сообщение об ошибке, в котором говорится, что он не может запустить службу, и ссылается на код ошибки 1.

В журналах tomcat говорится:

[2013-05-22 12:22:09] [info]  [ 5392] Commons Daemon procrun (1.0.15.0 32-bit) started
[2013-05-22 12:22:10] [info]  [ 5392] Running 'AGEws2Tomcat7' Service...
[2013-05-22 12:22:10] [info]  [ 2764] Starting service...
[2013-05-22 12:22:10] [error] [ 2764] %1 is not a valid Win32 application.
[2013-05-22 12:22:10] [error] [ 2764] Failed creating java C:\AGEws\tomcat7\jdk\jre\bin\server\jvm.dll
[2013-05-22 12:22:10] [error] [ 2764] %1 is not a valid Win32 application.
[2013-05-22 12:22:10] [error] [ 2764] ServiceStart returned 1
[2013-05-22 12:22:11] [error] [ 2764] %1 is not a valid Win32 application.
[2013-05-22 12:22:11] [info]  [ 5392] Run service finished.
[2013-05-22 12:22:11] [info]  [ 5392] Commons Daemon procrun finished

Я попробовал немного погуглить по этой части Failed creating java и я узнал некоторую информацию о возможной зависимости от .dll файл, который я нашел, но не понимаю, куда мне его поместить, если это действительно проблема.

Я также пробовал установить службу в java режим, и он работает но использует собственную JVM моего компьютера вместо внутренней, а я необходимость это использовать внутренний.

Что я могу / должен сделать, чтобы Tomcat работал должным образом в качестве службы в jvm режим, используя собственный jdk / jre?

Обратите внимание, что наше веб-приложение раньше поставлялось с tomcat 5, который отлично работал в jvm Режим.

В конце концов я обнаружил, что решение заключалось в установке режима запуска и остановки на java в то же время предоставляя явный JAVA_HOME с опцией

--JavaHome /path/to/internal/jdk

После внесения изменений сервис работает нормально, даже если в java режим вместо jvm режим, как раньше.

Чтобы прояснить ответ Маттео (и помочь ребятам из Windows, которые не слишком хорошо знакомы с миром Java), у нас была точно такая же проблема с использованием Tomcat 8 на 64-битной Windows Server 2012 (не R2). Мы использовали / настраивали справку IBM Rational DOORS Help 9.6.1 - хотя мы видели это с большинством продуктов IBM в стиле Java / Tomcat при попытке настроить на относительно современных 64-разрядных версиях Windows.

Нам пришлось обновить файл service.bat, расположенный в каталоге установки Tomcat, следующим образом:

--StartMode java ^
--StopMode java ^
--JavaHome "C:\Program Files (x86)\Java\jre7" ^

Параметры запуска / остановки были изменены с jvm, а параметр JavaHome - это новое дополнение к файлу конфигурации. Затем вы выполняете установку службы через:

service.bat install <service name>

В нашем случае имя службы было DOORS_Help. У нас была 64-разрядная установка Tomcat и 32-разрядная установка JRE, которые, очевидно, работали вместе - это то, что было предоставлено поставщиком.

Изменить: другой вариант, похоже, вручную устанавливает переменные среды JRE_HOME и JAVA_HOME перед установка Tomcat. В противном случае вам нужно будет переустановить службу Windows. Я знаю, что это противоречит исходному сообщению, но, похоже, не все установки Tomcat одинаковы!