Graph Modeling 10.2 to 10.3 Upgrade Guide
03/09/2026
This guide outlines the architectural changes, component updates, and configuration steps required to upgrade your Graph Modeling (formerly PoolParty) platform from version 10.2.x to 10.3.1. Note that data migration is handled automatically within the scope of this version upgrade.
Graph Modeling 10.3.1 introduces several important security improvements:
Component-Specific Keycloak Clients: The single, generic Keycloak client has been replaced with separated, component-specific clients (e.g.,
ppt,ppgs,extractor) with dedicated access scopes.Automated Migrations: Upgrading Keycloak to 2.6.0 automates the realm configuration migration upon container startup.
Important
We strongly recommend migrating from Graph Modeling version 10.2 directly to 10.3.1 by using the poolparty-keycloak image version 2.6.0. Graph Modeling 10.3.1 includes several critical patches for bugs and vulnerabilities, while Keycloak image 2.6.0 comes with an automated migration orchestrator that seamlessly handles your Keycloak realm and schema upgrades upon startup.
Stop all services: Stop any running processes related to Graph Modeling and Add-ons.
Component Version Updates: Update your infrastructure and add-on components to the following versions to ensure compatibility:
Core InfrastructureGraph Modeling (formerly PoolParty):
10.3.1Keycloak:
2.6.0GraphDB:
11.4.3Elasticsearch:
9.3.8
Add-onsIf your deployment includes Add-on services, update them to the following versions:
Semantic Workbench:
2.5.0ADF:
1.9.0GraphViews:
1.0.1
Mandatory Environment Variable Changes: Environment variables must be updated to reflect the new security architecture. Note that Keycloak must be seeded with the same secrets that the Graph Modeling (formerly PoolParty) core application and Add-ons will use to authenticate.
Variables to Remove (
poolparty): Remove the generic Keycloak client configurations from your configuration file (such as the.envfile when deploying via Docker compose):POOLPARTY_KEYCLOAK_LOGIN_CLIENTID= <generic-client-id> POOLPARTY_KEYCLOAK_LOGIN_CLIENTSECRET= <generic-client-secret>
Graph Modeling (
poolparty) Variables: Add the new component-specific client configurations, security toggles, and split URLs:Component Clients:
# PPT client configurations POOLPARTY_PPT_KEYCLOAK_LOGIN_CLIENTSECRET: <ppt-secret> POOLPARTY_PPT_KEYCLOAK_LOGIN_CLIENTID: <ppt-id> # PPGS client configurations POOLPARTY_PPGS_KEYCLOAK_LOGIN_CLIENTSECRET: <ppgs-secret> POOLPARTY_PPGS_KEYCLOAK_LOGIN_CLIENTID: <ppgs-id> # Extractor client configurations POOLPARTY_PPX_KEYCLOAK_LOGIN_CLIENTSECRET: <ppx-secret> POOLPARTY_PPX_KEYCLOAK_LOGIN_CLIENTID: <ppx-id>
Security & Validation:
# Audience mapping validation POOLPARTY_AUTH_OPENID_REQUIRE_AUDIENCE: <boolean-value>
Note
The
POOLPARTY_AUTH_OPENID_REQUIRE_AUDIENCEproperty enables audience mapping validation inside the PoolParty application for more granular control. If you use Add-ons such as ADF or Semantic Workbench set this property tofalsesince Add-ons are not fully migrated yet and cannot be used for service account roles. If you only use core components, set this property totrueto enforce strict audience validation. The default value of this property isfalse.URL Splitting:
# Internal Docker back-channel URL (tokens, JWKS validation) POOLPARTY_KEYCLOAK_INTERNAL_AUTHURL="http://keycloak:8080/auth" # Public browser-facing URL (authorization, issuer, logout) POOLPARTY_KEYCLOAK_PUBLIC_AUTHURL="${SERVER_URL}/auth"Keycloak Variables: To ensure Keycloak provisions the new component clients properly during automated migration, supply the matching secrets to the Keycloak service. These must align exactly with the corresponding
POOLPARTY_..._CLIENTSECRETvariables used in the core application:PPT_KEYCLOAK_LOGIN_CLIENTSECRET: Must matchPOOLPARTY_PPT_KEYCLOAK_LOGIN_CLIENTSECRETPPGS_KEYCLOAK_LOGIN_CLIENTSECRET: Must matchPOOLPARTY_PPGS_KEYCLOAK_LOGIN_CLIENTSECRETEXTRACTOR_KEYCLOAK_LOGIN_CLIENTSECRET: Must matchPOOLPARTY_EXTRACTOR_KEYCLOAK_LOGIN_CLIENTSECRET
Upgrade Add-ons: If you are using
addons.yaml, you must update the Add-on versions and adapt their Keycloak connection settings.Important
Starting with Semantic Workbench 2.5.0 and ADF 1.9.0, the single
KEYCLOAK_URLvariable is deprecated and now maps exclusively to internal traffic.To resolve past OAuth redirect issues, Keycloak network traffic has been split. The following variables can now be used instead:
KEYCLOAK_PUBLIC_URL: Used for browser-facing actions (authorization, issuer, logout).KEYCLOAK_INTERNAL_URL: Used for back-channel service communication (tokens, JWKS validation).
Details can be found in the
addons.yamland.env_templatefiles in the compose-files repository.General Environment Variable Changes Applied to ADF and Semantic WorkbenchClient Secret Update: Update the OAuth2 client registration to use the new
PPTspecific secret:SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_PPT_CLIENTSECRET: "${POOLPARTY_PPT_KEYCLOAK_LOGIN_CLIENTSECRET}"
Semantic WorkbenchAPPLICATION_VERSION: must be set to"2.5.0"OAuth2 URIs: Ensure the authorization and issuer URIs explicitly reference the realm variable:
spring.security.oauth2.client.provider.keycloak.authorization-uri: ${SERVER_URL}/auth/realms/${POOLPARTY_KEYCLOAK_LOGIN_REALM}/protocol/openid-connect/auth spring.security.oauth2.resourceserver.jwt.issuer-uri: ${SERVER_URL}/auth/realms/${POOLPARTY_KEYCLOAK_LOGIN_REALM}
Optional Keycloak Environment Variable Changes: Keycloak 2.6.0 introduces an automated migration orchestrator which runs on startup. You can fine-tune this process using several optional environment variables passed to the Keycloak component.
Note
You do not need to configure these unless you require custom migration behavior.
AUTO_MIGRATION_ENABLED: Toggles the startup migration orchestrator.SUPERADMIN_REQUIRES_ACTIONS: Controls mandatory password resets on the initial import of the superadmin.POOLPARTY_KEYCLOAK_REALM: Target realm identifier for orchestrator runs.TARGET_MIGRATION_VERSION,MIGRATION_BASELINE_VERSION,CURRENT_VERSION: Controls version boundaries for automated schema/realm upgrades.MIGRATION_TIMEOUT,MIGRATION_READINESS_TIMEOUT,MIGRATION_REALM_TIMEOUT,MIGRATION_SCRIPT_TIMEOUT,MIGRATION_LOCK_TIMEOUT: Fine-grained timeout controls for migration readiness and locks.MIGRATION_HEALTH_SIGNAL_FILE,MIGRATION_LOG_FILE,MIGRATION_LOG_DEBUG,MIGRATION_LOG_MAX_BYTES: Controls for logging and orchestrator health signal markers.
Startup: Depending on your deployment choose one of the following startup methods:
Staged Startup (Without Health Checks): If your deployment environment does not support dependency healthcheck probes, you must start the services in phases:
Start Infrastructure First: After having applied all necessary configurations and image upgrades, start Keycloak (2.6.0), GraphDB, and Elasticsearch. Keycloak will run the migration orchestrator automatically. Wait until Keycloak finishes migrating and is ready to accept connections.
Start Core Application & Add-ons: Once Keycloak is fully migrated, start Graph Modeling (10.3.1) and your Add-on services.
Single-Step Startup (With Health Checks: If your orchestrator (like Docker Compose or Kubernetes) uses readiness probes, you can deploy the entire stack simultaneously. The core services will wait until the Keycloak migration is complete before starting.
Example for Docker Compose Environments:
You can configure a health check to ensure Keycloak 2.6.0 has finished its automated migration by verifying the presence of the migration signal file before declaring the service healthy:
services: keycloak: image: ontotext/poolparty-keycloak:2.6.0 # ... environment variables ... healthcheck: test: - "CMD-SHELL" - "[ -f /opt/keycloak/data/migration_done ] && { printf 'HEAD /auth/health/ready HTTP/1.0\r\n\r\n' >&0; grep -q '200'; } 0<>/dev/tcp/localhost/9000" interval: 10s timeout: 10s retries: 30 start_period: 180s poolparty: image: ontotext/poolparty:10.3.1 # ... environment variables ... depends_on: keycloak: condition: service_healthy