Uploaded image for project: 'WildFly'
  1. WildFly
  2. WFLY-16397

clustered-ejb-timer: ORA-00923: FROM keyword not found where expected

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Blocker
    • 26.1.2.Final
    • 26.1.0.Final
    • EJB
    • Hide

      1. configure standalone.xml:

       

      <timer-service thread-pool-name="default" default-data-store="clustered-store">
        <data-stores>
           <database-data-store name="clustered-store" datasource-jndi-name="java:/DataSource" partition="timer"/>
        </data-stores>
      </timer-service>

       

      2. add DB table for clustered EJB Timer:

      CREATE TABLE "JBOSS_EJB_TIMER"
      (
      "ID" VARCHAR2(255) PRIMARY KEY NOT NULL,
      "TIMED_OBJECT_ID" VARCHAR2(255) NOT NULL,
      "INITIAL_DATE" TIMESTAMP,
      "REPEAT_INTERVAL" NUMBER(20), 
      "NEXT_DATE" TIMESTAMP,
      "PREVIOUS_RUN" TIMESTAMP,
      "PRIMARY_KEY" VARCHAR2(255),
      "INFO" CLOB, 
      "TIMER_STATE" VARCHAR2(32), 
      "SCHEDULE_EXPR_SECOND" VARCHAR2(100), 
      "SCHEDULE_EXPR_MINUTE" VARCHAR2(100), 
      "SCHEDULE_EXPR_HOUR" VARCHAR2(100),
      "SCHEDULE_EXPR_DAY_OF_WEEK" VARCHAR2(100), 
      "SCHEDULE_EXPR_DAY_OF_MONTH" VARCHAR2(100), 
      "SCHEDULE_EXPR_MONTH" VARCHAR2(100), 
      "SCHEDULE_EXPR_YEAR" VARCHAR2(100), 
      "SCHEDULE_EXPR_START_DATE" VARCHAR2(100), 
      "SCHEDULE_EXPR_END_DATE" VARCHAR(100), 
      "SCHEDULE_EXPR_TIMEZONE" VARCHAR2(100), 
      "AUTO_TIMER" NUMBER(1), 
      "TIMEOUT_METHOD_NAME" VARCHAR2(100), 
      "TIMEOUT_METHOD_DECLARING_CLASS" VARCHAR2(255), 
      "TIMEOUT_METHOD_DESCRIPTOR" VARCHAR2(255), 
      "CALENDAR_TIMER" NUMBER(1), 
      "PARTITION_NAME" VARCHAR2(100), 
      "NODE_NAME" VARCHAR2(255)
      );
      CREATE INDEX "JBOSS_EJB_TIMER_IDENX" ON JBOSS_EJB_TIMER (PARTITION_NAME, TIMED_OBJECT_ID);
      
      GRANT SELECT, UPDATE, INSERT, DELETE ON JBOSS_EJB_TIMER TO TWTAM_RW_ROLE;
        

       

      3. Add a timer like:

      @Singleton
      @Slf4j
      public class TestTimmer {
         @Schedule(hour = "*", minute = "*", second = "0", persistent = true)
         public void log() {
            logger.info("timer test timer test");
         }
      } 

       

      4. and then start the application so the first entry will be added to the table.

       

       

       

      Show
      1. configure standalone.xml:   <timer-service thread-pool-name= " default " default -data-store= "clustered-store" >   <data-stores>      <database-data-store name= "clustered-store" datasource-jndi-name= "java:/DataSource" partition= "timer" />   </data-stores> </timer-service>   2. add DB table for clustered EJB Timer: CREATE TABLE "JBOSS_EJB_TIMER" ( "ID" VARCHAR2(255) PRIMARY KEY NOT NULL, "TIMED_OBJECT_ID" VARCHAR2(255) NOT NULL, "INITIAL_DATE" TIMESTAMP, "REPEAT_INTERVAL" NUMBER(20), "NEXT_DATE" TIMESTAMP, "PREVIOUS_RUN" TIMESTAMP, "PRIMARY_KEY" VARCHAR2(255), "INFO" CLOB, "TIMER_STATE" VARCHAR2(32), "SCHEDULE_EXPR_SECOND" VARCHAR2(100), "SCHEDULE_EXPR_MINUTE" VARCHAR2(100), "SCHEDULE_EXPR_HOUR" VARCHAR2(100), "SCHEDULE_EXPR_DAY_OF_WEEK" VARCHAR2(100), "SCHEDULE_EXPR_DAY_OF_MONTH" VARCHAR2(100), "SCHEDULE_EXPR_MONTH" VARCHAR2(100), "SCHEDULE_EXPR_YEAR" VARCHAR2(100), "SCHEDULE_EXPR_START_DATE" VARCHAR2(100), "SCHEDULE_EXPR_END_DATE" VARCHAR(100), "SCHEDULE_EXPR_TIMEZONE" VARCHAR2(100), "AUTO_TIMER" NUMBER(1), "TIMEOUT_METHOD_NAME" VARCHAR2(100), "TIMEOUT_METHOD_DECLARING_CLASS" VARCHAR2(255), "TIMEOUT_METHOD_DESCRIPTOR" VARCHAR2(255), "CALENDAR_TIMER" NUMBER(1), "PARTITION_NAME" VARCHAR2(100), "NODE_NAME" VARCHAR2(255) ); CREATE INDEX "JBOSS_EJB_TIMER_IDENX" ON JBOSS_EJB_TIMER (PARTITION_NAME, TIMED_OBJECT_ID); GRANT SELECT, UPDATE, INSERT, DELETE ON JBOSS_EJB_TIMER TO TWTAM_RW_ROLE;     3. Add a timer like: @Singleton @Slf4j public class TestTimmer {    @Schedule(hour = "*" , minute = "*" , second = "0" , persistent = true )     public void log() {       logger.info( "timer test timer test" );    } }   4. and then start the application so the first entry will be added to the table.      
    • ---
    • ---

    Description

      By Wildfly 26.1 the clustered EJB timer through a DB store is not working anymore.
      When adding a timer, then following error is thrown.

      And the server will not start!

       

      By the way, the SQL statement is really wrong:
      SELECT :1 , :2 , :3 , :4 , 'CREATED', :5 , :6 , :7 , :8 , :9 , :10 , :11 , :12 , :13 , :14 , :15 , :16 , :17 , :18 , :19 , :20 WHERE NOT EXISTS
       

      Stacktrace:

      java.lang.RuntimeException: java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: ORA-00923: FROM keyword not found where expected    at org.jboss.as.ee@26.1.0.Final//org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:57)
          at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
          at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
          at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
          at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
          at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
          at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1348)
          at java.base/java.lang.Thread.run(Unknown Source)
          at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)
      Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: ORA-00923: FROM keyword not found where expected    at org.jboss.as.ejb3@26.1.0.Final//org.jboss.as.ejb3.timerservice.TimerServiceImpl.persistTimer(TimerServiceImpl.java:654)
          at org.jboss.as.ejb3@26.1.0.Final//org.jboss.as.ejb3.timerservice.TimerServiceImpl.createCalendarTimer(TimerServiceImpl.java:531)
          at org.jboss.as.ejb3@26.1.0.Final//org.jboss.as.ejb3.timerservice.TimerServiceImpl.loadAutoTimer(TimerServiceImpl.java:380)
          at org.jboss.as.ejb3@26.1.0.Final//org.jboss.as.ejb3.timerservice.TimerServiceImpl.restoreTimers(TimerServiceImpl.java:797)
          at org.jboss.as.ejb3@26.1.0.Final//org.jboss.as.ejb3.timerservice.TimerServiceImpl.activate(TimerServiceImpl.java:206)
          at org.jboss.as.ejb3@26.1.0.Final//org.jboss.as.ejb3.component.EJBComponent.init(EJBComponent.java:605)
          at org.jboss.as.ee@26.1.0.Final//org.jboss.as.ee.component.BasicComponent.start(BasicComponent.java:229)
          at org.jboss.as.ejb3@26.1.0.Final//org.jboss.as.ejb3.component.singleton.SingletonComponent.start(SingletonComponent.java:136)
          at org.jboss.as.ee@26.1.0.Final//org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:54)
          ... 8 more
      Caused by: java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: ORA-00923: FROM keyword not found where expected    at org.jboss.as.ejb3@26.1.0.Final//org.jboss.as.ejb3.timerservice.persistence.database.DatabaseTimerPersistence.addAutoTimer(DatabaseTimerPersistence.java:867)
          at org.jboss.as.ejb3@26.1.0.Final//org.jboss.as.ejb3.timerservice.persistence.database.DatabaseTimerPersistence.addTimer(DatabaseTimerPersistence.java:429)
          at org.jboss.as.ejb3@26.1.0.Final//org.jboss.as.ejb3.timerservice.TimerServiceImpl.persistTimer(TimerServiceImpl.java:635)
          ... 16 more
      Caused by: java.sql.SQLSyntaxErrorException: ORA-00923: FROM keyword not found where expected    at com.oracle.jdbc//oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:630)
          at com.oracle.jdbc//oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:564)
          at com.oracle.jdbc//oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1231)
          at com.oracle.jdbc//oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:772)
          at com.oracle.jdbc//oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:299)
          at com.oracle.jdbc//oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:512)
          at com.oracle.jdbc//oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:163)
          at com.oracle.jdbc//oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1241)
          at com.oracle.jdbc//oracle.jdbc.driver.OracleStatement.executeSQLStatement(OracleStatement.java:1820)
          at com.oracle.jdbc//oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1472)
          at com.oracle.jdbc//oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3761)
          at com.oracle.jdbc//oracle.jdbc.driver.OraclePreparedStatement.executeLargeUpdate(OraclePreparedStatement.java:4062)
          at com.oracle.jdbc//oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:4037)
          at com.oracle.jdbc//oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:996)
          at org.jboss.ironjacamar.jdbcadapters@1.5.3.Final//org.jboss.jca.adapters.jdbc.CachedPreparedStatement.executeUpdate(CachedPreparedStatement.java:121)
          at org.jboss.ironjacamar.jdbcadapters@1.5.3.Final//org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:537)
          at org.jboss.as.ejb3@26.1.0.Final//org.jboss.as.ejb3.timerservice.persistence.database.DatabaseTimerPersistence.addAutoTimer(DatabaseTimerPersistence.java:858)
          ... 18 more
      Caused by: Error : 923, Position : 566, Sql = INSERT INTO JBOSS_EJB_TIMER (ID, TIMED_OBJECT_ID, NEXT_DATE, INFO, TIMER_STATE, SCHEDULE_EXPR_SECOND, SCHEDULE_EXPR_MINUTE, SCHEDULE_EXPR_HOUR, SCHEDULE_EXPR_DAY_OF_WEEK, SCHEDULE_EXPR_DAY_OF_MONTH, SCHEDULE_EXPR_MONTH, SCHEDULE_EXPR_YEAR, SCHEDULE_EXPR_START_DATE, SCHEDULE_EXPR_END_DATE, SCHEDULE_EXPR_TIMEZONE, AUTO_TIMER, TIMEOUT_METHOD_DECLARING_CLASS, TIMEOUT_METHOD_NAME, TIMEOUT_METHOD_DESCRIPTOR, CALENDAR_TIMER, PARTITION_NAME) SELECT :1 , :2 , :3 , :4 , 'CREATED', :5 , :6 , :7 , :8 , :9 , :10 , :11 , :12 , :13 , :14 , :15 , :16 , :17 , :18 , :19 , :20  WHERE NOT EXISTS (SELECT 1 FROM JBOSS_EJB_TIMER WHERE TIMED_OBJECT_ID=:21  AND SCHEDULE_EXPR_SECOND=:22  AND SCHEDULE_EXPR_MINUTE=:23  AND SCHEDULE_EXPR_HOUR=:24  AND SCHEDULE_EXPR_DAY_OF_WEEK=:25  AND SCHEDULE_EXPR_DAY_OF_MONTH=:26  AND SCHEDULE_EXPR_MONTH=:27  AND SCHEDULE_EXPR_YEAR=:28  AND ((SCHEDULE_EXPR_START_DATE IS NULL AND :29  IS NULL) OR SCHEDULE_EXPR_START_DATE=:30 ) AND ((SCHEDULE_EXPR_END_DATE IS NULL AND :31  IS NULL) OR SCHEDULE_EXPR_END_DATE=:32 ) AND ((SCHEDULE_EXPR_TIMEZONE IS NULL AND :33  IS NULL) OR SCHEDULE_EXPR_TIMEZONE=:34 ) AND TIMEOUT_METHOD_DECLARING_CLASS=:35  AND TIMEOUT_METHOD_NAME=:36  AND ((TIMEOUT_METHOD_DESCRIPTOR IS NULL AND :37  IS NULL) OR TIMEOUT_METHOD_DESCRIPTOR=:38 ) AND PARTITION_NAME=:39 ), OriginalSql = INSERT INTO JBOSS_EJB_TIMER (ID, TIMED_OBJECT_ID, NEXT_DATE, INFO, TIMER_STATE, SCHEDULE_EXPR_SECOND, SCHEDULE_EXPR_MINUTE, SCHEDULE_EXPR_HOUR, SCHEDULE_EXPR_DAY_OF_WEEK, SCHEDULE_EXPR_DAY_OF_MONTH, SCHEDULE_EXPR_MONTH, SCHEDULE_EXPR_YEAR, SCHEDULE_EXPR_START_DATE, SCHEDULE_EXPR_END_DATE, SCHEDULE_EXPR_TIMEZONE, AUTO_TIMER, TIMEOUT_METHOD_DECLARING_CLASS, TIMEOUT_METHOD_NAME, TIMEOUT_METHOD_DESCRIPTOR, CALENDAR_TIMER, PARTITION_NAME) SELECT ?, ?, ?, ?, 'CREATED', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? WHERE NOT EXISTS (SELECT 1 FROM JBOSS_EJB_TIMER WHERE TIMED_OBJECT_ID=? AND SCHEDULE_EXPR_SECOND=? AND SCHEDULE_EXPR_MINUTE=? AND SCHEDULE_EXPR_HOUR=? AND SCHEDULE_EXPR_DAY_OF_WEEK=? AND SCHEDULE_EXPR_DAY_OF_MONTH=? AND SCHEDULE_EXPR_MONTH=? AND SCHEDULE_EXPR_YEAR=? AND ((SCHEDULE_EXPR_START_DATE IS NULL AND ? IS NULL) OR SCHEDULE_EXPR_START_DATE=?) AND ((SCHEDULE_EXPR_END_DATE IS NULL AND ? IS NULL) OR SCHEDULE_EXPR_END_DATE=?) AND ((SCHEDULE_EXPR_TIMEZONE IS NULL AND ? IS NULL) OR SCHEDULE_EXPR_TIMEZONE=?) AND TIMEOUT_METHOD_DECLARING_CLASS=? AND TIMEOUT_METHOD_NAME=? AND ((TIMEOUT_METHOD_DESCRIPTOR IS NULL AND ? IS NULL) OR TIMEOUT_METHOD_DESCRIPTOR=?) AND PARTITION_NAME=?), Error Msg = ORA-00923: FROM keyword not found where expected 

      Probably it is related to: 
      https://issues.redhat.com/browse/WFLY-16290

       

      Attachments

        Activity

          People

            cfang@redhat.com Cheng Fang
            juerg.drollinger@six-group.com Jürg Drollinger (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: