BRP opstarten voor ongeduldigen - Hilbrand/OperatieBRP GitHub Wiki
Deze beschrijving heeft betrekking op de 1e vrijgave van de operatieBRP bron code. Gemaakte aanpassingen in de broncode om het werkend te krijgen zijn te vinden in de branch: 1evrijgave
Het doel van deze actie is om te onderzoeken of het mogelijk is de applicaties van het BRP op te starten zonder gehinderd te worden door enige voorkennis. Dit is een verhalende handleiding van dit process om de applicaties op te starten om het een beetje leuk te houden en pretendeert niet de meest optimale manier te zijn om deze applicaties op te starten, of mogelijk ook niet eens de juiste methode. Daarom moet het niet als een echte handleiding worden beschouwd. Deze repository bevat alle aanpassingen/hacks die ik heb gemaakt om het werkend te krijgen.
Het project bestaat grotendeels uit Java code en wordt gebouwd met maven. Om te beginnen daarom Java 8 en maven nodig.
De basis brp is de database. Dus deze opstarten is het eerste doel. De database sql is te vinden in de map Broncode/database-code-58.0.4 Verder blijken 2 databases te worden ondersteund Postgres en HyperSQL Deze laatste is een 100% Java database en wordt gebruikt voor testen valt af te leiden uit de broncode. Terwijl Postgres de productie database is.
Door mvn package
te draaien in deze map wordt een installatie pdf gemaakt in target/docbkx/pdf
. Deze is gericht op het installeren van een Postgres database. Om snel te starten gebruik ik docker om een Postgres database op te starten. In de installatiehandleiding wordt aangegeven versie 9.2.x te gebruiken.
Voor deze installatie heb ik versie 9.6 gebruikt. De docker image heb ik opgestart met als database gebruiker en wachtwoord: brp
.
docker run --name brp -e POSTGRES_PASSWORD=brp -e POSTGRES_USER=brp -p 5432:5432 -d postgres:9.6
Ook moet de Postgres client geïnstalleerd zijn om met de docker database te kunnen communiceren. Als de Postgres docker image is opgestart wordt een database aangemaakt die ik ook brp
heb genoemd:
createdb -U brp -E UTF-8 brp
Vervolgens moeten de database tabellen worden ingeladen. In staan in de map: Broncode/database-code-58.0.4/brp-database/src/main/resources/bmr/Postgres/ Voor het gemak heb ik alle tabellen ingeladen, en dat ging prima. Ik moest een kleine aanpassing making ivm met een validate melding gerelateerd aan locale encoding en mogelijk veroorzaakt door een verschil in Postgres versie, ik heb het verder niet uitgezocht. In deze code base is dit aangepast. Dmv van een aantal psql -f <file.sql>
commando's heb ik de database schema's en tabellen aangemaakt.
Op dit moment draait de database!
De volgende applicatie is de beheer ui. Dit lijkt de enige applicatie te zijn met een user interface. Om deze applicatie op te starten moet de java code gecompileerd worden. Dat gaat niet zonder problemen. Dit komt door het ontbreken van een aantal projecten, en de tests. De tests zijn een probleem omdat een aantal projecten afhankelijk is van test jars en daarom niet compileren. Verder ontbreekt het migratie project. Dit is een probleem omdat een aantal andere projecten afhankelijk is van deze projecten.
Om het te compileren heb ik daarom mock bestanden voor de test projecten en mock classen voor het migratie project gemaakt. Deze mock classen hebben geen implementatie.
Het project bestaat uit 3 delen die gebouwd kunnen worden. De database en koppelvlak zijn klein, maar moeten eert gebouwd worden om de brp code te kunnen bouwen.
Voor dataabse voor het volgende commando uit in de map Broncode/database-code-58.0.4/brp-database
mvn install
Voor koppelvlak voer het volgende command uit in de map Broncode/koppelvlak-code-25.0.3/brp-koppelvlak:
mvn -f pom\ 08.16.03.xml install
Voor het bouwen van de brp code voor het volgende maven commando uit in de map Broncode/operatiebrp-code-145.3:
mvn -f pom\ 08.17.42.xml install -DfailIfNoTests=false -Dmodules-distributie.skip=true -Dmodules-deployment.skip=true
Met de gecompileerde code kan ik verder. De beheer ui applicatie draait bovenop de beheer api. Deze applicaties zijn te vinden in de Broncode/operatiebrp-code-145.3/brp/beheer en bestaat uit 2 delen: beheer-api
en beheer-ui
. In de map beheer-ui
staat een readme.md waarin beschreven staat hoe het moet worden opgestart.
De beheer-api wordt opgestart met jetty: mvn jetty:run
. Dan blijkt dat een bestand beheer.properties
nodig is met de database connectie gegevens. Gelukkig staat er een template van dit bestand in Broncode/operatiebrp-code-145.3/brp/build/brp-test-properties/src/main/config/beheer.properties. Deze kopieer ik naar: Broncode/operatiebrp-code-145.3/brp/beheer/beheer-api/src/main/resources/beheer.properties
In dit bestand heb ik alle database configuraties gezet die naar mijn eigen aangemaakte database verwijzen. Verder blijkt er nog een verwijzing naar een test webdefault.xml
verwijzen die niet is meegeleverd. Door in de pom dit uit te zetten kan ik verder. Na deze wijzigingen wordt de beheer-api succesvol opgestart.
Nu de beheer-ui
. Deze staat in de beheer-ui
map. Uit de eerder genoemde readme blijkt dat deze met (nodejs)[https://nodejs.org) werkt en opgestart kan worden met het programma gulp. Dit zijn allemaal open source programma’s. Na alles geïnstalleerd te hebben type ik simpel: gulp
en alles start op!
Ik browse nu naar http://localhost:8080/brp-beheer/
Nu nog inloggen.
Even zoeken leert dat er een optie useInMemoryAuthentication
is. Als deze optie in beheer.properties
is gezet komen 3 standaard users beschikbaar wat te vinden is in: Broncode/operatiebrp-code-145.3/brp/beheer/beheer-api/src/main/java/nl/bzk/brp/beheer/webapp/configuratie/SecurityConfiguratie.java. Na deze optie aangezet te hebben in beheer.properties
en jetty opnieuw opgestart te hebben kan ik inloggen met:
gebruiker | wachwoord |
---|---|
admin | admin |
functioneel | functioneel |
gegevens | gegevens |
Even later vind ik nog dat van de beheer.properties
diverse varianten gegenereerd worden in:
Broncode/operatiebrp-code-145.3/brp/build/brp-test-properties/target
. Daar staan ook in sommige useInMemoryAuthentication=true
. Dus dat lijkt de methode om met gebruikers te werken in test.
Uit het Architectuur/Deployability services document valt af te leiden dat er verder nog diverse webservices beschikbaar zijn waar de buitenwereld met het BRP mee communiceert. Dit zijn soap webservices. Een zoektocht naar welke pom bestanden war bestanden aanmaken levert de projecten op die als soap webservice gedeployed kunnen worden. Ik neem willekeurig de bijhouding service:
Eerst opstarten met mvn jetty:run
. Dit werkt niet er wordt gevraagd om security gegevens. Er staat een privatestore.jks
Broncode/operatiebrp-code-145.3/brp/brp-bijhouding/brp-bijhouding-delivery/brp-bijhouding-delivery-ws/src/main/resources/ die blijk ik te kunnen gebruiken. Een nieuwe zoektocht levert de gegevens voor deze test privatestore.jks
op in oa:
Broncode/operatiebrp-code-145.3/brp/build/brp-test-properties/src/main/filters/localhost.properties
Weer opstarten jetty met deze argumenten:
mvn jetty:run -Dsecurity.privatekey.password=serverkeypassword -Dsecurity.privatekey.alias=serverkey -Dsecurity.keystore.private.password=privatestore -Dsecurity.keystore.private.file=privatestore.jks
Daarna is de webservice beschikbaar via: http://localhost:8080/BijhoudingService/
en toont de beschikbare SOAP diensten.
Een zelfde actie heb ik voor service bevraging gedaan. Deze staat in het project: brp-delivery-bevraging
Hier zijn ook nog de database connectie gegevens nodig en is het ook nodig om de pom Broncode/operatiebrp-code-145.3/brp/brp-leveren/brp-leveren-delivery/brp-delivery-bevraging/pom.xml. Om een of andere reden staat de Postgres database als alleen beschikbar voor scope test. Dit heb ik uitgezet voor mijn test en dan werkt het door jetty als volgt op te starten:
mvn jetty:run -Dsecurity.privatekey.password=serverkeypassword -Dsecurity.privatekey.alias=serverkey -Dsecurity.keystore.private.password=privatestore -Dsecurity.keystore.private.file=privatestore.jks -Djdbc.protocollering.driverClassName=org.postgresql.Driver -Djdbc.protocollering.url=jdbc:postgresql://localhost:5432/brp -Djdbc.master.driverClassName=org.postgresql.Driver -Djdbc.master.url=jdbc:postgresql://localhost:5432/brp -Djdbc.master.username=brp -Djdbc.master.password=brp -Djdbc.protocollering.username=brp -Djdbc.protocollering.password=brp -Djdbc.archivering.url=jdbc:postgresql://localhost:5432/brp -Djdbc.archivering.driverClassName=org.postgresql.Driver -Djdbc.archivering.username=brp -Djdbc.archivering.password=brp
De service is dan beschikbaar via: http://localhost:8080/LeveringBevragingService/
en toont de beschikbare SOAP diensten.
Ik heb de SOAP services verder niet functioneel getest. Maar het lijkt erop dat als je een programma zou willen maken dat met deze services communiceert de basis van uit wsdl bestanden uit Broncode/koppelvlak-code-25.0.3/brp-koppelvlak/src/main/resources gegenereerd kan worden....