【问题标题】:@Startup @Singleton Java annotations not working (TomEE 8 Web Profile + CentOS 7)@Startup @Singleton Java 注释不起作用(TomEE 8 Web Profile + CentOS 7)
【发布时间】:2019-08-03 03:35:33
【问题描述】:

尝试在 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");
        }
    }

在 Win10 上它可以工作。启动 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]
(...)

但不是在 CentOS 上.. TomEE 版本和配置相同,奇怪..

已下载 TomEE plus - 现在可以正常工作了。所以看来 TomEE webprofile 版本不支持 EJB??

【问题讨论】:

    标签: java centos singleton ejb startup


    【解决方案1】:

    确实如此,但您的 EJB 似乎没有启动/销毁方法,嵌套类不是 EJB,您最终会得到一个空 EJB 和一个具有忽略生命周期的非托管类。

    你可以删除 SessionManager 类并在 NewClass 中移动 start/destroy 吗?

    罗曼

    【讨论】:

    • 我已经更新了代码(在午夜犯了一个错误..:)。安装 TomEE Plus 后 - 应用程序启动。也许 TomEE Web Profile 不支持 EJB?还有另一个问题——如果我试图启动具有相同类SessionManager 的第二个应用程序——它无法启动。在我更改其中一个的班级名称后 - 两者都正常启动。我在 Glassfish 上没有这样的问题。看来@Startup@Sigleton类名应该是唯一的。
    • 默认是,必须是唯一的。尝试在 conf/system.properties 中设置:openejb.deploymentId.format={appId}/{ejbJarId}/{ejbName}。应该解决。 Web配置文件显然完美支持EJB,甚至通过了TCK :)。
    猜你喜欢
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 2016-12-23
    相关资源
    最近更新 更多