@ 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实例。