Tak-Integration feature

 

=== Input från Marval-ärende 48499 ===

När det finns flera versioner av kontrakt med aggregering uppstår ett “randfall” som det är viktigt att logiken i aggregerande tjänster kan hantera. 
Beskrivning av “randfall”: 

  • Det finns två (eller fler) huvudversioner av ett kontrakt i bruk 
  • Kontraktet har aggregering i tjänsteplattformen 
  • Det finns tjänsteproducenter som stödjer båda versionerna av kontraktet eftersom det finns tjänstekonsumenter som förlitar sig på gamla versionen samtidigt som det finns tjänstekonsumenter som förlitar sig på den nya versionen (eller på båda för att få med alla producenter oavsett version) 
  • Posterna i Engagemangsindex anger inte version (detta vill vi inte ändra på) av kontrakt 

Krav vid randfall enligt ovan: 

  • En tjänstekonsument som anropar en aggregerande tjänst ska INTE få fel-rapporter (i aggregeringsheadern) från de källsystem som bara har stöd för den andra versionen. 
  • En tjänstekonsument som anropar en aggregerande tjänst ska INTE orsaka att anrop förmedlas vidare till tjänsteproducenter som bara stödjer den andra versionen. 


Tankar kring lösning: 
Att Aggregerande tjänster - efter svar från EI - via TAK-info matchar källsystemet OCH kontraktsversion innan anrop sker, så att EI-poster som logiskt pekar ut producent som - enligt TAK - saknar stöd för den version som aggregerande tjänsten är. 

Beskrivning

Denna feature används i de fall Aggregeringsplatformen behöver supportera olika major versioner av samma tjänstekontrakt.
Detta görs genom en integration med TAK som håller vilken version av tjänstkontraktet en vis logisk-address exponerar.
Informationen om vilken version av tjänstkontraktet som är aktuellt finns i befintlig konfiguration av aktuell aggregerande-tjänst. 

 

Sync with TAK success

  1. setContext. 
    När mule context sätts i singleton-bönan TakCacheBean triggas metoden updateCache asynkront.
  2. updateCache.
    TakCacheBean anropar TAK-tjänsten hamtaAllaVirtualliseringar och sorterar ut de virtualliseringar som exponerar rätt version av tjänstekontraktet.
  3. populateCache
    Metoden poppulerar cachen med den logiskaaddressat som finns i det filterarde sättet med virutalliseringar.
  4. writeTakLocalCache
    Skriver sättet med logiskaddresser till specifierad fil.

Sync with TAK fail

  1. setContext
    När mule context sätts i singleton-bönan TakCacheBean triggas metoden updateCache asynkront
  2. updateCache.
    TakCacheBean anropar TAK-tjänsten hamtaAllaVirtualiseringar men misslyckas.
  3. loadTakLocalCache
    TakCacheBean laddar specifierad fil ifrån filsystemet.
  4. populateCache
    TakCachen populeras med värden från uppläst fil. 

 

Använding

Laddning av cache

TakCachen laddas vid uppstart av den aggregerandetjänsten, se beskrivning.
Det går även att ladda om TakCachen om en uppdatering i TAK'n har gjorts som behövs läsas in. 

Detta görs genom tex verktyget curl

Reset TakCache
curl http://localhost:8084/tak/reset

 

Läsning från cache

TakCacheBean exponerar ett 2 metoder för användning i en aggregerande-tjänst.

public Set<String> receiverIds()

Retunerar ett immutable sätt med de logiskaaddresser som finns lagrade i cachen.

 

public boolean contains(final String receiverId)

Metoden tar en logiskaddress och returner ett boolskt värde baserat på om addressen finns i cachen eller inte.

 

Användning av cachen i RequestListFactoryImpl kan se ut på följande sätt för att filtrerar bort de anrop som går till en producent som saknar implementation av den aktuella versionen av tjänstkontraktet.

RequestListFactoryImpl
for (EngagementType inEng : inEngagements) {    
   if(isPartOf(reqCareUnit, inEng.getLogicalAddress())) {
      if(takCache.contains(inEng.getLogicalAddress())) {
         log.debug("Add SS: {} for PDL unit: {}", inEng.getSourceSystem(), inEng.getLogicalAddress());
         addPdlUnitToSourceSystem(sourceSystem_pdlUnitList_map, inEng.getSourceSystem(), inEng.getLogicalAddress());
      }
   }
}

 

Installation

  1. Den aggregeradetjänsten behöver en version 1.2.2 av aggregeringsplatformen.

    Maven pom
    <properties>
        <skltp.agp.version>1.2.2</skltp.agp.version>
    </properties>
  2. Uppdatera GetAggregated<TK>-common.xml i src/main/app för att även importera TakCache tjänsten.

    common.xml
    <spring:import resource="classpath:TakCache-service.xml" />
  3. Lägg till properties till konfigurationsfilen för den aggregerande-tjänsten. GetAggregated<TK>-config.properties i src/main/resources. Sätt till värden som är anpassade för det aktuella aggregerande-tjänsten.

    Konfigurationsfilen
    #TAK
    TAK_OUTBOUND_URL=${TAK_TESTSTUB_INBOUND_URL}
    TAK_INBOUND_RESET_CACHE_TAK_URL=http://localhost:8084/tak/reset
    TAK_TESTSTUB_INBOUND_URL=http://localhost:8085/tak/teststub/SokVagvalsInfo/v2
    TAK_CACHE_FILE_NAME=/tmp/GetAggregatedVaccinationHistory_v2.localCache
  4. Utöka RequestListFactoryImpl-klassen för dependency injection.

    RequestListFactoryImpl
    private TakCacheBean takCache;
    
    public void setTakCache(TakCacheBean takCache) {
       this.takCache = takCache;
    }