Uploaded image for project: 'JBoss Enterprise Application Platform'
  1. JBoss Enterprise Application Platform
  2. JBEAP-4167

Server is unable to invoke @Timeout method after 10 methods are called on Asynchronous bean on IBM JDK

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Critical
    • 7.0.1.CR1, 7.0.1.GA
    • None
    • EJB
    • None
    • EAP 7.0.1

    Description

      Description of problem:
      Server is unable to invoke @Timeout method after 10 methods are called on Asynchronous bean

      Test:

              for (int i = 0; i < 10; i++) {
                  AsyncBean bean = lookup(AsyncBean.class);
                  bean.asyncMethod();
              }
               InitialContext iniCtx = new InitialContext();
              TimeoutBean bean = (TimeoutBean) iniCtx.lookup("java:module/" + TimeoutBean.class.getSimpleName());
              bean.createTimer();
      

      Asynchronous bean:

      @Stateless
      @Asynchronous
      @LocalBean
      public class AsyncBean{
          public void asyncMethod() {
              System.out.println("asynch bean execution");
          }
      }
      

      Timeout bean:

      @Stateless
      public class TimeoutBean  {
          @Resource
          private TimerService timerService;
      
          public void createTimer() {
              timerService.createTimer(100, null);
          }
      
          @Timeout
          private void timeout(Timer timer) {
              System.out.println("in timeout method");
          }
      }
      

      Customer Impact:
      Customers can not use default persistence timer with Asynchronous bean.

      How reproducible:
      Always on IBM JDK

      Steps to Reproduce: (use attached reproducer)

      1. get fresh EAP
      2. mvn test -Djboss.home=${EAP_HOME}

      Actual results:

      12:26:57,462 ERROR [org.jboss.as.ejb3] (EJB default - 9) WFLYEJB0164: Exception running timer task for timer [id=03aa7a93-ee6f-483e-bf6b-caff56a13fc0 timedObjectId=test.test.TimeoutBean auto-timer?:false persistent?:true timerService=org.jboss.as.ejb3.timerservice.TimerServiceImpl@f1cd0789 initialExpiration=Mon Apr 11 12:26:57 CEST 2016 intervalDuration(in milli sec)=0 nextExpiration=null timerState=IN_TIMEOUT info=null] on EJB test.test.TimeoutBean: java.lang.RuntimeException: javax.xml.stream.FactoryConfigurationError: Provider __redirected.__XMLOutputFactory not found
      	at org.jboss.as.ejb3.timerservice.TimerServiceImpl.persistTimer(TimerServiceImpl.java:614)
      	at org.jboss.as.ejb3.timerservice.TimerTask.run(TimerTask.java:148)
      	at org.jboss.as.ejb3.timerservice.TimerServiceImpl$Task$1.run(TimerServiceImpl.java:1214)
      	at org.wildfly.extension.requestcontroller.RequestController$QueuedTask$1.run(RequestController.java:497)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1153)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
      	at java.lang.Thread.run(Thread.java:785)
      	at org.jboss.threads.JBossThread.run(JBossThread.java:320)
      Caused by: javax.xml.stream.FactoryConfigurationError: Provider __redirected.__XMLOutputFactory not found
      	at javax.xml.stream.XMLOutputFactory.newFactory(Unknown Source)
      	at javax.xml.stream.XMLOutputFactory.newInstance(Unknown Source)
      	at org.jboss.as.ejb3.timerservice.persistence.filestore.FileTimerPersistence.writeFile(FileTimerPersistence.java:497)
      	at org.jboss.as.ejb3.timerservice.persistence.filestore.FileTimerPersistence.persistTimer(FileTimerPersistence.java:225)
      	at org.jboss.as.ejb3.timerservice.persistence.filestore.FileTimerPersistence.persistTimer(FileTimerPersistence.java:193)
      	at org.jboss.as.ejb3.timerservice.TimerServiceImpl.persistTimer(TimerServiceImpl.java:609)
      	... 7 more
      Caused by: java.lang.ClassNotFoundException: __redirected.__XMLOutputFactory
      	at java.lang.Class.forNameImpl(Native Method)
      	at java.lang.Class.forName(Class.java:273)
      	at javax.xml.stream.FactoryFinder.newInstance(Unknown Source)
      	at javax.xml.stream.FactoryFinder.find(Unknown Source)
      	at javax.xml.stream.FactoryFinder.find(Unknown Source)
      	... 13 more
      

      Expected results:
      No exception on output

      Additional info:
      Number of EJB call depends on max-threads attribute of EJB3 subsystem. It can be configured by this CLI command:

      /subsystem=ejb3/thread-pool=default:write-attribute(name=max-threads,value=10)
      

      Attachments

        Issue Links

          Activity

            People

              sdouglas1@redhat.com Stuart Douglas
              mkopecky@redhat.com Marek Kopecky
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: