首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QuickFIXJ MBeanServerInvocationHandler.newProxyInstance参数类型错误

QuickFIXJ MBeanServerInvocationHandler.newProxyInstance参数类型错误
EN

Stack Overflow用户
提问于 2018-01-08 11:45:32
回答 1查看 174关注 0票数 1

在为QFJ构建JMX客户端服务时,我在使用不同的MBean接口时遇到错误。我需要调用ConnectorAdminMBean中的方法,但它不能绑定到SessionAdminMBean的方法。抛出的错误:

代码语言:javascript
复制
newProxyInstance() in MBeanServerInvocationHandler cannot be applied to: 
interfaceClass: (Expected) java.lang.Class<T> | (Actual) ConnectorAdminMBean.class

方法:

代码语言:javascript
复制
public static <T> T newProxyInstance(MBeanServerConnection connection,
                                         ObjectName objectName,
                                         Class<T> interfaceClass,
                                         boolean notificationBroadcaster) {
        return JMX.newMBeanProxy(connection, objectName, interfaceClass, notificationBroadcaster);
    }

这已经证实是有效的:

代码语言:javascript
复制
ObjectName mBeanBLBG = new ObjectName("org.quickfixj:type=Session,beginString=FIX.4.2,senderCompID=SCB,targetCompID=BLBG");
SessionAdminMBean mBeanBLBGProxy = MBeanServerInvocationHandler.newProxyInstance(jmxConnectionInstance.getmBeanServerConnection(), mBeanBLBG, SessionAdminMBean.class, true);

然而,当我尝试这样做时,它抛出了一个错误,即第三个参数是错误的:

代码语言:javascript
复制
ObjectName mBeanConnector = new ObjectName("org.quickfixj:type=Connector,role=Initiator,id=1");
SessionAdminMBean mBeanConnectorProxy = MBeanServerInvocationHandler.newProxyInstance(jmxConnectionInstance.getmBeanServerConnection(), mBeanConnector, ConnectorAdminMBean.class, true);

我已经查看了各自的接口,但没有看到任何区别。

代码语言:javascript
复制
package org.quickfixj.jmx.mbean.session;
import java.io.IOException;
import javax.management.ObjectName;
import quickfix.SessionNotFound;
public interface SessionAdminMBean {
    String getBeginString();
    String getTargetCompID();
    String getTargetSubID();
    ...

对比:

代码语言:javascript
复制
package org.quickfixj.jmx.mbean.connector;
import java.io.IOException;
import javax.management.openmbean.TabularData;
public interface ConnectorAdminMBean {
    String getRole() throws IOException;
    void stop(boolean var1) throws IOException;
    void stop() throws IOException;
    TabularData getSessions() throws IOException;
    String getHostName() throws IOException;
    int getQueueSize();
}

请说明接口ConnectorAdminMbean无法绑定到Class<\T>的原因。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-26 10:33:36

已通过将参数类与MBean代理类匹配来解决此问题,即,通过更改:

代码语言:javascript
复制
SessionAdminMBean mBeanConnectorProxy = MBeanServerInvocationHandler.newProxyInstance(jmxConnectionInstance.getmBeanServerConnection(), mBeanConnector, ConnectorAdminMBean.class, true);

代码语言:javascript
复制
ConnectorAdminMBean mBeanConnectorProxy = MBeanServerInvocationHandler.newProxyInstance(jmxConnectionInstance.getmBeanServerConnection(), mBeanConnector, ConnectorAdminMBean.class, true);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48143968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档