Jakarta ee @Singleton@Startup@PostConstruct未等待外部客户端调用

Jakarta ee @Singleton@Startup@PostConstruct未等待外部客户端调用,jakarta-ee,singleton,ejb,postconstruct,Jakarta Ee,Singleton,Ejb,Postconstruct,我已经在GlassFish3.1和JBossAS6.1中测试了这种行为 在我的测试中,我将应用程序配置如下: 1) 一个具有Postconstruct方法的单例,该方法大约需要1.5分钟才能结束(使用thread.sleep()), 2) 一个无状态Bean(名为“Abean”),每30秒运行一次@Schedule方法, 3) 一个无状态Bean(名为“Bbean”),在应用程序部署之后由外部客户机请求调用(用于测试EJB3.1中描述的场景) 规格)。 注意:在任何EJB bean中都不会注入S

我已经在GlassFish3.1和JBossAS6.1中测试了这种行为

在我的测试中,我将应用程序配置如下: 1) 一个具有Postconstruct方法的单例,该方法大约需要1.5分钟才能结束(使用thread.sleep()), 2) 一个无状态Bean(名为“Abean”),每30秒运行一次@Schedule方法, 3) 一个无状态Bean(名为“Bbean”),在应用程序部署之后由外部客户机请求调用(用于测试EJB3.1中描述的场景)

规格)。 注意:在任何EJB bean中都不会注入Singleton

在应用程序服务器中部署此应用程序时,我可以观察以下内容:

Jboss和GlassFish服务器都允许调度调用和外部客户端调用到达其目标无状态bean“Abean”和“Bbean”,而Singleton仍在执行其Postconstruct方法

在我看来,这两个应用服务器都不符合EJB 3.1规范,因为涉及外部客户端调用(见PA4.4.1 EJB-3Y1-FR-SCOS)。 我还想知道他们在预定通话方面的行为是否正确(我在考虑@Startup模式…)

以下是我的测试应用程序代码:

独生子豆

package ejbBeans;

import java.util.Date;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Singleton;
import javax.ejb.Startup;

@Startup
@Singleton
public class TestSessionBeanSingleton {


    @Resource
    SessionContext context;

    public TestSessionBeanSingleton() throws Exception {
        System.out.println("TestSessionBeanSingleton Constructor called");      
    }

    @PostConstruct  
    private void init() {       
        System.out.println("TestSessionBeanSingleton postconstruct called " + new Date());
        try {
            Thread.sleep(90000);
        } catch (InterruptedException e) {
            System.out.println("TestSessionBeanSingleton postconstruct InterruptedException");
        }
        System.out.println("TestSessionBeanSingleton postconstruct End after 1,5 min "  + new Date());
    }



    public void method1() {
        System.out.println("TestSessionBeanSingleton method1 called");
    }
}
无状态Bean“Abean”

“Abean”远程接口

package ejbBeans;

public interface TestInterfaceStateless {
    public void method1(String x, Long y);

}
计划方法bean“Bbean”

外部客户

package ejbClient;

import ejbBeans.TestInterfaceStateless;
import ejbBeans.TestSessionBeanStateless;

public class TestStatelessClient {

    public static void main(String[] args) {
        try {
            TestInterfaceStateless sessionBeanEjb  = (TestInterfaceStateless) ServiceLocator.locateServerSessionBean(TestInterfaceStateless.class, TestSessionBeanStateless.class, ServiceLocator.ViewType.REMOTE);             
            sessionBeanEjb.method1("test",25L);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
package ejbClient;

import java.util.Hashtable;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;


public class ServiceLocator {

    public static enum ViewType {
        NO_INTERFACE("no-interface"),
        LOCAL("local"),
        REMOTE("remote");

        private String name;

        private ViewType(String  name) {
            this.name = name;
        }
    }


    protected static Object locateServerSessionBean(Class<?> beanIterface, Class<?> beanClassName, ViewType viewType) {     
        Object bean = null;     
        bean = locateJboss(beanIterface, beanClassName, viewType);
        if (bean == null)
            bean = locateGlassfish(beanIterface, beanClassName, viewType);
        return bean;    
    }


    private static Object locateJboss(Class<?> beanIterface, Class<?> beanClassName, ViewType viewType) {
        String jndiLookupString =  beanClassName.getSimpleName();
        switch (viewType)  {
            case NO_INTERFACE:
                    jndiLookupString += "/" + viewType.name; 
                    break;
            case LOCAL:
            case REMOTE:                
                    jndiLookupString += "/" + viewType.name + "-" + beanIterface.getCanonicalName(); 
                    break;                  
        }
        try {           
            Properties env = new Properties();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
            env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
            env.put(Context.PROVIDER_URL, "jnp://localhost:1099");
            InitialContext context = new InitialContext(env);  
            Object bean = context.lookup(jndiLookupString);
            return bean;            
        } catch (Exception e) {
            System.out.println("Locator: bean not found with Jboss name: " +jndiLookupString +", return null");
            return null;
        }       
    }


    private static Object locateGlassfish(Class<?> beanIterface, Class<?> beanClassName, ViewType viewType) {       
        String jndiLookupString =  "java:global/TestStartup/" + beanClassName.getSimpleName() + "!" + beanIterface.getCanonicalName();
        try {
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.enterprise.naming.SerialInitContextFactory");
            InitialContext context = new InitialContext(env); 
            Object bean = context.lookup(jndiLookupString);
            return bean;            
        } catch (Exception e) {
            System.out.println("Locator: bean not found with Glassfish name: " +jndiLookupString +", return null");
            return null;
        }
    }

}
外部客户端的服务定位器

package ejbClient;

import ejbBeans.TestInterfaceStateless;
import ejbBeans.TestSessionBeanStateless;

public class TestStatelessClient {

    public static void main(String[] args) {
        try {
            TestInterfaceStateless sessionBeanEjb  = (TestInterfaceStateless) ServiceLocator.locateServerSessionBean(TestInterfaceStateless.class, TestSessionBeanStateless.class, ServiceLocator.ViewType.REMOTE);             
            sessionBeanEjb.method1("test",25L);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
package ejbClient;

import java.util.Hashtable;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;


public class ServiceLocator {

    public static enum ViewType {
        NO_INTERFACE("no-interface"),
        LOCAL("local"),
        REMOTE("remote");

        private String name;

        private ViewType(String  name) {
            this.name = name;
        }
    }


    protected static Object locateServerSessionBean(Class<?> beanIterface, Class<?> beanClassName, ViewType viewType) {     
        Object bean = null;     
        bean = locateJboss(beanIterface, beanClassName, viewType);
        if (bean == null)
            bean = locateGlassfish(beanIterface, beanClassName, viewType);
        return bean;    
    }


    private static Object locateJboss(Class<?> beanIterface, Class<?> beanClassName, ViewType viewType) {
        String jndiLookupString =  beanClassName.getSimpleName();
        switch (viewType)  {
            case NO_INTERFACE:
                    jndiLookupString += "/" + viewType.name; 
                    break;
            case LOCAL:
            case REMOTE:                
                    jndiLookupString += "/" + viewType.name + "-" + beanIterface.getCanonicalName(); 
                    break;                  
        }
        try {           
            Properties env = new Properties();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
            env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
            env.put(Context.PROVIDER_URL, "jnp://localhost:1099");
            InitialContext context = new InitialContext(env);  
            Object bean = context.lookup(jndiLookupString);
            return bean;            
        } catch (Exception e) {
            System.out.println("Locator: bean not found with Jboss name: " +jndiLookupString +", return null");
            return null;
        }       
    }


    private static Object locateGlassfish(Class<?> beanIterface, Class<?> beanClassName, ViewType viewType) {       
        String jndiLookupString =  "java:global/TestStartup/" + beanClassName.getSimpleName() + "!" + beanIterface.getCanonicalName();
        try {
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.enterprise.naming.SerialInitContextFactory");
            InitialContext context = new InitialContext(env); 
            Object bean = context.lookup(jndiLookupString);
            return bean;            
        } catch (Exception e) {
            System.out.println("Locator: bean not found with Glassfish name: " +jndiLookupString +", return null");
            return null;
        }
    }

}
玻璃鱼原木

2017-01-28T22:11:03.025+0100|Informazioni: JTS5014: Recoverable JTS instance, serverId = [3700]
2017-01-28T22:11:03.900+0100|Informazioni: EJB5181:Portable JNDI names for EJB TestSessionBeanStateless: [java:global/TestStartup/TestSessionBeanStateless!ejbBeans.TestInterfaceStateless, java:global/TestStartup/TestSessionBeanStateless]
2017-01-28T22:11:03.900+0100|Informazioni: EJB5182:Glassfish-specific (Non-portable) JNDI names for EJB TestSessionBeanStateless: [ejbBeans.TestInterfaceStateless#ejbBeans.TestInterfaceStateless, ejbBeans.TestInterfaceStateless]
2017-01-28T22:11:03.985+0100|Informazioni: Loading EJBTimerService. Please wait.
2017-01-28T22:11:04.458+0100|Informazioni: WEB0169: Created HTTP listener [http-listener-1] on host/port [0.0.0.0:8080]
2017-01-28T22:11:04.469+0100|Informazioni: WEB0169: Created HTTP listener [http-listener-2] on host/port [0.0.0.0:8181]
2017-01-28T22:11:04.474+0100|Informazioni: WEB0169: Created HTTP listener [admin-listener] on host/port [0.0.0.0:4848]
2017-01-28T22:11:04.523+0100|Informazioni: WEB0171: Created virtual server [server]
2017-01-28T22:11:04.525+0100|Informazioni: WEB0171: Created virtual server [__asadmin]
2017-01-28T22:11:05.020+0100|Informazioni: WEB0172: Virtual server [server] loaded default web module []
2017-01-28T22:11:09.059+0100|Informazioni: HV000001: Hibernate Validator 4.3.0.Final
2017-01-28T22:11:11.256+0100|Informazioni: EclipseLink, version: Eclipse Persistence Services - 2.3.2.v20111125-r10461
2017-01-28T22:11:13.065+0100|Informazioni: file:/C:/Servers/glassfish3/glassfish/domains/domain1/applications/ejb-timer-service-app/WEB-INF/classes/___EJB__Timer__App login successful
2017-01-28T22:11:13.066+0100|Avvertenza: Multiple [2] JMX MBeanServer instances exist, we will use the server at index [0] : [com.sun.enterprise.v3.admin.DynamicInterceptor@11d6ecc3].
2017-01-28T22:11:13.066+0100|Avvertenza: JMX MBeanServer in use: [com.sun.enterprise.v3.admin.DynamicInterceptor@11d6ecc3] from index [0] 
2017-01-28T22:11:13.066+0100|Avvertenza: JMX MBeanServer in use: [com.sun.jmx.mbeanserver.JmxMBeanServer@44c3b4dd] from index [1] 
2017-01-28T22:11:13.133+0100|Informazioni: [TimerBeanContainer] Created  TimerBeanContainer: TimerBean
2017-01-28T22:11:13.163+0100|Informazioni: EJB5181:Portable JNDI names for EJB TimerBean: [java:global/ejb-timer-service-app/TimerBean, java:global/ejb-timer-service-app/TimerBean!com.sun.ejb.containers.TimerLocal]
2017-01-28T22:11:13.367+0100|Informazioni: WEB0671: Loading application [ejb-timer-service-app] at [/ejb-timer-service-app]
2017-01-28T22:11:13.369+0100|Informazioni: EJB5109:EJB Timer Service started successfully for data source [jdbc/__TimerPool]
2017-01-28T22:11:13.372+0100|Informazioni: Setting DBReadBeforeTimeout to false
2017-01-28T22:11:13.372+0100|Informazioni: ==> Restoring Timers ... 
2017-01-28T22:11:13.805+0100|Informazioni: There are no EJB Timers owned by this server
2017-01-28T22:11:13.805+0100|Informazioni: <== ... Timers Restored.
2017-01-28T22:11:13.809+0100|Informazioni: EJB5181:Portable JNDI names for EJB TestTimerServiceBean: [java:global/TestStartup/TestTimerServiceBean, java:global/TestStartup/TestTimerServiceBean!ejbBeans.TestTimerServiceBean]
2017-01-28T22:11:13.836+0100|Informazioni: EJB5181:Portable JNDI names for EJB TestSessionBeanSingleton: [java:global/TestStartup/TestSessionBeanSingleton!ejbBeans.TestSessionBeanSingleton, java:global/TestStartup/TestSessionBeanSingleton]
2017-01-28T22:11:13.840+0100|Informazioni: TestSessionBeanSingleton Constructor called
2017-01-28T22:11:13.869+0100|Informazioni: TestSessionBeanSingleton Constructor called
2017-01-28T22:11:13.873+0100|Informazioni: TestSessionBeanSingleton postconstruct called Sat Jan 28 22:11:13 CET 2017
2017-01-28T22:11:30.015+0100|Informazioni: TestTimerServiceBean autoScheduledTimedMethod called
2017-01-28T22:11:44.763+0100|Informazioni: TestSessionBeanStateless Constructor called
2017-01-28T22:11:44.765+0100|Informazioni: TestSessionBeanStateless postconstruct called
2017-01-28T22:11:44.766+0100|Informazioni: TestSessionBeanStateless method1 called: String = test Long = 25
2017-01-28T22:12:00.002+0100|Informazioni: TestTimerServiceBean autoScheduledTimedMethod called
2017-01-28T22:12:30.002+0100|Informazioni: TestTimerServiceBean autoScheduledTimedMethod called
2017-01-28T22:12:43.873+0100|Informazioni: TestSessionBeanSingleton postconstruct End after 1,5 min Sat Jan 28 22:12:43 CET 2017
2017-01-28T22:12:43.878+0100|Informazioni: CORE10010: Loading application TestStartup done in 109.016 ms
2017-01-28T22:12:43.882+0100|Informazioni: Oracle GlassFish Server 3.1.2.2 (5) startup time : Felix (3.797ms), startup services(110.692ms), total(114.489ms)
2017-01-28T22:12:47.603+0100|Informazioni: JMX005: JMXStartupService had Started JMXConnector on JMXService URL service:jmx:rmi://192.168.1.7:8686/jndi/rmi://192.168.1.7:8686/jmxrmi
2017-01-28T22:13:00.002+0100|Informazioni: TestTimerServiceBean autoScheduledTimedMethod called
2017-01-28222:11:03.025+0100 | Informazioni:JTS5014:可恢复的JTS实例,serverId=[3700]
2017-01-28222:11:03.900+0100 | Informazioni:EJB5181:EJB TestSessionBeanStateless的可移植JNDI名称:[java:global/TestStartup/TestSessionBeanStateless!ejbbean.TestInterfaceStateless,java:global/TestStartup/TestSessionBeanStateless]
2017-01-28222:11:03.900+0100 | Informazioni:EJB5182:ejbtestsessionbeanstateless的Glassfish特定(非便携)JNDI名称:[ejbbean.TestInterfaceStateless#ejbbean.TestInterfaceStateless,ejbbean.TestInterfaceStateless]
2017-01-28222:11:03.985+0100 | Informazioni:加载EJBTimerService。请稍等。
2017-01-28322:11:04.458+0100 | Informazioni:WEB0169:在主机/端口[0.0.0.0:8080]上创建了HTTP侦听器[HTTP-listener-1]
2017-01-28322:11:04.469+0100 | Informazioni:WEB0169:在主机/端口[0.0.0.0:8181]上创建了HTTP侦听器[HTTP-listener-2]
2017-01-28322:11:04.474+0100 | Informazioni:WEB0169:在主机/端口[0.0.0.0:4848]上创建了HTTP侦听器[管理员侦听器]
2017-01-28222:11:04.523+0100 | Informazioni:WEB0171:创建的虚拟服务器[服务器]
2017-01-28222:11:04.525+0100 | Informazioni:WEB0171:创建的虚拟服务器[u asadmin]
2017-01-28222:11:05.020+0100 | Informazioni:WEB0172:虚拟服务器[服务器]加载的默认web模块[]
2017-01-28222:11:09.059+0100 | Informazioni:HV000001:Hibernate Validator 4.3.0.Final
2017-01-28222:11:11.256+0100 | Informazioni:EclipseLink,版本:Eclipse持久性服务-2.3.2.v20111125-r10461
2017-01-28222:11:13.065+0100 | Informazioni:file:/C:/Servers/glassfish3/glassfish/domains/domain1/applications/ejb timer service app/WEB-INF/classes/uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
2017-01-28222:11:13.066+0100 | Avvertenza:存在多个[2]JMX MBeanServer实例,我们将使用索引[0]处的服务器:[com.sun.enterprise.v3.admin。DynamicInterceptor@11d6ecc3].
2017-01-28222:11:13.066+0100|Avvertenza:JMX MBeanServer正在使用:[com.sun.enterprise.v3.admin。DynamicInterceptor@11d6ecc3]从索引[0]
2017-01-28222:11:13.066+0100|Avvertenza:JMX MBeanServer正在使用:[com.sun.JMX.MBeanServer。JmxMBeanServer@44c3b4dd]从索引[1]
2017-01-28222:11:13.133+0100 | Informazioni:[TimerBeanCainer]创建的TimerBeanCainer:TimerBean
2017-01-28222:11:13.163+0100 | Informazioni:EJB5181:EJB TimerBean的可移植JNDI名称:[java:global/EJB timer service app/TimerBean,java:global/EJB timer service app/TimerBean!com.sun.EJB.containers.TimerLocal]
2017-01-28222:11:13.367+0100 | Informazioni:WEB0671:在[/ejb timer service app]加载应用程序[ejb timer service app]
2017-01-28222:11:13.369+0100 | Informazioni:EJB5109:EJB计时器服务已成功启动,用于数据源[jdbc/u_TimerPool]
2017-01-28322:11:13.372+0100 | Informazioni:将DBReadBeforeTimeout设置为false
2017-01-28222:11:13.372+0100 | Informazioni:==>恢复计时器。。。
2017-01-28222:11:13.805+0100 | Informazioni:此服务器没有拥有任何EJB计时器

2017-01-28222:11:13.805+0100 | Informazioni:您是否有少量代码来显示问题?我没有遇到过这种情况,但我可能会采取不同的做法。newInstance()?我的两分钱,用'@Startup'代替'@Singleton',我必须道歉,我最好检查一下Jboss的行为,我错过了Jboss Singleton后构造方法调用,在实例构造函数调用之后不久。实际上Jboss和GlassFish的运行方式都是一样的。
2017-01-28T22:11:03.025+0100|Informazioni: JTS5014: Recoverable JTS instance, serverId = [3700]
2017-01-28T22:11:03.900+0100|Informazioni: EJB5181:Portable JNDI names for EJB TestSessionBeanStateless: [java:global/TestStartup/TestSessionBeanStateless!ejbBeans.TestInterfaceStateless, java:global/TestStartup/TestSessionBeanStateless]
2017-01-28T22:11:03.900+0100|Informazioni: EJB5182:Glassfish-specific (Non-portable) JNDI names for EJB TestSessionBeanStateless: [ejbBeans.TestInterfaceStateless#ejbBeans.TestInterfaceStateless, ejbBeans.TestInterfaceStateless]
2017-01-28T22:11:03.985+0100|Informazioni: Loading EJBTimerService. Please wait.
2017-01-28T22:11:04.458+0100|Informazioni: WEB0169: Created HTTP listener [http-listener-1] on host/port [0.0.0.0:8080]
2017-01-28T22:11:04.469+0100|Informazioni: WEB0169: Created HTTP listener [http-listener-2] on host/port [0.0.0.0:8181]
2017-01-28T22:11:04.474+0100|Informazioni: WEB0169: Created HTTP listener [admin-listener] on host/port [0.0.0.0:4848]
2017-01-28T22:11:04.523+0100|Informazioni: WEB0171: Created virtual server [server]
2017-01-28T22:11:04.525+0100|Informazioni: WEB0171: Created virtual server [__asadmin]
2017-01-28T22:11:05.020+0100|Informazioni: WEB0172: Virtual server [server] loaded default web module []
2017-01-28T22:11:09.059+0100|Informazioni: HV000001: Hibernate Validator 4.3.0.Final
2017-01-28T22:11:11.256+0100|Informazioni: EclipseLink, version: Eclipse Persistence Services - 2.3.2.v20111125-r10461
2017-01-28T22:11:13.065+0100|Informazioni: file:/C:/Servers/glassfish3/glassfish/domains/domain1/applications/ejb-timer-service-app/WEB-INF/classes/___EJB__Timer__App login successful
2017-01-28T22:11:13.066+0100|Avvertenza: Multiple [2] JMX MBeanServer instances exist, we will use the server at index [0] : [com.sun.enterprise.v3.admin.DynamicInterceptor@11d6ecc3].
2017-01-28T22:11:13.066+0100|Avvertenza: JMX MBeanServer in use: [com.sun.enterprise.v3.admin.DynamicInterceptor@11d6ecc3] from index [0] 
2017-01-28T22:11:13.066+0100|Avvertenza: JMX MBeanServer in use: [com.sun.jmx.mbeanserver.JmxMBeanServer@44c3b4dd] from index [1] 
2017-01-28T22:11:13.133+0100|Informazioni: [TimerBeanContainer] Created  TimerBeanContainer: TimerBean
2017-01-28T22:11:13.163+0100|Informazioni: EJB5181:Portable JNDI names for EJB TimerBean: [java:global/ejb-timer-service-app/TimerBean, java:global/ejb-timer-service-app/TimerBean!com.sun.ejb.containers.TimerLocal]
2017-01-28T22:11:13.367+0100|Informazioni: WEB0671: Loading application [ejb-timer-service-app] at [/ejb-timer-service-app]
2017-01-28T22:11:13.369+0100|Informazioni: EJB5109:EJB Timer Service started successfully for data source [jdbc/__TimerPool]
2017-01-28T22:11:13.372+0100|Informazioni: Setting DBReadBeforeTimeout to false
2017-01-28T22:11:13.372+0100|Informazioni: ==> Restoring Timers ... 
2017-01-28T22:11:13.805+0100|Informazioni: There are no EJB Timers owned by this server
2017-01-28T22:11:13.805+0100|Informazioni: <== ... Timers Restored.
2017-01-28T22:11:13.809+0100|Informazioni: EJB5181:Portable JNDI names for EJB TestTimerServiceBean: [java:global/TestStartup/TestTimerServiceBean, java:global/TestStartup/TestTimerServiceBean!ejbBeans.TestTimerServiceBean]
2017-01-28T22:11:13.836+0100|Informazioni: EJB5181:Portable JNDI names for EJB TestSessionBeanSingleton: [java:global/TestStartup/TestSessionBeanSingleton!ejbBeans.TestSessionBeanSingleton, java:global/TestStartup/TestSessionBeanSingleton]
2017-01-28T22:11:13.840+0100|Informazioni: TestSessionBeanSingleton Constructor called
2017-01-28T22:11:13.869+0100|Informazioni: TestSessionBeanSingleton Constructor called
2017-01-28T22:11:13.873+0100|Informazioni: TestSessionBeanSingleton postconstruct called Sat Jan 28 22:11:13 CET 2017
2017-01-28T22:11:30.015+0100|Informazioni: TestTimerServiceBean autoScheduledTimedMethod called
2017-01-28T22:11:44.763+0100|Informazioni: TestSessionBeanStateless Constructor called
2017-01-28T22:11:44.765+0100|Informazioni: TestSessionBeanStateless postconstruct called
2017-01-28T22:11:44.766+0100|Informazioni: TestSessionBeanStateless method1 called: String = test Long = 25
2017-01-28T22:12:00.002+0100|Informazioni: TestTimerServiceBean autoScheduledTimedMethod called
2017-01-28T22:12:30.002+0100|Informazioni: TestTimerServiceBean autoScheduledTimedMethod called
2017-01-28T22:12:43.873+0100|Informazioni: TestSessionBeanSingleton postconstruct End after 1,5 min Sat Jan 28 22:12:43 CET 2017
2017-01-28T22:12:43.878+0100|Informazioni: CORE10010: Loading application TestStartup done in 109.016 ms
2017-01-28T22:12:43.882+0100|Informazioni: Oracle GlassFish Server 3.1.2.2 (5) startup time : Felix (3.797ms), startup services(110.692ms), total(114.489ms)
2017-01-28T22:12:47.603+0100|Informazioni: JMX005: JMXStartupService had Started JMXConnector on JMXService URL service:jmx:rmi://192.168.1.7:8686/jndi/rmi://192.168.1.7:8686/jmxrmi
2017-01-28T22:13:00.002+0100|Informazioni: TestTimerServiceBean autoScheduledTimedMethod called