2011-12-20 3 views
6

У меня проблема с этой настройкой, и я даже не могу просмотреть журналы.@Singleton, @Startup, @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: 
<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>6.0</version> 
    <scope>provided</scope> 
</dependency> 
+0

Можно ли отладить его? Кроме того, у меня были проблемы с использованием ведения общедоступных записей, я закончил использование slf4j 'LoggerFactory.getLogger (SchedulerStartUp.class)' –

+0

ведение журнала работает нормально при развертывании приложения, похоже, что это происходит только при использовании в этом контексте :( –

+0

Можете ли вы на самом деле отладить его? –

ответ

6

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

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

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

+0

Но мне нужно, чтобы это было @Stateless, любое обходное решение? Возможно, мне следует удалить '@DependsOn 'полностью, но будет ли работать мой @EJB? :( –

+0

' @EJB 'не работает, чтобы инициализировать bean-элемент с именем' SchedulerEJB 'выше? –

+0

У меня не было такой ситуации, когда я бы назвал апатрида bean from singleton, но я предполагаю, что удаление @DependsOn должно работать, предполагая, что в других частях кода нет никакой скрытой необходимости, почему SchedulerEJB должен быть инициализирован раньше. Контейнер должен гарантировать, что экземпляр доступен с вашим текущим кодом без каких-либо дополнений. –

Смежные вопросы