我已经在我的应用程序服务器中使用JMX通过创建MXBean接口以及实现它的类来公开远程管理方法.此界面中包含用于在我的服务器上设置属性以及获取属性的当前值的操作.例如,采用以下方法:
public interface WordManagerMXBean {
public void addWord(String word);
public WordsObject getWords();
public void removeWord(String word);
}
Run Code Online (Sandbox Code Playgroud)
WordsObject是一个自定义的可序列化类,用于检索有关服务器状态的数据.然后我还有一个实现上述接口的WordManager类.然后我创建一个JMX代理来管理我的资源:
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName wordManagerName = new ObjectName("com.example:type=WordManager");
mbs.registerMBean(wordManager, wordManagerName);
Run Code Online (Sandbox Code Playgroud)
我创建了一个调用这些方法的客户端,这可以按预期工作.但是,我想通过添加可以发送回客户端的用户定义的异常来扩展此当前配置.所以我想将我的界面更改为:
public interface WordManagerMXBean {
public void addWord(String word) throws WordAlreadyExistsException;
public WordsObject getWords();
public void removeWord(String word);
}
Run Code Online (Sandbox Code Playgroud)
我的WordAlreadyExistsException如下所示:
public class WordAlreadyExistsException extends Exception implements Serializable {
private static final long serialVersionUID = -9095552123119275304L;
public WordAlreadyExistsException() {
super();
}
}
Run Code Online (Sandbox Code Playgroud)
当我在客户端调用addWord()方法时,如果单词已经存在,我想返回一个WordAlreadyExistsException.但是,当我这样做时,我收到如下错误:
java.rmi.UnmarshalException: Error unmarshaling return; nested exception is:
java.lang.ClassNotFoundException: com.example.WordAlreadyExistsException …Run Code Online (Sandbox Code Playgroud)