Leitfaden für die Migration von B2B Java 8 auf B2B Java 25
Hinweis: Diese Seite wächst schrittweise – wir sammeln hier nach und nach die Themen, die bei einer Migration von B2B Java 8 auf Java 25 relevant sind. Sie ersetzt noch keine vollständige Migrationsberatung. Für eine konkrete Planung sprechen Sie uns gerne an – gemeinsam finden wir den richtigen Weg für Ihre Umgebung.

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&amp;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. How Keycloak works with Spring Security

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

  1. Contribution-JAR-Dateien herunterladen aus dem Download Portal (Private/aep/b2b/aep-b2b-contributions/) und in einen lokalen Ordner ablegen (z.B. ./contributions/).

  2. Startup-Skript erstellen (z.B. copy-contributions.sh), das die JARs beim Container-Start in das WEB-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
    
  3. In die docker-compose.yml einbinden: Den Ordner mit den JAR-Dateien als Volume nach /opt/contributions im Container mounten. Das Startup-Skript mounten und als entrypoint registrieren, 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"
    
  4. 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.

Bitte testen Sie die korrekte Funktion der Contributions besonders sorgfältig. Im Rahmen der Entwicklung können wir die grundlegende Funktionsfähigkeit verifizieren; ein vollständiger Integrationstest ist jedoch nur im Zusammenspiel mit Ihrem Backend-System möglich.

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

:2181 ist der Standard-ZooKeeper-Port – der tatsächliche Port hängt von Ihrer Systemkonfiguration ab.

View Me   Edit Me