1 Reply Latest reply on May 27, 2009 3:44 AM by jaikiran

    UserTransaction not working inside jboss service

    elgabo

      Hi everyone,

      I'm heavily using JMX based services inside a JBoss 4.2.3 application server (.sar project).
      But I am not able to manage a JDBC transaction through UserTransaction. The statements get executed before I commit the transaction and when I rollback the changes are not undone. I use a local-tx-datasource MySQL JDBC datasource

       <local-tx-datasource>
       <jndi-name>myDs</jndi-name>
       <connection-url>jdbc:mysql://myserver:3306/opensips</connection-url>
       <driver-class>com.mysql.jdbc.Driver</driver-class>
       <user-name>myuser</user-name>
       <password>mypwd</password>
       <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
      
       <metadata>
       <type-mapping>mySQL</type-mapping>
       </metadata>
       </local-tx-datasource>
      


      and I think I'm correctly using the JTA API

      Connection conn = null;
       UserTransaction tx=null;
       try {
       DataSource ds=(DataSource) this.getResource(this.opensipsDs);
       tx=(UserTransaction) this.getResource("UserTransaction");
       tx.begin();
       conn=ds.getConnection();
       String activateSql="insert into grp (username, grp) values (?, 'active')";
       String deactivateSql="delete from grp where username=?";
      
       PreparedStatement ps;
       Set<String> lineas=estados.keySet();
       for(String linea:lineas) {
       if(estados.get(linea)) {
       //activar
       ps=conn.prepareStatement(activateSql);
       } else {
       //desactivar
       ps=conn.prepareStatement(deactivateSql);
       }
      
       ps.setString(1, linea);
       ps.executeUpdate();
       }
      
       tx.commit();
       } catch (Exception e) {
       this.log.error("error al realizar modificacion en opensips", e);
       if(tx!=null)
       try {
       tx.rollback();
       } catch (Exception ex) {
       this.log.info("no se pudo realizar rollback");
       }
       } finally {
       try {
       if(conn!=null&&!conn.isClosed()) {
       conn.close();
       }
       } catch (SQLException e) {
       this.log.debug("la coneccion ya esta cerrada");
       }
       }
      


      Can I use the JTA API inside an MBean? Thank for you help