https://github.com/devoxx/quarkushipster
https://github.com/devoxx/quarkushipster
Last synced: 11 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/devoxx/quarkushipster
- Owner: devoxx
- License: apache-2.0
- Created: 2019-05-20T12:30:09.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-05-01T04:29:37.000Z (almost 3 years ago)
- Last Synced: 2024-04-16T18:44:59.286Z (almost 2 years ago)
- Language: TypeScript
- Size: 2.35 MB
- Stars: 27
- Watchers: 7
- Forks: 7
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Quarkus JHipster demo project
This is a basic JHipster Angular CRUD application using Quarkus as the backend service.
Checkout also my related [LinkedIn article](https://www.linkedin.com/pulse/jhipster-quarkus-demo-app-stephan-janssen).
The backend code is very straight forward and uses the following Quarkus (extensions) :
- RESTEasy to expose the REST endpoints
- Hibernate ORM with Panache to perform the CRUD operations on the database
- MapStruct for DTO mapping
- FlyWay version control for the database tables
- ArC, the CDI inspired dependency injection tool with zero overhead
- The high performance Agroal connection pool
- Infinispan based caching
- All safely coordinated by the Narayana Transaction Manager
- A PostgreSQL database; see below to run one via Docker
This demo application is based on the Quarkus example project 'hibernate-orm-panache-resteasy' provided by the RedHat team @ https://github.com/quarkusio/quarkus-quickstarts
Thanks to the Quarkus (Red Hat), JHipster, GraalVM teams for their amazing work!
## Requirements
To compile and run this demo you will need:
- GraalVM `1.0 rc16`
- Apache Maven `3.5.3+`
In addition, you will need either a PostgreSQL database, or Docker to run one.
If you don't have GraalVM installed, you can download it here:
Installing GraalVM is very similar to installing any other JDK:
just unpack it, add it to your path, and point the `JAVA_HOME`
and `GRAALVM_HOME` environment variables to it.
You should then use this JDK to run the Maven build.
## Building the Quarkus backend
Double check if you have set GraalVM as your JVM
```
$ export PATH=/Library/Java/JavaVirtualMachines/graalvm-ce-1.0.0-rc16/Contents/Home/bin:$PATH
$ export GRAALVM_HOME=/Library/Java/JavaVirtualMachines/graalvm-ce-1.0.0-rc16/Contents/Home
$ java -version
openjdk version "1.8.0_202"
OpenJDK Runtime Environment (build 1.8.0_202-20190206132754.buildslave.jdk8u-src-tar--b08)
OpenJDK GraalVM CE 1.0.0-rc16 (build 25.202-b08-jvmci-0.59, mixed mode)
```
Now you can launch the Maven build on the checked out sources of this demo:
> cd backend
> mvn clean package
## Running the Quarkus backend
### Run Quarkus in developer mode
To run the application in interactive mode (developer mode):
> mvn quarkus:dev
```
Listening for transport dt_socket at address: 5005
2019-05-25 10:42:44,149 INFO [io.qua.dep.QuarkusAugmentor] (main) Beginning quarkus augmentation
2019-05-25 10:42:44,429 INFO [io.qua.fly.FlywayProcessor] (build-6) Adding application migrations in path: file:/Users/stephan/java/projects/quarkushipster/backend/target/classes/db/migration/
2019-05-25 10:42:44,431 INFO [io.qua.fly.FlywayProcessor] (build-6) Adding application migrations in path: file:/Users/stephan/java/projects/quarkushipster/backend/target/classes/db/migration
2019-05-25 10:42:44,852 INFO [io.qua.dep.QuarkusAugmentor] (main) Quarkus augmentation completed in 703ms
2019-05-25 10:42:45,296 INFO [org.fly.cor.int.lic.VersionPrinter] (main) Flyway Community Edition 5.2.4 by Boxfuse
2019-05-25 10:42:45,369 INFO [org.fly.cor.int.dat.DatabaseFactory] (main) Database: jdbc:postgresql:quarkus_hipster (PostgreSQL 10.5)
2019-05-25 10:42:45,428 INFO [org.fly.cor.int.com.DbValidate] (main) Successfully validated 1 migration (execution time 00:00.013s)
2019-05-25 10:42:45,438 INFO [org.fly.cor.int.sch.JdbcTableSchemaHistory] (main) Creating Schema History table: "public"."flyway_schema_history"
2019-05-25 10:42:45,462 INFO [org.fly.cor.int.com.DbMigrate] (main) Current version of schema "public": << Empty Schema >>
2019-05-25 10:42:45,463 INFO [org.fly.cor.int.com.DbMigrate] (main) Migrating schema "public" to version 1.0.0 - HIPSTER
2019-05-25 10:42:45,487 INFO [org.fly.cor.int.com.DbMigrate] (main) Successfully applied 1 migration to schema "public" (execution time 00:00.050s)
2019-05-25 10:42:45,789 INFO [io.quarkus] (main) Quarkus 0.15.0 started in 1.781s. Listening on: http://[::]:8080
2019-05-25 10:42:45,790 INFO [io.quarkus] (main) Installed features: [agroal, cdi, flyway, hibernate-orm, jdbc-postgresql, narayana-jta, resteasy, resteasy-jsonb]
```
In this mode you can make changes to the code and have the changes immediately applied, by just refreshing your browser.
Hot reload works even when modifying the JPA entities.
### Run Quarkus as a native application
Before you can do this make sure the native-image tool is create
> gu install native-image
Compilation will take a bit longer, so this step is disabled by default;
let's build again by enabling the `native` profile:
> mvn package -Dnative
After reading a few tweets you'll be able to run this binary:
> ./target/QuarkusHipster-1.0-SNAPSHOT-runner
## Application startup takes longer than 5 seconds?
This happened to me on two Mac computers, it was related to an [incorrect configuration](https://thoeni.io/post/macos-sierra-java/) of /etc/hosts
You can resolve this by adding your hostname to the /etc/hosts localhost, as follows:
```
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost Stephans-MacBook-Pro.local
::1 localhost Stephans-MacBook-Pro.local
```
## Start JHipster front end (Angular 7)
Now that the backend is running we can start the Angular frontend as follows:
> cd frontend
> npm install
> npm start
Navigate to:
Use admin / admin to do a fake authentication and click on the top menu "Entities" and select "Event".
---
## ToDo list
- Add JWT authentication
- Add management/* REST endpoints
- Add Metrics REST endpoints
- Add Swagger, details @ https://quarkus.io/guides/openapi-swaggerui-guide
- ...