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

时间:2011-12-20 02:32:45

标签: java java-ee timer glassfish ejb

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

这是我的@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>

1 个答案:

答案 0 :(得分:6)

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

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

  

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