Priprava na init poolingu uz ve WinService + do TBaseController dat jen FConn a na to okazovat dal

This commit is contained in:
2026-04-30 09:23:44 +02:00
parent 1258a27a4e
commit 18081c6bf8
10 changed files with 224 additions and 69 deletions
+103 -12
View File
@@ -24,7 +24,8 @@ uses
{$IFDEF CUSTOM_CTRL_EMPolar}
{$I ./_custom/EMPolar/winSvc/usesTop.inc}
{$ENDIF}
flcCipher, Quick.Logger, Quick.Threads, Quick.Logger.Provider.Files;
flcCipher, Quick.Logger, Quick.Threads, Quick.Logger.Provider.Files,
uDataMod;
const
@@ -237,6 +238,7 @@ const
function Encrypt (const AStr: string): RawByteString;
function ReturnEncrypted(const AStr: string): string;
function ReadConfig (var errMsg: string): boolean;
procedure InitConn (var errMsg: string);
procedure ThreadTerminated (Sender: TObject);
{$IFDEF OMNIThreadLib}
@@ -296,8 +298,11 @@ var
apiPort: integer;
webAuth, urlDZTaskyDown: string;
dbName, dbServer, dbUser, dbPwd, heoLic, apiLic, dataZoneKlic, heoPath, sslLibPath: string;
dbPort, intGetDZTasks: integer;
heoLic, apiLic, dataZoneKlic, heoPath, sslLibPath: string;
s_dbName, s_dbServer, s_dbUser, s_dbPwd: string;
s_dbPort: integer;
s_dbEncConn, initConnOK: boolean;
intGetDZTasks: integer;
intProcessDZTasksSec: integer;
jeSSL, jeLoginMod: boolean;
@@ -341,7 +346,7 @@ uses
{$I ./_custom/Rootvin/winSvc/uses.inc}
{$ENDIF}
helTabsBIDs,
uWebMod, uDataMod;
uWebMod;
{$R *.DFM}
@@ -1650,6 +1655,67 @@ Logger.WriteLog(logItem);
procedure THDCDZApiService.InitConn (var errMsg: string);
var Def: IFDStanConnectionDef;
oPars: TStrings; // TFDPhysMSSQLConnectionDefParams;
begin
errMsg := '';
Def := FDManager.ConnectionDefs.FindConnectionDef (sqlPoolName);
if (Def=nil) and (s_dbServer<>'') and not(initConnOK) then
begin
oPars:= TStringList.Create;
try
try
oPars.Add (S_FD_ConnParam_Common_Server + '=' + s_dbServer);
oPars.Add (S_FD_ConnParam_Common_Port + '=' + s_dbPort.ToString);
oPars.Add (S_FD_ConnParam_Common_Database + '=' + s_dbName);
oPars.Add (S_FD_ConnParam_Common_UserName + '=' + s_dbUser);
oPars.Add (S_FD_ConnParam_Common_Password + '=' + s_dbPwd);
oPars.Add (S_FD_ConnParam_Common_OSAuthent + '=No');
oPars.Add (S_FD_ConnParam_Common_MetaDefSchema + '=dbo');
oPars.Add (S_FD_ConnParam_Common_LoginTimeout + '=15');
oPars.Add (S_FD_ConnParam_MSSQL_MARS + '=Yes');
oPars.Add (S_FD_ConnParam_Common_ExtendedMetadata + '=False'); // True jen pri pouziti AutoGenerate SQL / CachedUpdates / UpdateObject
oPars.Add (S_FD_ConnParam_Common_ApplicationName + '=hdcdzAPIsvc');
oPars.Add (S_FD_ConnParam_Common_Pooled + '=True');
oPars.Add (S_FD_ConnParam_Common_Pool_MaximumItems + '=300');
oPars.Add (S_FD_ConnParam_Common_Pool_ExpireTimeout + '=30000'); // FireDAC v intervalu 30 sekund testuje platnost spojeni, jestli to SQL server neukoncil
oPars.Add (S_FD_ConnParam_Common_Pool_CleanupTimeout + '=90000'); // FireDAC v intervalu 90 sekund cisti nepouzivana spojeni
oPars.Add (S_FD_ConnParam_ODBC_ODBCAdvanced + '=TrustServerCertificate=yes');
// oPars.Add('CommandTimeout=120');
if (s_dbEncConn) then
oPars.Add (S_FD_ConnParam_MSSQL_Encrypt + '=Yes');
if not(ConnInit) then
begin
TMonitor.Enter(ConnInitLock);
try
if not(ConnInit) then
begin
if (FDManager.ConnectionDefs.FindConnectionDef(sqlPoolName) = nil) then
FDManager.AddConnectionDef (sqlPoolName, 'MSSQL', oPars);
ConnInit := True;
end;
finally
TMonitor.Exit (ConnInitLock);
end;
end;
initConnOK := true;
except
initConnOK := false;
end;
finally
oPars.Free;
end;
if (FDManager.State = dmsInactive) then
FDManager.Open;
end;
function THDCDZApiService.ReadConfig (var errMsg: string): boolean;
var xN1: TXmlNode;
i: integer;
@@ -1730,11 +1796,19 @@ Logger.WriteLog(logItem);
datMod.dbName:= 'Helios001';
datMod.dbUser:= '';
datMod.dbPwd:= '';
datMod.dbEncConn:= false;
s_dbServer:= 'localhost';
s_dbPort:= 1433;
s_dbName:= 'Helios001';
s_dbUser:= '';
s_dbPwd:= '';
s_dbEncConn:= false;
datMod.chL:= true; // check licenci
intGetDZTasks:= 0;
intProcessDZTasksSec:= 120; // default pro zapis tasku do Heliosu (zpracovani tabulky dbo._hdc_ph_PrijataJsonData)
DZTaksZapisTypCas:= 0; // sek
datMod.dbEncConn:= false;
webAuth:= 'https://forum.helios.eu/HeliosStoreWS/wsHeliosStore.asmx';
urlDZTaskyDown:= 'http://manager.datazone.cloud/api/task/PH2';
@@ -1765,7 +1839,10 @@ Logger.WriteLog(logItem);
i:= attribs.IndexOf(sServer);
if (i>-1) then
if (attribs.Get(i).NodeValue<>null) then
datMod.dbServer:= attribs.Get(i).NodeValue;
begin
datMod.dbServer:= attribs.Get(i).NodeValue;
s_dbServer:= attribs.Get(i).NodeValue;
end;
{$IFDEF DEBUG}
Writeln('Server: ' + datMod.dbServer);
{$ENDIF}
@@ -1775,31 +1852,43 @@ Writeln('Server: ' + datMod.dbServer);
begin
sTemp:= attribs.Get(i).NodeValue;
datMod.dbPort:= sTemp.ToInteger;
s_dbPort:= sTemp.ToInteger;
end;
i:= attribs.IndexOf(sName);
if (i>-1) then
if (attribs.Get(i).NodeValue<>null) then
datMod.dbName:= attribs.Get(i).NodeValue;
begin
datMod.dbName:= attribs.Get(i).NodeValue;
s_dbName:= attribs.Get(i).NodeValue;
end;
{$IFDEF DEBUG}
Writeln('DB: ' + datMod.dbName);
Writeln('DB: ' + s_dbName);
{$ENDIF}
i:= attribs.IndexOf(sUser);
if (i>-1) then
if (attribs.Get(i).NodeValue<>null) then
datMod.dbUser:= ReturnDecrypted(attribs.Get(i).NodeValue);
begin
datMod.dbUser:= ReturnDecrypted(attribs.Get(i).NodeValue);
s_dbUser:= ReturnDecrypted(attribs.Get(i).NodeValue);
end;
i:= attribs.IndexOf(sPwd);
if (i>-1) then
if (attribs.Get(i).NodeValue<>null) then
datMod.dbPwd:= ReturnDecrypted(attribs.Get(i).NodeValue);
begin
datMod.dbPwd:= ReturnDecrypted(attribs.Get(i).NodeValue);
s_dbPwd:= ReturnDecrypted(attribs.Get(i).NodeValue);
end;
i:= attribs.IndexOf(sEncConn);
if (i>-1) then
if (attribs.Get(i).NodeValue<>null) then
if (attribs.Get(i).NodeValue='1') then
datMod.dbEncConn:= true;
begin
datMod.dbEncConn:= true;
s_dbEncConn:= true;
end;
i:= attribs.IndexOf(sSSL);
@@ -2515,6 +2604,8 @@ Writeln('DB: ' + datMod.dbName);
Exit;
end;
initConnOK:= false;
InitConn (sTemp);
verText:= StringReplace(GetFileVersion2(GetModuleName(HInstance)),'.','',[rfReplaceAll]);