Ошибки при настройке веб-приложения xnat в tomcat 9

Я следил за онлайн-документацией на сайте xnat (https://wiki.xnat.org/documentation/getting-started-with-xnat/xnat-installation-guide) и установил apache tomcat 9 (версия 9.0.75, версия JVM). : 1.8.0_372_b07, Производитель JVM: Темурин). Но когда я нажимаю «Пуск» в веб-приложении xnat, я получаю сообщение об ошибке:

      FAIL - Application at context path [/xnat-web-1.8.8] could not be started
FAIL - Encountered exception [org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@35a50a4c]]

Файл журнала показывает следующее (усечено, чтобы его можно было опубликовать здесь):

      
... org.apache.catalina.core.ApplicationContext.log HTMLManager: Error starting [/xnat-web-1.8.8]
        org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@6dde5c8c]
                at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
              
...
...
...
                at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
                at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
                at java.lang.Thread.run(Thread.java:750)
        Caused by: java.lang.NullPointerException
                at java.lang.String.startsWith(String.java:1405)
                at java.lang.String.startsWith(String.java:1434)
                at org.apache.catalina.webresources.AbstractFileResourceSet.file(AbstractFileResourceSet.java:98)
                at org.apache.catalina.webresources.DirResourceSet.getResource(DirResourceSet.java:94)
                at org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:272)
                at org.apache.catalina.webresources.Cache.getResource(Cache.java:64)
                at org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:211)
                at org.apache.catalina.webresources.StandardRoot.listResources(StandardRoot.java:347)
                at org.apache.catalina.webresources.StandardRoot.processWebInfLib(StandardRoot.java:585)
                at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:722)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

По данным ChatGPT:

      Based on the provided log file, it appears that there is an error during the deployment of the web application '/xnat-web-1.8.8' in Tomcat. The error message indicates a NullPointerException and a LifecycleException related to the StandardRoot component.

The root cause of the issue seems to be the NullPointerException occurring within the AbstractFileResourceSet class. It specifically fails when attempting to access a file resource, likely due to a missing or invalid file path.

Мне интересно, связана ли проблема либо с файлом модуля, либо с настройкой конфигурации postgresql (соединения TCP/IP). Я использую Tomcat только на локальном хосте. В моем файле pg_hba.conf я только что добавил строкуlisten_addresses = '*'Если вы посмотрите на файл модуля ниже, я дал ему несколько папок для чтения и записи. Tomcat по умолчанию использует /opt/tomcat. Но настройки документации xnat указывают, что я использую /var/lib/tomcat, /var/log/tomcat и /etc/tomcat/Catalina в качестве ReadWritePaths. Я только что добавил все это вместе с путями установки по умолчанию в свой файл модуля. Мне интересно, не здесь ли ошибка. Мой файл модуля Tomcat:

      
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
User=xnat
Group=xnat
PrivateTmp=yes
Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS="-Xms512M -Xmx1024M -server -XX:+UseParallelGC -Dxnat.home=/data/xnat/home"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
#AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
CacheDirectory=tomcat
CacheDirectoryMode=750
#ProtectSystem=strict
ReadWritePaths=/etc/tomcat/Catalina/
ReadWritePaths=/opt/tomcat/webapps/
ReadWritePaths=/var/lib/tomcat/webapps/
ReadWritePaths=/opt/log/tomcat/
ReadWritePaths=/var/log/tomcat/
ReadWritePaths=/data/xnat/home
ReadWritePaths=/home/xnat/
[Install]
WantedBy=multi-user.target

Файл context.xml в /opt/tomcat/webapps/xnat-1.8.8/META-INF:

      xml version="1.0" encoding="utf-8"?>
<!--
  ~ web: context.xml
  ~ XNAT http://www.xnat.org
  ~ Copyright (c) 2005-2021, Washington University School of Medicine and Howard Hughes Medical Institute
  ~ All Rights Reserved
  ~
  ~ Released under the Simplified BSD.
  -->

<Context>
    <!--
    For Tomcat 7 compatibility, uncomment the <Loader> element and comment out the <Resources>
    and <CookieProcessor> elements under that.
    -->
    <!-- Loader className="org.apache.catalina.loader.VirtualWebappLoader" searchVirtualFirst="true" virtualClasspath="${xnat.home}/plugins/*.jar"/ -->

    <!--
    For Tomcat 8 compatibility, uncomment the <Resources> and <CookieProcessor> elements below and
    comment out the <Loader> element below that.
    -->
    <Resources>
        <PreResources className="org.apache.catalina.webresources.DirResourceSet" base="${xnat.home}/plugins" webAppMount="/WEB-INF/lib" />
    </Resources>
    <CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" />
    <JarScanner scanAllDirectories="true" />
    <Parameter name="xnatHome" value="${xnat.home}"/>
    <Manager pathname="" />
</Context>

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

1 ответ

На мой взгляд проблема связана с тем, что Tomcat не может корректно обрабатывать ресурсы приложения, определенные вcontext.xmlфайл:

      <Resources>
  <PreResources className="org.apache.catalina.webresources.DirResourceSet" base="${xnat.home}/plugins" webAppMount="/WEB-INF/lib" />
</Resources>

Причиной этого может быть весьма вероятно то, что${xnat.home}заполнитель не разрешается успешно, возможно, потому, что системное свойство с таким же именем не определено должным образом.

Вы пытаетесь определить это системное свойство в файле модуля при определенииCATALINA_OPTSпеременная среды:

      Environment="CATALINA_OPTS="-Xms512M -Xmx1024M -server -XX:+UseParallelGC -Dxnat.home=/data/xnat/home"

Обратите внимание, что оно определено неверно, обратите внимание на"послеCATALINA_OPTS=.

Должен быть:

      Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC -Dxnat.home=/data/xnat/home"

Возможно, это опечатка, но это также может объяснить проблему.

Другие вопросы по тегам