powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Увидеть текущие подключения к приложению, равернутому в WSAS
11 сообщений из 11, страница 1 из 1
Увидеть текущие подключения к приложению, равернутому в WSAS
    #38914839
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте всем!

Обстановка: Win Server 2008, WSAS 7.0.
На сервере приложений развернуто EAR-приложение. Можно ли в консоли администратора WSAS ( http://IP:9060/admin) увидеть ip-адреса удаленных машин, с которых в текущий момент выполняется работа с приложением? Есть ли другая возможность вычислить IP-адреса машин, работающих в текущий момент с приложением (сервером WSAS)?

Спасибо
С уважением, Семен Попов
...
Рейтинг: 0 / 0
Увидеть текущие подключения к приложению, равернутому в WSAS
    #38914991
Semen Popov,

Из не-вебсферовских способов, но требующих доступа в ОС: netstat -an | findstr ":81 "
...
Рейтинг: 0 / 0
Увидеть текущие подключения к приложению, равернутому в WSAS
    #38914996
Дополнение: вместо ":81 " должен быть номер порта, по которому ходят клиенты.
...
Рейтинг: 0 / 0
Увидеть текущие подключения к приложению, равернутому в WSAS
    #38915234
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Хабаров, именно таким способом и пользуемся. А средствами WSAS как-то можно?
...
Рейтинг: 0 / 0
Увидеть текущие подключения к приложению, равернутому в WSAS
    #38915434
Semen Popov,

Конечная цель какая?

Первое, что приходит в голову - это логгирование.
В таком случае либо:
- включать NCSA-лог на уровне WAS (Application servers > XXXXX > NCSA access and HTTP error logging)
- (правильнее) ставить на фронт-энд HTTP-сервер (напр. Apache) c WAS-плагином и вести логи средствами HTTP-сервера.

Там же (Apache HTTP Server, mod_status) можно будет увидеть список активных соединений. Пример: Apache Server Status for apache.org

Если цель другая - желательно уточнить.
Статистику можно увидеть во встроенном "Tivoli Performance Viewer", но вот IP-адресов я там не встречал.
...
Рейтинг: 0 / 0
Увидеть текущие подключения к приложению, равернутому в WSAS
    #38915882
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Хабаров, спасибо. Цель только в том, чтобы перед обновлением приложения предупредить текущих пользователей о начале работ. Если узнаем IP, то далее уже дело вторичное. С командой netstat заметили нехорошую ситуацию. Если пользователь нажал кнопку "Выход", предусмотренную в приложении, но не закрыл браузер, то netstat все равно показывает соединение с этой машины. Может по открытым сессиям как-то отследить?
...
Рейтинг: 0 / 0
Увидеть текущие подключения к приложению, равернутому в WSAS
    #38916024
Semen Popov,

Предлагаю решить вопрос оставаясь в рамках JEE, т.е. использовать интерфейс HttpSessionListener .
Написав свой Listener - можно будет "отлавливать" нужные события и вести свой список.

Доп. ссылки:
How do I get a list of all HttpSession objects in a web application?
Find number of active sessions created from a given client IP

По второй ссылке ИМХО более "правильный" вариант Listener, который реализует интерфейсы ServletContextListener, HttpSessionListener, ServletRequestListener.
...
Рейтинг: 0 / 0
Увидеть текущие подключения к приложению, равернутому в WSAS
    #38917999
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Хабаров, спасибо. Попробуем
...
Рейтинг: 0 / 0
Увидеть текущие подключения к приложению, равернутому в WSAS
    #38920161
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так ear не наш, как на него повесить свой слушатель?
...
Рейтинг: 0 / 0
Увидеть текущие подключения к приложению, равернутому в WSAS
    #38922570
Guzya,

Если веб-контейнер поддерживает спецификацию Servelet 3.0, то достаточно в состав war-файла включить два дополнительных класса.
Если нет - нужно будет вписывать класс Listener в WEB-INF\web.xml.
Все это описано по ссылке, которую уже приводил выше: Find number of active sessions created from a given client IP

Под спойлерами немного модифицированные классы.

Класс 1. Реализует @WebListener. Занимается сбором данных.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
package ru.ts.ehabarov.web;

import java.util.concurrent.ConcurrentHashMap;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener
public class SessionListener extends HttpServlet implements ServletContextListener, HttpSessionListener, ServletRequestListener 
{
	private static final String ATTRIBUTE_NAME = "ru.ts.ehabarov.web.SessionListener";
	private ConcurrentHashMap<HttpSession, String> sessions = new ConcurrentHashMap<>();

	@Override
	public void requestDestroyed(ServletRequestEvent event) 
	{
		// NOOP. No logic needed.
	}

	@Override
	public void requestInitialized(ServletRequestEvent event) 
	{
        HttpServletRequest request = (HttpServletRequest) event.getServletRequest();
        HttpSession session = request.getSession();
		System.out.println("requestInitialized. SessionId:"+session.getId());
        if (session.isNew()) 
        {
            sessions.put(session, request.getRemoteAddr());
    		System.out.println("requestInitialized. Session put to list. SessionId:"+session.getId());
        }
	}

	@Override
	public void sessionCreated(HttpSessionEvent event) 
	{
		// NOOP. Useless since we can't obtain IP here.
		System.out.println("Session created. Id:"+event.getSession().getId());
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent event) 
	{
		sessions.remove(event.getSession());
		
	}

	@Override
	public void contextDestroyed(ServletContextEvent event) 
	{
		// NOOP. No logic needed. Maybe some future cleanup?
	}
	@Override
	public void contextInitialized(ServletContextEvent event) 
	{
		event.getServletContext().setAttribute(ATTRIBUTE_NAME, this);
		System.out.println("contextInitialized");
	}
	
    public static SessionListener getInstance(ServletContext context) 
    {
        return (SessionListener) context.getAttribute(ATTRIBUTE_NAME);
    }
    
    public String[][] getSessionList() 
    {
    	String[][] result = new String[sessions.size()][2];
    	int idx = 0;
		for (HttpSession session:sessions.keySet()) 
		{ 
			result[idx][0] = session.getId();       // Session ID
			result[idx][1] = sessions.get(session); // Remote  IP
			idx++;
		}
		return result;
    }

}


Класс 2. Реализует @WebServlet. Нужен для доступа к собранным данным. Для вызова нужно обратиться по ссылке: http://<адрес>:<порт>/<контекст>/sessionlist
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
package ru.ts.ehabarov.web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet({"/sessionlist"})
public class SessionList extends HttpServlet 
{
    /**
	 * 
	 */
	private static final long serialVersionUID = -4144767979177311855L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		response.setContentType("text/plain");
		response.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		SessionListener listener = SessionListener.getInstance(getServletContext());
		if ( listener != null)
		{
			String[][] slist = listener.getSessionList();
			out.println("Session list ("+slist.length+"):");
			for (int i=0;i<slist.length;i++)
			{ 
				out.println(slist[i][0]+":"+slist[i][1]);
			}
		}
	}
}

...
Рейтинг: 0 / 0
Увидеть текущие подключения к приложению, равернутому в WSAS
    #38922592
Дополнение: Все операторы System.out.println из класса SessionListener нужно удалить сразу после первичной отладки.
Если нужно логгирование - его нужно делать через фреймворк логгирования.
Использовать System.out.println под сервером приложений - это плохая практика, в данном случае использовалось только для демонстрации. В производство в таком виде отдавать нельзя ни в коем случае.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Увидеть текущие подключения к приложению, равернутому в WSAS
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]