Jämförda versioner

Nyckel

  • Dessa rader lades till.
  • Denna rad togs bort.
  • Formateringen ändrades.

Innehållsförteckning

Produktval

...

Som ramverk för virtualiseringsplattformen har Spring Boot + Apache-Camel valts.
Apache-Camel är ett moget ramverk med stöd för de funktioner som implementeras i Mule i nuvarande lösningkrävs för att realisera en virtualiseringsplattform.

Apache-Camel är också öppen källkod som distribueras under Apache 2.0 license.

...

Hur Mule ESB tillämpas

För att tillmötesgå kravet på enkel installation av nya virtuella tjänster paketeras varje virtualiserad tjänst som en komponent. Denna komponent (paketerad virtuell tjänst) hör samman med det tjänstekontrakt den virtualiserar snarare än en specifik instans av virtualiseringsplattformen. Den kan sedan installeras i alla förekommande driftsinstanser av virtualiseringsplattformen utan någon ytterligare konfiguration. som tillförs ESB'n. Vägvalsroutern är den komponent som alla virtualiserade tjänster kommunicerar med via ett internt protokoll.

Image Removed

Den virtuella tjänsten exponerar en anslutningspunkt in till vår ESB för ett visst tjänstekontrakt. Vid ett anrop från en tjänstekonsument anropas virtualiseringsplattformen internt med ett meddelande som innehåller all inkommande information. Virtualiseringsplattformen exponerar en intern anslutningspunkt för inkommande anrop från den virtuella tjänsten. Alla virtuella tjänster skickar anropen vidare till samma interna anslutningspunkt. En routing sker i virtualisringsplattformen till en extern tjänsteproducent när alla villkor för denna routing är uppfyllda.Om villkoren inte är uppfyllda returneras ett SoapFault. Virtualiseringsplattformen anropar tjänstekatalogen för att få nödvändig virtualiserings- och behörighetsinformation vid uppstart av ESB'n.

Då Mule endast används i det interna flödet så skall Mule-headers i den mån det går inte skickas vidare till andra system i som HTTP-headers. Förutom rent estetiska och säkerhetstekniska orsaker så kan Mule-headers i vissa Mule-versioner ge oväntade konsekvenser om dem plockas upp av senare system som också använder Mule.

Virtuell tjänst

Nödvändiga delar att paketera blir enbart en konfigurationsfil samt tjänstekontraktet (WSDL) med dess tjänsteschema. Detta paketeras i en jar-fil. Konfigureringsinformation för en virtuell tjänst följer nedanstående konfiguration (vissa detaljer utelämnande), se även VP Anvisningar användare[7]:

Kodblock
languagexml
<mule ... >
	<flow name="<unikt namn beroende på tjänst>" >
		<composite-source>
			<https:inbound-endpoint
        		address="https://${TP_HOST}:${TP_PORT}/${TP_BASE_URI}/clinical..."
				...
				<response-transformers ...>
			</https:inbound-endpoint>

			<http:inbound-endpoint
				address="http://${TP_HOST}:${TP_PORT_HTTP}/${TP_BASE_URI}/clinicalprocess..."
				...
				<response-transformers ...>
			</http:inbound-endpoint>
		</composite-source>

		<cxf:proxy-service
			wsdlLocation="..."
			...     
		</cxf:proxy-service>

		<flow-ref name="vagval-dynamic-routing-flow" />
	</flow>
</mule>
  • name i flow-transformer-taggen måste vara unikt. Används för att namnge en virtualisering unikt.
  • wsdlLocation måste anpassas till var i paketstrukturen wsdl-en ligger.
  • Parametrarna TP_HOST, TP_PORT_HPPT, TP_PORT_HTTPS, TP_BASE_URI hämtas från den generella konfigurationen av VP. Tillsammans med tjänstedomänens namn och tjänstens namn bildar de den kompletta URL:en till den virtuella tjänsten.

Virtualiseringsplatformen

...

Paketstruktur

Nedan redovisas de mest intressanta paketstrukturerna.

se.skl.tp.vp

  • certificate - kod som hämtar data från certifikaten
  • errorhandling -  kod som hanterar olika fel som inträffar under flödet
  • exceptions - olika definerade fel som används i VPutil
  • httpheader -

    Utilities som används av övriga komponenter i VP
  • vagvalagent - hanterar TAK information som behövs för att göra routing och behörighetskontroll
  • vagvalrouter - gör själva routingen i VP

se.skl.tp.hsa

  • cache - hanterar HSA information som används för att hitta verksamheter i en trädstruktur.

Intern inkommande "anslutningspunkt"

Den inkommande "anslutningspunkten" definieras med följande konfiguration som definierar ett Mule flöde (många detaljer är utelämnade).

Kodblock
languagexml
<mule ... >
    <flow name="vagval-dynamic-routing-flow" >

		<!-- transformers --> 
		<!-- session handling -->

		<cxf:proxy-client payload="envelope" />

		<custom-processor class="se.skl.tp.vp.vagvalrouter.VagvalRouter" >
			<!-- spring properties -->
		</custom-processor>
	
		<response>
			<!-- transformers -->
		</response>
   
		<catch-exception-strategy>
			<!-- transformers -->
		</catch-exception-strategy>
    </flow>
</mule>

VP + virtualiserade tjänster

För att ha en enda konfigurationsfil när mule startas så finns en fil som heter vp-config.xml. Den laddar dels egna konfigurationsfiler och dels alla virtualiserade tjänster den kan hitta på classpathen. Detta bygger på att alla virtualiserade tjänster har namngivit sin konfigurationsfil med följande namn tp2-service-mule-descriptor.xml

Kodblock
languagexml
<spring:beans>
  ...
  <spring:import resource="classpath*:tp2-service-mule-descriptor.xml"/>
</spring:beans>

Hawtio

Hawtio visar information om olika delar av tjänsteplatformen.

...

  • Processors/helpers som hanterar http-headrar

  • service - TAK och HSA services

  • status - service som returnerar VP status

  • timeout - kod som hanterar konfiguration för timeout per tjänstekontrakt
  • vagval - kod som hanterar vägval och behörigheter att anropa för konsumenten/tjänstekontraktet
  • wsdl - returnerar wsdl'er för olika virtuella tjänster

Källkod

Se VP Camel för utvecklare

Exceptions

Fel rapporteras av VP enligt VP standariserade felkoder. Om ett fel uppstår loggas det och ett VpSemanticException kastas. Det görs senare om till SoapFaultException vilket är den exception som når klienten.

Monitorering

Statustjänst 
Ankare
status_tjanst
status_tjanst

VP Camel exponerar en status-tjänst. Den returnerar information om plattformen. Genom anrop av denna tjänst kan man på ett enkelt sätt kontrollera att VP är igång och fungerar som avsett.
Se: SKLTP VP - Status tjänst 

Hawtio

Hawtio använd för monitorering och som "manager" verktyg.

Det finns möjlighet att ändra loggnivåer under drift, få systeminformation som processorutnyttjande, minne, diskutrymme, javaversion, java classpath, threads etc, debugga Camel flöden.

Status Tjänst

Vp Camel platformen innehåller status tjänst. Den returnerar information om platformen. Genom anrop av denna tjänst kan man på ett enkelt sätt kontrollera att VP inte har avslutats.

T.ex.

Kodblock
{
  "Name": "vp-services-camel",
  "Version": "4.0.0-RC1",
  "BuildTime": "2019-09-18T08:19:27.550Z",
  "ServiceStatus": "Started",
  "Uptime": "5 hours 1 minute",
  "ManagementName": "vp-services",
  "JavaVersion": "1.8.0_161",
  "CamelVersion": "2.24.0",
  "TakCacheInitialized": "true",
  "TakCacheResetInfo": "Date:2019-09-18T10:23 Status:REFRESH_OK vagval:566 behorigheter:1034",
  "HsaCacheInitialized": "true",
  "HsaCacheResetInfo": "Date:2019-09-18T10:23 Status:true oldNum:0 newNum:31468",
  "JvmTotalMemory": "827 mB",
  "JvmFreeMemory": "383 mB",
  "JvmUsedMemory": "443 mB",
  "JvmMaxMemory": "1365 mB",
  "Endpoints": [
    "https://0.0.0.0:20000/vp",
    "http://0.0.0.0:8080/vp",
    "http://0.0.0.0:8080/status",
    "http://0.0.0.0:24000/resethsacache",
    "http://0.0.0.0:23000/resetcache"
  ]
}

I application.propertis fil finns parametrar för den tjänst:

Kodblock
vp.status.url=http://${vp.host}:1080/status

TAK cache

HSA cache

...

.
Samt att hitta flaskhalsar i Camel-flöden och debugga dessa.

Loggning
Ankare
Hawtio
Hawtio

För loggning används log4j2. Meddelanden genom plattformen loggas i ett format som gör det enkelt att ta in och monitorera med Kibana.
Se: SKLTP VP - Loggning

Web-service/SOAP/WSDL

Expandera
titleWSDL:er är ett XML baserade beskrivningar av SOAP meddelanden som används för att anropa webb-tjänster.

VP har som mål att på ett: flexibelt, teknikneutralt och utbyggbart sätt, koppla samman flera system.

Detta kan realiseras på en mängd olika sätt men: SOAP över HTTP/S uppfyller samtliga krav.

Alla moderna programmeringsspråk har mer eller mindre färdiga komponenter för att kommunicera via HTTP/HTTPS.

SOAP/WSDL är tillräckligt väl definierade standards för att det skall finnas en mängd verktyg och ramverk för att "översätta" mellan olika programmeringsspråk och SOAP/WSDL.      

VP tillhandahåller inte i själv några tjänster. De WSDL:er VP exponerar beskriver de tjänster som andra system exponerar via VP.

Hur WSDL:er som exponeras av VP skall se ut finns beskrivet i Ineras styrdokument. Verifiering och testning av nya tjänster i VP skall ha gjorts innan dessa exponeras i produktionsmiljön för NTJP.
WSDL:erna skall då vara färdiga inklusive scheman som beskriver data som skall skickas. Dessa placeras sedan i en katalog under VP varpå de är tillgängliga via anropsadrerss+?wsdl.
Mer om hur installationen av WSDL:erna finns här SKLTP VP - Virtuell tjänst och WSDL.

TAK cache
Ankare
tak_cache
tak_cache

VP har sin egen kopia av TAK data i en cache implementerad i en fristående komponent https://github.com/skltp/takcache som innehåller vägval och anropsbehörigeter.

Denna används för:

  • Få information om faktisk url till en producent
  • Bestämma om konsumenten har behöriget att anropa en viss producent med ett visst tjänstekontrakt. 

Man kan göra en uppdatering av TAK cache komponenten via url: 

Kodblock
http://[vp-url]:23000/resetcache

eller via egen-konfigurerad port, se nyckeln vp.reset.cache.url under konfigrationen SKLTP VP - Konfiguration

HSA Cache

VP har för närvarande stöd för "trädklättring", d.v.s. att behörighet till att anropa ett kontrakt kan ligga ovanför en producent, i ett hierarkiskt träd.
Denna funktionalitet kan i framtida versioner av VP tas bort.

VP håller sin egen kopia av HSA data i en cache, en fristående komponent https://github.com/skltp/hsa-cache,  denna kan uppdateras via url:

Kodblock
http://[vp-url]:24000/resethsacache

eller via egen-konfigurerad url, se nyckeln vp.hsa.reset.cache.url under konfigurationen SKLTP VP - Konfiguration

Informationen läses då in i HSA cahce komponenten från en eller flera filer som kan hämtas från HSA.



Expandera
titleBeskrivning av trädklättringen

HSA-trädet för en HSA-enhet ligger i en

...

komma-separerad lista i DN fältet där förälder är nästa del i listan. 
Exemplet nedan är ett utdrag från två filer (den ena innehåller endast root parent med HSA-id=SE)
HSA uttyds Hälso- och Sjuk-vårdens Adressregister.

Vi kan se att i filen nedan att både "Nässjö VC DLM" och "Nässjö VC DLK" ligger under "Nässjö Primärvårdsområde".

"Nässjö Primärvårdsområde" ligger i sin tur under "Höglandets sjukvårdsområde" osv.
Image Modified


VP använder informationen för att kontrollera om det finns vägval och behörigheter för organisationer högre upp i trädet om den inte hittar ett för en specifik enhet.
Dvs. om VP i HSA trädet ovan kontrollerar en behörighet för SE0000000001-1234( Nässjö VC DLM) i TAK men inte får någon träff kommer den då att fortsätta med 
SE0000000002-1234(Nässjö Primärvårdsområde) osv. ända tills den hittar en behörighet eller når

...

Referensapplikation

I RIV TA finns en referensapplikation som mha en tjänst kan påvisa kommunikation mellan en tjänstekonsument och en tjänsteproducent.

VP's referensapplikation består av följande komponenter:

  • RIV TA rivta-bp21-refapp-consumer som tjänstekonsument
  • RIV TA rivta-bp21-refapp-producer som tjänsteproducent
  • Virtualiseringen MakeBooking i tjänstedomänen crm:scheduling, se nedan

använder en virtualisering för denna tjänst och knyter ihop en tjänstekonsument med en tjänsteproducent mha konfiguration i en driftssatt VP instans.

Referensapplikationen syftar till att

  • illustrera hur en virtuell tjänst paketeras
  • ge möjlighet att provköra virtualiseringsplattformen med en virtuell tjänst
  • verifera en installation av virtualiseringsplattformen

crm-scheduling-makebooking-virtualisering

Innehåller den konfigurations-fil som alla virtualiserade tjänster måste ha: tp-virtuell-tjanstconfig. xml. Projektet innehåller även tjänsteinteraktionens wsdl, tjänstescheman och meddelandescheman, samt WS-addressing-core-schema. När man bygger detta projekt paketeras en jar. Denna jar representerar en virtuell tjänst och syftar till att installeras på virtualiseringsplattformen.

Exceptions

Felsituationer rapporteras av virtualiseringsplattformen enligt VP standariserade felkoder. Om ett fel uppstår loggas det och ett VpSemanticException kastas. Det görs senare om till SoapFaultException vilket är den exception som når klienten.

Loggning

...

roten SE.