Bitter bites with Java

Posts Tagged ‘Could not enlist in transaction on entering meta-aware object

Hi,

Some of you might have come across the following strange exception when moving to Jboss5 from Jboss4.x.

Adding multiple last resources is disallowed. Current resource is [EMAIL
PROTECTED]
| 16:17:18,000 WARN  [JDBCExceptionReporter] SQL Error: 0, SQLState: null
| 16:17:18,000 ERROR [JDBCExceptionReporter] Could not enlist in transaction
on entering meta-aware object!; – nested throwable:
(javax.transaction.SystemException: java.lang.Throwable: Unabled to enlist
resource, see the previous warnings. tx=TransactionImple < ac, BasicAction:
-53e0d9e7:77e:469b7d96:41 status: ActionStatus.ABORT_ONLY >); – nested
throwable: (org.jboss.resource.JBossResourceException: Could not enlist in
transaction on entering meta-aware object!; – nested throwable:
(javax.transaction.SystemException: java.lang.Throwable: Unabled to enlist
resource, see the previous warnings. tx=TransactionImple < ac, BasicAction:
-53e0d9e7:77e:469b7d96:41 status: ActionStatus.ABORT_ONLY >))
| 16:17:18,000 FATAL [application] javax.persistence.PersistenceException:
org.hibernate.exception.GenericJDBCException: Cannot open connection
| javax.faces.el.EvaluationException: javax.persistence.PersistenceException:
org.hibernate.exception.GenericJDBCException: Cannot open connection

This happens when :

1. You have 2 EAR files in a single server instance. Not just 2 ear files, but from within a transaction of a deployed EAR file, when you try to access the other EAR file, get some data from there and try to commit the transaction. This is not allowed in arjuna API (AFAIK). To fix this, edit JBOSS_HOME/server/default/conf/jbossjta-properties.xml and add the following line

<property name=”com.arjuna.ats.jta.allowMultipleLastResources” value=”true” />

The problem does not stop here..The datasource has to support it.

Modify the *ds.xml to look like this ( localtxdatasource would not work) :

<?xml version=”1.0″ encoding=”UTF-8″?>
<datasources>
<xa-datasource>
<jndi-name>CatMgrDS</jndi-name>
<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
<xa-datasource-property name=”URL”>jdbc:mysql://192.168.157.57:3306/30cm</xa-datasource-property>
<xa-datasource-property name=”User”>root</xa-datasource-property>
<xa-datasource-property name=”Password”>root</xa-datasource-property>
<!– the minimum size of the connection pool –>
<min-pool-size>1</min-pool-size>
<!– The maximum connections in a pool/sub-pool –>
<max-pool-size>4</max-pool-size>
</xa-datasource>
</datasources>

Next step is to make sure you have the latest version of mysql-connector(in my case atleast). Versions prior to 5.1.10 doesn’t support XA datasource(ref :http://marc.info/?l=kandula-dev&m=113945114400475&w=2) I replaced my old mysql connector with the latest one.

Things should work fine then. will keep this writing up to date to my best possible extent :)






  • vishalsal: Thanks Venu ..this helped.
  • Frankline: Thanks soooooo much. I finally got my application to work with JBoss 5 after days of trying to migrate from 4.2.2. This post really helped.
  • MK: Thanx for this article! It helped me also with JBoss 4.2.3 which also has a jbossjta-properties.xml without a allowMultipleLastResources=true entry

Categories

Archives

Follow

Get every new post delivered to your Inbox.