# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================
#
-FROM openjdk:17-jdk-slim
+FROM openjdk:17-jdk as jre-build
+
+RUN $JAVA_HOME/bin/jlink \
+--verbose \
+--add-modules ALL-MODULE-PATH \
+--strip-debug \
+--no-man-pages \
+--no-header-files \
+--compress=2 \
+--output /customjre
+
+# Use debian base image (same as openjdk uses)
+FROM debian:11-slim
+
+ENV JAVA_HOME=/jre
+ENV PATH="${JAVA_HOME}/bin:${PATH}"
+
+#copy JRE from the base image
+COPY --from=jre-build /customjre $JAVA_HOME
EXPOSE 8100 8433
USER $user
COPY --chown=$user:$group /target/datafile-app-server.jar /opt/app/datafile/
-ENTRYPOINT ["java", "-jar", "/opt/app/datafile/datafile-app-server.jar"]
+CMD ["/jre/bin/java", "-jar", "/opt/app/datafile/datafile-app-server.jar"]
# ============LICENSE_END=========================================================
-FROM openjdk:17-jdk-slim
+FROM openjdk:17-jdk as jre-build
+
+RUN $JAVA_HOME/bin/jlink \
+--verbose \
+--add-modules ALL-MODULE-PATH \
+--strip-debug \
+--no-man-pages \
+--no-header-files \
+--compress=2 \
+--output /customjre
+
+# Use debian base image (same as openjdk uses)
+FROM debian:11-slim
+
+ENV JAVA_HOME=/jre
+ENV PATH="${JAVA_HOME}/bin:${PATH}"
+
+#copy JRE from the base image
+COPY --from=jre-build /customjre $JAVA_HOME
EXPOSE 8084 8435
USER ${user}
ADD target/${JAR} /opt/app/pmlog-service/pmlog.jar
-CMD ["java", "-jar", "/opt/app/pmlog-service/pmlog.jar"]
+CMD ["/jre/bin/java", "-jar", "/opt/app/pmlog-service/pmlog.jar"]
# ============LICENSE_END=========================================================
-FROM openjdk:17-jdk-slim
+FROM openjdk:17-jdk as jre-build
+
+RUN $JAVA_HOME/bin/jlink \
+--verbose \
+--add-modules ALL-MODULE-PATH \
+--strip-debug \
+--no-man-pages \
+--no-header-files \
+--compress=2 \
+--output /customjre
+
+# Use debian base image (same as openjdk uses)
+FROM debian:11-slim
+
+ENV JAVA_HOME=/jre
+ENV PATH="${JAVA_HOME}/bin:${PATH}"
+
+#copy JRE from the base image
+COPY --from=jre-build /customjre $JAVA_HOME
EXPOSE 8084 8435
USER ${user}
ADD target/${JAR} /opt/app/pm-producer-service/pmproducer.jar
-CMD ["java", "-jar", "/opt/app/pm-producer-service/pmproducer.jar"]
+CMD ["/jre/bin/java", "-jar", "/opt/app/pm-producer-service/pmproducer.jar"]
@Scheduled(fixedRate = REGISTRATION_SUPERVISION_INTERVAL_MS)
public void runSupervisionTask() {
- supervisionTask().subscribe( //
+ if (this.isRegisteredInIcs) {
+ return;
+ }
+ registerTypesAndProducer().subscribe( //
null, //
- this::handleRegistrationFailure, //
- this::handleRegistrationCompleted);
- }
-
- public Mono<String> supervisionTask() {
- return checkRegistration() //
- .filter(isRegistrationOk -> !isRegistrationOk || !this.isRegisteredInIcs) //
- .flatMap(isRegisterred -> registerTypesAndProducer());
+ this::handleRegistrationFailure//
+ );
}
private void handleRegistrationCompleted() {
return applicationConfig.getIcsBaseUrl() + "/data-producer/v1/info-producers/" + producerId;
}
- // Returns TRUE if registration is correct
- private Mono<Boolean> checkRegistration() {
- return restClient.get(producerRegistrationUrl()) //
- .flatMap(this::isRegisterredInfoCorrect) //
- .onErrorResume(t -> Mono.just(Boolean.FALSE));
- }
-
- private Mono<Boolean> isRegisterredInfoCorrect(String registerredInfoStr) {
- ProducerRegistrationInfo registerredInfo = gson.fromJson(registerredInfoStr, ProducerRegistrationInfo.class);
- if (isEqual(producerRegistrationInfo(), registerredInfo)) {
- logger.trace("Already registered in ICS");
- return Mono.just(Boolean.TRUE);
- } else {
- return Mono.just(Boolean.FALSE);
- }
- }
-
private String registerTypeUrl(InfoType type) {
return applicationConfig.getIcsBaseUrl() + "/data-producer/v1/info-types/" + type.getId();
}
- private Mono<String> registerTypesAndProducer() {
+ public Mono<String> registerTypesAndProducer() {
final int CONCURRENCY = 1;
return Flux.fromIterable(this.types.getAll()) //
CONCURRENCY) //
.collectList() //
.doOnNext(type -> logger.info("Registering producer")) //
- .flatMap(resp -> restClient.put(producerRegistrationUrl(), gson.toJson(producerRegistrationInfo())));
+ .flatMap(resp -> restClient.put(producerRegistrationUrl(), gson.toJson(producerRegistrationInfo())))
+ .doOnNext(n -> handleRegistrationCompleted());
}
private Mono<InfoType> createInputDataJob(InfoType type) {
return restClient.put(consumerJobUrl(JOB_ID), body)
.doOnError(t -> logger.error("Could not create job of type {}, reason: {}", type.getInputJobType(),
t.getMessage()))
- .onErrorResume(t -> Mono.just("")) //
.doOnNext(n -> logger.info("Created input job: {}, type: {}", JOB_ID, type.getInputJobType())) //
.map(x -> type);
}
}
private void waitForRegistration() {
+ producerRegistrationTask.registerTypesAndProducer().block();
// Register producer, Register types
await().untilAsserted(() -> assertThat(icsSimulatorController.testResults.registrationInfo).isNotNull());
- producerRegistrationTask.supervisionTask().block();
+ producerRegistrationTask.registerTypesAndProducer().block();
assertThat(icsSimulatorController.testResults.registrationInfo.supportedTypeIds).hasSize(this.types.size());
assertThat(producerRegistrationTask.isRegisteredInIcs()).isTrue();
await().untilAsserted(() -> assertThat(this.jobs.size()).isEqualTo(1));
}
- @Test
- void testReRegister() throws Exception {
- // Wait foir register types and producer
- waitForRegistration();
-
- // Clear the registration, should trigger a re-register
- icsSimulatorController.testResults.reset();
- producerRegistrationTask.supervisionTask().block();
- await().untilAsserted(() -> assertThat(icsSimulatorController.testResults.registrationInfo).isNotNull());
- assertThat(icsSimulatorController.testResults.registrationInfo.supportedTypeIds).hasSize(this.types.size());
-
- // Just clear the registerred types, should trigger a re-register
- icsSimulatorController.testResults.types.clear();
- await().untilAsserted(() -> assertThat(icsSimulatorController.testResults.registrationInfo.supportedTypeIds)
- .hasSize(this.types.size()));
- }
-
@Test
@SuppressWarnings("squid:S2925") // "Thread.sleep" should not be used in tests.
void testZZActuator() throws Exception {