@Singleton, @Startup, @PostConstruct не работает на EJB3.1 и Glassfishv3.0.1 - PullRequest
6 голосов
/ 20 декабря 2011

У меня проблема с этой настройкой, и я не могу даже просмотреть журналы.

Это мой @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 Ответ

6 голосов
/ 20 декабря 2011

В качестве атрибута @ DependsOn указан недопустимый тип компонента.DependsOn предназначен для выражения зависимости между двумя сессионными компонентами Singleton, а не между Singleton и Stateless.Вам следует изменить SchedulerEJB на Singleton или удалить зависимость.

Если вы решите изменить SchedulerEJB на Singleton, то @DepensOn также не требуется, поскольку (из спецификации EJB 3.1):

Обратите внимание, что если одному синглтону просто нужно вызвать другой синглтон из его метода PostConstruct, то метаданные явного упорядочения не требуютсяВ этом случае первый синглтон просто использовал бы ссылку ejb для вызова целевого синглтона.Там получение ссылки на ejb (либо путем внедрения, либо поиска) не обязательно подразумевает фактическое создание соответствующего экземпляра компонента Singleton.

...