diff --git a/core/db_connector.js b/core/db_connector.js index d15886b..502309e 100644 --- a/core/db_connector.js +++ b/core/db_connector.js @@ -10,7 +10,7 @@ const _ = require("lodash"); //Работа с массивами и объектами const EventEmitter = require("events"); //Обработчик пользовательских событий const { ServerError } = require("./server_errors"); //Типовая ошибка -const { makeModuleFullPath, validateObject } = require("./utils"); //Вспомогательные функции +const { makeModuleFullPath, makeServerModuleName, validateObject } = require("./utils"); //Вспомогательные функции const prmsDBConnectorSchema = require("../models/prms_db_connector"); //Схемы валидации параметров функций модуля const intfDBConnectorModuleSchema = require("../models/intf_db_connector_module"); //Схема валидации интерфейса модуля взаимодействия с БД const objServiceSchema = require("../models/obj_service"); //Схема валидации сервиса @@ -110,9 +110,7 @@ class DBConnector extends EventEmitter { sRelease: this.connectSettings.sRelease, nWorkers: this.connectSettings.nMaxWorkers, sServerName: this.connectSettings.exsSrv.sServerName, - sModuleName: this.connectSettings.exsSrv.sServerName - ? `${this.connectSettings.sSessionAppName}$${this.connectSettings.exsSrv.sServerName}` - : this.connectSettings.sSessionAppName, + sModuleName: makeServerModuleName(this.connectSettings.sSessionAppName, this.connectSettings.exsSrv.sServerName), connection: this.connection }); //Если сервис интеграции разделяется на сервера diff --git a/core/utils.js b/core/utils.js index 9e19326..38ec916 100644 --- a/core/utils.js +++ b/core/utils.js @@ -77,6 +77,11 @@ const makeModuleFullPath = sModuleName => { } }; +//Формирование наименование модуля сессии +const makeServerModuleName = (sSessionAppName, sServerName) => { + return sServerName ? `${sSessionAppName}$${sServerName}` : sSessionAppName; +}; + //Формирование текста ошибки const makeErrorText = e => { //Сообщение об ошибке по умолчанию @@ -425,6 +430,7 @@ const wrapPromiseTimeout = (timeout, promise) => { exports.validateObject = validateObject; exports.makeModuleFullPath = makeModuleFullPath; +exports.makeServerModuleName = makeServerModuleName; exports.makeErrorText = makeErrorText; exports.getAppSrvModuleName = getAppSrvModuleName; exports.getAppSrvFunctionName = getAppSrvFunctionName; diff --git a/models/obj_config.js b/models/obj_config.js index 5a0f39a..563dd5a 100644 --- a/models/obj_config.js +++ b/models/obj_config.js @@ -49,9 +49,6 @@ const validatePoolMaxInComing = val => val >= 1 && val <= 1000; //Функция проверки значения шага инкремента подключений к БД в пуле обработчика входящих сообщений const validatePoolIncrementInComing = val => val >= 0 && val <= 1000; -//Функция проверки наименования сервера приложений в сессии БД -const validateSessionAppName = val => val === "PARUS$ExchangeServer"; - //Схема валидации общих параметров сервера приложений const common = new Schema({ //Наименование сервера приложений @@ -146,12 +143,9 @@ const dbConnect = new Schema({ sSessionAppName: { type: String, required: true, - use: { validateSessionAppName }, message: { type: path => `Наименование сервера приложений в сессии БД (${path}) имеет некорректный тип данных (ожидалось - String)`, - required: path => `Не указано наименование сервера приложений в сессии БД (${path})`, - validateSessionAppName: path => - `Наименование сервера приложений в сессии БД поддерживает только значение "PARUS$ExchangeServer" (${path})` + required: path => `Не указано наименование сервера приложений в сессии БД (${path})` } }, //Наименование подключаемого модуля обслуживания БД diff --git a/modules/parus_oracle_db.js b/modules/parus_oracle_db.js index 4f3fdf5..76d1841 100644 --- a/modules/parus_oracle_db.js +++ b/modules/parus_oracle_db.js @@ -185,8 +185,6 @@ const clearServer = async prms => { //Подключение к БД const connect = async prms => { try { - //Определяем наименование модуля сессии - let moduleName = prms.exsSrv.sServerName ? `${prms.sSessionAppName}$${prms.exsSrv.sServerName}` : prms.sSessionAppName; //Создаем пул подключения let pool = await oracledb.createPool({ user: prms.sUser, @@ -197,15 +195,19 @@ const connect = async prms => { poolMax: prms.nPoolMax ? prms.nPoolMax : 4, poolIncrement: prms.nPoolIncrement ? prms.nPoolIncrement : 0, sessionCallback: (connection, requestedTag, callback) => { - connection.module = moduleName; - connection.execute(`ALTER SESSION SET CURRENT_SCHEMA=${prms.sSchema}`).then( - r => { + //Устанавливаем схему + connection + .execute(`ALTER SESSION SET CURRENT_SCHEMA=${prms.sSchema}`) + .then(r => { + //Устанавливаем модуль сессии + connection.execute(`begin PKG_EXS.UTL_MODULE_SET(SEXSSRV => '${prms.exsSrv.sServerName}'); end;`); + }) + .then(r => { callback(null, connection); - }, - e => { + }) + .catch(e => { callback(e, null); - } - ); + }); } }); return pool; diff --git a/modules/parus_pg_db.js b/modules/parus_pg_db.js index bf575bb..901737a 100644 --- a/modules/parus_pg_db.js +++ b/modules/parus_pg_db.js @@ -139,7 +139,7 @@ const checkAppStart = async prms => { NCONTROL_VERSION: prms.bControlSystemVersion ? 1 : 0, SEXS_RELEASE_DATE: prms.sRelease, NWORKERS: prms.nWorkers, - SEXSSRV: prms.sServerName, + SEXSSRV: prms.sServerName !== "" ? prms.sServerName : null, SMODULE_NAME: prms.sModuleName }, outPrms: { @@ -196,7 +196,10 @@ const connect = async prms => { max: prms.nPoolMax ? prms.nPoolMax : 4 }); pool.on("acquire", async client => { + //Устанавливаем схему await client.query(`select ALTER_SESSION_SET_SCHEMA($1);`, [prms.sSchema]); + //Устанавливаем модуль сессии + await client.query(`select PKG_EXS$UTL_MODULE_SET($1);`, [prms.exsSrv.sServerName]); }); return pool; } catch (e) {