From 30f7d5962397d7474f784d1c51c2b4ae0c835ca2 Mon Sep 17 00:00:00 2001 From: Dollerino Date: Tue, 3 Jun 2025 13:24:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-659=20-=20=D0=92=D0=BE?= =?UTF-8?q?=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D0=BD=D0=B5=D1=81=D0=BA=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=BA=D0=B8=D1=85=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BB=D0=BB=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/db_connector.js | 6 ++---- core/utils.js | 6 ++++++ models/obj_config.js | 8 +------- modules/parus_oracle_db.js | 20 +++++++++++--------- modules/parus_pg_db.js | 5 ++++- 5 files changed, 24 insertions(+), 21 deletions(-) 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) {