Page 2 of 2 FirstFirst 1 2
Results 16 to 21 of 21

Thread: Kbmmw Query service : multi-tenant maken

  1. #16
    Senior Member ErikB's Avatar
    Join Date
    Aug 2010
    Location
    Biddinghuizen
    Posts
    509
    ik ben reuze benieuwd hoe dat er dan uit ziet binnen kbmMW !
    Erik

  2. #17
    ik ben ook wel benieuwd naar de oplossing van Jonas.

    @ErikB, de demo voor jou met Firedac staat nog op mijn lijstje. Ben je niet vergeten

  3. #18
    Wel alles is nog in test vorm(dus geen enkele klant van mij werkt op de nieuwe manier).

    Ik heb eigenlijk de multidb demo nagebouwd. De oorspronkelijke programmeur heeft wel wat fouten gemaakt omtrent de implementatie van kbmmw.
    Heb dus letterlijk de pdf "using kbmmw as a query server" doorlopen stap voor stap tot ik nieuwe windows service had (met een apparte datamodule).

    Daarna de principes van de demo code na gebouwd.

    Samengevat.
    1. Datamodule bevat kbmMWServer en een servertransport component.
    1.1 Indien je wenst te hosten in iis dan moet dit tkbmmwisapiservertransport zijn anders een tkbmmwtcpipindyservertransport

    2 TkbmMWQueryService bevat adoxresolver,adoxquery,adoxstoredproc en kbmMWBinarystreamFormat.
    2.1 volgendee methodes van de query service worden overschreven. DoPerformQuery,DoPerformExecute,DoPerformDefinitio ns,DoPerformResolve,DoPerformMetaData
    2.2 in deze methodes roep ik GetConnectionpool methode aan. Deze pool plaats ik dan op het querycomponent.
    2.3 Getconnectionpool is een globale functie die geen lid is van datamodule of van queryservice

    3 Er is een klasse gemaakt die de connectie(pool) vertegewoordigt.(TDbConnection : net zoals de demo app)
    3.1 bevat dus ook de property FConnectionPool:TkbmMWADOXConnectionPool;

    4 Er zijn 2 globale objecten aanwezig (opgelet, thread safety)
    4.1 Connections:TObjectList; // bevat een lijst van TDbConnection
    4.2 ConnectionsLock:TCriticalSection;


    alle "magie" gebeurd dus eigenlijk in de getconnectionpool.
    In deze methode kijken we dus, is er al een pool aanwezig in de lijst connections
    zoniet maak een aan, zowel return de juiste pool.

    Voorlopig word de database meegegeven via de client. Deze vang ik op via de onserverequest van kbmmwserver.
    Er is nl een data property op TkbmMWClientIdentity die een client kan meegeven.

    Dit mag uiteraard niet omwille van security.
    Ik moet dus nog de bestaande code uitbreiden zodat een database word gekozen op basis van een andere bron.
    Ik zal hier waarschijnlijk een centrale database voor gebruiken en het resultaat cachen zodat die db niet bij iedere request gecontacteerd moet worden.

  4. #19
    Senior Member ErikB's Avatar
    Join Date
    Aug 2010
    Location
    Biddinghuizen
    Posts
    509
    Dank je Jonas !

    Wordt een uitdaging om het om te zetten: de FireDACConnectionPool heeft geen property ConnectionPool, maar een property Database.
    Ik ga er komend weekend mee aan het stoeien !
    Erik

  5. #20
    Wel de TkbmMWADOXConnectionPool bevat ook geen property connectionpool.
    Heb nu al een heel breder zicht op hoe alles werkt. Als het niet lukt (na dit weekend) kan ik eventueel stukken code delen om u te helpen.

  6. #21
    Ik kom nu wel een nieuw probleem tegen na verdere testen van mij.

    als voor 1 of andere reden de sql server reboot of een sql connectie wegsmijt(door backups,cleanschedule,indexlocking,...) dan heb ik een bestaande connectionpool met een niet werkende connectie.
    Wanneer een client op dat moment verbind krijgen we de foutmelding "communication link failure"

    Voordien als deze situatie zich voordeed deden we een reboot van de windowsservice.
    Uiteraard met een multitenant opzet kunnen we dit niet meer doen of alle klanten zouden dit merken.

    We moeten dus in code deze connectie herstellen/hermaken wanneer deze "fout" optreed. Maar ik heb geen enkel idee waar ik dit best kan doen.
    Kbmmw handelt precies zelf deze fout af en kan deze dus niet opvangen in een try and except block bij mijn DoPerformQuery methode.

    Wat is volgens jullie de beste werkwijze?

Page 2 of 2 FirstFirst 1 2

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •