Newer
Older
This project uses Quarkus, the Supersonic Subatomic Java Framework.
If you want to learn more about Quarkus, please visit its website: https://quarkus.io/ .
## Configuring the application
This properties must be configured to run the application
| Key | Value | Default | Mandatory | Description |
|----------------------------------------------------|----------------------------------------------------|------------------------| --------- |----------------------------------------------------------------|
| quarkus.oidc.auth-server-url | https://keycloakurl/realms/realmname | none | yes | Url of the keycloak server with the realm |
| quarkus.mongodb.connection-string | mongodb://ozg-mongodb:27017 | none | yes | The connection string for the mongo db database |
| quarkus.mongodb.database | usermanager | usermanager | no | Name of the mongo db database |
| ozgcloud.keycloak.sync.period | 5m | 6h | no | Period between synchronizations |
| ozgcloud.keycloak.api.user | apiUser | none | yes | The name of the keycloak admin api user |
| ozgcloud.keycloak.api.password | **** | none | yes | The password of the keycloak admin api user |
| ozgcloud.keycloak.api.realm | realm-name | none | yes | The name of the realm |
| ozgcloud.keycloak.api.organisations-einheit-id-key | organisationseinheitId | organisationseinheitId | no | The key where the organisationsEinheitId of the group is saved |
| ozgcloud.keycloak.api.ldap-id-key | LDAP_ID | LDAP_ID | no | The key to get the keycloak user id from |
| ozgcloud.user-manager.url | http://localhost:8080 | none | yes | The external root url of the usermanager |
| keycloak.url | https://sso.service | none | yes | The root url of the keycloak service |
## Running the application in dev mode
You can run your application in dev mode that enables live coding using:
```shell script
./mvnw compile quarkus:dev
```
> **_NOTE:_** Quarkus now ships with a Dev UI, which is available in dev mode only at http://localhost:8080/q/dev/.
> If you want to use remote Keycloak for local development, then use the profile remotekc. Be aware,
> that it deactivates synchronization - if you need it, then you have to create your own realm and
> set it in properties, like this:
> ```yaml
> keycloak:
> realm: your-realm
> ozgcloud:
> usersync:
> period: "6h"
> ```
## Running the server with custom realm
In order to start user-manager-server connecting againts dev keycloak locally with custom realm
use below configuration in your IDE or CLI.
```
-Dquarkus.profile=local,remotekc
-Dquarkus.oidc.auth-server-url=https://keyclaokurl/realms/realmname
-Dozgcloud.keycloak.api.realm=sebo-test
-Dozgcloud.usersync.period="5s"
```
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
## Packaging and running the application
The application can be packaged using:
```shell script
./mvnw package
```
It produces the `quarkus-run.jar` file in the `target/quarkus-app/` directory.
Be aware that it’s not an _über-jar_ as the dependencies are copied into the `target/quarkus-app/lib/` directory.
The application is now runnable using `java -jar target/quarkus-app/quarkus-run.jar`.
If you want to build an _über-jar_, execute the following command:
```shell script
./mvnw package -Dquarkus.package.type=uber-jar
```
The application, packaged as an _über-jar_, is now runnable using `java -jar target/*-runner.jar`.
## Creating a native executable
You can create a native executable using:
```shell script
./mvnw package -Pnative
```
Or, if you don't have GraalVM installed, you can run the native executable build in a container using:
```shell script
./mvnw package -Pnative -Dquarkus.native.container-build=true
```
You can then execute your native executable with: `./target/user-manager-1.0.0-SNAPSHOT-runner`
If you want to learn more about building native executables, please consult https://quarkus.io/guides/maven-tooling.
## Related Guides
- MongoDB with Panache ([guide](https://quarkus.io/guides/mongodb-panache)): Simplify your persistence code for MongoDB via the active record or the repository pattern
- SmallRye Health ([guide](https://quarkus.io/guides/microprofile-health)): Monitor service health
## Provided Code
### RESTEasy Reactive
Easily start your Reactive RESTful Web Services
[Related guide section...](https://quarkus.io/guides/getting-started-reactive#reactive-jax-rs-resources)
### SmallRye Health
Monitor your application's health using SmallRye Health
[Related guide section...](https://quarkus.io/guides/smallrye-health)
## Best parctice
### User package-private fields for injected fields
This involves injection fields, constructors and initializers, observer methods, producer methods and fields, disposers and interceptor methods.
[See section 2 of quarkus guide ](https://quarkus.io/guides/cdi-reference#native-executables-and-private-members)
## Quarkus Speichernutzung
### Usermanager Einstellungen
Usermanager als über-jar erstellen und lokal starten:
```bash
./mvnw clean package -Dquarkus.package.type=uber-jar
java -Dquarkus.oidc.auth-server-url=https://keycloakurl/realms/realmname \
-Dozgcloud.user-manager.url=http://localhost:8080 \
-Dkeycloak.url=https://keycloakurl \
-jar ./target/user-manager-server-1.3.0-runner.jar
```
Usermanager als native Anwendung erstellen und lokal starten:
```bash
./mvnw clean package -Pnative
./target/user-manager-server-1.3.0-runner \
-Dquarkus.oidc.auth-server-url=https://keycloakurl/realms/realmname \
-Dquarkus.mongodb.connection-string=mongodb://localhost:27018 \
-Dozgcloud.user-manager.url=http://localhost:8080 \
-Dozgcloud.keycloak.api.user=usermanagerapiuser \
-Dozgcloud.keycloak.api.password=**** \
-Dozgcloud.keycloak.api.realm=realmname \
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
-Dozgcloud.keycloak.api.client=alfa \
-Dozgcloud.usersync.period="5m" \
-Xmx32m
```
### Commands
Anzeigen des Verwendeten Speichers:
```bash
ps -e -o pid,rss,args | grep application
```
Anzeigen der Details der Speichernutzung:
```bash
pmap -x [pid]
```
Loggen der Speichernutzung in Datei:
```bash
top -b -d1 -o +%MEM | grep user-manager >> usermanager_Xmx32m_long.tsv
```
### Quarkus Speicherverwendung
Minimale quarkus features: cdi, resteasy-reactive, smallrye-context-propagation, vertx
#### Verbrauchter Speicher ohne festgelegtem Heapspace
| Application | Selected additional features | Memory Usage in MB |
| ----------- | ------------------- | ------------ |
| quarkus-test-min-1.0.0-SNAPSHOT-runner | - | 39,232 |
| quarkus-test-1.0.0-SNAPSHOT-runner | resteasy-reactive-jackson | 44,172 |
| quarkus-test-db-1.0.0-SNAPSHOT-runner | mongodb-client, mongodb-panache, narayana-jta, resteasy-reactive-jackson | 46,936 |
| quarkus-test-um-1.0.0-SNAPSHOT-runner | config-yaml, grpc-server, micrometer, mongodb-client, mongodb-panache, narayana-jta, smallrye-health, scheduler | 52,068 |
| quarkus-test-oidc-1.0.0-SNAPSHOT-runner | config-yaml, grpc-server, micrometer, mongodb-client, mongodb-panache, narayana-jta, smallrye-health, scheduler, oidc, keycloak-admin | 71,580 |
| user-manager-server-1.3.0-SNAPSHOT-runner | Usermanager Projekt | 124,164 |
#### Speicher bei Last
Lastest wurde über SoapUI (Projekt Usermanager user-manager-server/src/test/resources/Usermanager-REST-Last.xml) gemacht
| Heapspace | max Memory Usage in MB | max Transactions/s |
| --------- | ---------------------- | ------------------ |
| default | 160 | 300 |
| 32m | 99 | 115 |
#### Empfohlene Speichereinstellungen
Prod:
```yaml
limits:
cpu: "500m"
memory: "192Mi"
requests:
cpu: "50m"
memory: "192Mi"
```
Dev:
```yaml
limits:
cpu: "500m"
memory: "100Mi"
requests:
cpu: "50m"
memory: "100Mi"
```
### Weitere Urls
<https://e.printstacktrace.blog/graalvm-heap-size-of-native-image-how-to-set-it/>
<https://quarkus.io/guides/performance-measure>
<https://www.graalvm.org/22.0/reference-manual/native-image/MemoryManagement/>
<https://github.com/quarkusio/quarkus/issues/22757>