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

Statefull session beans are not (always) properly destroyed/disposed

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • 9.0.0.Alpha1
    • None
    • EJB
    • None

      Statefull session beans are not always properly disposed when undeploying the application or stopping the application server.

      To reproduce this I've created the following (Arquillian) test.

      It contains a simple Java bean:

      @Typed
      public class TestBean {

      private String message;

      public String getMessage()

      { return message; }

      public void setMessage(String message)

      { this.message = message; }

      }

      A corresponding producer:

      public class TestBeanProducer {

      private final Logger log = LoggerFactory.getLogger(getClass());

      @Produces
      public TestBean produceTestBean()

      { log.info("produceTestBean()"); TestBean testBean = new TestBean(); testBean.setMessage("Hello World!"); return testBean; }

      public void disposeTestBean(@Disposes TestBean testBean)

      { log.info("disposeTestBean()"); testBean.setMessage(null); }

      }

      And finally the statefull session bean:

      @Stateful
      public class TestStatefullSessionBean {

      private final Logger log = LoggerFactory.getLogger(getClass());

      @Inject
      transient TestBean testBean;

      @PostConstruct
      public void init()

      { log.info("init()"); }

      public void test()

      { log.info(testBean.getMessage()); }

      @PreDestroy
      public void cleanUp()

      { log.info("cleanUp()"); }

      }

      When I run this as Arquillian test in the container I get the following expected behavior:

      21:13:13,668 INFO [org.jboss.as.server.deployment] (MSC service thread 1-7) JBAS015876: Starting deployment of "test.war"
      21:13:14,083 INFO [org.jboss.weld.deployer] (MSC service thread 1-2) JBAS016002: Processing weld deployment test.war
      21:13:14,084 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-2) JNDI bindings for session bean named TestStatefullSessionBean in deployment unit deployment "test.war" are as follows:

      java:global/test/TestStatefullSessionBean!at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean
      java:app/test/TestStatefullSessionBean!at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean
      java:module/TestStatefullSessionBean!at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean
      java:global/test/TestStatefullSessionBean
      java:app/test/TestStatefullSessionBean
      java:module/TestStatefullSessionBean

      21:13:14,106 INFO [org.jboss.weld.deployer] (MSC service thread 1-3) JBAS016005: Starting Services for CDI deployment: test.war
      21:13:14,118 INFO [org.jboss.weld.deployer] (MSC service thread 1-5) JBAS016008: Starting weld service for deployment test.war
      21:13:14,216 INFO [org.jboss.web] (MSC service thread 1-4) JBAS018210: Registering web context: /test
      21:13:14,232 INFO [org.jboss.as.server] (management-handler-thread - 11) JBAS018559: Deployed "test.war"
      21:13:14,872 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (http--0.0.0.0-8080-1) produceTestBean()
      21:13:14,873 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (http--0.0.0.0-8080-1) init()
      21:13:14,881 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (http--0.0.0.0-8080-1) Hello World!
      21:13:14,884 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (http--0.0.0.0-8080-1) cleanUp()
      21:13:14,884 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (http--0.0.0.0-8080-1) disposeTestBean()
      21:13:14,918 INFO [org.jboss.weld.deployer] (MSC service thread 1-4) JBAS016009: Stopping weld service for deployment test.war
      21:13:14,939 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015877: Stopped deployment test.war in 26ms
      21:13:14,951 INFO [org.jboss.as.repository] (management-handler-thread - 12) JBAS014901: Content removed from location /Users/mcentner/java/jboss-as-7.1.1.Final/standalone/data/content/5b/20bd9c42eb5e656c3f2b396125de45636a0b8a/content
      21:13:14,952 INFO [org.jboss.as.server] (management-handler-thread - 12) JBAS018558: Undeployed "test.war"

      However, when I deploy the "test.war" ...

      21:31:24,792 INFO [org.jboss.as.server.deployment] (MSC service thread 1-5) JBAS015876: Starting deployment of "test.war"
      21:31:24,830 INFO [org.jboss.weld.deployer] (MSC service thread 1-8) JBAS016002: Processing weld deployment test.war
      21:31:24,831 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-8) JNDI bindings for session bean named TestStatefullSessionBean in deployment unit deployment "test.war" are as follows:

      java:global/test/TestStatefullSessionBean!at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean
      java:app/test/TestStatefullSessionBean!at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean
      java:module/TestStatefullSessionBean!at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean
      java:global/test/TestStatefullSessionBean
      java:app/test/TestStatefullSessionBean
      java:module/TestStatefullSessionBean

      21:31:24,858 INFO [org.jboss.weld.deployer] (MSC service thread 1-1) JBAS016005: Starting Services for CDI deployment: test.war
      21:31:24,869 INFO [org.jboss.weld.deployer] (MSC service thread 1-5) JBAS016008: Starting weld service for deployment test.war
      21:31:24,929 INFO [org.jboss.web] (MSC service thread 1-8) JBAS018210: Registering web context: /test
      21:31:24,941 INFO [org.jboss.as.server] (HttpManagementService-threads - 3) JBAS018559: Deployed "test.war"

      ... and click around in the JBoss AS7 Console (section "Naming") ...

      21:43:01,763 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 4) produceTestBean()
      21:43:01,764 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 4) init()
      21:43:01,766 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 4) produceTestBean()
      21:43:01,767 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 4) init()
      21:43:01,769 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 4) produceTestBean()
      21:43:01,770 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 4) init()
      21:43:01,771 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 4) produceTestBean()
      21:43:01,772 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 4) init()
      21:43:01,778 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 4) produceTestBean()
      21:43:01,778 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 4) init()
      21:43:01,781 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 4) produceTestBean()
      21:43:01,781 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 5) produceTestBean()
      21:43:01,782 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 4) init()
      21:43:01,782 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 5) init()
      21:43:01,784 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 4) produceTestBean()
      21:43:01,784 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 5) produceTestBean()
      21:43:01,784 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 4) init()
      21:43:01,785 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 5) init()
      21:43:01,786 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 4) produceTestBean()
      21:43:01,787 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 4) init()
      21:43:01,792 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 5) produceTestBean()
      21:43:01,793 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 5) init()
      21:43:01,795 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 5) produceTestBean()
      21:43:01,796 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 5) init()
      21:43:01,803 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 5) produceTestBean()
      21:43:01,804 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 5) init()
      21:43:01,805 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 5) produceTestBean()
      21:43:01,806 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 5) init()
      21:43:01,808 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 5) produceTestBean()
      21:43:01,809 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 5) init()
      21:43:01,812 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestBeanProducer] (HttpManagementService-threads - 5) produceTestBean()
      21:43:01,813 INFO [at.gv.stmk.zza2.test.jboss.jcr.TestStatefullSessionBean] (HttpManagementService-threads - 5) init()

      ... a number of instances of the TestBean are produced. When "test.war" is now undeployed (through the console) ...

      21:45:48,745 INFO [org.jboss.weld.deployer] (MSC service thread 1-2) JBAS016009: Stopping weld service for deployment test.war
      21:45:48,755 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015877: Stopped deployment test.war in 15ms
      21:45:48,763 INFO [org.jboss.as.server] (HttpManagementService-threads - 6) JBAS018558: Undeployed "test.war"

      ... none of the generated instances is being destroyed / disposed.

      In our real use case this prevents us from a clean shut down of a Java Content Repository.

        1. test.war
          4 kB
          Martin Bonato

              sdouglas1@redhat.com Stuart Douglas (Inactive)
              Martin.Bonato@prime-sign.com Martin Bonato (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: