Pergunta

Estamos tentando executar o mesmo aplicativo web que usa Atomikos como gerenciador de transações em vários ambientes locais (cada um deles usa as mesmas versões de spring, atomikos, tomact etc. com os mesmos arquivos de configuração).Alguns deles funcionam bem, mas em um deles, quando tentamos iniciar o Tomcat obtemos a seguinte exceção:

Caused by: java.lang.IllegalStateException: Can't overwrite cause with java.lang.RuntimeException: Log already in use?
at java.lang.Throwable.initCause(Throwable.java:456)
at com.atomikos.icatch.standalone.UserTransactionServiceImp.init(UserTransactionServiceImp.java:326)
at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java:405)
at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java:569)
at com.atomikos.icatch.jta.UserTransactionManager.startupTransactionService(UserTransactionManager.java:89)
at com.atomikos.icatch.jta.UserTransactionManager.checkSetup(UserTransactionManager.java:77)
at com.atomikos.icatch.jta.UserTransactionManager.init(UserTransactionManager.java:142)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1638)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1579)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1509)
... 41 more
Caused by: com.atomikos.icatch.SysException: Error in init(): Log already in use?
... 54 more
Caused by: java.lang.RuntimeException: Log already in use?
at com.atomikos.icatch.standalone.UserTransactionServiceImp.createDefault(UserTransactionServiceImp.java:203)
at com.atomikos.icatch.standalone.UserTransactionServiceImp.init(UserTransactionServiceImp.java:258)

Não conseguimos descobrir qual é o log em questão, e o Google também não ajudou muito... Alguém sabe qual é a causa desses problemas estranhos?Novamente, temos ambientes com exatamente a mesma configuração que funcionam bem, e outro que tem outro aviso estranho: https://stackoverflow.com/questions/20936253/atomikos-with-activemq-commit-heuristic-warnings

Obrigado!:)

Foi útil?

Solução 3

Acontece que foi um problema de permissão.Atomikos tentava criar os arquivos LCK na pasta Eclipse e, uma vez que movemos o Eclipse para outro local tudo funcionou bem.

Outras dicas

Quando você tem mais de um projeto (que usa Atomikos) implantado, esse problema ocorre devido à simultaneidade na gravação dos arquivos de log do Atomikos (Mensagem de erro:'Log já em uso').

Para resolver este problema você deve personalizar o nome do arquivo de log, definindo a propriedade 'com.atomikos.icatch.log_base_name' na configuração do atomikos conforme exemplificado abaixo:

<bean id="atomikosUserTransactionService" class="com.atomikos.icatch.config.UserTransactionServiceImp"
      init-method="init" destroy-method="shutdownForce">
    <constructor-arg>
        <props>
            <prop key="com.atomikos.icatch.service">com.atomikos.icatch.standalone.UserTransactionServiceFactory</prop>
            <prop key="com.atomikos.icatch.log_base_name">your_project_name_log</prop>
            <prop key="com.atomikos.icatch.output_dir">../standalone/log/</prop>
            <prop key="com.atomikos.icatch.log_base_dir">../standalone/log/</prop>
        </props>
    </constructor-arg>
</bean>

P.S.:Observe que alterei as propriedades 'com.atomikos.icatch.output_dir' e 'com.atomikos.icatch.log_base_dir' apenas para manter as coisas organizadas, criando os arquivos de log do atomikos no mesmo diretório dos arquivos de log do JBoss.

Esta é uma questão de permissão.Eu adiciono essas duas linhas em meu jta.properties. (confirme se o diretório existe).

com.atomikos.icatch.output_dir = /data/logs/XXX/ 
com.atomikos.icatch.log_base_dir = /data/logs/XXX/

Vá para o destino onde os logs do Atomikos estão sendo gerados.Lá você observará vários arquivos de bloqueio de 0 byte que precisam ser excluídos.Esse problema é observado quando a última vez que o aplicativo foi executado, foi desligado incorretamente.Depois de excluir os arquivos LCK e tente implantar o aplicativo, o problema seria resolvido

Por padrão, o atomikos cria seu arquivo de log e arquivo de bloqueio no diretório inicial do usuário que executa a JVM.

No caso do Tomcat8, seria:

/usr/share/tomcat8

Você deve verificar as permissões nesta pasta.No meu foi:

drwxr_xr-x  3 root   tomcat 4096 Feb  7 10:28 .

O que significava que o usuário do Tomcat não poderia escrever nele.

Eu mudei para:

drwxrwxr-x  3 root   tomcat 4096 Feb  7 10:28 .

E tudo funcionou bem.

No meu caso, a questão era que meu JBoss parou de uma maneira inesperada dentro do eclipse.Eu tentei começar de novo e recebi este erro, mas na verdade era porque havia um processo JBoss ainda correndo na minha máquina, embora o Eclipse o mostrasse como rescindido.Então eu apenas matei os processos existentes do JBoss.

Se ajudar alguma alma perdida, este problema me ocorreu quando eu instalei o plugin eclipse memory ' (tap) do eclipse.

O problema foi embora assim que eu desinstalei o plugin (instruções aqui ).

Developers Plugin Mat, por favor, tome nota desta questão!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top