使用JMX时Embedded Jetty中的NullPointerException

时间:2017-01-11 07:45:14

标签: jmx embedded-jetty prometheus

我的Embedded Jetty应用程序中偶尔会出现NullPointerException:

java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.eclipse.jetty.jmx.ObjectMBean.getAttribute(ObjectMBean.java:349)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:647)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678)
        at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1445)
...
Caused by: java.lang.NullPointerException
        at org.eclipse.jetty.server.handler.ContextHandler.isShutdown(ContextHandler.java:682)
        ... 28 more

我已经设置了JMX:

Server server = new Server();
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
MBeanContainer mbContainer = new MBeanContainer(mBeanServer);
server.addBean(mbContainer);

这种情况在服务器启动时随机发生(并非总是如此),只有当我在同一台机器上运行我的Prometheous JMX Exporter时,很可能在Jetty尚未准备好处理连接的阶段连接到JMX服务器。 / p>

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

JMX导出器应该正常处理错误,因此您不必担心JMX端。

查看码头代码,这只是一个同步存取器,所以我不知道如何从中获取NPE。据推测,该对象为空,因此这可能值得提出针对码头的错误。