diff --git a/.claude/settings.local.json b/.claude/settings.local.json
index 8b4d58d..f5c663d 100644
--- a/.claude/settings.local.json
+++ b/.claude/settings.local.json
@@ -9,7 +9,10 @@
"Bash(sed -n '582,600p' \"C:\\\\src\\\\Galabau\\\\glb-spielwiese\\\\database\\\\packages\\\\pck_net_storage.pkb\")",
"WebFetch(domain:docs.public.oneportal.content.oci.oraclecloud.com)",
"Bash(./mvnw compile *)",
- "WebFetch(domain:medium.com)"
+ "WebFetch(domain:medium.com)",
+ "WebFetch(domain:quarkus.io)",
+ "WebFetch(domain:github.com)",
+ "WebFetch(domain:walidhajeri.hashnode.dev)"
]
}
}
diff --git a/quarkus-automaton/.vscode/settings.json b/quarkus-automaton/.vscode/settings.json
index c5f3f6b..0e14d8e 100644
--- a/quarkus-automaton/.vscode/settings.json
+++ b/quarkus-automaton/.vscode/settings.json
@@ -1,3 +1,3 @@
{
- "java.configuration.updateBuildConfiguration": "interactive"
+ "java.configuration.updateBuildConfiguration": "disabled"
}
\ No newline at end of file
diff --git a/quarkus-automaton/pom.xml b/quarkus-automaton/pom.xml
index 0dddb51..193037a 100644
--- a/quarkus-automaton/pom.xml
+++ b/quarkus-automaton/pom.xml
@@ -75,17 +75,11 @@
0.38.0
-
-
+
com.oracle.oci.sdk
- oci-java-sdk-objectstorage
- 3.44.0
-
-
-
- com.oracle.oci.sdk
- oci-java-sdk-common-httpclient-jersey3
+ oci-java-sdk-shaded-full
3.44.0
diff --git a/quarkus-automaton/src/main/java/de/galabau/dateieingang/oci/OciUploadService.java b/quarkus-automaton/src/main/java/de/galabau/dateieingang/oci/OciUploadService.java
index 0134b28..8d22b21 100644
--- a/quarkus-automaton/src/main/java/de/galabau/dateieingang/oci/OciUploadService.java
+++ b/quarkus-automaton/src/main/java/de/galabau/dateieingang/oci/OciUploadService.java
@@ -1,5 +1,6 @@
package de.galabau.dateieingang.oci;
+import com.oracle.bmc.Region;
import com.oracle.bmc.auth.SimpleAuthenticationDetailsProvider;
import com.oracle.bmc.objectstorage.ObjectStorage;
import com.oracle.bmc.objectstorage.ObjectStorageClient;
@@ -9,6 +10,7 @@ import de.galabau.dateieingang.exception.OciException;
import de.galabau.dateieingang.model.FileEntry;
import de.galabau.dateieingang.model.ProcessingContext;
import io.quarkus.logging.Log;
+import io.quarkus.runtime.Startup;
import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
@@ -23,6 +25,7 @@ import java.util.List;
* Lädt die entpackten Dateien und den Marker in OCI Object Storage hoch.
* Authentifizierung via OCI HTTP Signature V1 (entspricht APEX Web Credential vom Typ OCI).
*/
+//@Startup
@ApplicationScoped
public class OciUploadService {
@@ -34,24 +37,29 @@ public class OciUploadService {
@PostConstruct
void init() {
Log.info("Initialisiere OCI ObjectStorage-Client...");
- SimpleAuthenticationDetailsProvider auth = SimpleAuthenticationDetailsProvider.builder()
- .tenantId(config.tenancyId())
- .userId(config.userId())
- .fingerprint(config.fingerprint())
- .privateKeySupplier(() -> {
- try {
- return Files.newInputStream(Path.of(config.privateKeyPath()));
- } catch (IOException e) {
- throw new RuntimeException("OCI Private Key nicht lesbar: "
- + config.privateKeyPath(), e);
- }
- })
- .build();
- Log.info("Auhtentifizierung...");
- client = ObjectStorageClient.builder()
- .endpoint("https://objectstorage." + config.region() + ".oraclecloud.com")
- .build(auth);
- Log.infof("OCI ObjectStorage-Client initialisiert (Region: %s, Bucket: %s)", config.region(), config.bucket());
+ try {
+ SimpleAuthenticationDetailsProvider auth = SimpleAuthenticationDetailsProvider.builder()
+ .tenantId(config.tenancyId())
+ .userId(config.userId())
+ .fingerprint(config.fingerprint())
+ .region(Region.fromRegionId(config.region()))
+ .privateKeySupplier(() -> {
+ try {
+ return Files.newInputStream(Path.of(config.privateKeyPath()));
+ } catch (IOException e) {
+ throw new RuntimeException("OCI Private Key nicht lesbar: "
+ + config.privateKeyPath(), e);
+ }
+ })
+ .build();
+ Log.info("Authentifizierung...");
+ client = ObjectStorageClient.builder()
+ .build(auth);
+ Log.infof("OCI ObjectStorage-Client initialisiert (Region: %s, Bucket: %s)", config.region(), config.bucket());
+ } catch (Throwable e) {
+ Log.errorf(e, "OCI ObjectStorage-Client Initialisierung fehlgeschlagen");
+ throw new RuntimeException("OCI-Client konnte nicht initialisiert werden", e);
+ }
}
/**
diff --git a/quarkus-automaton/src/main/java/de/galabau/dateieingang/pipeline/FileProcessingPipeline.java b/quarkus-automaton/src/main/java/de/galabau/dateieingang/pipeline/FileProcessingPipeline.java
index 7cd676f..3891b88 100644
--- a/quarkus-automaton/src/main/java/de/galabau/dateieingang/pipeline/FileProcessingPipeline.java
+++ b/quarkus-automaton/src/main/java/de/galabau/dateieingang/pipeline/FileProcessingPipeline.java
@@ -69,7 +69,7 @@ public class FileProcessingPipeline {
executor.submit(() -> {
try {
processAll();
- } catch (Exception e) {
+ } catch (Throwable e) { // nicht exception catchen, weil Error in OCI SDK auftreten können, die Throwable aber nicht Excption sind. Die würden sonst nicht geloggt
Log.errorf(e, "Unerwarteter Fehler im Pipeline-Lauf");
} finally {
isRunning.set(false);
diff --git a/quarkus-automaton/src/main/resources/application.properties b/quarkus-automaton/src/main/resources/application.properties
index 0ad6d5c..d1b5bd4 100644
--- a/quarkus-automaton/src/main/resources/application.properties
+++ b/quarkus-automaton/src/main/resources/application.properties
@@ -39,7 +39,7 @@ galabau.oci.fingerprint=${OCI_FINGERPRINT}
# Base-URL bis einschließlich Modul-Pfad, z.B. https://apex.example.com/ords/myschema/auto_import
galabau.ords.base-url=${GALABAU_ORDS_BASE_URL}
galabau.ords.api-key=${GALABAU_ORDS_API_KEY}
-# MicroProfile REST Client liest die URL aus dieser Property:
+# MicroProfile REST Client liest die URL aus dieser Property. Das hier ist eine einfache weiterleitung auf die env variable GALABAU_ORDS_BASE_URL (s.o.)
quarkus.rest-client.ords-client.url=${galabau.ords.base-url}
# ===== Observability =====