【问题标题】:Number of Active Sessions in TomcatTomcat 中的活动会话数
【发布时间】:2019-06-12 13:53:34
【问题描述】:

我的 web 服务 jar 文件部署在我的 tomcat 服务器中的webapps\nyx\WEB-INF\services 下。现在我正在尝试在 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异常。
有人可以帮我确定上下文属性的值吗?

【问题讨论】:

  • 我查过了。但是这里的问题是当 web 服务部署在 webapps\nyx\WEB-INF\services 目录下时我应该使用什么上下文

标签: java jmx mbeans yaxis tomcat8.5


【解决方案1】:

尝试参考这个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");

【讨论】:

  • 您好,感谢您的回复。我试过这个,但这给了我“java.io.IOException:无法检索 RMIServer 存根:javax.naming.CommunicationException [根异常是”异常。如果我的服务器 ip 是 y31 和端口号 3389,我应该使用的 ip 和端口是什么。
  • 为了以正确的方式执行 jmx,你必须传递一些额外的参数......也许会抛出异常,因为你省略了 -Dcom.sun.management.jmxremote.authenticate=false 或其他一些参数
  • 哦,谢谢。我会检查的。 bdw 在 config.getServletContext() 我找不到方法 getContextPath();
  • 请参阅此stackoverflow.com/questions/35837285/… 以便根据您的需要获取 ServletContext
  • 非常感谢您的帮助。但我还是想不出一个解决办法。
猜你喜欢
  • 2016-11-30
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多