SORES er designet med opslags-performance som den primære drivfaktor, og gør derfor brug af en memory-cache, der skal initialiseres inden den kan besvare requests - og når der er opdateringer i datagrundlaget.
Data-strukturen, der bærer response-data, ligger i pakken dk.sds.nsp.sor.sores.model, mens logikken i komponenten er inddelt i følgende lag beskrevet herunder.
Servlet-laget ligger i pakken dk.sds.nsp.sor.sores.ws og er ansvarlig for at håndtere GET-requests og for at udpakke JSON-requestparametre fra POST-requests, kalde servicen i service-laget og formattere svaret som en JSON-struktur i responset.
Service-laget ligger i pakken dk.sds.nsp.sor.sores.service og er ansvarlig for at hente de forespurgte data fra database-laget.
Cache-håndteringen ligger i pakken dk.sds.nsp.sor.sores.cache og kan i seneste version kun bruge en database som datagrundlag. Database-strategien baserer sig på SOR2-indlæseren.
Data gemmes i cachen i hashmaps, med nøglerne hhv. SHAKId, SORId, ParentSORId, ProviderId, CVR og EntityTypeName. Disse maps muliggør effektive opslag på servicen.
Database-laget ligger i pakken dk.sds.nsp.sor.sores.dao. Her foregår opslag i databasen via datasourcen.
Data indlæses fra databasen ved et reload-request, hvis seneste database-timestamps er nyere end seneste cachen-timestamp.
Cachen indlæses ved kald til "/reload" som beskrevet i driftsvejledningen. Følgende query danner grundlag for at fylde cachen med entiteter fra tabellen SOR2SorEntity.
SELECT t1.ValidFrom, t1.FromDate, t1.ToDate, t1.SorId, t1.ParentSorId, t1.HealthInstitutionSorId, t1.ProviderId, t1.ShakId, t1.EntityName, t1.InstitutionOwnerSorId, t1.InstitutionOwnerCvrNumberId, t1.EntityTypeId, t1.EntityTypeName FROM SOR2SorEntity t1 JOIN ( SELECT UniqueCurrentKey, MAX(ValidFrom) as MaxValidFrom FROM SOR2SorEntity WHERE FromDate >= :date_interval OR (FromDate = ( SELECT MAX(FromDate) FROM SOR2SorEntity t3 WHERE t3.SorId = SOR2SorEntity.SorId ) AND ToDate is NULL ) GROUP BY UniqueCurrentKey ) t2 ON t1.UniqueCurrentKey = t2.UniqueCurrentKey AND t1.ValidFrom = t2.MaxValidFrom ; |