Аннотированный метод @Schedule не вызывается в GlassFish 2.1 и EJB 3

В моем bean-компоненте без гражданства у меня есть следующие строки:

@Schedule(minute="*/2", hour="*")
public void doSomething() {}

Я ожидаю, что этот метод будет вызываться каждые 2 минуты, но когда я его развертываю, ничего не происходит. Кроме того, если я помещу @Schedule в bean-компонент, и ни один клиент не вызовет какие-либо методы этого bean-компонента (экземпляр bean-компонента еще не создан), будет ли контейнер или что-либо еще вызывать этот метод каждые 2 минуты?

Это первый раз, когда я использую аннотацию @Schedule, я был бы очень признателен, если бы кто-нибудь мог дать мне несколько советов по этим вопросам.

С наилучшими пожеланиями,

Джеймс Тран


person Mr.J4mes    schedule 10.08.2011    source источник


Ответы (2)


Вот ссылка на службу таймера из документации по EE 6.

Обратите внимание на соответствующую часть --

Автоматические таймеры создаются контейнером EJB при развертывании корпоративного компонента, содержащего методы, аннотированные аннотациями @Schedule или @Schedules. Корпоративный компонент может иметь несколько методов автоматического тайм-аута, в отличие от программного таймера, который разрешает только один метод, аннотированный аннотацией @Timeout в классе корпоративного компонента.

Вы можете попробовать выполнить автоматическое планирование из ejb-jar.xml вместо использования @Schedule, если это имеет значение. Судя по всему, я не вижу ничего плохого в том, как вы его настроили, кроме, может быть, попытки

@Schedule(minute="0/2", hour="*")

EDIT См. комментарий @bkails ниже. Это, вероятно, ничего не купит вам.

person Kal    schedule 10.08.2011
comment
Для выражения x/y атрибут ограничивается каждым значением y из набора допустимых значений, начиная с момента времени x. [...] Подстановочный знак (*) может использоваться в позиции x и эквивалентен 0. - person Brett Kail; 11.08.2011
comment
Хммм... Я использую Java EE 5 с GlassFish v2.1 в своем приложении, но мне кажется, что аннотация @Schedule является функцией Java EE 6. Является ли это причиной этой проблемы? - person Mr.J4mes; 11.08.2011
comment
@Kal - это значит, что Java EE 5 не является причиной проблемы? Если да, то я действительно понятия не имею, почему это не работает =( - person Mr.J4mes; 11.08.2011
comment
Нет.. Извините, я должен был объяснить лучше. Да .. Использование Jave EE 5 вместо Java EE 6, вероятно, является причиной вашей проблемы. - person Kal; 11.08.2011

Я использовал NetBean 6.7.1 с Java EE 5 и GlassFish v2.1. После того, как я установил NetBean 7.0.1 с Java EE 6 и GlassFish v3.1 и использовал его для развертывания своего приложения, аннотация @Schedule, наконец, заработала должным образом.

person Mr.J4mes    schedule 11.08.2011