forked from CITKParus/P8-ExchangeService
Флаг Thin-режима и указание пути для клиента Oracle переведены в config.js, контроль доступности пула подключений Oracle при создании соединения
This commit is contained in:
parent
b156ed7556
commit
207d2ada07
18
config.js
18
config.js
@ -7,16 +7,6 @@
|
|||||||
// Тело модуля
|
// Тело модуля
|
||||||
//------------
|
//------------
|
||||||
|
|
||||||
//Переменные окружения
|
|
||||||
/*
|
|
||||||
Только для СУБД Oracle.
|
|
||||||
1. NODE_ORACLE_DB_THIN_MODE - Установите значение "1", чтобы использовать режим "тонкого клиента" (Thin-режим)
|
|
||||||
при подключении к БД (не требует установки Oracle Client).
|
|
||||||
2. ORACLE_CLIENT_LIB_DIR - Путь к директории с библиотеками Oracle Client,
|
|
||||||
используется только для работы в режиме "толстого клиента" (Thick-режим), если значение не указано,
|
|
||||||
то будет использоваться значение из переменной операционной системы PATH.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//Общие параметры
|
//Общие параметры
|
||||||
let common = {
|
let common = {
|
||||||
//Наименование сервера приложений
|
//Наименование сервера приложений
|
||||||
@ -24,7 +14,7 @@ let common = {
|
|||||||
//Версия сервера приложений
|
//Версия сервера приложений
|
||||||
sVersion: "8.5.6.1",
|
sVersion: "8.5.6.1",
|
||||||
//Релиз сервера приложений
|
//Релиз сервера приложений
|
||||||
sRelease: "2026.02.10",
|
sRelease: "2026.02.12",
|
||||||
//Таймаут останова сервера (мс)
|
//Таймаут останова сервера (мс)
|
||||||
nTerminateTimeout: 60000,
|
nTerminateTimeout: 60000,
|
||||||
//Контролировать версию Системы
|
//Контролировать версию Системы
|
||||||
@ -44,7 +34,11 @@ let dbConnect = {
|
|||||||
//Наименование сервера приложений в сессии БД
|
//Наименование сервера приложений в сессии БД
|
||||||
sSessionAppName: "PARUS$ExchangeServer",
|
sSessionAppName: "PARUS$ExchangeServer",
|
||||||
//Подключаемый модуль обслуживания БД (низкоуровневые функции работы с СУБД)
|
//Подключаемый модуль обслуживания БД (низкоуровневые функции работы с СУБД)
|
||||||
sConnectorModule: "parus_oracle_db.js"
|
sConnectorModule: "parus_oracle_db.js",
|
||||||
|
//Применение "тонкого" (Thin) или "толстого" (Thick) режима подключения (false - Thick-режим - работа через установленного клиента СУБД Oracle, true - Thin-режим - не требует установки клиента СУБД Oracle, допустим только для Oracle >= 12.1)
|
||||||
|
bOraUseThinMode: false,
|
||||||
|
//Путь к домашней директории Oracle Client (только для Thick-режима подключения к СУБД Oracle, если значение не указано, то будет использоваться значение из переменной окружения "PATH" ОС)
|
||||||
|
sOraClient: ""
|
||||||
};
|
};
|
||||||
|
|
||||||
//Параметры обработки очереди исходящих сообщений
|
//Параметры обработки очереди исходящих сообщений
|
||||||
|
|||||||
@ -118,7 +118,6 @@ class ParusAppServer {
|
|||||||
await this.logger.info(
|
await this.logger.info(
|
||||||
`Обработчик очереди входящих сообщений запущен (порт - ${nPort}, доступные IP - ${sHost === "0.0.0.0" ? getIPs().join("; ") : sHost})`
|
`Обработчик очереди входящих сообщений запущен (порт - ${nPort}, доступные IP - ${sHost === "0.0.0.0" ? getIPs().join("; ") : sHost})`
|
||||||
);
|
);
|
||||||
//Запускаем
|
|
||||||
//Запускаем модуль отправки уведомлений
|
//Запускаем модуль отправки уведомлений
|
||||||
await this.logger.info("Запуск модуля отправки уведомлений...");
|
await this.logger.info("Запуск модуля отправки уведомлений...");
|
||||||
try {
|
try {
|
||||||
|
|||||||
8
index.js
8
index.js
@ -23,7 +23,13 @@ let appSrv = new app.ParusAppServer(); //Экземпляр сервера пр
|
|||||||
//----------------------------------------
|
//----------------------------------------
|
||||||
|
|
||||||
//Разрешение на TLS (Transport Layer Security) без авторизации
|
//Разрешение на TLS (Transport Layer Security) без авторизации
|
||||||
process.env.NODE_TLS_REJECT_UNAUTHORIZED = cfg.outGoing.bValidateSSL === false ? "0" : "1";
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = cfg?.outGoing?.bValidateSSL === false ? "0" : "1";
|
||||||
|
|
||||||
|
//Включение "Токого режима" для Oracle
|
||||||
|
process.env.NODE_ORACLE_DB_THIN_MODE = cfg?.dbConnect?.bOraUseThinMode === true ? "1" : "0";
|
||||||
|
|
||||||
|
//Путь к клиентским библиотекам для Oracle
|
||||||
|
process.env.ORACLE_CLIENT_LIB_DIR = cfg?.dbConnect?.sOraClient || "";
|
||||||
|
|
||||||
//Обработка события "выход" жизненного цикла процесса
|
//Обработка события "выход" жизненного цикла процесса
|
||||||
process.on("exit", code => {
|
process.on("exit", code => {
|
||||||
|
|||||||
@ -189,6 +189,24 @@ const dbConnect = new Schema({
|
|||||||
type: path => `Наименование подключаемого модуля обслуживания БД (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
type: path => `Наименование подключаемого модуля обслуживания БД (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
||||||
required: path => `Не указано наименование подключаемого модуля обслуживания БД (${path})`
|
required: path => `Не указано наименование подключаемого модуля обслуживания БД (${path})`
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
//Признак применения "тонкого" (Thin) или "толстого" (Thick) режима подключения к БД
|
||||||
|
bOraUseThinMode: {
|
||||||
|
type: Boolean,
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type: path => `Признак режима подключения (Thin/Thick) к БД (${path}) имеет некорректный тип данных (ожидалось - Boolean)`,
|
||||||
|
required: path => `Не указан признак режима подключения (Thin/Thick) к БД (${path})`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Путь к домашней директории Oracle Client
|
||||||
|
sOraClient: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
message: {
|
||||||
|
type: path => `Путь к домашней директории Oracle Client (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
||||||
|
required: path => `Не указан путь к домашней директории Oracle Client (${path})`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,7 @@ const { makeErrorText } = require("../core/utils"); //Вспомогательн
|
|||||||
|
|
||||||
//Инициализируем Thick-режим до любых подключений к БД
|
//Инициализируем Thick-режим до любых подключений к БД
|
||||||
try {
|
try {
|
||||||
if (typeof oracledb.initOracleClient === "function" && !(process.env.NODE_ORACLE_DB_THIN_MODE === 1)) {
|
if (typeof oracledb.initOracleClient === "function" && !(process.env.NODE_ORACLE_DB_THIN_MODE === "1")) {
|
||||||
const libDir = process.env.ORACLE_CLIENT_LIB_DIR;
|
const libDir = process.env.ORACLE_CLIENT_LIB_DIR;
|
||||||
if (libDir) {
|
if (libDir) {
|
||||||
oracledb.initOracleClient({ libDir });
|
oracledb.initOracleClient({ libDir });
|
||||||
@ -203,9 +203,10 @@ const clearServer = async prms => {
|
|||||||
|
|
||||||
//Подключение к БД
|
//Подключение к БД
|
||||||
const connect = async prms => {
|
const connect = async prms => {
|
||||||
|
let pool = null;
|
||||||
try {
|
try {
|
||||||
//Создаем пул подключения
|
//Создаем пул подключения
|
||||||
let pool = await oracledb.createPool({
|
pool = await oracledb.createPool({
|
||||||
user: prms.sUser,
|
user: prms.sUser,
|
||||||
password: prms.sPassword,
|
password: prms.sPassword,
|
||||||
connectString: prms.sConnectString,
|
connectString: prms.sConnectString,
|
||||||
@ -229,8 +230,15 @@ const connect = async prms => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
//Проверяем доступность пула
|
||||||
|
let tstConn = await pool.getConnection();
|
||||||
|
await tstConn.close();
|
||||||
|
//Всё ок - возвращяем его
|
||||||
return pool;
|
return pool;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
//Закрываем пул, если успели открыть
|
||||||
|
if (pool) pool.close(NPOOL_DRAIN_TIME);
|
||||||
|
//Возвращаем ошибку
|
||||||
throw new Error(e.message);
|
throw new Error(e.message);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user