I use auto-increment keys for CMP EJBs. I am trying to port all our code from a 
local-tx-datasource to an xa-datasource. The problem is that the auto key 
generation is returning a null generated primary key, which causes the insert 
transaction to rollback. Here is an extract from the JBoss log:

00:21:48,656 INFO  [RMI TCP Connection(6)-192.168.0.4] [STDOUT] Mon Jan 22 
00:21:48 GMT 2007 DEBUG: Executing XA statement: XA START 
0x4275737465722f3132,0x31,0x101
00:21:48,656 ERROR [RMI TCP Connection(6)-192.168.0.4] [CustomerManagerBean] 
Failed to create a customer: Primary key for created instance is null.
00:21:48,656 INFO  [RMI TCP Connection(6)-192.168.0.4] [STDOUT] Mon Jan 22 
00:21:48 GMT 2007 DEBUG: Executing XA statement: XA END 
0x4275737465722f3132,0x31,0x101
00:21:48,656 INFO  [RMI TCP Connection(6)-192.168.0.4] [STDOUT] Mon Jan 22 
00:21:48 GMT 2007 DEBUG: Executing XA statement: XA ROLLBACK 
0x4275737465722f3132,0x31,0x101


When I manually set the primary key, the insert completes as normal. This code 
worked perfectly with the non-XA datasource.

How do I use auto-increment keys with XA transactions?

The jbosscmp-jdbc.xml (generated from xdoclet) looks like this:

         <ejb-name>Customer</ejb-name>
                 java:/BankDS
                 <datasource-mapping>mySQL</datasource-mapping>
         <create-table>true</create-table>
         <table-name>customer</table-name>

         <cmp-field>
            <field-name>id</field-name>
            <column-name>customer_id</column-name>
                        <not-null/>

            <jdbc-type>INTEGER</jdbc-type>
            <sql-type>INTEGER</sql-type>

                        <auto-increment/>
        </cmp-field>
         <cmp-field>
            <field-name>name</field-name>
            <column-name>name</column-name>

        </cmp-field>
         <cmp-field>
            <field-name>password</field-name>
            <column-name>password</column-name>

        </cmp-field>

<!-- jboss 3.2 features -->
<!-- optimistic locking does not express the exclusions needed -->


The datasource deployment descriptor is
<xa-datasource>
                <jndi-name>BankDS</jndi-name>
                <xa-datasource-class>
                        com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
                </xa-datasource-class>
                <xa-datasource-property name="URL">
                        jdbc:mysql://localhost:3306/bank
                </xa-datasource-property>
                <user-name>dbuser</user-name>
                dbuser
                <transaction-isolation>
                        TRANSACTION_READ_COMMITTED
                </transaction-isolation>
                <max-pool-size>5</max-pool-size>
                <min-pool-size>0</min-pool-size>

                <blocking-timeout-millis>2000</blocking-timeout-millis>
                <idle-timeout-minutes>2</idle-timeout-minutes>
                <track-connection-by-tx>true</track-connection-by-tx>
                <new-connection-sql>set autocommit=false</new-connection-sql>
                <no-tx-separate-pools>true</no-tx-separate-pools>
                <exception-sorter-class-name>
                        
org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
                </exception-sorter-class-name>
                
                        <type-mapping>mySQL</type-mapping>
                
        </xa-datasource>

The target database is MySQL 5.0.27 and the Connector/J v5.0.4.

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4004663#4004663

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4004663
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to