В зависимости от вашей версии Oracle, функция реализована в методе
setEndToEndMetrics (устарело с 12.1 в пользу setClientInfo ())
или setClientInfo
Вот небольшой пример использования. Клиент (ваш сервис) после получения соединения (обычно из пула соединений) устанавливает свойства
action
, clientId
и module
String[] metrics = new String[OracleConnection.END_TO_END_STATE_INDEX_MAX];
metrics[OracleConnection.END_TO_END_ACTION_INDEX] = 'myAction1';
metrics[OracleConnection.END_TO_END_CLIENTID_INDEX] = 'myClient';
metrics[OracleConnection.END_TO_END_MODULE_INDEX] = 'myModule1';
con.setEndToEndMetrics(metrics, (short) 0);
и сбрасывает их перед восстановлением соединения.
DBA
может наблюдать настройку в V$SESSION
с помощью следующего запроса
select sid, client_info, module, action from v$session
так что она может связать сеанс базы данных не только со службой, но комбинация клиент / модуль и действие может предоставить дополнительную информацию о состоянии службы.
Три вещи, которые необходимо учитывать:
Это работает, только если все службы устанавливают определенную дисциплину при установке значений. При повторном использовании сеансов из пула соединений легко «унаследовать» неправильную настройку от предшествующей службы. Я бы рекомендовал реализовать это как аспект обработки ресурсов пула соединений.
Кроме того, версия Java, драйвер JDBC и сервер Oracle должны иметь совместимых версий , поэтому рекомендуется проверять функциональность простым скриптом.
Окончательно НЕ использовать для установки PL / SQL API (что естественно делает разработчик PL / SQL). Большая разница заключается в том, что PL / SQL API запускает обратную передачу в базу данных, а JDBC API - нет (значения отправляются при следующем запросе).