ЦИТК-659 - Возможность работы нескольких серверов параллельно
This commit is contained in:
parent
5f88a45710
commit
30f7d59623
@ -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
|
||||
});
|
||||
//Если сервис интеграции разделяется на сервера
|
||||
|
@ -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;
|
||||
|
@ -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})`
|
||||
}
|
||||
},
|
||||
//Наименование подключаемого модуля обслуживания БД
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user