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

Use of schedule expression start/end date for (Database) persistent calendar timers fail if the server is restarted and the timer reloaded

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Major
    • Resolution: Done
    • Affects Version/s: 11.0.0.Alpha1
    • Fix Version/s: 11.0.0.Beta1
    • Component/s: EJB
    • Environment:
    • Steps to Reproduce:
      Hide

      Create a Calendartimer with the programatic API and set start or end for the ScheduleExpression

      Show
      Create a Calendartimer with the programatic API and set start or end for the ScheduleExpression

      Description

      If Calendar timers are created programatically it is possible to use the javax.ejb.ScheduleExpression and set start() end() as a Date.
      If the timer is persistent and the database is Oracle (here 12c ojdbc7 driver) a server restart will show the following Exception is:

      13:55:00,450 WARN [org.jboss.as.ejb3.timer] (ServerService Thread Pool – 63) WFLYEJB0161: Failed to reinstate timer 'ejb31-timer.ejb31-timer.SimpleScheduleSingletonTimerBean' (id=bd2e59a0-bdf6-43a1-9241-fd3a0b3a72da) from its persistent state: java.sql.SQLException: Invalid conversion requested
      at oracle.jdbc.driver.CharCommonAccessor.getTimestamp(CharCommonAccessor.java:420)
      at oracle.jdbc.driver.T4CVarcharAccessor.getTimestamp(T4CVarcharAccessor.java:644)
      at oracle.jdbc.driver.GeneratedStatement.getTimestamp(GeneratedStatement.java:360)
      at oracle.jdbc.driver.GeneratedScrollableResultSet.getTimestamp(GeneratedScrollableResultSet.java:1008)
      at org.jboss.jca.adapters.jdbc.WrappedResultSet.getTimestamp(WrappedResultSet.java:2140)
      at org.jboss.as.ejb3.timerservice.persistence.database.DatabaseTimerPersistence.timerFromResult(DatabaseTimerPersistence.java:535)
      at org.jboss.as.ejb3.timerservice.persistence.database.DatabaseTimerPersistence.loadActiveTimers(DatabaseTimerPersistence.java:452)
      at org.jboss.as.ejb3.timerservice.TimerServiceImpl.getActivePersistentTimers(TimerServiceImpl.java:953)
      at org.jboss.as.ejb3.timerservice.TimerServiceImpl.restoreTimers(TimerServiceImpl.java:693)
      at org.jboss.as.ejb3.timerservice.TimerServiceImpl.activate(TimerServiceImpl.java:225)
      at org.jboss.as.ejb3.component.EJBComponent.start(EJBComponent.java:588)
      at org.jboss.as.ejb3.component.singleton.SingletonComponent.start(SingletonComponent.java:133)
      at org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:54)
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at java.lang.Thread.run(Thread.java:748)
      at org.jboss.threads.JBossThread.run(JBossThread.java:320)
      Caused by: java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]
      at java.sql.Timestamp.valueOf(Timestamp.java:237)
      at oracle.jdbc.driver.CharCommonAccessor.getTimestamp(CharCommonAccessor.java:415)
      ... 18 more

      As a result the timer seems created with a new id and the entry within the timer-table is duplicated.

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  wdfink Wolf-Dieter Fink
                  Reporter:
                  wdfink Wolf-Dieter Fink
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  4 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: