Количество активных сессий в Tomcat - PullRequest
0 голосов
/ 18 января 2019

У меня есть файл jar веб-служб, развернутый под webapps\nyx\WEB-INF\services на моем сервере Tomcat. Теперь я пытаюсь получить не активных сессий, используя приведенный ниже код внутри метода веб-службы.

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

Но это дает мне Экземпляр не найден Исключение.
Может кто-нибудь помочь мне со значением атрибута context?

1 Ответ

0 голосов
/ 18 января 2019

Попробуйте обратиться к этому ТАКому вопросу , читая ваш код, первое, что я думаю, это попытаться использовать 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");
}

EDIT

Если вам нужно получить номер сеанса локально ваш код должен быть в порядке, попробуйте с вашим кодом, но получите контекст во время выполнения. Переопределите метод 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");
...