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

Reply via email to