Ga naar inhoud

Algemeen

  • Bitbucket repo: https://bitbucket.org/cquel/omnivere2/src/main/
  • Code van de backend service bevind zich in de BackendSvc folder van de Omnivere2 repo.
  • De backend is een windows service die de technologie van Remobjects gebruikt om webservices te publiceren, waaronder ook een DataAbstract service. Zie https://www.remobjects.com/da/ voor meer info.

Multitenant

Het is een multi-tenant service, met andere woorden, verschillende klanten kunnen via dezelfde instantie van de service bediend worden. Om het beheer van de tenants te kunnen doen is er één centrale (master) database, waarin de tenants beheerd worden. Daarnaast is er dan één database per tenant.

Er is momenteel nog geen automatisch systeem om nieuwe tenants toe te voegen. Het toevoegen van een nieuwe tenant moet momenteel dus als volgt gebeuren;

  • Aanmaken van nieuwe SQL database
  • Toevoegen van record in tabel tenant.Tenants in master database. Hiervoor heb je de naam, type connectie=MSSQL en de connection string voor FireDAC nodig. Typisch ziet die er als volgt uit; "FireDAC?AuxDriver=MSSQL;Schemas=1;Server=;OSAuthent=No;Database=;UserID=;Password=;TrustServerCertificate=Yes;LoginTimeout=30;"
  • Backend opstarten om database schema up to date te brengen

De toegang tot de master database moet correct geconfigureerd worden. Momenteel wordt dit gedaan via een .ini bestand, dat zich naast de excecutable bevind. In de code wordt er gebruik gemaakt van de ITenantService om: - de lijst van tenants op te vragen - de details van één tenant op te vragen - de validatie te doen van de tenant database - te checken of een username-wachtwoord combinatie bij een bepaalde tenant correct is

Binnen RemObject

In de fServerDataModule, wat de belangrijkste datamodule is voor de DataAbstract service, worden de connecties naar de verschillende tenant databases toegevoegd aan de ConnectionManager. Elke sessie die door een gebruiker gestart wordt, bevind zich in de context van één bepaalde tenant. We gaan dit dan ook in de sessie bijhouden. Dit kan je zien in de implementatie van de ILoginMultiTenant service.
Elke dataservice die benaderd wordt in een sessie zal via de BeforeAcquireConnection event de database correcte connectie opvragen op basis van de sessie context.

Database migrations

Er is een systeem van database migrations voorzien dat als doel heeft dat elke database automatisch up te date is voor de laatste versie van de service. Dit wordt geregeld in de DBUpgradeModule module. De twee belangrijkste procedures zijn hierin;

  • VerifyDatabaseMigrations: deze procedure zal ervoor zorgen dat alle migratie scripts die bedoeld zijn voor de tenant databases uitgevoerd zijn. De naam van een migratie script voor een tenant database start met drie cijfers, die de versie nummer aangeven. Voorbeeld; 013_002_ServiceCodeId.sql.

  • VerifyTenantMigrations: deze procedure zal ervoor zorgen dat alle migratie scripts die bedoeld zijn voor de master database uitgevoerd zijn. De naam van een migratie script voor de master database start met een T, gevolgd door drie cijfers, die de versie nummer aangeven. Voorbeeld: T001_001_Tenants.sql.

Http Server

De Http server die gebruikt wordt is een TROIndyHttpServer. Via de TDAJavascriptHttpDispatcher component hebben we ook de static file hosting.

Remobject Remoting library

  • Er is ondersteuning voor zowel bin als json formaat.
  • We gebruiken de in-memory session manager
  • Er is odata ondersteuning op het endpoint /odata/
  • Volgende services zijn beschikbaar in de Remobjects Remoting library:
    • LoginMultiTenant: implementeert vereiste authenticatie en sessie beheer, zie module LoginMultiTenant_Impl
    • Dataabstract: databastract implementatie, zie DataService_Impl module voor o.a. schema
    • BLService: specifieke commando's, los van het schema. Voorbeelden zijn uploaden van bestanden, importeren van specifieke CSV bestanden