Такой подход совершенно неверен. Вы должны делать это с другой стороны. Создайте Player
объект, который реализует HttpSessionBindingListener
и используйте его вместо этого.
public class Player implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
// Add player to list.
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
// Remove player from list.
}
// ...
}
valueBound()
будет срабатывать, когда вы делаете
Player player = new Player(name);
request.getSession().setAttribute("player", player);
valueUnbound()
будет запущен по истечении сеанса или при удалении атрибута.
Вне зависимости от конкретной проблемы в вашем коде есть серьезные проблемы с JDBC. Это приложение будет аварийно завершать работу всякий раз, когда БД прерывает соединение, потому что оно было открыто слишком долго. Вы должны открыть и закрыть соединение, оператор и набор результатов в кратчайшем из возможных объеме. То есть закройте их в блоке finally
того же блока try
, где был выполнен SQL-запрос.