Click here to Skip to main content
14,640,679 members
Rate this:
Please Sign up or sign in to vote.
See more:
Hello recently I started working on a JMX bean implementation.

I then publish the below bean, run JConsole, connect to the bean, register for notification. However when the notification is sent i get the following error:

Apr 13, 2012 5:31:26 PM ClientNotifForwarder NotifFetcher.fetchOneNotif
WARNING: Failed to deserialize a notification: java.io.NotSerializableException: com.***.jmx.TaskMBean


Any help will be most welcome, I've spent the better part of a day trying to figure this one out.

Thanks,
Jonathan
public class TaskMBean extends NotificationBroadcasterSupport implements DynamicMBean {

  private final TaskStateChangedEventListener taskChangedListener;

  public TaskMBean (DriverIf driver) {
    taskChangedListener= new TaskStateChangedEventListener (this);
    driver.registerMergeTaskStateChangedListener(mergeTaskChangedListener);
  }
  @Override
  public MBeanNotificationInfo[] getNotificationInfo() {
    String[] types = new String[] { AttributeChangeNotification.ATTRIBUTE_CHANGE };
    String name = AttributeChangeNotification.class.getName();
    String description = "An attribute of this MBean has changed";
    MBeanNotificationInfo info = new MBeanNotificationInfo(types, name,description);
    return new MBeanNotificationInfo[] { info };
  }

  @Override
  public Object getAttribute(String attribute) throws AttributeNotFoundException,          MBeanException,
      ReflectionException {
    // TODO Auto-generated method stub
    return null;
  }

  @Override
  public void setAttribute(Attribute attribute) throws AttributeNotFoundException,
      InvalidAttributeValueException, MBeanException, ReflectionException {
    // TODO Auto-generated method stub

  }

  @Override
  public AttributeList getAttributes(String[] attributes) {
    // TODO Auto-generated method stub
    return null;
  }

  @Override
  public AttributeList setAttributes(AttributeList attributes) {
    // TODO Auto-generated method stub
    return null;
  }

  @Override
  public Object invoke(String actionName, Object[] params, String[] signature)
      throws MBeanException, ReflectionException {
    // TODO Auto-generated method stub
    return null;
  }

  @Override
  public MBeanInfo getMBeanInfo() {
    MBeanNotificationInfo haltInfo =
        new MBeanNotificationInfo(
            new String[] { "NOTIFICATION_TYPE_MERGE_STATE_CHANGE" },
            Notification.class.getName(), "server halt on fatal error");
    MBeanNotificationInfo[] notifications = new MBeanNotificationInfo[] { haltInfo };
    return new OpenMBeanInfoSupport(XhiveMergeMBean.class.getName(), "", null, null, null,
        notifications);
  }
}

public class TaskStateChangedEventListener implements Serializable {

  static final String NOTIFICATION_TYPE_MERGE_STATE_CHANGE = "com.xhive.lucene.merge";
  private final NotificationBroadcasterSupport broadcaster;
  private int notificationSequence = 1;

  public TaskStateChangedEventListener (NotificationBroadcasterSupport broadcaster) {
    this.broadcaster = broadcaster;
  }

  @Override
  public void notify(Object source) {
    Notification n =
        new AttributeChangeNotification(this, notificationSequence++,    System.currentTimeMillis(), "", "", "int", 1, 2);
    broadcaster.sendNotification(n);
  }
}
Posted
Updated 13-Apr-12 15:32pm
v2
Comments
Johnnei 14-Apr-12 5:38am
   
Not sure if this will work but let the TaskMBean class implement java.io.Serialisble

1 solution

Rate this:
Please Sign up or sign in to vote.

Solution 1

   

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month



CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100