glassfish
  1. glassfish
  2. GLASSFISH-20505

@PostConstruct method called twice on @Singleton

    Details

    • Type: Bug Bug
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 4.0_b87_RC3
    • Fix Version/s: 4.1.1
    • Component/s: jax-rs
    • Labels:
      None
    • Environment:

      Oracle JDK 7, Linux Fedora 18 64-bit, Eclipse Kepler m6

      Description

      I am running a simple .war file under Glassfish 4.0-b87 that was created in Eclipse Kepler M6 using M2E as a simple project with Dynamic Web Module facet added, using Oracle Java 7 JDK/JVM.

      There is essentially a single class for which I expect the `post_construct` method to be called exactly once. But it is called twice, first when the app is deployed, and one more time on the first and only the first HTTP request.

      Here is the class (the log output follows). It should print "hello world" only once but in the log it can be seen twice.

          package com.example.main;
          
          import javax.annotation.PostConstruct;
          import javax.annotation.PreDestroy;
          import javax.ejb.LocalBean;
          import javax.ejb.PostActivate;
          import javax.ejb.PrePassivate;
          import javax.ejb.Singleton;
          import javax.ejb.Startup;
          import javax.enterprise.inject.spi.PassivationCapable;
          import javax.ws.rs.ApplicationPath;
          import javax.ws.rs.GET;
          import javax.ws.rs.Path;
          import javax.ws.rs.core.Application;
          
          @Singleton
          @Startup
          @LocalBean
          @ApplicationPath("/rest")
          @Path("/life")
          public class Life extends Application implements PassivationCapable {
          
            @PostConstruct
            public void post_construct () {
              System.out.println("hello world!");
            }
          
            @PreDestroy
            public void pre_destroy () {
              System.out.println("so long and thanks for the fish!");
            }
          
            @PrePassivate
            public void pre_passivate () {
              System.out.println("taking a break");
            }
          
            @PostActivate
            public void post_activate () {
              System.out.println("back from break");
            }
          
            @Override
            public String getId () {
              return "life";
            }
          
            @GET
            public String greet () {
              return "hi";
            }
          }
      

      The log output is as follows with a dashed line separating the part before the first HTTP call and the part after the HTTP call:

      [2013-05-09T19:42:26.660-1000] [glassfish 4.0] [INFO] [NCLS-DEPLOYMENT-00027] [javax.enterprise.system.tools.deployment.autodeploy] [tid: _ThreadID=59 _ThreadName=AutoDeployer] [timeMillis: 1368164546660] [levelValue: 800] [[
      Selecting file /usr/local/glassfish4/glassfish/domains/domain1/autodeploy/singleton.war for autodeployment]]

      [2013-05-09T19:42:26.692-1000] [glassfish 4.0] [INFO] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=59 _ThreadName=AutoDeployer] [timeMillis: 1368164546692] [levelValue: 800] [[
      visiting unvisited references]]

      [2013-05-09T19:42:26.702-1000] [glassfish 4.0] [INFO] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=59 _ThreadName=AutoDeployer] [timeMillis: 1368164546702] [levelValue: 800] [[
      visiting unvisited references]]

      [2013-05-09T19:42:26.706-1000] [glassfish 4.0] [INFO] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=59 _ThreadName=AutoDeployer] [timeMillis: 1368164546706] [levelValue: 800] [[
      visiting unvisited references]]

      [2013-05-09T19:42:26.709-1000] [glassfish 4.0] [INFO] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=59 _ThreadName=AutoDeployer] [timeMillis: 1368164546709] [levelValue: 800] [[
      visiting unvisited references]]

      [2013-05-09T19:42:26.749-1000] [glassfish 4.0] [INFO] [ejb.portable_jndi_names] [javax.enterprise.system.container.ejb.com.sun.ejb.containers] [tid: _ThreadID=59 _ThreadName=AutoDeployer] [timeMillis: 1368164546749] [levelValue: 800] [[
      EJB5181:Portable JNDI names for EJB Life: [java:global/singleton/Life, java:global/singleton/Life!com.example.main.Life]]]

      [2013-05-09T19:42:26.959-1000] [glassfish 4.0] [WARNING] [] [org.jboss.weld.Bootstrap] [tid: _ThreadID=59 _ThreadName=AutoDeployer] [timeMillis: 1368164546959] [levelValue: 900] [[
      WELD-001473 javax.enterprise.inject.spi.Bean implementation org.glassfish.jms.injection.JMSCDIExtension$LocalBean@cbcbf4a declared a normal scope but does not implement javax.enterprise.inject.spi.PassivationCapable. It won't be possible to inject this bean into a bean with passivating scope (@SessionScoped, @ConversationScoped). This can be fixed by assigning the Bean implementation a unique id by implementing the PassivationCapable interface.]]

      [2013-05-09T19:42:26.970-1000] [glassfish 4.0] [INFO] [] [] [tid: _ThreadID=59 _ThreadName=Thread-3] [timeMillis: 1368164546970] [levelValue: 800] [[
      hello world!]]

      [2013-05-09T19:42:26.982-1000] [glassfish 4.0] [INFO] [] [org.glassfish.jersey.servlet.init.JerseyServletContainerInitializer] [tid: _ThreadID=59 _ThreadName=AutoDeployer] [timeMillis: 1368164546982] [levelValue: 800] [[
      Registering the Jersey servlet application, named com.example.main.Life, at the servlet mapping /rest/*, with the Application class of the same name.]]

      [2013-05-09T19:42:26.988-1000] [glassfish 4.0] [INFO] [AS-WEB-GLUE-00172] [javax.enterprise.web] [tid: _ThreadID=59 _ThreadName=AutoDeployer] [timeMillis: 1368164546988] [levelValue: 800] [[
      Loading application [singleton] at [/singleton]]]

      [2013-05-09T19:42:27.003-1000] [glassfish 4.0] [INFO] [] [javax.enterprise.system.core] [tid: _ThreadID=59 _ThreadName=AutoDeployer] [timeMillis: 1368164547003] [levelValue: 800] [[
      singleton was successfully deployed in 332 milliseconds.]]

      [2013-05-09T19:42:27.006-1000] [glassfish 4.0] [INFO] [NCLS-DEPLOYMENT-00035] [javax.enterprise.system.tools.deployment.autodeploy] [tid: _ThreadID=59 _ThreadName=AutoDeployer] [timeMillis: 1368164547006] [levelValue: 800] [[
      [AutoDeploy] Successfully autodeployed : /usr/local/glassfish4/glassfish/domains/domain1/autodeploy/singleton.war.]]

      -----------------------------AFTER FIRST HTTP CALL-----------------------------

      [2013-05-09T19:42:44.940-1000] [glassfish 4.0] [INFO] [] [] [tid: _ThreadID=21 _ThreadName=Thread-3] [timeMillis: 1368164564940] [levelValue: 800] [[
      hello world!]]

      [2013-05-09T19:42:44.940-1000] [glassfish 4.0] [INFO] [] [org.glassfish.jersey.server.ApplicationHandler] [tid: _ThreadID=21 _ThreadName=http-listener-1(4)] [timeMillis: 1368164564940] [levelValue: 800] [[
      Initiating Jersey application, version Jersey: 2.0-rc2 2013-04-23 12:04:25...]]

      [2013-05-09T19:42:44.956-1000] [glassfish 4.0] [INFO] [] [org.glassfish.jersey.gf.ejb.EjbComponentProvider] [tid: _ThreadID=21 _ThreadName=http-listener-1(4)] [timeMillis: 1368164564956] [levelValue: 800] [[
      The Jersey EJB interceptor is bound. JAX-RS EJB integration support is enabled.]]

        Activity

        No work has yet been logged on this issue.

          People

          • Assignee:
            Jakub Podlesak
            Reporter:
            agksmehx
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated: