diff --git a/pom.xml b/pom.xml
index d61a116..ed71c0f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,21 +3,23 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- org.acme
- code-with-quarkus
- 1.0.0-SNAPSHOT
+ com.backend.metadata.kodik.service
+ anyame-kodik-metadata-backend
+ 0.0.1-SNAPSHOT
+ quarkus
3.14.1
- 21
+ 25
UTF-8
UTF-8
quarkus-bom
io.quarkus.platform
- 3.30.8
+ 3.31.1
true
3.5.4
+ 1.2.0
2.11.0
@@ -43,22 +45,30 @@
quarkus-rest
- io.quarkiverse.retrofit
- quarkus-easy-retrofit
- 1.2.0
+ io.quarkus
+ quarkus-rest-jackson
io.quarkus
- quarkus-rest-jackson
+ quarkus-smallrye-stork
+
+
+ io.smallrye.stork
+ stork-service-registration-consul
com.squareup.retrofit2
converter-jackson
${retrofit.version}
+
+ io.quarkiverse.retrofit
+ quarkus-easy-retrofit
+ ${easy-retrofit.version}
+
io.quarkus
- quarkus-junit5
+ quarkus-junit
test
@@ -75,16 +85,6 @@
quarkus-maven-plugin
${quarkus.platform.version}
true
-
-
-
- build
- generate-code
- generate-code-tests
- native-image-agent
-
-
-
maven-compiler-plugin
@@ -97,7 +97,7 @@
maven-surefire-plugin
${surefire-plugin.version}
- --add-opens java.base/java.lang=ALL-UNNAMED
+ @{argLine}
org.jboss.logmanager.LogManager
${maven.home}
@@ -116,7 +116,7 @@
- --add-opens java.base/java.lang=ALL-UNNAMED
+ @{argLine}
${project.build.directory}/${project.build.finalName}-runner
@@ -144,3 +144,4 @@
+
diff --git a/src/main/docker-compose/jvm.yml b/src/main/docker-compose/jvm.yml
new file mode 100644
index 0000000..0141c7c
--- /dev/null
+++ b/src/main/docker-compose/jvm.yml
@@ -0,0 +1,23 @@
+services:
+ kodik-metadata-service:
+ build:
+ context: ../../../.
+ dockerfile: src/main/docker/Dockerfile.jvm
+ container_name: kodik-metadata-service
+ restart: on-failure
+ env_file: ../../../.env
+ networks:
+ - anyame-consul
+ deploy:
+ resources:
+ limits:
+ memory: 512M
+ cpus: "1"
+ reservations:
+ memory: 128M
+ cpus: "0.3"
+
+networks:
+ anyame-consul:
+ name: anyame-consul
+ external: true
diff --git a/src/main/docker-compose/native.yml b/src/main/docker-compose/native.yml
new file mode 100644
index 0000000..d5a1004
--- /dev/null
+++ b/src/main/docker-compose/native.yml
@@ -0,0 +1,23 @@
+services:
+ kodik-metadata-service:
+ build:
+ context: ../../../.
+ dockerfile: src/main/docker/Dockerfile.native-micro
+ container_name: kodik-metadata-service
+ restart: on-failure
+ env_file: ../../../.env
+ networks:
+ - anyame-consul
+ deploy:
+ resources:
+ limits:
+ memory: 512M
+ cpus: "1"
+ reservations:
+ memory: 128M
+ cpus: "0.3"
+
+networks:
+ anyame-consul:
+ name: anyame-consul
+ external: true
diff --git a/src/main/docker/Dockerfile.jvm b/src/main/docker/Dockerfile.jvm
index 4a690e6..b7079fd 100644
--- a/src/main/docker/Dockerfile.jvm
+++ b/src/main/docker/Dockerfile.jvm
@@ -7,11 +7,11 @@
#
# Then, build the image with:
#
-# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/code-with-quarkus-jvm .
+# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/anyame-kodik-metadata-backend-jvm .
#
# Then run the container using:
#
-# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-jvm
+# docker run -i --rm -p 8080:8080 quarkus/anyame-kodik-metadata-backend-jvm
#
# If you want to include the debug port into your docker image
# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
@@ -20,7 +20,7 @@
#
# Then run the container using :
#
-# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-jvm
+# docker run -i --rm -p 8080:8080 quarkus/anyame-kodik-metadata-backend-jvm
#
# This image uses the `run-java.sh` script to run the application.
# This scripts computes the command line to execute your Java application, and
@@ -77,8 +77,10 @@
# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be
# accessed directly. (example: "foo.example.com,bar.example.com")
#
+# You can find more information about the UBI base runtime images and their configuration here:
+# https://rh-openjdk.github.io/redhat-openjdk-containers/
###
-FROM registry.access.redhat.com/ubi9/openjdk-21:1.23
+FROM registry.access.redhat.com/ubi9/openjdk-25:1.24
ENV LANGUAGE='en_US:en'
diff --git a/src/main/docker/Dockerfile.legacy-jar b/src/main/docker/Dockerfile.legacy-jar
index 87bacc1..0d75cb4 100644
--- a/src/main/docker/Dockerfile.legacy-jar
+++ b/src/main/docker/Dockerfile.legacy-jar
@@ -7,11 +7,11 @@
#
# Then, build the image with:
#
-# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/code-with-quarkus-legacy-jar .
+# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/anyame-kodik-metadata-backend-legacy-jar .
#
# Then run the container using:
#
-# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-legacy-jar
+# docker run -i --rm -p 8080:8080 quarkus/anyame-kodik-metadata-backend-legacy-jar
#
# If you want to include the debug port into your docker image
# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
@@ -20,7 +20,7 @@
#
# Then run the container using :
#
-# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-legacy-jar
+# docker run -i --rm -p 8080:8080 quarkus/anyame-kodik-metadata-backend-legacy-jar
#
# This image uses the `run-java.sh` script to run the application.
# This scripts computes the command line to execute your Java application, and
@@ -77,8 +77,10 @@
# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be
# accessed directly. (example: "foo.example.com,bar.example.com")
#
+# You can find more information about the UBI base runtime images and their configuration here:
+# https://rh-openjdk.github.io/redhat-openjdk-containers/
###
-FROM registry.access.redhat.com/ubi9/openjdk-21:1.23
+FROM registry.access.redhat.com/ubi9/openjdk-25:1.23
ENV LANGUAGE='en_US:en'
diff --git a/src/main/docker/Dockerfile.native b/src/main/docker/Dockerfile.native
index ea38eb7..a2740cf 100644
--- a/src/main/docker/Dockerfile.native
+++ b/src/main/docker/Dockerfile.native
@@ -7,11 +7,11 @@
#
# Then, build the image with:
#
-# docker build -f src/main/docker/Dockerfile.native -t quarkus/code-with-quarkus .
+# docker build -f src/main/docker/Dockerfile.native -t quarkus/anyame-kodik-metadata-backend .
#
# Then run the container using:
#
-# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus
+# docker run -i --rm -p 8080:8080 quarkus/anyame-kodik-metadata-backend
#
# The ` registry.access.redhat.com/ubi9/ubi-minimal:9.7` base image is based on UBI 9.
# To use UBI 8, switch to `quay.io/ubi8/ubi-minimal:8.10`.
diff --git a/src/main/docker/Dockerfile.native-micro b/src/main/docker/Dockerfile.native-micro
index 63a5976..c0d8586 100644
--- a/src/main/docker/Dockerfile.native-micro
+++ b/src/main/docker/Dockerfile.native-micro
@@ -10,11 +10,11 @@
#
# Then, build the image with:
#
-# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/code-with-quarkus .
+# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/anyame-kodik-metadata-backend .
#
# Then run the container using:
#
-# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus
+# docker run -i --rm -p 8080:8080 quarkus/anyame-kodik-metadata-backend
#
# The `quay.io/quarkus/ubi9-quarkus-micro-image:2.0` base image is based on UBI 9.
# To use UBI 8, switch to `quay.io/quarkus/quarkus-micro-image:2.0`.
diff --git a/src/main/java/com/backend/metadata/kodik/service/ApplicationBeanProducer.java b/src/main/java/com/backend/metadata/kodik/service/ApplicationBeanProducer.java
new file mode 100644
index 0000000..9b9fb1a
--- /dev/null
+++ b/src/main/java/com/backend/metadata/kodik/service/ApplicationBeanProducer.java
@@ -0,0 +1,30 @@
+package com.backend.metadata.kodik.service;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+
+import io.quarkus.arc.lookup.LookupIfProperty;
+import io.vertx.core.Vertx;
+import io.vertx.ext.consul.ConsulClient;
+import io.vertx.ext.consul.ConsulClientOptions;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.Produces;
+
+@ApplicationScoped
+public class ApplicationBeanProducer {
+ Logger logger = Logger.getLogger(ApplicationBeanProducer.class);
+
+ @ConfigProperty(name = "consul.host", defaultValue = "consul")
+ String host;
+ @ConfigProperty(name = "consul.port", defaultValue = "8500")
+ int port;
+
+ @Produces
+ @LookupIfProperty(name = "quarkus.stork.kodik-metadata-service.service-registrar.type", stringValue = "consul")
+ public ConsulClient consulClient(Vertx vertx) {
+ return ConsulClient.create(vertx, new ConsulClientOptions()
+ .setHost(host)
+ .setPort(port));
+ }
+
+}
diff --git a/src/main/java/com/backend/metadata/kodik/service/ApplicationLifecycle.java b/src/main/java/com/backend/metadata/kodik/service/ApplicationLifecycle.java
new file mode 100644
index 0000000..09dfafb
--- /dev/null
+++ b/src/main/java/com/backend/metadata/kodik/service/ApplicationLifecycle.java
@@ -0,0 +1,56 @@
+package com.backend.metadata.kodik.service;
+
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+
+import io.quarkus.runtime.ShutdownEvent;
+import io.quarkus.runtime.StartupEvent;
+import io.vertx.ext.consul.ConsulClient;
+import io.vertx.ext.consul.ServiceOptions;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.event.Observes;
+import jakarta.enterprise.inject.Instance;
+
+@ApplicationScoped
+public class ApplicationLifecycle {
+
+ @ConfigProperty(name = "quarkus.application.name")
+ private String appName;
+ @ConfigProperty(name = "quarkus.application.port", defaultValue = "8080")
+ private int port;
+
+ private Logger logger;
+ private Instance consulClient;
+ private ScheduledExecutorService executor;
+
+ public ApplicationLifecycle(Logger logger,
+ Instance consulClient,
+ ScheduledExecutorService executor) {
+ this.logger = logger;
+ this.consulClient = consulClient;
+ this.executor = executor;
+ }
+
+ void onStart(@Observes StartupEvent ev) {
+ if (consulClient.isResolvable()) {
+ executor.schedule(() -> {
+ consulClient.get().registerService(new ServiceOptions()
+ .setPort(port)
+ .setAddress(appName)
+ .setName(appName)
+ .setId(appName + "-" + port),
+ result -> logger.infof("Service %s-%d registered", appName, port));
+ }, 1000, TimeUnit.MILLISECONDS);
+ }
+ }
+
+ void onStop(@Observes ShutdownEvent ev) {
+ if (consulClient.isResolvable()) {
+ consulClient.get().deregisterService(appName + "-" + port,
+ result -> logger.infof("Service %s-%d deregistered", appName, port));
+ }
+ }
+}
diff --git a/src/main/java/com/backend/search/kodik/service/api/JacksonConvertFactoryBuilder.java b/src/main/java/com/backend/metadata/kodik/service/api/JacksonConvertFactoryBuilder.java
similarity index 90%
rename from src/main/java/com/backend/search/kodik/service/api/JacksonConvertFactoryBuilder.java
rename to src/main/java/com/backend/metadata/kodik/service/api/JacksonConvertFactoryBuilder.java
index f78ea90..4da8c22 100644
--- a/src/main/java/com/backend/search/kodik/service/api/JacksonConvertFactoryBuilder.java
+++ b/src/main/java/com/backend/metadata/kodik/service/api/JacksonConvertFactoryBuilder.java
@@ -1,4 +1,4 @@
-package com.backend.search.kodik.service.api;
+package com.backend.metadata.kodik.service.api;
import jakarta.enterprise.context.ApplicationScoped;
diff --git a/src/main/java/com/backend/search/kodik/service/api/KodikAPI.java b/src/main/java/com/backend/metadata/kodik/service/api/KodikAPI.java
similarity index 83%
rename from src/main/java/com/backend/search/kodik/service/api/KodikAPI.java
rename to src/main/java/com/backend/metadata/kodik/service/api/KodikAPI.java
index 72f3722..39096c9 100644
--- a/src/main/java/com/backend/search/kodik/service/api/KodikAPI.java
+++ b/src/main/java/com/backend/metadata/kodik/service/api/KodikAPI.java
@@ -1,6 +1,6 @@
-package com.backend.search.kodik.service.api;
+package com.backend.metadata.kodik.service.api;
-import com.backend.search.kodik.service.api.model.KodikResponse;
+import com.backend.metadata.kodik.service.api.model.KodikResponse;
import io.github.easyretrofit.core.annotation.RetrofitBuilder;
import retrofit2.Call;
diff --git a/src/main/java/com/backend/search/kodik/service/api/model/KodikResponse.java b/src/main/java/com/backend/metadata/kodik/service/api/model/KodikResponse.java
similarity index 98%
rename from src/main/java/com/backend/search/kodik/service/api/model/KodikResponse.java
rename to src/main/java/com/backend/metadata/kodik/service/api/model/KodikResponse.java
index a939d77..1155423 100644
--- a/src/main/java/com/backend/search/kodik/service/api/model/KodikResponse.java
+++ b/src/main/java/com/backend/metadata/kodik/service/api/model/KodikResponse.java
@@ -1,4 +1,4 @@
-package com.backend.search.kodik.service.api.model;
+package com.backend.metadata.kodik.service.api.model;
import java.util.List;
diff --git a/src/main/java/com/backend/search/kodik/service/api/model/MaterialData.java b/src/main/java/com/backend/metadata/kodik/service/api/model/MaterialData.java
similarity index 98%
rename from src/main/java/com/backend/search/kodik/service/api/model/MaterialData.java
rename to src/main/java/com/backend/metadata/kodik/service/api/model/MaterialData.java
index 6c07e57..7875f87 100644
--- a/src/main/java/com/backend/search/kodik/service/api/model/MaterialData.java
+++ b/src/main/java/com/backend/metadata/kodik/service/api/model/MaterialData.java
@@ -1,4 +1,4 @@
-package com.backend.search.kodik.service.api.model;
+package com.backend.metadata.kodik.service.api.model;
import java.util.List;
diff --git a/src/main/java/com/backend/search/kodik/service/resource/SearchResource.java b/src/main/java/com/backend/metadata/kodik/service/resource/SearchResource.java
similarity index 79%
rename from src/main/java/com/backend/search/kodik/service/resource/SearchResource.java
rename to src/main/java/com/backend/metadata/kodik/service/resource/SearchResource.java
index 30a9e17..ebaeca8 100644
--- a/src/main/java/com/backend/search/kodik/service/resource/SearchResource.java
+++ b/src/main/java/com/backend/metadata/kodik/service/resource/SearchResource.java
@@ -1,4 +1,4 @@
-package com.backend.search.kodik.service.resource;
+package com.backend.metadata.kodik.service.resource;
import java.io.IOException;
@@ -6,10 +6,10 @@ import javax.naming.ServiceUnavailableException;
import org.jboss.logging.Logger;
-import com.backend.search.kodik.service.api.KodikAPI;
-import com.backend.search.kodik.service.api.model.KodikResponse;
-import com.backend.search.kodik.service.service.KodikAPITokenProvider;
-import com.backend.search.kodik.service.service.KodikSearchFilterService;
+import com.backend.metadata.kodik.service.api.KodikAPI;
+import com.backend.metadata.kodik.service.api.model.KodikResponse;
+import com.backend.metadata.kodik.service.service.KodikAPITokenProvider;
+import com.backend.metadata.kodik.service.service.KodikSearchFilterService;
import io.quarkiverse.retrofit.runtime.EnableRetrofit;
import jakarta.ws.rs.BadRequestException;
@@ -18,8 +18,8 @@ import jakarta.ws.rs.Path;
import jakarta.ws.rs.QueryParam;
import retrofit2.Response;
-@EnableRetrofit("com.backend.search.kodik.service.api")
-@Path("/search")
+@EnableRetrofit("com.backend.metadata.kodik.service.api")
+@Path("/kodik")
public class SearchResource {
private static final Logger LOG = Logger.getLogger(SearchResource.class);
private final KodikAPI kodikAPI;
@@ -34,6 +34,7 @@ public class SearchResource {
}
@GET
+ @Path("/search")
public KodikResponse search(@QueryParam("title") String title) throws ServiceUnavailableException {
try {
Response response = kodikAPI.search(tokenProvider.getKodikToken(), title, 100, 1).execute();
diff --git a/src/main/java/com/backend/search/kodik/service/service/KodikAPITokenProvider.java b/src/main/java/com/backend/metadata/kodik/service/service/KodikAPITokenProvider.java
similarity index 85%
rename from src/main/java/com/backend/search/kodik/service/service/KodikAPITokenProvider.java
rename to src/main/java/com/backend/metadata/kodik/service/service/KodikAPITokenProvider.java
index 9881927..8864e6a 100644
--- a/src/main/java/com/backend/search/kodik/service/service/KodikAPITokenProvider.java
+++ b/src/main/java/com/backend/metadata/kodik/service/service/KodikAPITokenProvider.java
@@ -1,4 +1,4 @@
-package com.backend.search.kodik.service.service;
+package com.backend.metadata.kodik.service.service;
import jakarta.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.config.inject.ConfigProperty;
diff --git a/src/main/java/com/backend/search/kodik/service/service/KodikSearchFilterService.java b/src/main/java/com/backend/metadata/kodik/service/service/KodikSearchFilterService.java
similarity index 93%
rename from src/main/java/com/backend/search/kodik/service/service/KodikSearchFilterService.java
rename to src/main/java/com/backend/metadata/kodik/service/service/KodikSearchFilterService.java
index 77b5b3a..3d44988 100644
--- a/src/main/java/com/backend/search/kodik/service/service/KodikSearchFilterService.java
+++ b/src/main/java/com/backend/metadata/kodik/service/service/KodikSearchFilterService.java
@@ -1,6 +1,4 @@
-package com.backend.search.kodik.service.service;
-
-import jakarta.enterprise.context.ApplicationScoped;
+package com.backend.metadata.kodik.service.service;
import java.util.ArrayList;
import java.util.Arrays;
@@ -11,7 +9,9 @@ import java.util.Set;
import org.jboss.logging.Logger;
-import com.backend.search.kodik.service.api.model.KodikResponse;
+import com.backend.metadata.kodik.service.api.model.KodikResponse;
+
+import jakarta.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class KodikSearchFilterService {
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 956e993..9c8d2f4 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1 +1,5 @@
+quarkus.application.name=kodik-metadata-service
kodik.api.url=https://kodikapi.com/
+
+quarkus.stork.kodik-metadata-service.service-registrar.type=consul
+
diff --git a/src/test/java/org/acme/GreetingResourceIT.java b/src/test/java/com/backend/metadata/kodik/service/GreetingResourceIT.java
similarity index 64%
rename from src/test/java/org/acme/GreetingResourceIT.java
rename to src/test/java/com/backend/metadata/kodik/service/GreetingResourceIT.java
index cfa9d1b..897cf6d 100644
--- a/src/test/java/org/acme/GreetingResourceIT.java
+++ b/src/test/java/com/backend/metadata/kodik/service/GreetingResourceIT.java
@@ -1,8 +1,8 @@
-package org.acme;
+package com.backend.metadata.kodik.service;
import io.quarkus.test.junit.QuarkusIntegrationTest;
@QuarkusIntegrationTest
-class GreetingResourceIT extends GreetingResourceTest {
+class GreetingResourceIT {
// Execute the same tests but in packaged mode.
}
diff --git a/src/test/java/org/acme/GreetingResourceTest.java b/src/test/java/org/acme/GreetingResourceTest.java
deleted file mode 100644
index 18332e4..0000000
--- a/src/test/java/org/acme/GreetingResourceTest.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.acme;
-
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
-
-import static io.restassured.RestAssured.given;
-import static org.hamcrest.CoreMatchers.is;
-
-@QuarkusTest
-class GreetingResourceTest {
- @Test
- void testHelloEndpoint() {
- given()
- .when().get("/hello")
- .then()
- .statusCode(200)
- .body(is("Hello from Quarkus REST"));
- }
-
-}
\ No newline at end of file