Jboss 5 - transação sendo abortada

5 respostas
R

Boa Tarde,

Estou com um problema num fonte que faz a inserção de alguns registros usando EJB 2 XD, o jboss esta lancando essa exceção:

2010-08-12 16:28:02,201 ERROR [org.jboss.ejb.plugins.LogInterceptor] (http-0.0.0.0-8088-5) TransactionRolledbackLocalException in method: null, causedBy:
javax.transaction.RollbackException: [com.arjuna.ats.internal.jta.transaction.arjunacore.syncwhenaborted] [com.arjuna.ats.internal.jta.transaction.arjunacore.syncwhenaborted] Can't register synchronization because the transaction is in aborted state

O data source está configurado como local-tx-datasource, e esta usando o banco SQL Server 2008.

Alguém já passou por algo parecido ?

5 Respostas

A

Deu um commit no final ?
Onde está lançando a exception?

R

aluisiodsv:
Deu um commit no final ?
Onde está lançando a exception?

É que na verdade o jboss que gerencia as transações.

A exception é lançada no momento que invoca o metodo create() do EJB 2 da home. Mais especificamente no metodo ejbPostCreate() quando seta os ejbs que tem relacionamento com o objeto criado.

Agora estou debugando, já posto o resultado =D

A

Oi.

Eu já vi coisa parecida usando EJB 3. Essa exception geralmente era me apresentada no lado do cliente. Quando eu ia ver os logs (ou seja lá o que for que mantém contato com o servidor), sempre me dizia que era erro de inserção ou coisa do tipo (na hora de inserir no banco). Datatruncation, inserir um registro que já tá no banco e coisas do tipo eram muito comuns de se ver.

Qual servidor você tá usando? Pode colocar algum trecho (a parte que declara o nome do ds) do persistence.xml?

R

Andre Brito:
Oi.

Eu já vi coisa parecida usando EJB 3. Essa exception geralmente era me apresentada no lado do cliente. Quando eu ia ver os logs (ou seja lá o que for que mantém contato com o servidor), sempre me dizia que era erro de inserção ou coisa do tipo (na hora de inserir no banco). Datatruncation, inserir um registro que já tá no banco e coisas do tipo eram muito comuns de se ver.

Qual servidor você tá usando? Pode colocar algum trecho (a parte que declara o nome do ds) do persistence.xml?


Provalvemente seja algum pau na inserção. O problema que esse sistema rodava no jboss 3.X.X eu fiz a migração para o 5. E funciona na outra versão.

Com os logs de INFO não consegui identificar o que está acontecendo de errado, vou ativar para DEBUG e ver exatamente quais SQLs são executados e tal.

Essa é a configuracao do data source.

<local-tx-datasource>
  <jndi-name>JSQL_DS</jndi-name> 
   <connection-url>jdbc:jtds:sqlserver://host:1433;DatabaseName=XXXXXXXXX;SelectMethod=cursor;logfile=sqlserver.log;lockTimeout=120000</connection-url>
   <driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>  	   
  <user-name>XXXX</user-name>
  <password>bancXXXXXXoteste</password>
  <check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
  <min-pool-size>1</min-pool-size>
  <max-pool-size>50</max-pool-size>
  <blocking-timeout-millis>5000</blocking-timeout-millis>
  <idle-timeout-minutes>15</idle-timeout-minutes>
  <check-valid-connection-sql>SELECT 1</check-valid-connection-sql> 
  <metadata>
	  <type-mapping>MS SQLSERVER2000</type-mapping>
  </metadata>
</local-tx-datasource>

obs: O banco de dados é o SQL Server 2008.

R

3 dias depois, consegui encontrar o que estava zicando a inserção.

A inserção do objeto estava funcionando normalmente, via log de debug dos sqls executados percebi que apos a execução do metodo create() do EJB 2, ele proprio tentava buscar o registro inserido, e ai ocorria o problema para buscar os outros ejbs que faziam o relacionamento com o EJB inserido.

Identifiquei isso pelo log:

TransactionRolledbackLocalException in method: null, causedBy: javax.ejb.EJBException: Data contains multiple values, but this cmr field is single valued: [2852, 6718, 6844, 8907, 11115, 14030, 15842, 17106, 17994, 19047, 23849, 24788, 26646, 26647, 29932, 30576, 31789, 35226, 37863, 38209, 38760, 40105]
Verificando os relacionamentos existentes encontrei um erro:

&lt;ejb-relation&gt; &lt;description&gt;PARENT-could-have-several-CHILDRENS&lt;/description&gt; &lt;ejb-relation-name&gt;PARENT-CHILDRENS&lt;/ejb-relation-name&gt; &lt;ejb-relationship-role&gt; &lt;ejb-relationship-role-name&gt;PARENT-could-have-several-CHILDRENS&lt;/ejb-relationship-role-name&gt; &lt;multiplicity&gt;One&lt;/multiplicity&gt; &lt;relationship-role-source&gt; &lt;ejb-name&gt;PARENT&lt;/ejb-name&gt; &lt;/relationship-role-source&gt; &lt;/ejb-relationship-role&gt; &lt;ejb-relationship-role&gt; &lt;ejb-relationship-role-name&gt;CHILDRENS-has-one-PARENT&lt;/ejb-relationship-role-name&gt; &lt;multiplicity&gt;Many&lt;/multiplicity&gt; &lt;!-- AQUI ERA O ERRO, pois antes estava One &lt;multiplicity&gt;One&lt;/multiplicity&gt; --&gt; &lt;relationship-role-source&gt; &lt;ejb-name&gt;CHILDRENS&lt;/ejb-name&gt; &lt;/relationship-role-source&gt; &lt;cmr-field&gt; &lt;cmr-field-name&gt;PARENT&lt;/cmr-field-name&gt; &lt;/cmr-field&gt; &lt;/ejb-relationship-role&gt; &lt;/ejb-relation&gt;
Obrigado a todos pela ajuda =D.

Criado 12 de agosto de 2010
Ultima resposta 13 de ago. de 2010
Respostas 5
Participantes 3