[英]@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.