Indhold
1 Introduktion
1.1 Formål
1.2 Læsevejledning
1.3 Dokumenthistorik
1.4 Definitioner og referencer
2 Opsætning af udviklingsmiljø
2.1 Krav til software
2.2 Tilpasning af miljø
2.3 Bygge War filen
2.4 Deployering til WildFly
2.5 Afvikling af integrationstests mod WildFly
2.6 Samtidig deployering og afvikling af integrationstests
3 Deployment på WildFly
3.1 Udviklers workstation
4 Beskrivelse af systemdesign
5 Beskrivelse af kildekodens strukturering og design
5.1 Kode-strukturering
5.2 Generelt design af Svareksponeringsservice XDS-adaptere
5.3 Svareksponeringsservice XDS Registry Adapter
5.4 Svareksponeringsservice XDS Repository Adapter
6 Beskrivelse af test-setup
6.1 Unittests (JUnit)
6.2 Integrationstests (Failsafe)
6.2.1 Krævet test setup
6.2.2 Afvikling af integrationstests
6.3 Code coverage
6.3.1 Code coverage for unittests
6.3.2 Code coverage for unittests og integrationstests

Introduktion

Svareksponeringsservice-dokumentdeling består af to Java-baserede webservices og Svareksponeringsservice XDS Registry Adapter og Svareksponeringsservice XDS Repository Adapter. Ved konfiguration af Dokumentdelingsservices (DDS) på National Service Platform (NSP) kan anvendere af DDS lave opslag og udtræk af laboratoriesvarsdokumenter udstillet med Svareksponeringsservice-dokumentdelingens webservices.

Formål

Formålet med dette dokument er at beskrive opsætning og anvendelse af et udviklingsmiljø til videreudvikling af Svareksponeringsservice XDS-adapterne. Herunder hvordan koden bygges, deployeres og testes.

Læsevejledning

Læser forventes at have kendskab til Java softwareudvikling med anvendelse af Maven og WildFly applikationsserver.
Hvor der i teksten er angivet <component base> refereres til topniveaufolderen for kildekoden for komponenten.
I afsnit 2 beskrives de softwaremæssige krav, der er til miljøet, samt hvordan kode bygges. I afsnit 3 beskrives deployment-miljøet, mens beskrivelse af design fremgår af afsnit 4.
Kodestrukturen, kodemæssige afhængigheder til tredjepartsmoduler og de forskellige servicemodulers ansvar og design beskrives i afsnit 5.
Testdesign findes i afsnit 6.

Dokumenthistorik

Version

Dato

Ansvarlig

Beskrivelse

0.9

24.08.2016

Systematic

Første udgave

1.0

13.08.2016

Systematic

Klar til release

Definitioner og referencer

Definition

Beskrivelse

DGWS

Den Gode WebService 1.0.1

NSI

National Sundheds-IT

NSP

Den nationale service platform (inden for sundheds-IT)

SXA

Svareksponeringsservice XDS-adaptere

XDS

Cross-Enterprise Document Sharing

Alias

Beskrivelse

Design og Arkitektur

Svareksponeringsservice XDS-adaptere – Design og Arkitektur, (SSE/11734/SDD/0014)

Installations-vejledning

Installationsvejledning Svareksponeringsservice XDS-adaptere, (SSE/11734/INS/0011)

Konfiguration

Konfiguration af Svareksponeringsservice XDS-adaptere, (SSE/11734/NOT/0056)

Opsætning af udviklingsmiljø

I det følgende antages at koden er hentet ned fra softwarebørsen el.lign.

Krav til software

Krav til applikationsserveren og operativsystemet er de samme som til produktionsmiljøet. De specifikke krav kan ses i \[Installationsvejledning\] afsnit 2.
Derudover er der en række krav til de anvendte udviklingsværktøjer :


  • Maven 3.0.3 eller højere anvendes.
  • WildFly (se \[Installationsvejledning\])


Tilpasning af miljø

Ved deployering vha. Maven-scripts og kørsel af integrationstests beskrevet i det efterfølgende gøres brug af property-filer, der beskriver placering af WildFly og endpoints for eksterne systemer mm.
Disse property-filer ligger i:

  • <component base>/environment.properties
  • <component base>/integrationtest/src/test/resources/testclient.properties


Disse kan kopieres og tilpasses til aktuelt miljø. Efterfølgende Maven-kommandoer gør brug af de tilpassede property-filer gennem argumenterne:

-Denvironment-property-file=<sti til tilpasset environment.properties>
-Dtestclient-property-file=<sti til tilpasset testclient.properties> 


Er disse argumenter ikke anført benytter Maven-scripts de oprindelige property-filer.

Bygge War filen

Gennemfør følgende steps for at bygge komponenterne til Svareksponeringsservice XDS-adaptere.

  1. For at bygge projektet uden deployering til WildFly eller kørsel af integrationstest foretages følgende kommando fra <component base>:
mvn clean install \
-Denvironment-property-file=<sti til tilpasset environment.properties>


Deployering til WildFly

For at etablere og deployere properties til WildFly foretages følgende kommando fra <component base>:

mvn install –Pdeploy-ds-appserver \
-Denvironment-property-file=<sti til tilpasset environment.properties>


Bemærk, at dette afstedkommer deployering til WildFly, herunder at:

  1. Property-filer deployeres til WildFly (hvilket kræver skriverettighed i default/conf)


For at deployere war og ear filer til WildFly foretages følgende kommando fra <component base>:

mvn install –Pdeploy-to-appserver \
-Denvironment-property-file=<sti til tilpasset environment.properties>


Bemærk, at dette afstedkommer deployering til WildFly, herunder at:

  1. Service-filer deployeres til WildFly (hvilket kræver skriverettighed i Wildfly/standalone/deployments)

Afvikling af integrationstests mod WildFly

For at afvikle integrationstests mod den deployerede instans på WildFly udføres kommandoen:

mvn verify –Pexternal-test \
-Dtestclient-property-file={_}<sti til tilpasset testclient.properties>

Bemærk, at afvikling af integrationstests kræver, at Dokumentdelingsservicen er deployeret (med sine afhængigheder) og konfigureret til at anvende Svareksponeringsservice XDS-adapterne, som beskrevet i \[Konfiguration\].

Samtidig deployering og afvikling af integrationstests

For at lette afvikling af integrationstests ifm. udvikling, kan deployering af war/ears til WildFly og afvikling af integrationstests udføres med kommandoen:

mvn install -Ddev \
-Denvironment-property-file=<sti til tilpasset environment.properties> -Dtestclient-property-file=<sti til tilpasset testclient.properties>


Deployment på WildFly

Der henvises til installationsvejledningen \[Installationsvejledning\] for nærmere instrukser.

Udviklers workstation

Når man udvikler kan det være praktisk at foretage deploy til en lokal WildFly.

Beskrivelse af systemdesign

Det overordnede design for Svareksponeringsservice XDS-adapterne er beskrevet i \[Design og Arkitektur\].


Beskrivelse af kildekodens strukturering og design

Kode-strukturering

Koden for Svareksponeringsservice XDS-adapterne er samlet i et Maven-projekt kaldet SXA.
SXA-projektet er delt i følgende moduler:

  • xdswrappers/documentmetadataprovider – modul der indeholder de java-komponenter, der fremfinder dokumentmetadata og reagerer på søgeparametre givet ved forespørgsel på dokumentmetadata.
  • xdswrapper/documentmetadataprovider-war – modul der står for indpakingen af documentmetadataprovider i en war fil.
  • xdswrapper/documentprovider – modul der indeholder de java-komponenter, der fremfinder dokumenter og reagerer på søgeparametre givet ved forespørgsel på dokumenter.
  • xdswrapper/documentprovider-war – modul der står for indpakingen af documentprovider i en war fil.

Der er afhængigheder til forskellige Maven-artefakter, hvoraf følgende er skabt i regi af NSI:

  • documentsharing/* – moduler der indeholder abstraktioner over IHE XDS dokumentmetadata, forespørgsel og indhentning af dokumenter.
  • hsuid/ - modul der indeholder implementering af OIO attributter til identifikation af sundhedsfaglige personer, der er fælles for webservicekomponenter, der anvender DGWS
  • dgws/consumer - modul der indeholder implementering af DGWS consumer funktionalitet, der anvendes af komponenter der anvender DGWS i rollen som web service consumer.
  • dds/client-types – moduler der indeholder IHE wsdl og xsd filer for "Registry Stored Query Transaction", samt JAXB-generede typer fra disse filer.

Generelt design af Svareksponeringsservice XDS-adaptere

De to Java-webservices Svareksponeringsservice XDS Registry Adapter og Svareksponeringsservice XDS Repository Adapter er implementeret ved brug af komponenter fra documentsharing og Dokumentdelingsservices.
JAX-WS er anvendt på baggrund af artefakter fra DDS skabt ved kodegenerering ud fra WSDL-filer og XSD-filer.

Svareksponeringsservice XDS Registry Adapter

Servicen består af en række Maven-moduler, der findes under xdswrappers/:

  • documentmetadataprovider: Indeholder forretningslogik
  • documentmetadataprovider-war: Konfigurerer webservicen og bygger war-filen, der skal deployeres
  • documentmetadataprovider-integrationtest: Indeholder integrationstests af webservicen


Svareksponeringsservice XDS Repository Adapter

Servicen består af en række Maven-moduler, der findes under xdswrappers/:

  • documentprovider: Indeholder forretningslogik
  • documentprovider-war: Konfigurerer webservicen og bygger war-filen, der skal deployeres
  • documentprovider-integrationtest: Indeholder integrationstests af webservicen


Beskrivelse af test-setup

Unittests (JUnit)

JUnit anvendes til implementering af unit tests. Der er kontinuert gennemført unit tests på alle komponenter i projektet.
Unit tests kan afvikles ved at køre:

mvn test


Integrationstests (Failsafe)

Maven Failsafe plugin anvendes til gennemførelse af integrationstests i projektet.

Krævet test setup

Integrationstests forudsætter at Dokumentdelingsservicen (DDS) og dennes afhængigheder er deployeret til WildFly. Desuden kræves at DDS'en er konfigureret til at kende både Svareksponeringsservice XDS Registry Adapter og Svareksponeringsservice XDS Repository Adapter, samt at disses konfigurationer er i overensstemmelse (fx skal samme repositoryUniqueId være anvendt i deres konfigurationer).

Afvikling af integrationstests

Integrationstests kan afvikles ved at køre:

mvn verify –Pexternal-test


Code coverage

Code coverage analyse er foretaget i projektet med anvendelse af Maven Cobertura plugin.

Code coverage for unittests

Code coverage-rapport omfattende alene unittests genereres ved at gennemføre følgende trin:

  1. I kommandoprompt i SXA hovedfolder (folderen med parent pom) udføres:
mvn clean site cobertura:cobertura


  1. Genereret code coverage-rapport kan nu læses i folderen target/site/cobertura

Code coverage for unittests og integrationstests

En samlet code coverage-rapport omfattende både unittests og integrationstests kan genereres ved forberedelse og gennemførsel af trin beskrevet i det efterfølgende.

Forberedelse

Cobertura skal installeres på WildFly og Ant installeres mhp. anvendelse ved fletning af code coverage-rapporter fra unittest og integrationstests.
De anvendte versioner er:

  • Cobertura 2.1.1
  • Ant 1.9.4


Trin:

  1. Cobertura etableres, ved enten:
    1. Download fra fx sourceforge (https://sourceforge.net/projects/cobertura/) og udpakning
    2. Kildekode hentes fra https://github.com/cobertura/cobertura/releases og bygges
  2. Ant installeres
    1. Download fra http://archive.apache.org/dist/ant/binaries/apache-ant-1.9.4-bin.tar.gz
    2. Kopier følgende afhængigheder til Ant's lib folder

      Jar

      Kilde

      asm-5.0.1.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      asm-analysis-5.0.1.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      asm-commons-5.0.1.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      asm-tree-5.0.1.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      asm-util-5.0.1.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      cobertura-2.1.1.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      commons-lang3-3.3.2.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      oro-2.0.8.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      slf4j-api-1.7.5.jar

      Indeholdende i Cobertura-2.1.1-bin-tar

      slf4j-log4j12-1.6.4.jar

      Bør være i lokal m2 folder

      log4j-1.2.16.jar

      Bør være i lokal m2 folder

  3. Installation af Cobertura modul på WildFly:
    1. Følgende Cobertura afhængigheder kopieres fra cobertura-2.1.1-bin.tar.gz til <wildfly folder>/modules/net/sourceforge/cobertura/main

      Jar

      Destination

      <arkiv>/cobertura-2.1.1.jar

      <modul-main>/

      <arkiv>/lib/asm-tree-5.0.1.jar

      <modul-main>/lib/

      <arkiv>/lib/asm-commons-5.0.1.jar

      <modul-main>/lib/

      <arkiv>/lib/asm-util-5.0.1.jar

      <modul-main>/lib/

      <arkiv>/lib/asm-analysis-5.0.1.jar

      <modul-main>/lib/

      <arkiv>/lib/oro-2.0.8.jar

      <modul-main>/lib/

    2. En module.xml fil skabes i samme main mappe med følgende indhold:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="net.sourceforge.cobertura">
    <resources>
        <resource-root path="."/>
        <resource-root path="cobertura-2.1.1.jar"/>
        <resource-root path="lib/asm-tree-5.0.1.jar"/>
        <resource-root path="lib/asm-commons-5.0.1.jar"/>
        <resource-root path="lib/asm-util-5.0.1.jar"/>
        <resource-root path="lib/asm-analysis-5.0.1.jar"/>
        <resource-root path="lib/oro-2.0.8.jar"/>
    </resources>
    <dependencies>
        <module name="asm.asm" />
        <module name="javax.servlet.api" />
        <module name="org.slf4j" />
    </dependencies>
</module>
    1. Default udskrives coveragefilen (cobertura.ser) i <wildfly folder>/bin mappen. Ønskes filen udskrevet til en anden mappe skabes filen cobertura.properties i main mappen med indeholdet:
net.sourceforge.cobertura.datafile=<sti>/cobertura.ser
    1. For at få Cobertura til at skrive coverage af integrationstests, er der to muligheder:

      Metode

      Installation og brug

      coberturaFlush.war servicen

      • coberturaFlush.war er at finde i Cobertura-2.1.1-bin-tar
      • Før kopiering til <WildFly>/standalone/deployments skal følgende linje tilføjes til coberturaFlush.war/META-INF/MANIFEST.MF:
      Dependencies: net.sourceforge.cobertura
      • Efter ændring deployeres coberturaFlush.war og servicen udstiller ”<host>/coberturaFlush/flushCobertura”. Kald til denne service ved f.eks. Curl får Cobertura til at skrive coverage filen. (Se trin 3.3).
      Genstart af WildFly
      • Cobertura skriver automatisk coverage fil ved genstart af WildFly
      • Denne mulighed kræver følgende ændring i <wildfly folder>/bin/standalone.conf med tilføjelse af: 
      JAVA_OPTS="$JAVA_OPTS -Djboss.shutdown.forceHalt=false"
    Bemærk at når WildFly startes med instrumenteret kode, da startes "optagelse" af code coverage. Ved kald til coberturaFlush servicen skabes et billede af hvordan coverage ser ud nu. Dette billede skrives til <wildfly>/bin/cobertura.ser, hvor filen bliver additivt opdateret, hvis filen findes i forvejen, eller skabes, hvis den ikke findes. "Optagelse" af code coverage bliver først reset ved genstart af WildFly og fjernelse af <wildfly>/bin/cobertura.ser.
    • Genstart af WildFly

Gennemførelse

Code coverage-rapport omfattende både unittests og integrationstests genereres ved at gennemføre følgende trin:

  1. Kontroller, at wildfly bruger-account kan skrive cobertura.ser filen i output folderen (Standard <wildfly>/bin/cobertura.ser eller bestemmes i cobertura.properties)
  2. Kontroller, at stien til cobertura.ser er korrekt i filen cobertura/src/main/coberturaScripts/cobertura.properties under SXA-projektets hovedfolder.
  3. Coberturas instrumentering af koden sker ved udførsel af følgende i kommandoprompt i SXA-projektets hovedfolder (folderen med parent pom):
mvn clean install -Dcobertura-build \
-Pdeploy-to-appserver \
-Denvironment-property-file=<sti til tilpasset environment.properties>


Bemærk, at argumentet –Pdeploy-to-appserver aktiverer en Maven-profil, der kopierer ear/war-filer til WildFly deployment folder vha. properties. Som alternativ til dette argument kan ear/war-filer deployeres manuelt.

  • Gen-deployer SXA-projektets services på WildFly
  • I samme folder udføres integrationstestene ved:
mvn verify –Pexternal-test __
-Denvironment-property-file=<sti til tilpasset environment.properties> \
-Dtestclient-property-file=<sti til tilpasset testclient.properties>


  • Afslutning af coberturas optagelse gennemføres ved enten:
    1. Shutdown af WildFly, eller
    2. At åbne siden http://<host:port>/coberturaFlush/flushCobertura (fx via curl eller i browser. Bemærk at dette forudsætter at filen coberturaFlush.war blev kopieret og deployeret)
  • Flet code coverage-rapporter ved i kommandoprompt i SXA hovedfolder at udføre:
cd cobertura/target/coberturaReporting-coberturaReporting
ant –f cobertura.xml create-report
  • Genereret code coverage-rapport kan nu læses i folderen cobertura/target/coberturaReporting-coberturaReporting/report


  • No labels