Works like this:

In components.xml:

  | <?xml version="1.0" encoding="UTF-8"?>
  | <components xmlns="http://jboss.com/products/seam/components";
  |      ...
  |      xmlns:async="http://jboss.com/products/seam/async"; 
  |      ...>
  | 
  |    <async:quartz-dispatcher/>
  | ...
  | 

Startup class:

  | @Startup
  | @Stateful
  | @Scope(ScopeType.APPLICATION)
  | @Name("startupManager")
  | public class StartupManager implements StartupManagerLocal{ // create 
Interface
  | 
  |     @Logger
  |     private Log log;
  | 
  |     @In(create = true)
  |     private ProcessingActionLocal processingAction;
  | 
  |     private QuartzTriggerHandle handle = null;
  | 
  |     @Create
  |     public void create() {
  |             log.info("create(): called");
  |             // init
  |             int delay = 20; // in seconds
  |             long interval = 1000 * delay;
  |             Calendar cal = Calendar.getInstance();
  |             cal.setTime(new Date());
  |             cal.add(Calendar.SECOND, delay);
  |             // create Processing
  |             long processingId = 
processingAction.createProcessing("serverJob");
  |             // schedule job and save handler
  |             this.handle = processingAction.doServerJob(processingId, 
cal.getTime(), interval);
  |             log.info("create(): id: #0", processingId);
  |     }
  |     
  |     public QuartzTriggerHandle getHandle() {
  |             return this.handle ;
  |     }
  | 
  |     @Remove
  |     public void destroy() {
  |     }
  | }
  | 

The ProcessingAction (The ProcessingBean is not shown here):

  | @Stateful
  | @Name("processingAction")
  | public class ProcessingAction implements ProcessingActionLocal { // create 
Interface
  | 
  |     @Logger
  |     private Log log;
  | 
  |     @In
  |     private EntityManager entityManager;
  | 
  |     @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
  |     public long createProcessing(String string) {
  |             // create Processing
  |             ProcessingBean processing = new ProcessingBean();
  |             // managed context
  |             entityManager.persist(processing);
  |             processing.setName("serverJob");
  |             // return id
  |             return processing.getId();
  |     }
  | 
  |     @Asynchronous
  |     @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
  |     public QuartzTriggerHandle doServerJob(long processingId, @Expiration 
Date date, @IntervalDuration Long interval) {
  |             log.info("doServerJob(): called");
  |             // get bean
  |             ProcessingBean processing = 
entityManager.find(ProcessingBean.class, processingId);
  |             // if exists remove
  |             if (processing != null) {
  |                     entityManager.remove(processing);
  |                     log.info("doServerJob(): removed: id: #0", 
processingId);
  |             } else {
  |                     // else stop server job
  |                     try {
  |                             startupManager.getHandle().cancel();
  |                     } catch (Exception e) {
  |                             log.error("", e);
  |                     }
  |                     log.info("doServerJob(): stopped: id: #0", 
processingId);
  |             }
  |             // return new handle
  |             return new QuartzTriggerHandle("serverJob");
  |     }
  |     
  |     @Remove
  |     public void destroy() {
  |     }
  | }
  | 

Let me know if it worked out...

Greetz GHad

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4076537#4076537

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4076537
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to