-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Otavio Santana <otaviopolianasantana@gmail.com>
- Loading branch information
1 parent
3a94680
commit dc90241
Showing
21 changed files
with
825 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
target/* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
#Helidon Project Configuration | ||
#Mon Nov 11 14:29:25 UTC 2024 | ||
schema.version=1.1.0 | ||
helidon.version=4.1.3 | ||
project.flavor=mp | ||
project.archetype=quickstart |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
|
||
# 1st stage, build the app | ||
FROM container-registry.oracle.com/java/jdk-no-fee-term:21 as build | ||
|
||
# Install maven | ||
WORKDIR /usr/share | ||
RUN set -x && \ | ||
curl -O https://archive.apache.org/dist/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz && \ | ||
tar -xvf apache-maven-*-bin.tar.gz && \ | ||
rm apache-maven-*-bin.tar.gz && \ | ||
mv apache-maven-* maven && \ | ||
ln -s /usr/share/maven/bin/mvn /bin/ | ||
|
||
WORKDIR /helidon | ||
|
||
# Create a first layer to cache the "Maven World" in the local repository. | ||
# Incremental docker builds will always resume after that, unless you update | ||
# the pom | ||
ADD pom.xml . | ||
RUN mvn package -Dmaven.test.skip -Declipselink.weave.skip -Declipselink.weave.skip -DskipOpenApiGenerate | ||
|
||
# Do the Maven build! | ||
# Incremental docker builds will resume here when you change sources | ||
ADD src src | ||
RUN mvn package -DskipTests | ||
|
||
RUN echo "done!" | ||
|
||
# 2nd stage, build the runtime image | ||
FROM container-registry.oracle.com/java/jdk-no-fee-term:21 | ||
WORKDIR /helidon | ||
|
||
# Copy the binary built in the 1st stage | ||
COPY --from=build /helidon/target/movies.jar ./ | ||
COPY --from=build /helidon/target/libs ./libs | ||
|
||
CMD ["java", "-jar", "movies.jar"] | ||
|
||
EXPOSE 8080 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
|
||
# 1st stage, build the app | ||
FROM container-registry.oracle.com/java/jdk-no-fee-term:21 as build | ||
|
||
WORKDIR /usr/share | ||
|
||
# Install maven | ||
RUN set -x && \ | ||
curl -O https://archive.apache.org/dist/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz && \ | ||
tar -xvf apache-maven-*-bin.tar.gz && \ | ||
rm apache-maven-*-bin.tar.gz && \ | ||
mv apache-maven-* maven && \ | ||
ln -s /usr/share/maven/bin/mvn /bin/ | ||
|
||
WORKDIR /helidon | ||
|
||
# Create a first layer to cache the "Maven World" in the local repository. | ||
# Incremental docker builds will always resume after that, unless you update | ||
# the pom | ||
ADD pom.xml . | ||
RUN mvn package -Dmaven.test.skip -Declipselink.weave.skip | ||
|
||
# Do the Maven build to create the custom Java Runtime Image | ||
# Incremental docker builds will resume here when you change sources | ||
ADD src src | ||
RUN mvn package -Pjlink-image -DskipTests | ||
RUN echo "done!" | ||
|
||
# 2nd stage, build the final image with the JRI built in the 1st stage | ||
|
||
FROM debian:stretch-slim | ||
WORKDIR /helidon | ||
COPY --from=build /helidon/target/movies-jri ./ | ||
ENTRYPOINT ["/bin/bash", "/helidon/bin/start"] | ||
EXPOSE 8080 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
|
||
# 1st stage, build the app | ||
FROM ghcr.io/graalvm/graalvm-community:21.0.0-ol9 as build | ||
|
||
WORKDIR /usr/share | ||
|
||
# Install maven | ||
RUN set -x && \ | ||
curl -O https://archive.apache.org/dist/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz && \ | ||
tar -xvf apache-maven-*-bin.tar.gz && \ | ||
rm apache-maven-*-bin.tar.gz && \ | ||
mv apache-maven-* maven && \ | ||
ln -s /usr/share/maven/bin/mvn /bin/ | ||
|
||
WORKDIR /helidon | ||
|
||
# Create a first layer to cache the "Maven World" in the local repository. | ||
# Incremental docker builds will always resume after that, unless you update | ||
# the pom | ||
ADD pom.xml . | ||
RUN mvn package -Pnative-image -Dnative.image.skip -Dmaven.test.skip -Declipselink.weave.skip | ||
|
||
# Do the Maven build! | ||
# Incremental docker builds will resume here when you change sources | ||
ADD src src | ||
RUN mvn package -Pnative-image -Dnative.image.buildStatic -DskipTests | ||
|
||
RUN echo "done!" | ||
|
||
# 2nd stage, build the runtime image | ||
FROM scratch | ||
WORKDIR /helidon | ||
|
||
# Copy the binary built in the 1st stage | ||
COPY --from=build /helidon/target/movies . | ||
|
||
ENTRYPOINT ["./movies"] | ||
|
||
EXPOSE 8080 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,158 @@ | ||
# movies-management | ||
Sample of REST API using Helidon and Oracle NoSQL | ||
# movies | ||
|
||
Sample Helidon MP project that includes multiple REST operations. | ||
|
||
## Build and run | ||
|
||
|
||
With JDK21 | ||
```bash | ||
mvn package | ||
java -jar target/movies.jar | ||
``` | ||
|
||
## Exercise the application | ||
|
||
Basic: | ||
``` | ||
curl -X GET http://localhost:8080/simple-greet | ||
Hello World! | ||
``` | ||
|
||
|
||
JSON: | ||
``` | ||
curl -X GET http://localhost:8080/greet | ||
{"message":"Hello World!"} | ||
curl -X GET http://localhost:8080/greet/Joe | ||
{"message":"Hello Joe!"} | ||
curl -X PUT -H "Content-Type: application/json" -d '{"greeting" : "Hola"}' http://localhost:8080/greet/greeting | ||
curl -X GET http://localhost:8080/greet/Jose | ||
{"message":"Hola Jose!"} | ||
``` | ||
|
||
|
||
|
||
## Try health | ||
|
||
``` | ||
curl -s -X GET http://localhost:8080/health | ||
{"outcome":"UP",... | ||
``` | ||
|
||
|
||
## Building a Native Image | ||
|
||
The generation of native binaries requires an installation of GraalVM 22.1.0+. | ||
|
||
You can build a native binary using Maven as follows: | ||
|
||
``` | ||
mvn -Pnative-image install -DskipTests | ||
``` | ||
|
||
The generation of the executable binary may take a few minutes to complete depending on | ||
your hardware and operating system. When completed, the executable file will be available | ||
under the `target` directory and be named after the artifact ID you have chosen during the | ||
project generation phase. | ||
|
||
|
||
|
||
## Try metrics | ||
|
||
``` | ||
# Prometheus Format | ||
curl -s -X GET http://localhost:8080/metrics | ||
# TYPE base:gc_g1_young_generation_count gauge | ||
. . . | ||
# JSON Format | ||
curl -H 'Accept: application/json' -X GET http://localhost:8080/metrics | ||
{"base":... | ||
. . . | ||
``` | ||
|
||
|
||
|
||
## Building the Docker Image | ||
|
||
``` | ||
docker build -t movies . | ||
``` | ||
|
||
## Running the Docker Image | ||
|
||
``` | ||
docker run --rm -p 8080:8080 movies:latest | ||
``` | ||
|
||
Exercise the application as described above. | ||
|
||
|
||
## Run the application in Kubernetes | ||
|
||
If you don’t have access to a Kubernetes cluster, you can [install one](https://helidon.io/docs/latest/#/about/kubernetes) on your desktop. | ||
|
||
### Verify connectivity to cluster | ||
|
||
``` | ||
kubectl cluster-info # Verify which cluster | ||
kubectl get pods # Verify connectivity to cluster | ||
``` | ||
|
||
### Deploy the application to Kubernetes | ||
|
||
``` | ||
kubectl create -f app.yaml # Deploy application | ||
kubectl get pods # Wait for quickstart pod to be RUNNING | ||
kubectl get service movies # Get service info | ||
kubectl port-forward service/movies 8081:8080 # Forward service port to 8081 | ||
``` | ||
|
||
You can now exercise the application as you did before but use the port number 8081. | ||
|
||
After you’re done, cleanup. | ||
|
||
``` | ||
kubectl delete -f app.yaml | ||
``` | ||
|
||
|
||
## Building a Custom Runtime Image | ||
|
||
Build the custom runtime image using the jlink image profile: | ||
|
||
``` | ||
mvn package -Pjlink-image | ||
``` | ||
|
||
This uses the helidon-maven-plugin to perform the custom image generation. | ||
After the build completes it will report some statistics about the build including the reduction in image size. | ||
|
||
The target/movies-jri directory is a self contained custom image of your application. It contains your application, | ||
its runtime dependencies and the JDK modules it depends on. You can start your application using the provide start script: | ||
|
||
``` | ||
./target/movies-jri/bin/start | ||
``` | ||
|
||
Class Data Sharing (CDS) Archive | ||
Also included in the custom image is a Class Data Sharing (CDS) archive that improves your application’s startup | ||
performance and in-memory footprint. You can learn more about Class Data Sharing in the JDK documentation. | ||
|
||
The CDS archive increases your image size to get these performance optimizations. It can be of significant size (tens of MB). | ||
The size of the CDS archive is reported at the end of the build output. | ||
|
||
If you’d rather have a smaller image size (with a slightly increased startup time) you can skip the creation of the CDS | ||
archive by executing your build like this: | ||
|
||
``` | ||
mvn package -Pjlink-image -Djlink.image.addClassDataSharingArchive=false | ||
``` | ||
|
||
For more information on available configuration options see the helidon-maven-plugin documentation. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
kind: Service | ||
apiVersion: v1 | ||
metadata: | ||
name: movies | ||
labels: | ||
app: movies | ||
spec: | ||
type: ClusterIP | ||
selector: | ||
app: movies | ||
ports: | ||
- name: tcp | ||
port: 8080 | ||
protocol: TCP | ||
targetPort: 8080 | ||
--- | ||
kind: Deployment | ||
apiVersion: apps/v1 | ||
metadata: | ||
name: movies | ||
spec: | ||
replicas: 1 | ||
selector: | ||
matchLabels: | ||
app: movies | ||
template: | ||
metadata: | ||
labels: | ||
app: movies | ||
version: v1 | ||
spec: | ||
containers: | ||
- name: movies | ||
image: movies | ||
imagePullPolicy: IfNotPresent | ||
ports: | ||
- containerPort: 8080 |
Oops, something went wrong.