简体   繁体   English

@Startup @Singleton Java注释不起作用(TomEE 8 Web Profile + CentOS 7)

[英]@Startup @Singleton Java annotations not working (TomEE 8 Web Profile + CentOS 7)

Trying to deploy web application on TomEE Web Edition 8.0.0-M3 (CentOS7, JDK12) - everything works, but for some reason @Startup @Singleton annotations not working - start() and destroy() methods are not called. 尝试在TomEE Web Edition 8.0.0-M3(CentOS7,JDK12)上部署Web应用程序-一切正常,但是由于某种原因@Startup @Singleton注释不起作用-不调用start()destroy()方法。

package test;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Singleton;
import javax.ejb.Startup;

@Startup
@Singleton
public class SessionManager {

        @PostConstruct
        public void start() {
            System.out.println("PostConstruct");
        }

        @PreDestroy
        public void destroy() {
            System.out.println("PreDestroy");
        }
    }

On Win10 it works. 在Win10上有效。 When starting TomEE I can see that it loads openejb: 启动TomEE时,我可以看到它加载了openejb:

(...)    
24-Jul-2019 04:48:49.020 INFO [main] org.apache.openejb.util.OptionsLog.info Using 'openejb.jdbc.datasource-creator=org.apache.tomee.jdbc.TomEEDataSourceCreator'
    24-Jul-2019 04:48:49.104 INFO [main] org.apache.openejb.OpenEJB$Instance.<init> ********************************************************************************
    24-Jul-2019 04:48:49.104 INFO [main] org.apache.openejb.OpenEJB$Instance.<init> OpenEJB http://tomee.apache.org/
    24-Jul-2019 04:48:49.104 INFO [main] org.apache.openejb.OpenEJB$Instance.<init> Startup: Wed Jul 24 04:48:49 EEST 2019
    24-Jul-2019 04:48:49.104 INFO [main] org.apache.openejb.OpenEJB$Instance.<init> Copyright 1999-2018 (C) Apache OpenEJB Project, All Rights Reserved.
    24-Jul-2019 04:48:49.104 INFO [main] org.apache.openejb.OpenEJB$Instance.<init> Version: 8.0.0-M3
    24-Jul-2019 04:48:49.104 INFO [main] org.apache.openejb.OpenEJB$Instance.<init> Build date: 20190523
    24-Jul-2019 04:48:49.104 INFO [main] org.apache.openejb.OpenEJB$Instance.<init> Build time: 12:13
    24-Jul-2019 04:48:49.104 INFO [main] org.apache.openejb.OpenEJB$Instance.<init> ********************************************************************************
    24-Jul-2019 04:48:49.104 INFO [main] org.apache.openejb.OpenEJB$Instance.<init> openejb.home = C:\opt\apache-tomee-webprofile-8.0.0-M3
    24-Jul-2019 04:48:49.104 INFO [main] org.apache.openejb.OpenEJB$Instance.<init> openejb.base = C:\opt\apache-tomee-webprofile-8.0.0-M3
    24-Jul-2019 04:48:49.104 INFO [main] org.apache.openejb.cdi.CdiBuilder.initializeOWB Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@10993713
    24-Jul-2019 04:48:49.104 INFO [main] org.apache.openejb.cdi.CdiBuilder.initializeOWB Succeeded in installing singleton service
    24-Jul-2019 04:48:49.135 INFO [main] org.apache.openejb.config.ConfigurationFactory.init TomEE configuration file is 'C:\opt\apache-tomee-webprofile-8.0.0-M3\conf\tomee.xml'
    24-Jul-2019 04:48:49.173 INFO [main] org.apache.openejb.config.ConfigurationFactory.configureService Configuring Service(id=Tomcat Security Service, type=SecurityService, provider-id=Tomcat Security Service)
    24-Jul-2019 04:48:49.173 INFO [main] org.apache.openejb.config.ConfigurationFactory.configureService Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
    24-Jul-2019 04:48:49.189 INFO [main] org.apache.openejb.util.OptionsLog.info Using 'openejb.deployments.classpath=false'
    24-Jul-2019 04:48:49.189 INFO [main] org.apache.openejb.assembler.classic.Assembler.createRecipe Creating TransactionManager(id=Default Transaction Manager)
    24-Jul-2019 04:48:49.220 INFO [main] org.apache.openejb.assembler.classic.Assembler.createRecipe Creating SecurityService(id=Tomcat Security Service)
    24-Jul-2019 04:48:49.320 INFO [main] org.apache.openejb.server.ServiceManager.initServer Creating ServerService(id=cxf-rs)
    24-Jul-2019 04:48:49.452 INFO [main] org.apache.openejb.server.SimpleServiceManager.start   ** Bound Services **
    24-Jul-2019 04:48:49.452 INFO [main] org.apache.openejb.server.SimpleServiceManager.printRow   NAME                 IP              PORT  
    24-Jul-2019 04:48:49.452 INFO [main] org.apache.openejb.server.SimpleServiceManager.start -------
    24-Jul-2019 04:48:49.452 INFO [main] org.apache.openejb.server.SimpleServiceManager.start Ready!
    24-Jul-2019 04:48:49.452 INFO [main] jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke Server initialization in [1,552] milliseconds
    24-Jul-2019 04:48:49.490 INFO [main] org.apache.tomee.catalina.OpenEJBNamingContextListener.bindResource Importing a Tomcat Resource with id 'UserDatabase' of type 'org.apache.catalina.UserDatabase'.
    24-Jul-2019 04:48:49.490 INFO [main] org.apache.openejb.assembler.classic.Assembler.createRecipe Creating Resource(id=UserDatabase)
    24-Jul-2019 04:48:49.505 INFO [main] jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke Starting service [Catalina]
    24-Jul-2019 04:48:49.505 INFO [main] jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke Starting Servlet engine: [Apache Tomcat/9.0.20]
(...)

But not on CentOS.. TomEE versions and configuration identical, strange.. 但是不在CentOS上。TomEE的版本和配置完全相同,很奇怪。

Downloaded TomEE plus - now it's working as expected. 下载了TomEE plus-现在可以正常使用了。 So it seems like TomEE webprofile version does not support EJBs?? 因此,似乎TomEE Web配置文件版本不支持EJB?

It does but it seems your EJB does not have start/destroy methods, the nested class not being an EJB you end up with an empty EJB and an unmanaged class with an ignored lifecycle. 确实有,但是看来您的EJB没有start / destroy方法,嵌套类不是一个EJB,您最终得到一个空EJB和一个具有忽略的生命周期的非托管类。

Can you drop SessionManager class and move start/destroy in NewClass? 您可以删除SessionManager类并在NewClass中移动开始/销毁吗?

Romain 罗曼

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM