The Air port
is an example Jakarta EE application with a HTTP endpoint that is running in
WildFly j2ee container.
The src/main
folder contains a Jakarta EE application using JAX-RS.
Use any suitable approach to install JDK 17. Then check it using command below
java --version
The output should be something like :
openjdk 17.0.9 2023-10-17
OpenJDK Runtime Environment GraalVM CE 17.0.9+9.1 (build 17.0.9+9-jvmci-23.0-b22)
OpenJDK 64-Bit Server VM GraalVM CE 17.0.9+9.1 (build 17.0.9+9-jvmci-23.0-b22, mixed mode, sharing)
See how to install it from Docker guide/doc
When you have Docker compose properly installed there is a prepared script in project root folder: docker-compose.yml
sudo docker compose up
OR
docker compose up
You can see PostgreSQL running in docker compose.
............................
postgres-1 | PostgreSQL init process complete; ready for start up.
postgres-1 |
postgres-1 | 2024-04-04 10:18:24.519 UTC [1] LOG: starting PostgreSQL 16.2 (Debian 16.2-1.pgdg120+2) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
postgres-1 | 2024-04-04 10:18:24.519 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
postgres-1 | 2024-04-04 10:18:24.519 UTC [1] LOG: listening on IPv6 address "::", port 5432
postgres-1 | 2024-04-04 10:18:24.531 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres-1 | 2024-04-04 10:18:24.545 UTC [61] LOG: database system was shut down at 2024-04-04 10:18:24 UTC
postgres-1 | 2024-04-04 10:18:24.554 UTC [1] LOG: database system is ready to accept connections
Linux: Check how to install PSQL CLI client only by link
Windows: Download 16.2 installation package, install PSQL CLI client only by link
Check after installation
psql --version
psql (PostgreSQL) 14.11 (Ubuntu 14.11-0ubuntu0.22.04.1)
Check SQL connection using command:
psql postgres://postgres:example@localhost:5432
Possible output should be like :
psql (14.11 (Ubuntu 14.11-0ubuntu0.22.04.1), server 16.2 (Debian 16.2-1.pgdg120+2))
WARNING: psql major version 14, server major version 16.
Some psql features might not work.
Type "help" for help.
postgres=#
We'll create a new database (air_port_example) MANUALLY and new schema (air_port_schema) with all tables and initial data will be created AUTOMATICALLY on startup.
Run command in CLI to create new db schema
postgres=# SELECT 'CREATE DATABASE air_port_example' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'air_port_example')\gexec
Sometimes more simple form can work too (not always):
postgres=# CREATE DATABASE air_port_example;
you can show SQL schema list by command inside SQL server like:
postgres=#\l
List of databases
Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges
------------------+----------+----------+-----------------+------------+------------+------------+-----------+-----------------------
air_port_example | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | |
postgres | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | |
template0 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
Exit SQL client by:
postgres=#\q
Download ZIP/TGZ 31.0.0.Final version ONLY from the download page or by direct link:
https://github.com/wildfly/wildfly/releases/download/31.0.0.Final/wildfly-31.0.0.Final.zip
unpack it into local folder like : /wildfly-31.0.0.Final/
wildfly-31.0.0.Final/> ./bin/standalone.sh
See output like
.................
15:08:59,361 INFO [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0212: Resuming server
15:08:59,364 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:9990/management
15:08:59,364 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990
15:08:59,365 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 31.0.0.Final (WildFly Core 23.0.1.Final) started in 3481ms - Started 569 of 790 services (335 services are lazy, passive or on-demand) - Server configuration file in use: standalone.xml
Driver library should be installed into running WildFly container using JBoss Admin CLI tool
./wildfly-31.0.0.Final/bin/standalone.sh
check it's started correctly.
./wildfly-31.0.0.Final/bin/jboss.cli
See output from the CLI like :
You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands.
[disconnected /]
type and run next command inside CLI to connect to running WildFly:
[disconnected /] connect
See no errors on connect.
Specify correct local path to postgresql-42.7.3.jar file from project: /air-port-example/lib/postgresql-42.7.3.jar
[standalone@localhost:9990 /] module add --name=org.postgres --resources=path_to/air-port-example/lib/postgresql-42.7.3.jar --dependencies=javax.api,javax.transaction.api
If you put 'postgresql-42.7.3.jar' inside /wildfly-31.0.0.Final/bin
[standalone@localhost:9990 /] module add --name=org.postgres --resources=postgresql-42.7.3.jar --dependencies=javax.api,javax.transaction.api
Check and see no errors in CLI
Type to quit:
[standalone@localhost:9990 /] quit
wildfly-31.0.0.Final/bin/standalone.sh
Watch there are no errors during start up after adding new module
IMPORTANT! Backup (rename) original WildFly config file in folder : /wildfly-31.0.0.Final/standalone/configuration/standalone.xml
Take updated config with additional PostgreSQL datasource from project folder : /air-port-example/wildfly_config/standalone.xml
put it into wildfly install folder (standalone/configuration/standalone.xml), then check again running by command:
/wildfly-31.0.0.Final/bin/standalone.sh
See output about bound airPortExampleDS data source:
16:24:29,245 INFO [org.wildfly.extension.undertow] (MSC service thread 1-1) WFLYUT0006: Undertow HTTPS listener https listening on 127.0.0.1:8443
16:24:29,251 INFO [org.jboss.as.ejb3] (MSC service thread 1-5) WFLYEJB0493: Jakarta Enterprise Beans subsystem suspension complete
16:24:29,281 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-8) WFLYJCA0001: Bound data source [java:jboss/datasources/airPortExampleDS]
Check there is no errors like:
Caused by: org.postgresql.util.PSQLException: FATAL: database "air_port_example" does not exist
Use any suitable approach to install Maven. Version 3.6.4 was used. Then check it using command below
mvn --version
The output should be something like :
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /opt/maven
Java version: 17.0.9, vendor: GraalVM Community, runtime: /home/username/.sdkman/candidates/java/17.0.9-graalce
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.15.0-101-generic", arch: "amd64", family: "unix"
To build the application, you use Maven:
mvn clean package
Maven will compile the application, provision a WildFly server
The WildFly server is created in target/server
with the application deployed in it.
You should run WildFly first by command (server is running on deploy):
/wildfly-31.0.0.Final/bin/standalone.sh
then run sources build and deploy command
mvn clean package wildfly:deploy
Correct WAR app deployment logs without errors looks like below:
15:04:05,077 INFO [org.wildfly.security.soteria.original.SamRegistrationInstaller] (ServerService Thread Pool -- 83) Initializing Soteria 3.0.3.Final for context '/airport-example'
15:04:05,428 INFO [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool -- 83) RESTEASY002225: Deploying jakarta.ws.rs.core.Application: class org.airport.example.AirPortApplication
15:04:05,732 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 83) WFLYUT0021: Registered web context: '/airport-example' for server 'default-server'
15:04:05,784 INFO [org.jboss.as.server] (management-handler-thread - 2) WFLYSRV0010: Deployed "airport-example.war" (runtime-name : "airport-example.war")
IF you see error like below, then you probably didn't run/start WildFly instance properly
[ERROR] Failed to execute goal org.wildfly.plugins:wildfly-maven-plugin:4.2.1.Final:deploy (default-cli)
on project airport-example: Failed to execute goal deploy.:
java.net.ConnectException: WFLYPRT0053: Could not connect to remote+http://localhost:9990.
The connection failed: Connection refused -> [Help 1]
You can use a Postman.com account for importing Environment and Collection placed into folder
Deployed application API is accessible by URL: http://127.0.0.1:8080/airport-example
All api use - Content-Type: application/json
POST /users/register
{"username":"user family name FIFO","email":"[email protected]","password":"jwt#$%ge"}
POST /users/login
{"email":"[email protected]","password":"Dfks$5d*Q"}
POST /users/logout Header = Authorization: Bearer eyJraWQiOi......
POST /airports
Header = Authorization: Bearer eyJraWQiOi......
{"name":"New AirPort name","code":"OIWW","city":"New City name"}
PUT /airports/{id}
Header = Authorization: Bearer eyJraWQiOi......
{"name":"New AirPort 22","code":"YJDEW","city":"New City 22"}
DELETE /airports/{id}
Header = Authorization: Bearer eyJraWQiOi......
GET /airports
GET /airports?name=Ne
GET /airports?code=O
GET /airports?name=Ne&code=O