Solved

Using timers with EJB3.0 entity beans

Posted on 2006-10-27
2
1,064 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
Comment Utility
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
Comment Utility
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

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

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.
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

744 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now