O webapp do Tomcat falhando ao iniciar quando o Tomcat é iniciado como um serviço

1

Eu tenho um webapp que não está conseguindo iniciar no Tomcat em uma instalação do Linux. O aplicativo funciona em instalações diferentes do Tomcat em máquinas diferentes e na mesma máquina ao usar um Tomcat independente.

O problema parece ser devido à maneira como o Tomcat está iniciando.

  • A utilização de service tomcat8 start falha quando o Tomcat é instalado através do gerenciador de pacotes;
  • A utilização de /etc/init.d/tomcat8 start falha quando o Tomcat é instalado através do gerenciador de pacotes;
  • Usar um tomcat autônomo e começar com service tomcat8 start (ter modificado /etc/init.d/tomcat8 ) falha;
  • Usando um tomcat independente e começando usando ./startup.sh works.

Estou usando o Debian 8, Tomcat 8.0.11 (mas tentei 8.0.9 e 8.0.11) e várias versões do Java. O aplicativo está falhando devido a um gerenciador de transações java chamado Atomikos . O erro é:

SEVERE: Exception sending context initialized event to listener instance of class uk.co.prodia.talkingcouch.ApplicationContextListener org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [config/applicationContext-db-sessionfactory.xml]: Cannot resolve reference to bean 'atomikosTransactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'atomikosTransactionManager' defined in class path resource [config/applicationContext-db-sessionfactory.xml]: Invocation of init method failed; nested exception is javax.transaction.SystemException: Transaction service not running at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1481)

Alguém tem alguma sugestão?

    
por Doahh 15.04.2016 / 12:39

2 respostas

0

Geralmente, o script de gerenciamento está lendo propriedades adicionais do próprio script, de arquivos em / etc / tomcat8 e até mesmo de / etc / default / tomcat (8)

Certifique-se de que o comando com argumentos emitidos a partir do startup.sh e dos scripts de gerenciamento resulte na mesma chamada.

Você pode tentar obter os parâmetros     ps -fp     cat / proc // cmdline

    
por 15.04.2016 / 13:37
0

O TheCodeKiller levou-me a pensar do jeito certo. Em última análise, foi um problema de permissão e minha própria instância estava funcionando apenas em root . Isso ficou óbvio comparando a saída ps de cada processo em execução.

Atomikos estava escrevendo seu arquivo de log para $CATALINA_BASE , que estava em /var/lib/tomcat8 , que é apenas gravável por root.

Acontece que o Atomikos havia mudado o jeito de lidar com o logging e então eu tive que:

  • Excluiu a propriedade com.atomikos.icatch.output_dir ;
  • Excluiu a propriedade com.atomikos.icatch.log_base_dir .

e adicione o seguinte a log4j.xml :

<appender name="tc-core-atomikos" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="/stroage/www/tc/data/atomikos/tmout"/>
    <param name="MaxFileSize" value="1MB"/>
    <param name="MaxBackupIndex" value="5"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="tc-core-atomikos => [log level: %-5p] [thread: %t] [%d{dd MMM yyyy HH:mm:ss}]%n    %c %M%n        %m%n%n"/>
    </layout>
</appender>

<logger name="com.atomikos">
    <level value="ERROR"/>
    <appender-ref ref="tc-core-atomikos"/>
</logger>
    
por 16.04.2016 / 17:06