Solved

Using timers with EJB3.0 entity beans

Posted on 2006-10-27
2
1,070 Views
Last Modified: 2008-03-17
I am attempting to use TimerService with an entity bean in an EJB3.0 application.  I have spent a couple of days looking for a way to get the EntityContext so that I can call EntityContext.getTimerService().  The problem is that EJB3.0 entity beans annotated with @Entity don't support @Resource injection.  I have tried implementing the setEntityContext() method but, given that I am not implementing javax.ejb.EntityBean, that unsuprisingly didn't work.  How do I get the EntityContext from an entity bean annotated with @Entity?  Is there a different way to get the TimerService?  My code follows:


@Entity
@Table(name = "periodic_script")
public class PeriodicScript {

    private static final long serialVersionUID = 1;

    // Entity bean properties
        .
        .
        .

    private EntityContext ctx;
      
    public void setEntityContext(EntityContext ec) {
          this.ctx = ec;
    }
   
        .
        .
        .

    @PostPersist
    public void scheduleScriptExecution() {
      ctx.getTimerService().createTimer(Calendar.getInstance().getTime(), getPeriod() * 1000, getId());
    }

    @Timeout
    public void executeScript(Timer timer) {
        // logic to execute when timeout occurs
            .
            .
            .
    }
      
    @PreRemove
    public void removeTimer() {
      for (Object timerObject : ctx.getTimerService().getTimers()) {
          Timer timer = (Timer) timerObject;
          if (timer.getInfo().equals(getId())) {
            timer.cancel();
          }
      }
    }
      
        .
        .
        .

}
0
Comment
Question by:bbkeppler
2 Comments
 
LVL 19

Accepted Solution

by:
ramazanyich earned 500 total points
ID: 17854172
On page 482 of EJB3 specification:
"Timers can be created for stateless session beans, message-driven beans, and 2.1 entity beans.
Timers cannot be created for stateful session beans[94] or EJB 3.0 entities."

So you can't use timer in class annotted by @Entity
0
 

Author Comment

by:bbkeppler
ID: 17857953
Thanks to ramazanyich for that answer.  I had perused the EJB 3.0 spec looking for the answer, but apparently I passed right over the relavent sentence.
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Convert websphere application server default chained Certificates from 1024 to 2048 keysize or higher size and also you can change signatureAlgorithm . Please make sure Websphere Application Server fixpack 7.0.0.23 or Above. The following steps a…
ADCs have gained traction within the last decade, largely due to increased demand for legacy load balancing appliances to handle more advanced application delivery requirements and improve application performance.
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

809 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question