Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JBoss AS 7.1 - running schedule using @Schedule annotation

Anyone know how to make @Schedule annotation work on JBoss AS 7?

I know that on Glassfish-3.1.2 it works out-of-box.

I try this:

@ManagedBean
@Stateless(name="ImportStatementSchedule")
public class ImportStatementSchedule implements Serializable{
private Logger _log = Logger.getLogger(this.getClass());

    @Schedule(minute="*")
    public void executeImport(){
        _log.info("Scheduled task started");
    }

}

I expect receive log message every minute, but nothing ;)

I checked these forum threads, but nothing helps :

https://community.jboss.org/message/623574

https://community.jboss.org/message/621893

https://community.jboss.org/message/637567

A have JBoss AS 7.1.1-Final

Maybe I forgot something, please can anyone point me to right way?

UPDATE:

I know that JBoss register my EJB to JNDI :

11:07:05,548 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-6) JNDI bindings for session bean named ImportStatementSchedule in deployment unit deployment "finadv.war" are as follows:

    java:global/finadv/ImportStatementSchedule!finadv.bean.ImportStatementSchedule
    java:app/finadv/ImportStatementSchedule!finadv.bean.ImportStatementSchedule
    java:module/ImportStatementSchedule!finadv.bean.ImportStatementSchedule
    java:global/finadv/ImportStatementSchedule
    java:app/finadv/ImportStatementSchedule
    java:module/ImportStatementSchedule

UPDATE2

It has been solved as mentioned in comments

like image 292
rkosegi Avatar asked May 01 '12 09:05

rkosegi


2 Answers

Timer service is EJB service. ImportStatementSchedule should be a @Stateless or @Singleton session bean. From the EJB 3.1 Specification, Section 18.2:

For automatically created timers, the timeout method may be a method that is annotated with the Schedule annotation. Timers can be created for stateless session beans, singleton session beans, mes- sage-driven beans, and 2.1 entity beans. Timers cannot be created for stateful session beans.

The INFO log statement is misleading. JBoss does not register an EJB. It just uses the same naming scheme as defined by the @ManagedBean annotation (Javadoc):

[..] Managed Bean names must be unique within a Java EE module. For each named Managed Bean, Java EE containers must make available the following entries in JNDI, using the same naming scheme used for EJB components. In the application namespace:

java:app/<module-name>/<bean-name>

In the module namespace of the module containing the Managed Bean:

java:module/<bean-name>

like image 84
kraftan Avatar answered Oct 19 '22 22:10

kraftan


I can add, that if you write

@Schedule(minute="*")

it will only fire at midnight. Because the hour parameter is default: 0.

Try: @Schedule(minute = "/1", hour = "") or something like this. In my case it helped.

like image 31
user1549074 Avatar answered Oct 19 '22 23:10

user1549074