3

webapps\nyx\WEB-INF\services在我的 tomcat 服务器下部署了我的 web 服务 jar 文件。现在我正在尝试在 Web 服务方法中使用以下代码来获取任何活动会话。

MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName objectName = new ObjectName("Catalina:type=Manager,context=/nyx/services,host=localhost");
Object activeSessions =mBeanServer.getAttribute(objectName,"activeSessions");

但这给了我Instance not found异常。
有人可以帮我确定上下文属性的值吗?

4

1 回答 1

0

尝试参考this SO question,阅读您的代码我认为首先尝试使用JMX(Java Management eXtension)

像这样的东西:

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi");
try(JMXConnector jmxc = JMXConnectorFactory.connect(url)) {
  MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
  ObjectName mbeanName = new ObjectName("Catalina:type=Manager,context=/,host=localhost");
  Object value = mbsc.getAttribute(mbeanName, "activeSessions");
}

编辑

如果您需要在本地检索会话数,您的代码应该没问题,请尝试使用您的代码,但在运行时获取上下文。重写 init 方法:

@Override
public void init(final ServletConfig config) throws ServletException {
    context = config.getServletContext().getContextPath();
}

然后将其作为 ObjectName 参数传递:

ObjectName objectName = new ObjectName("Catalina:type=Manager,context="+context+",host=localhost");
于 2019-01-18T10:26:05.080 回答