Spec-Zone.ru › MySQL Connectors 1.0

6.15 Отслеживание состояния сеанса клиента

Connector/J может получать информацию о том, включено ли отслеживание на сервере. Приём информации включается установкой свойства соединения Connector/J trackSessionState в значение true (значение по умолчанию для свойства — false).

Когда функция включена, информация о изменениях состояния сеанса, полученная от сервера, хранится внутри объекта SessionStateChanges, доступного через метод ServerSessionStateController и его метод getSessionStateChanges():

ServerSessionStateChanges ssc =
  MysqlConnection.getServerSessionStateController().getSessionStateChanges();

В SessionStateChanges находится список объектов SessoinStateChange, доступных через метод getSessionStateChangesList():

List<SessionStateChange> sscList = ssc.getSessionStateChangesList();

Каждый объект SessionStateChange имеет поля type и values, доступные через методы getType() и getValues() соответственно. Типы и соответствующие значения описаны ниже:

Таблица 6.23 Тип и значения SessionStateChange

Таблица 6.23 SessionStateChange Type and Values
Тип Количество значений в списке значений Значения
SESSION_TRACK_SYSTEM_VARIABLES 2 Имя изменённой системной переменной и её новое значение
SESSION_TRACK_SCHEMA 1 Новое имя схемы
SESSION_TRACK_STATE_CHANGE 1 "1" или "0"
SESSION_TRACK_GTIDS 1 Список GTID, как сообщает сервер
SESSION_TRACK_TRANSACTION_CHARACTERISTICS 1 Заявление о характеристиках транзакции
SESSION_TRACK_TRANSACTION_STATE 1 Запись состояния транзакции

Connector/J получает изменения только из последнего пакета OK, отправленного сервером. С помощью getSessionStateChanges() некоторые изменения, возвращённые промежуточными запросами, выпущенными Connector/J, могут быть пропущены. Однако информацию о изменении состояния сеанса также можно получить с помощью SessionStateChangesListener, который должен быть зарегистрирован с ServerSessionStateController с использованием метода addSessionStateChangesListener(). Следующий пример реализует SessionStateChangesListener в классе, который также предоставляет метод для печати информации об изменениях:

class SSCListener implements SessionStateChangesListener {
        ServerSessionStateChanges changes = null;

        public void handleSessionStateChanges(ServerSessionStateChanges ch) {
            this.changes = ch;
            for (SessionStateChange change : ch.getSessionStateChangesList()) {
                printChange(change);
            }
        }

        private void printChange(SessionStateChange change) {
            System.out.print(change.getType() + " == > ");
            int pos = 0;
            if (change.getType() == ServerSessionStateController.SESSION_TRACK_SYSTEM_VARIABLES) {
                // There are two values with this change type, the system variable name and its new value
                System.out.print(change.getValues().get(pos++) + "=");
            }
            System.out.println(change.getValues().get(pos));
        }
    }
SessionStateChangesListener listener = new SSCListener();
MysqlConnection.getServerSessionStateController().addSessionStateChangesListener(listener);

С зарегистрированным SessionStateChangesListener пользователи получают доступ ко всем промежуточным результатам, хотя прослушиватель может замедлить доставку результатов запросов. Это потому, что прослушиватель вызывается сразу после того, как пакет OK потребляется Connector/J, до того, как ResultSet будет сконструирован.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/connector-j-en/connector-j-session-state-tracker.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API