Solved

Using timers with EJB3.0 entity beans

Posted on 2006-10-27
2
1,072 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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

Ransomware: The New Cyber Threat & How to Stop It

This infographic explains ransomware, type of malware that blocks access to your files or your systems and holds them hostage until a ransom is paid. It also examines the different types of ransomware and explains what you can do to thwart this sinister online threat.  

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
websphere tutorial sites? 6 202
I have a Lync 2013 on a windows 2012 server. 8 125
VFP9 Server Can't lock file 22 133
TCP Error code:Unable to connect to a banking site 4 78
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…
Meet the world's only “Transparent Cloud™” from Superb Internet Corporation. Now, you can experience firsthand a cloud platform that consistently outperforms Amazon Web Services (AWS), IBM’s Softlayer, and Microsoft’s Azure when it comes to CPU and …

731 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