@Singleton、@Startup、@PostConstruct 不适用于 EJB3.1 和 Glassfishv3.0.1 [英] @Singleton, @Startup, @PostConstruct doesn't work on EJB3.1 and Glassfishv3.0.1

查看:34
本文介绍了@Singleton、@Startup、@PostConstruct 不适用于 EJB3.1 和 Glassfishv3.0.1的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个设置有问题,我什至无法查看日志.

I have a problem with this setup and I can't even view the logs.

这是我的@Singleton @Startup EJB:

@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>

推荐答案

You have invalid type of bean as an attribute of @DependsOn.DependsOn 用于表达两个 Singleton 会话 bean 之间的依赖关系,而不是 Singleton 和 Stateless 之间的依赖关系.您应该将 SchedulerEJB 更改为 Singleton 或删除依赖项.

You have invalid type of bean as an attribute of @DependsOn. DependsOn is for expressing dependency between two Singleton session beans, not between Singleton and Stateless. You should change SchedulerEJB to be Singleton or remove dependency.

如果您决定将 SchedulerEJB 更改为 Singleton,那么也不需要 @DepensOn,因为(来自 EJB 3.1 规范):

If you decide change SchedulerEJB to Singleton, then @DepensOn is also not needed, because (from EJB 3.1 specification):

注意,如果一个 Singleton 只需要调用另一个 Singleton从其 PostConstruct 方法来看,没有明确的排序元数据必需的.在这种情况下,第一个 Singleton 只会使用 ejb调用目标单例的引用.在那里,收购ejb 引用(通过注入或查找)不必然意味着实际创建相应的单例bean 实例.

Note that if one Singleton merely needs to invoke another Singleton from its PostConstruct method, no explicit ordering metadata is required. In that case, the first Singleton would merely use an ejb reference to invoke the target Singleton. There, the acquisition of the ejb reference (either through injection or lookup) does not necessarily imply the actual creation of the corresponding Singleton bean instance.

这篇关于@Singleton、@Startup、@PostConstruct 不适用于 EJB3.1 和 Glassfishv3.0.1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆