0 Replies Latest reply on Dec 22, 2004 12:09 PM by Gerald Quintana

    Unable to persist timer in Oracle XA data source

    Gerald Quintana Newbie

      Hello,

      I have create a Timer table in by Oracle 9i database:

      create table TIMERS(
       TIMERID varchar2(80) not null ,
       TARGETID varchar2(80) not null ,
       INITIALDATE timestamp not null ,
       TIMERINTERVAL number(20) ,
       INSTANCEPK raw(2000) ,
       INFO raw(2000) ,
       constraint TIMERS_PK primary key (TIMERID,TARGETID)
      )
      


      I have changed in the ejb-deployer.xml the data source for Timers persistence to my Oracle XA data source, but I get the following exception:
      2004-12-22 16:25:11,427 ERROR [org.jboss.ejb.txtimer.TimerServiceImpl] Cannot create txtimer
      java.lang.IllegalStateException: Unable to persist timer
      at org.jboss.ejb.txtimer.DatabasePersistencePolicy.insertTimer(DatabasePersistencePolicy.java:124)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:144)
      at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
      at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
      at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:249)
      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642)
      at org.jboss.mx.util.JMXInvocationHandler.invoke(JMXInvocationHandler.java:272)
      at $Proxy409.insertTimer(Unknown Source)
      at org.jboss.ejb.txtimer.TimerServiceImpl.createTimer(TimerServiceImpl.java:206)
      at org.jboss.ejb.StatelessSessionEnterpriseContext$TimerServiceWrapper.createTimer(StatelessSessionEnterpriseContext.java:273)
      at fr.monentreprise.monprojet.monpaquetage.MonTimerBean.creerTimer(MonTimerBean.java:73)
      (...)
      Caused by: java.sql.SQLException: ORA-02049: Temporisation : transaction distribuée attend un verrou

      at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
      at oracle.jdbc.oci8.OCIDBAccess.check_error(OCIDBAccess.java:2355)
      at oracle.jdbc.oci8.OCIDBAccess.executeFetch(OCIDBAccess.java:1760)
      at oracle.jdbc.oci8.OCIDBAccess.parseExecuteFetch(OCIDBAccess.java:1921)
      at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2152)
      at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:2035)
      at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2876)
      at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:609)
      at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:316)
      at org.jboss.ejb.txtimer.GeneralPurposeDatabasePersistencePlugin.insertTimer(GeneralPurposeDatabasePersistencePlugin.java:156)
      at org.jboss.ejb.txtimer.DatabasePersistencePolicy.insertTimer(DatabasePersistencePolicy.java:120)
      ... 55 more


      The Oracle error code means:
      ORA-02049: timeout: distributed transaction waiting for lock
      Cause: Exceeded INIT.ORA DISTRIBUTED_LOCK_TIMEOUT seconds waiting for lock.
      Action: Treat as a deadlock.


      I already noticed that
      - Timer persistence over a non-XA Oracle data source worked, so the database schema is right.
      - I use the same Oracle XA data source from my EJBs and it works so it's properly configured!

      Is it possible to use Timers persistence through an Oracle XA data source?
      Thanks for your help,
      Gérald