当前位置: 首页 > 面试题库 >

@ Singleton,@ Startup,@ PostConstruct在EJB3.1和Glassfishv3.0.1上不起作用

李华茂
2023-03-14
问题内容

我对此设置有问题,甚至无法查看日志。

这是我的@Singleton @StartupEJB:

@Singleton
@Startup
@DependsOn("SchedulerEJB")
public class SchedulerStartUp {

    private static Logger log = Logger.getLogger(SchedulerStartUp.class);

    @EJB
    SchedulerEJB schedEJB;

    @PostConstruct
    public void atStartup() {
       log.info("startUp")
       System.out.println("startUp");

       schedEJB.cancelTimer("EBlastScheduler");
       schedEJB.createTimer("*/1", "*", "*");
    }
}

SchedulerEJB

 @Stateless
 public class SchedulerEJB {

    @Resource
    TimerService timerService;

    public cancelTimer(String timerInfo){/*...*/}

    public createTimer(String sec, String min, String hour) {/*...*/}

    @Timeout
    public void execute(Timer timer) {/*...*/}
 }

Maven pom:

 //Been Using Glassfishv3.0.1 and EJB3.1 with a dependency of:
 <dependency>
     <groupId>javax</groupId>
     <artifactId>javaee-api</artifactId>
     <version>6.0</version>
     <scope>provided</scope>
 </dependency>

问题答案:

您具有无效的bean类型作为@DependsOn的属性。DependsOn用于表达两个Singleton会话Bean之间的依赖性,而不是Singleton和Stateless之间的依赖性。您应该将SchedulerEJB更改为Singleton或删除依赖项。

如果您决定将SchedulerEJB更改为Singleton,则也不需要@DepensOn,因为(根据EJB 3.1规范):

请注意,如果一个Singleton仅需要从其PostConstruct方法调用另一个Singleton,则不需要显式的排序元数据。在这种情况下,第一个Singleton将仅使用ejb引用来调用目标Singleton。在那里,获取ejb参考(通过注入或查找)不一定意味着实际创建了相应的Singleton
bean实例。



 类似资料:
  • 我正在使用spring,我想在启动我的应用程序之前缓存一些数据。 我在其他帖子中找到了一些使用@PostConstruct来调用我的@Service方法的解决方案(这些方法被注释为@Cacheable),例如。如何在spring启动时加载@Cache?我这样做了,但当应用程序启动后,我调用RESTendpoint,它再次调用这个服务方法,它会在另一次发送数据库请求(所以它还没有缓存)。当我第二次向

  • 在上运行的应用程序的上下文中,在执行任何业务方法之前,我需要执行许多启动任务。为此使用,bean似乎是一个很有前途的解决方案。然而,我并不完全清楚应用程序生命周期到底是什么样子。EJB 3.1规范规定了以下内容: 默认情况下,容器负责决定何时初始化单例bean实例。但是,bean开发人员可以选择性地配置单例以进行快速初始化。如果启动注释出现在Singleton bean类上,或者如果Singlet

  • 我做了一个名为AcessoCliente的单例类 但我需要对我的单例类执行一个名为ValidadorNivelDeAcessoBusiness的类的依赖注入

  • 我们编写了这样一个简单的类: [...] 启动服务器(WildFly 10.1.0)时,出现以下错误: 15:35:27142错误[stderr](ServerService线程池--58)log4j:警告找不到记录器(com.test.ContactFormScheduler)的附加程序。 15:35:27,143错误[stderr](ServerService线程池--58)log4j:警告请

  • 我有一种字体在IE8和IE9以及所有其他浏览器中都能正常工作,但第二种字体只在IE9和其他浏览器中工作。在IE8中,我得到了一个错误: “CSS3111:@font-face遇到未知错误。” 我一直在四处看书,尝试了很多事情,但都没有运气。 我的代码是: 我试过用几个不同的生成器多次重新生成eot,玩过CSS,玩过头,玩过域,等等,但是看起来它们都很好。如前所述,相同的代码在相同的,只是指向不同的

  • 我正在制作一个基于Java EE的产品,其中我使用了GlassFish 3和EJB 3.1。 我的应用程序有会话bean,一个调度程序,并且使用web服务。我最近了解了Apache TomEE,它支持上下文和依赖注入(CDI)。GlassFish容器也支持CDI。 如果我不需要CDI也不提供的任何特性,我可以替换会话bean吗?如果那样的话,我能得到什么好处呢?