Hallo, vor kurzem habe ich angefangen, an einer JMX-Bean-Implementierung zu arbeiten.java.io.NotSerializableException ausgelöst, wenn JMX Benachrichtigungen auslöst
Ich veröffentliche dann die unten Bean, führen Sie JConsole, verbinden mit der Bohne, für die Benachrichtigung registrieren. Allerdings, wenn die Meldung bekomme ich folgende Fehler gesendet wird:
13. April 2012 17.31.26 ClientNotifForwarder NotifFetcher.fetchOneNotif ACHTUNG: Es konnte keine Meldung deserialisieren: java.io.NotSerializableException: com. * .jmx.TaskMergeMBean
Jede Hilfe wird sehr willkommen, ich habe den größten Teil des Tages damit verbracht, diese ein, um herauszufinden.
Danke, 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);
}
}
Wird 'TaskMergeMBean'' serializable' implementiert? –