JMX Timer
nort Aug 18, 2003 6:23 AMHi,
I am trying to implement a Timer-service which invokes an EJB workflow. This MBean has to be independent from the running container. So I dont want to use the Jboss packeges, only the JMX. I am able to deploy and install the MBean, but I get no notification. Also the available examples from web are not running. Has someone an idea? I am using jboss 3.2.1
Thank you,
Juraj
This is the MBean interface, which I want to use:
public interface DPESAPSynchServiceMBean extends TimerMBean {
public String getDesc();
public void setPeriod(Integer period);
public Integer getPeriod();
public void start();
public void stop();
// public Integer addNotification(String type, String message, Object userData, Date date);
}
And this is the implementing bean:
public class DPESAPSynchService extends Timer implements DPESAPSynchServiceMBean,
NotificationListener{
private MBeanServer lserver;
public DPESAPSynchService(){
super();
System.out.println("starting Constructor");
lserver = (MBeanServer) MBeanServerFactory.findMBeanServer(null).get(0);
System.out.println("mbeanserver: "+lserver);
}
.....
public synchronized void start(){
System.out.println("starting DPESAPSynchService");
try{
Set lBeans = lserver.queryMBeans(new ObjectName("IKServices","service","DPESAPSynchService"),null);
if(lBeans.isEmpty()){
System.out.println("lbeans are empty: "+lBeans);
}else{
System.out.println("lbeans are not empty: "+lBeans.size());
ObjectInstance lTimer = (ObjectInstance) lBeans.iterator().next();
System.out.println("objectinstance timer: "+lTimer);
lserver.addNotificationListener(
lTimer.getObjectName(),
//new DPESAPSynchNotificationListener(),
this,
null,
null
);
System.out.println("listener registered");
System.out.println("object: "+lTimer.getObjectName());
System.out.println("object: "+lTimer.getClass());
Date lNext = new Date(new Date().getTime() + Timer.ONE_MINUTE);
System.out.println("will call listener at "+lNext);
Integer lOneMinuteTimer = (Integer) lserver.invoke(
lTimer.getObjectName(),
"addNotification",
new Object[]{
"IDoNotKnowWhatTypeIs",
"I call you with this timer",
null,
lNext,
},
new String[]{
"".getClass().getName(),
"".getClass().getName(),
"java.lang.Object",
Date.class.getName(),
}
);
System.out.println("return from add: "+lOneMinuteTimer);
}
}catch(MalformedObjectNameException e){
System.out.println("Error: "+e);
}catch(InstanceNotFoundException e){
System.out.println("Error: "+e);
}catch(ReflectionException e){
System.out.println("Error: "+e);
}catch(MBeanException e){
System.out.println("Error: "+e);
}
}
public Integer addNotification(String type, String message, Object userData, Date date) {
Integer i = super.addNotification(type, message, userData, date);
System.out.println("running addNotification in service");
System.out.println(type);
System.out.println(message);
System.out.println(userData);
System.out.println(date);
return i;
}
}
This is my configuration entry in my SAR file: