@ Singleton,@ Start,@ PostConstruct不适用于EJB3.1和Glassfishv3.0.1

我有这个设置的问题,我甚至无法查看日志。

这是我的@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:  javax javaee-api 6.0 provided  

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

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

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