This week's book giveaway is in the Servlets forum.
We're giving away four copies of Murach's Java Servlets and JSP and have Joel Murach on-line!
See this thread for details.
The moose likes EJB and other Java EE Technologies and the fly likes ejb as abstract ? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Murach's Java Servlets and JSP this week in the Servlets forum!
JavaRanch » Java Forums » Java » EJB and other Java EE Technologies
Bookmark "ejb as abstract ?" Watch "ejb as abstract ?" New topic
Author

ejb as abstract ?

Ayub ali khan
Ranch Hand

Joined: Oct 20, 2005
Posts: 380
    
    2
hi,

Can I declare an ejb as abstract ?

Also I am trying to create a utility which will allow to create multiple timers and schedule their programs.

Can this be achieved using EJB Timer ?
will making ejbTimeout as abstract, allow another ejb to implement the functionality of ejbTimeout and put their scheduling logic there ?


Here is the code for EJB Timer
============================================

package ejbs;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;

import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.ejb.TimedObject;
import javax.ejb.Timer;
import javax.ejb.TimerHandle;
import javax.ejb.TimerService;

/**
* Bean implementation class for Enterprise Bean: MyTimer
*/
public class MyTimerBean implements javax.ejb.SessionBean,TimedObject {
private SessionContext mySessionCtx;
private TimerHandle timerHandle = null;
private String name;
private int repeatInterval;

/**
* getSessionContext
*/
public SessionContext getSessionContext() {
return mySessionCtx;
}
/**
* setSessionContext
*/
public void setSessionContext(SessionContext ctx) {
mySessionCtx = ctx;
}
/**
* ejbCreate
*/
public void ejbCreate() throws CreateException {
}
/**
* ejbActivate
*/
public void ejbActivate() {
}
/**
* ejbPassivate
*/
public void ejbPassivate() {
}
/**
* ejbRemove
*/
public void ejbRemove() {
}


public void initializeTimer(Date firstDate,long timeout,String timerName)
{
try {
// Create Your Timer
TimerService ts = mySessionCtx.getTimerService();
Timer timer =
ts.createTimer(firstDate, timeout, timerName);
this.name=timerName;
repeatInterval=new Long(timeout).intValue();
System.out.println("Timer created at " + new Date(System.currentTimeMillis()) +" with a timeout: " + timeout +
" and with info: " + timerName);

// Store the TimerHandle, which is seriablizable
// and which can be used
// to retrieve the timer values whenever required later.
// Class-level attribute:
timerHandle = timer.getHandle();

} catch (Exception e) {

System.out.println("Exception after create timer : "+
e.toString());

}
return;

}
public void ejbTimeout(Timer timer)
{
//Implement Your Business Logic Here
System.out.println("Hello World from: "+timer);

System.out.println("ejbTimeout() called at: " +
new Date(System.currentTimeMillis()) +
" with info:");
System.out.println("Timer Info from ejbTimeout: "+timer.getInfo());

return;
}

public void cancelTimer(String timerName)
{
try
{
TimerService ts = mySessionCtx.getTimerService();
Collection timers = ts.getTimers();
Iterator it = timers.iterator();
while (it.hasNext())
{
Timer myTimer = (Timer) it.next();
if ((myTimer.getInfo().equals(timerName))) {
myTimer.cancel();
System.out.println("Successfully Cancelled " +
timerName);

}
}
}
catch (Exception e) {

System.out.println("Exception after cancelling timer : "+
e.toString());

}
return;
}

public void getTimerInfo()
{
if (timerHandle != null) {
Timer timer = timerHandle.getTimer();
// Get Timer Infomation
System.out.println("Timer Info : " +timer.getInfo());


}

}
public Date getCustomTimerInfo(){
Timer timer=timerHandle.getTimer();
System.out.println("Returning custom time from bean ");
return timer.getNextTimeout();
}
public String getName(){
System.out.println("REturning name from Time bean "+name);
return name;
}
public int getRepeatInterval(){
System.out.println("REturning repeat Interval from Time bean : "+repeatInterval);
return repeatInterval;
}
}

Thanks and Regards
Ayub.


SCEA part I,TOGAF Foundation
Jeanne Boyarsky
internet detective
Marshal

Joined: May 26, 2003
Posts: 30057
    
149

Originally posted by Ayub ali khan:
Can I declare an ejb as abstract ?

Yes. Just be sure to included the concrete classes (rather than the abstract superclass) is your deployment descriptor. Then the superclass is just a class, not an EJB.


[Blog] [JavaRanch FAQ] [How To Ask Questions The Smart Way] [Book Promos]
Blogging on Certs: SCEA Part 1, Part 2 & 3, Core Spring 3, OCAJP, OCPJP beta, TOGAF part 1 and part 2
Mark Spritzler
ranger
Sheriff

Joined: Feb 05, 2001
Posts: 17249
    
    6

Originally posted by Jeanne Boyarsky:

Yes. Just be sure to included the concrete classes (rather than the abstract superclass) is your deployment descriptor. Then the superclass is just a class, not an EJB.


You do know, that you changed your answer from yes to no in just two sentences.

Yes, because you can declare the class as abstract, but at that point it ceases to be an EJB, so then no an EJB cannot be abstract.

Mark


Perfect World Programming, LLC - Two Laptop Bag - Tube Organizer
How to Ask Questions the Smart Way FAQ
Ayub ali khan
Ranch Hand

Joined: Oct 20, 2005
Posts: 380
    
    2
Thank you Jeanne and Mark.

The two different views to this question has answered my question.

Best Regards
Ayub
Jeanne Boyarsky
internet detective
Marshal

Joined: May 26, 2003
Posts: 30057
    
149

Originally posted by Mark Spritzler:
You do know, that you changed your answer from yes to no in just two sentences.

Yes, because you can declare the class as abstract, but at that point it ceases to be an EJB, so then no an EJB cannot be abstract.

I hadn't realized that at the time or I would have started with "no." I think I arrived at the answer as I was typing
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: ejb as abstract ?
 
Similar Threads
Need to restart timer with different time
Name comp/ejb not found
controlling ejbTimeout EJB 2.1
EJB Single Timer Bean Implementation
EJB Timer issue