Hi all,
To get acquainted with ModelMBean and persistence, I have
written
A very small ModelMBean that implements the PersistenceInterface, and I
have
Written dummy load() and store() to see when those two methods are
called.
My assumption is that load() was called when the MBean was deployed..
I built a sar and dropped into the deploy directory.
However, as I could see from the logs, the load() method is never
called..
Anyone can help me out?
Here is the code of my ModelMbean, along with its descriptor..
/*
* Created on Jun 25, 2003
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package com.marco.config;
import javax.management.*;
import java.util.Date;
import java.util.Vector;
import java.util.Set;
import java.util.Hashtable;
import java.util.Properties;
import javax.management.timer.*;
import java.lang.reflect.*;
import org.jboss.mx.util.*;
import javax.management.modelmbean.*;
/**
* @author mistroni
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class MyTimer extends org.jboss.system.ServiceMBeanSupport
implements ModelMBean
{
private MBeanServer server;
private ObjectName timer;
private int timeout;
private int repetitions;
protected ModelMBeanInfo modelMBeanInfo = null;
protected Hashtable attributes = new Hashtable();
protected Hashtable notifications = new Hashtable();
protected Hashtable constructors = new Hashtable();
protected Hashtable operations = new Hashtable();
protected String description = "Description of MBean";
public MyTimer() {
System.err.println("MyTimerService MBean created...");
try {
addMBeanInfoData();
} catch(Exception e) {
System.err.println("Got exception in intializing
MyTimer\n" + e.toString());
}
}
/** Persistence Interface */
public void load() throws MBeanException,
InstanceNotFoundException {
System.err.println("************ HERE WE SHOULD LOAD MBEAN
DATA!");
}
public void store() throws
MBeanException,InstanceNotFoundException {
System.err.println("************ HERE WE SHOULD STORE MBEAN
DATA!");
}
/** ModelMBean interface */
public void setModelMBeanInfo(ModelMBeanInfo inModelMBeanInfo)
throws MBeanException {
modelMBeanInfo = inModelMBeanInfo;
}
public void setManagedResource(Object mr, String mr_type) throws
MBeanException {}
public ModelMBeanInfo getModelMBeanInfo() {
buildDynamicMBeanInfo();
return modelMBeanInfo;
}
// ModelMBeanBroadcaster interface
public void addNotificationListener(NotificationListener l,
NotificationFilter f,
Object hback) {}
public void removeNotificationListener(NotificationListener l)
throws ListenerNotFoundException {}
public void
addAttributeChangeNotificationListener(NotificationListener l,
String
attributeName,
Object hback)
throws MBeanException {}
public void
removeAttributeChangeNotificationListener(NotificationListener l,
String
attributeName) throws MBeanException,
ListenerNotFoundException {}
public void sendNotification(String message) throws
MBeanException {}
// public void sendNotification(Notification notif) throws
MBeanException {}
public void
sendAttributeChangeNotification(AttributeChangeNotification notif)
throws MBeanException {}
public void sendAttributeChangeNotification(Attribute oldValue,
Attribute newValue) throws MBeanException {}
public MBeanNotificationInfo[] getNotificationInfo() {
return new MBeanNotificationInfo[]{};
}
// Here we add informations to be used in MBeanInfo.
// we have to add all operations, attributes and notifications
// that our MBeab will have.
private void addMBeanInfoData() {
System.err.println("Adding mbeaninfo data..");
// Adding operation addNotification
Descriptor d = new DescriptorSupport();
d.setField("name","testPrint");
d.setField("descriptorType", "operation");
d.setField("role", "operation");
addMBeanOperation("testPrint", null,
null, null,
"testPrint", "void",
MBeanOperationInfo.ACTION,
d);
}
// Code below is generated automatically by MBeanGenerator.
// You may need to modify it according to your needs :-)
public Object invoke(String method, Object args[],
String types[]) throws
MBeanException, ReflectionException {
try {
Class c = this.getClass();
Class sig[] = null;
if(types != null) {
sig = new Class[types.length];
for(int i=0; i < types.length; i++) {
sig[i] =
Class.forName(types[i]);
}
}
Method m = c.getDeclaredMethod(method, sig);
Object returnObject = (Object)m.invoke(this,
args);
return returnObject;
} catch(Exception e) {
System.err.println("Error in
DynamicMBeanSupport.invoke():\n" + e.toString());
return null;
}
}
public Object getAttribute(String name) throws MBeanException,
ReflectionException {
try {
Class c = this.getClass();
Method m = c.getDeclaredMethod("get" + name,
null);
return m.invoke((Object)this, null);
} catch(Exception e) {
System.err.println("Exception in
DynamicMBeanSupport.getAttribute()\n" + e.toString());
return null;
}
}
public void setAttribute(Attribute attribute) throws
MBeanException, AttributeNotFoundException,
ReflectionException, InvalidAttributeValueException {
String fname = attribute.getName();
Object fvalue = attribute.getValue();
try {
Class c = this.getClass();
String type = getType(fname, false, true);
if(type == null)
throw new
AttributeNotFoundException(fname);
Class[] types = {Class.forName(type)};
Method m = c.getDeclaredMethod("set" + fname,
types);
Object[] args = {fvalue};
m.invoke((Object)this, args);
} catch(AttributeNotFoundException e) {
System.err.println("Exception in
DynamicMBeanSupport.setAttribute()\n" + e.toString());
throw e;
} catch(Exception e) {
System.err.println("Exception2 in
DynamicMBeanSupport.setAttribute()\n" + e.toString());
}
}
public AttributeList setAttributes(AttributeList attributes) {
Attribute[] atts = (Attribute[])attributes.toArray();
AttributeList list = new AttributeList();
for(int i=0; i < atts.length; i++) {
Attribute a = atts[i];
try {
this.setAttribute(a);
} catch(Exception e) {
System.err.println("Exception in
DynamicMBeanSupport.setAttributes()\n" + e.toString());
}
} // end for
return attributes;
}
public AttributeList getAttributes(String[] names) {
AttributeList list = new AttributeList();
for(int i=0; i < names.length; i++) {
try {
list.add(new Attribute(names[i],
this.getAttribute(names[i])));
} catch(Exception e) {
System.err.println("Exception in
DynamicMBeanSupport.getAttributes()\n" + e.toString());
}
}
return list;
}
protected void addMBeanOperation(String name, String[]
paramTypes,
String[] paramNames, String[]
paramDescs,
String desc, String rtype, int
type,Descriptor d) {
MBeanParameterInfo[] params = null;
if(paramTypes != null) {
params = new
MBeanParameterInfo[paramTypes.length];
for(int i=0; i < paramTypes.length; i++) {
params[i] = new
MBeanParameterInfo(paramNames[i], paramTypes[i], paramDescs[i]);
}
}
operations.put(name, new ModelMBeanOperationInfo(name,
desc, params, rtype, type,d));
}
protected void addMBeanAttribute(String fname, String ftype,
boolean read, boolean write,
boolean is,
String desc, Descriptor d) {
attributes.put(fname, new
ModelMBeanAttributeInfo(fname,ftype, desc, read, write, is,d));
}
protected void addMBeanNotification(String type, String name,
String description,Descriptor d) {
notifications.put(name, new
ModelMBeanNotificationInfo(new String[] {type}, name, description,d));
}
protected void addMBeanConstructor(Constructor c, String
desc,Descriptor d) {
this.constructors.put(c, new
ModelMBeanConstructorInfo(desc, c,d));
}
private void copyInto(Object[] array, Hashtable table) {
Vector temp = new Vector(table.values());
temp.copyInto(array);
}
private String getType(String attName, boolean read, boolean
write) {
boolean allowed = true;
if(attributes.containsKey(attName)) {
MBeanAttributeInfo temp =
(MBeanAttributeInfo)attributes.get(attName);
if(read) {
if(!temp.isReadable())
allowed = false;
}
if(write) {
if(!temp.isWritable())
allowed = false;
}
if(!allowed)
return null;
else
return temp.getType();
} else
return null;
}
private void buildDynamicMBeanInfo() {
try {
ModelMBeanOperationInfo[] ops = new
ModelMBeanOperationInfo[operations.size()];
copyInto(ops, operations);
ModelMBeanAttributeInfo[] atts = new
ModelMBeanAttributeInfo[attributes.size()];
copyInto(atts, attributes);
ModelMBeanConstructorInfo[] cons = new
ModelMBeanConstructorInfo[constructors.size()];
copyInto(cons, constructors);
ModelMBeanNotificationInfo[] notifs = new
ModelMBeanNotificationInfo[notifications.size()];
copyInto(notifs, notifications);
Descriptor d = new DescriptorSupport();
d.setField("name", "MyTimer");
d.setField("descriptorType", "mbean");
d.setField("persistPolicy","OnTimer");
d.setField("persistPeriod", "1000");
modelMBeanInfo = new
ModelMBeanInfoSupport(this.getClass().getName(), description, atts,
cons,
ops,null,d);
} catch(Exception e) {
System.err.println("Exception
inbuildling modelmbean!");
e.printStackTrace();
}
}
public MBeanInfo getMBeanInfo() {
buildDynamicMBeanInfo();
return (MBeanInfo)modelMBeanInfo;
}
/**
* @return the name of this MBean
*/
public String getName() {
return "MyTimer";
}
public void testPrint() {
System.err.println("**** Here We Print!*****");
}
public int getState() {
return super.getState();
}
public String getStateString() {
return super.getStateString();
}
}
And here is the descriptor.....
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="com.marco.config.MyTimer"
name="WLSPortal:service=TimeBomb">
<description>sample for jboss xmbean.dtd</description>
<descriptors>
<persistence persistPolicy="OnTimer"
persistPeriod="2"/>
<state-action-on-update value="RESTART"/>
<descriptor name='testdescriptor' value='testvalue'/>
</descriptors>
<class>com.marco.config.MyTimer</class>
<operation impact="ACTION">
<description>testPrint</description>
<name>testPrint</name>
</operation>
</mbean>
</server>
thanx in advance and regards
marco
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-user