MBean 操作的正确异常处理策略是什么?其中一些操作可能会失败(例如删除未连接的用户)并且应该报告异常,但我不知道我的异常如何渗透到 JMX 层。我最好的想法是 C 风格的返回码。
最佳答案
这就是 javax.management.MBeanException 的意图,它被声明为从 MBeanServerConnection.invoke 抛出。引用 JavaDoc 中的内容:
Represents "user defined" exceptions thrown by MBean methods in the agent. It "wraps" the actual "user defined" exception thrown.
因此,与其返回神秘的整数代码(或者 BigDecimal,如果越大越好;)),只需捕获“业务异常”,使用业务异常创建一个新的 MBeanException 并将其抛出。如果您的业务异常是可序列化的并且存在于调用者的类路径中,则调用者应该能够解开 JMX 异常并获取业务异常。
如果这些假设中的任何一个不成立,只需根据业务异常类名称和消息创建一条消息,并从新的异常(以便您获得堆栈跟踪)和新的错误消息创建 MBeanException。
关于java - 通过mbean操作抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12359151/