Tomcat Upgrade und Keycloak-Adapter
Mit den neuesten Änderungen wurde die B2B-Anwendung auf Java 25 aktualisiert und muss nun auf Tomcat 10 betrieben werden.
Die bisher verwendete Keycloak-Adapter-Lösung für Tomcat 9 wird unter Tomcat 10 nicht mehr unterstützt. Die Keycloak-basierte Authentifizierung muss daher künftig über Spring Security realisiert werden – der alte Tomcat-Keycloak-Adapter entfällt.
Die Java-25-B2B-Anwendung wird als Docker-Image auf Basis von Tomcat 10 ausgeliefert.
Auswirkungen auf kundenseitige Konfigurationen
Für Kunden mit angepassten Deployments ist besondere Aufmerksamkeit bei der bestehenden b2bbp-engine.xml (oder einer gleichnamigen Kontext-Konfigurationsdatei) erforderlich.
In Tomcat 9 wurde die Keycloak-Integration über ein Valve und einen Parameter in der Kontext-Datei konfiguriert. Diese Einträge werden in Tomcat 10 nicht mehr unterstützt und führen dazu, dass der Server nicht startet.
Die Keycloak-bezogenen Valve- und Parameter-Einträge müssen entfernt oder auskommentiert werden.
Beispiel: Aktualisierte b2bbp-engine.xml
Nachfolgend ein Beispiel der aktualisierten Kontext-Konfiguration, in der die nicht mehr unterstützten Keycloak-Einträge auskommentiert wurden:
<?xml version="1.0" encoding="UTF-8"?>
<Context
path="/b2bbp-engine"
reloadable="true"
crossContext="true">
<Resource
name="jdbc/b2bbp"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://b2b-database:5432/b2bbp?targetServerType=master&currentSchema=b2bbp"
username="postgres"
password="__IHR_DATENBANKPASSWORT__"
maxActive="25"
initialSize="5"
maxIdle="10"
minIdle="1"
maxWait="1200000"
validationQuery="SELECT 1"
validationInterval="30000"
timeBetweenEvictionRunsMillis="30000"
testOnBorrow="true"
removeAbandoned="false"
testOnReturn="true"
testWhileIdle="true"
maxAge="45000"
logAbandoned="true"
suspectTimeout="90"
logValidationErrors="true"
/>
<!-- <Valve className="org.keycloak.adapters.tomcat.KeycloakAuthenticatorValve"/>-->
<!-- <Parameter name="keycloak.config.file" value="/usr/local/tomcat/conf/keycloak.json" override="false"/>-->
</Context>
Im Inneren der B2B Docker-Container wird die Keycloak-Konfiguration nun über Spring Security bereitgestellt. Die Keycloak-Adapter-Konfiguration in der b2bbp-engine.xml ist daher nicht mehr erforderlich.

Code mit kundeneigenen Anpassungen (Contributions) zur B2B hinzufügen
Hintergrund
Im Rahmen der Java 25 / Jakarta EE Migration wurden Klassen mit Dritt-Copyright (d.h. Copyright, das nicht bei Arvato Systems oder Next Level Integration liegt) aus der B2B Shell (aep-b2b-monolith-shell) und dem B2B Core (aep-b2b) entfernt. Diese Klassen wurden in ein separates Open-Source-Repository ausgelagert: aep-b2b-contributions.
Die fertig gebauten Contribution-JAR-Dateien stehen im Download Portal zum Download bereit unter Private/aep/b2b/aep-b2b-contributions/.
Wenn Ihre B2B-Installation eine der ausgelagerten Contribution-Klassen verwendet (z.B. org.gdf.z1compliancecheck.services.MailService, org.e4u.zugferd., org.b2bbp.runtime.secunet.), müssen Sie die Contribution-JARs wie unten beschrieben zu Ihrem B2B-Container hinzufügen.
Schritte zum Hinzufügen der Contributions in einer dockerisierten B2B
-
Contribution-JAR-Dateien herunterladen aus dem Download Portal (
Private/aep/b2b/aep-b2b-contributions/) und in einen lokalen Ordner ablegen (z.B../contributions/). -
Startup-Skript erstellen (z.B.
copy-contributions.sh), das die JARs beim Container-Start in dasWEB-INF/lib-Verzeichnis der B2B-Webanwendung kopiert:#!/bin/bash # Contribution-JARs beim Start nach WEB-INF/lib kopieren if [ -d "/opt/contributions" ]; then jar_count=$(ls /opt/contributions/*.jar 2>/dev/null | wc -l) if [ "$jar_count" -gt 0 ]; then cp -f /opt/contributions/*.jar /usr/local/tomcat/webapps/b2bbp-engine/WEB-INF/lib/ echo "Copied $jar_count contribution JAR(s) from /opt/contributions/ into WEB-INF/lib" else echo "No contribution JARs found in /opt/contributions/" fi fi -
In die docker-compose.yml einbinden: Den Ordner mit den JAR-Dateien als Volume nach
/opt/contributionsim Container mounten. Das Startup-Skript mounten und alsentrypointregistrieren, damit es vor dem Anwendungsstart ausgeführt wird.services: b2b: image: <ihr-b2b-image>:<version> volumes: # Contribution-JARs bereitstellen - ./contributions:/opt/contributions:ro # Startup-Skript einbinden - ./copy-contributions.sh:/usr/local/bin/copy-contributions.sh:ro entrypoint: - /bin/bash - -c - | bash /usr/local/bin/copy-contributions.sh exec /usr/local/bin/start-b2b.sh ports: - "8080:8080"Note: Passen Siestart-b2b.shan den tatsächlichen Entrypoint Ihres B2B-Images an. Den korrekten Wert können Sie mitdocker inspect <image> --format='{{'{{'}}.Config.Entrypoint{{'}}'}}'ermitteln. -
Container neu starten. Beim Start kopiert das Skript die Contribution-JARs in den Classpath der B2B-Engine (
WEB-INF/lib). Die B2B-Anwendung kann dann die in Ihrem Customizing referenzierten Contribution-Klassen (Services, Actions, etc.) finden und laden.
Überprüfung
Prüfen Sie nach dem Container-Start, ob die Contribution-JARs korrekt in das WEB-INF/lib-Verzeichnis kopiert wurden. Die JARs müssen dort
neben den übrigen B2B-JARs sichtbar sein:
docker compose exec b2b ls /usr/local/tomcat/webapps/b2bbp-engine/WEB-INF/lib/
Sind die Dateien vorhanden, wurde das Skript erfolgreich ausgeführt und die Klassen stehen der B2B-Anwendung zur Verfügung.
Searchlayer-Konfiguration
Die Searchlayer-Konfiguration muss in der Extension “SEARCH_LAYER_CONFIGURATION” verändert werden. In der Vergangenheit zeigte sie auf den Solr-Container. Jetzt muss sie auf den Zookeeper-Container zeigen.
SEARCH_SYSTEM_VENDOR=SOLR
SEARCH_TYPES=FULLTEXT,SYSTEMSPLIT_METERINGPOINT,SYSTEMSPLIT_RESPONSE,ARCHIVE
-SOLR_URLS=http://solr1:8983/solr
+SOLR_URLS=zoo1:2181
FULLTEXT_SOLR_COLLECTION=fulltext
SYSTEMSPLIT_METERINGPOINT_SOLR_COLLECTION=systemsplit_meteringpoint
SYSTEMSPLIT_RESPONSE_SOLR_COLLECTION=systemsplit_response
ARCHIVE_SOLR_COLLECTION=archive
View Me Edit Me
:2181ist der Standard-ZooKeeper-Port – der tatsächliche Port hängt von Ihrer Systemkonfiguration ab.