This is an automated email from the ASF dual-hosted git repository. ilgrosso pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/syncope.git
commit 5b077053d3d4288fbfb38c5f888702c5529beeec Author: Francesco Chicchiriccò <[email protected]> AuthorDate: Fri Apr 17 08:36:27 2026 +0200 Adding neo4j experimental option to the docs --- .../src/test/resources/domains/TwoSecurity.json | 4 -- .../src/test/resources/domains/TwoSecurity.json | 4 -- pom.xml | 1 + .../asciidoc/getting-started/introduction.adoc | 2 +- .../getting-started/systemRequirements.adoc | 5 ++ .../reference-guide/architecture/core.adoc | 4 +- .../asciidoc/reference-guide/concepts/reports.adoc | 2 +- .../asciidoc/reference-guide/concepts/tasks.adoc | 8 +-- .../reference-guide/concepts/typemanagement.adoc | 2 +- .../configuration/configuration.adoc | 2 +- .../configuration/configurationparameters.adoc | 2 +- .../reference-guide/configuration/deployment.adoc | 8 +-- .../configuration/domainsmanagement.adoc | 3 +- .../configuration/{dbms.adoc => storage.adoc} | 64 +++++++++++++++++++++- .../asciidoc/reference-guide/howto/upgrade.adoc | 2 +- 15 files changed, 86 insertions(+), 27 deletions(-) diff --git a/core/persistence-jpa/src/test/resources/domains/TwoSecurity.json b/core/persistence-jpa/src/test/resources/domains/TwoSecurity.json deleted file mode 100644 index 53e0269b71..0000000000 --- a/core/persistence-jpa/src/test/resources/domains/TwoSecurity.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "password": "2AA60A8FF7FCD473D321E0146AFD9E26DF395147", - "cipherAlgorithm": "SHA" -} diff --git a/core/persistence-neo4j/src/test/resources/domains/TwoSecurity.json b/core/persistence-neo4j/src/test/resources/domains/TwoSecurity.json deleted file mode 100644 index 53e0269b71..0000000000 --- a/core/persistence-neo4j/src/test/resources/domains/TwoSecurity.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "password": "2AA60A8FF7FCD473D321E0146AFD9E26DF395147", - "cipherAlgorithm": "SHA" -} diff --git a/pom.xml b/pom.xml index ce95b8e1b4..3799546d5f 100644 --- a/pom.xml +++ b/pom.xml @@ -2315,6 +2315,7 @@ under the License. <mysql>${docker.mysql.version}</mysql> <mariadb>${docker.mariadb.version}</mariadb> <oracle>${docker.oracle.version}</oracle> + <neo4j>${docker.neo4j.version}</neo4j> <postgresqlJDBC>${jdbc.postgresql.version}</postgresqlJDBC> <mysqlJDBC>${jdbc.mysql.version}</mysqlJDBC> <mariadbJDBC>${jdbc.mariadb.version}</mariadbJDBC> diff --git a/src/main/asciidoc/getting-started/introduction.adoc b/src/main/asciidoc/getting-started/introduction.adoc index 8244169696..5e11e15f6c 100644 --- a/src/main/asciidoc/getting-started/introduction.adoc +++ b/src/main/asciidoc/getting-started/introduction.adoc @@ -146,7 +146,7 @@ http://www.bpmn.org/[BPMN 2.0^] implementations - or define new, custom ones. * *_Persistence_* manages all data (users, groups, attributes, resources, ...) at a high level using a standard https://jakarta.ee/specifications/persistence/3.2/[Jakarta Persistence 3.2] approach. The data is persisted to an underlying database, referred to as *_Internal Storage_*. Consistency is ensured via the comprehensive -https://docs.spring.io/spring-framework/reference/6.2/data-access/transaction.html[transaction management^] +https://docs.spring.io/spring-framework/reference/7.0/data-access/transaction.html[transaction management^] provided by the Spring Framework. + Globally, this offers the ability to easily scale up to a million entities and at the same time allows great portability with no code changes: PostgreSQL, MySQL, MariaDB and Oracle are fully supported deployment options. diff --git a/src/main/asciidoc/getting-started/systemRequirements.adoc b/src/main/asciidoc/getting-started/systemRequirements.adoc index fe64fcac67..53c75ecfca 100644 --- a/src/main/asciidoc/getting-started/systemRequirements.adoc +++ b/src/main/asciidoc/getting-started/systemRequirements.adoc @@ -48,3 +48,8 @@ Apache Syncope {docVersion} is verified with the recent versions of the followin . https://mariadb.org/[MariaDB^] (>= {mariadb}, JDBC driver >= {mariadbJDBC}) . https://www.mysql.com/[MySQL^] (>= {mysql}, JDBC driver >= {mysqlJDBC}) . https://www.oracle.com/database/index.html[Oracle Database^] (>= {oracle}, JDBC driver >= ojdbc11 {oracleJDBC}) + +[WARNING] +Persistence support for https://neo4j.com/product/neo4j-graph-database/[Neo4j Graph Database^] (>= {neo4j}) is also +available. + +While completely functional, the code is not considered stable for production environments. diff --git a/src/main/asciidoc/reference-guide/architecture/core.adoc b/src/main/asciidoc/reference-guide/architecture/core.adoc index dbe085499c..8d04ac598f 100644 --- a/src/main/asciidoc/reference-guide/architecture/core.adoc +++ b/src/main/asciidoc/reference-guide/architecture/core.adoc @@ -85,12 +85,12 @@ using a standard https://jakarta.ee/specifications/persistence/3.2/[Jakarta Pers https://hibernate.org/orm/[Hibernate ORM^]. The data is persisted into an underlying database, referred to as *_Internal Storage_*. Consistency is ensured via the comprehensive -https://docs.spring.io/spring-framework/reference/6.2/data-access/transaction.html[transaction management^] +https://docs.spring.io/spring-framework/reference/7.0/data-access/transaction.html[transaction management^] provided by the Spring Framework. Globally, this offers the ability to easily scale up to a million entities and at the same time allows great portability with no code changes: PostgreSQL, MySQL, MariaDB and Oracle are fully supported -<<dbms,deployment options>>. +<<internal-storage,deployment options>>. <<domains>> allow to manage data belonging to different https://en.wikipedia.org/wiki/Multitenancy[tenants^] into separate database instances. diff --git a/src/main/asciidoc/reference-guide/concepts/reports.adoc b/src/main/asciidoc/reference-guide/concepts/reports.adoc index 428933142b..7f8ca84359 100644 --- a/src/main/asciidoc/reference-guide/concepts/reports.adoc +++ b/src/main/asciidoc/reference-guide/concepts/reports.adoc @@ -34,4 +34,4 @@ endif::[] providing the custom logic to extract information from Syncope and generate output according to the configured mime type * scheduling information: ** when to start -** https://docs.spring.io/spring-framework/reference/6.2/integration/scheduling.html#scheduling-cron-expression[cron expression^] +** https://docs.spring.io/spring-framework/reference/7.0/integration/scheduling.html#scheduling-cron-expression[cron expression^] diff --git a/src/main/asciidoc/reference-guide/concepts/tasks.adoc b/src/main/asciidoc/reference-guide/concepts/tasks.adoc index 5d265251f4..78b07d96a9 100644 --- a/src/main/asciidoc/reference-guide/concepts/tasks.adoc +++ b/src/main/asciidoc/reference-guide/concepts/tasks.adoc @@ -101,7 +101,7 @@ When defining a pull task, the following information must be provided: * <<pull-templates,entity templates>> * scheduling information: ** when to start -** https://docs.spring.io/spring-framework/reference/6.2/integration/scheduling.html#scheduling-cron-expression[cron expression^] +** https://docs.spring.io/spring-framework/reference/7.0/integration/scheduling.html#scheduling-cron-expression[cron expression^] [NOTE] ==== @@ -189,7 +189,7 @@ When defining a push task, the following information must be provided: * optional <<pushactions,push action(s)>> * scheduling information: ** when to start -** https://docs.spring.io/spring-framework/reference/6.2/integration/scheduling.html#scheduling-cron-expression[cron expression^] +** https://docs.spring.io/spring-framework/reference/7.0/integration/scheduling.html#scheduling-cron-expression[cron expression^] [NOTE] ==== @@ -258,7 +258,7 @@ When defining a macro task, the following information must be provided: list, update or execute the given macro task * scheduling information: ** when to start -** https://docs.spring.io/spring-framework/reference/6.2/integration/scheduling.html#scheduling-cron-expression[cron expression^] +** https://docs.spring.io/spring-framework/reference/7.0/integration/scheduling.html#scheduling-cron-expression[cron expression^] ===== MacroActions @@ -510,7 +510,7 @@ endif::[] providing the custom logic to execute * scheduling information: ** when to start -** https://docs.spring.io/spring-framework/reference/6.2/integration/scheduling.html#scheduling-cron-expression[cron expression^] +** https://docs.spring.io/spring-framework/reference/7.0/integration/scheduling.html#scheduling-cron-expression[cron expression^] [TIP] ==== diff --git a/src/main/asciidoc/reference-guide/concepts/typemanagement.adoc b/src/main/asciidoc/reference-guide/concepts/typemanagement.adoc index 426e571092..4b86130953 100644 --- a/src/main/asciidoc/reference-guide/concepts/typemanagement.adoc +++ b/src/main/asciidoc/reference-guide/concepts/typemanagement.adoc @@ -47,7 +47,7 @@ https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/text/DateForma ** `Dropdown` - allows to specify an <<implementations,implementation>> which will dynamically return the value(s) that can be selected ** `Encrypted` -*** secret key (stored or referenced as https://docs.spring.io/spring-framework/reference/6.2/core/beans/environment.html#beans-using-propertysource[Spring property^]) +*** secret key (stored or referenced as https://docs.spring.io/spring-framework/reference/7.0/core/beans/environment.html#beans-using-propertysource[Spring property^]) *** cipher algorithm *** whether transparent encryption is to be enabled, e.g. attribute values are stored as encrypted but available as cleartext on-demand (requires AES ciphering) diff --git a/src/main/asciidoc/reference-guide/configuration/configuration.adoc b/src/main/asciidoc/reference-guide/configuration/configuration.adoc index 39352cce7f..cdeab1759d 100644 --- a/src/main/asciidoc/reference-guide/configuration/configuration.adoc +++ b/src/main/asciidoc/reference-guide/configuration/configuration.adoc @@ -46,7 +46,7 @@ was generated, the configuration files will be first searched in include::deployment.adoc[] -include::dbms.adoc[] +include::storage.adoc[] include::highavailability.adoc[] diff --git a/src/main/asciidoc/reference-guide/configuration/configurationparameters.adoc b/src/main/asciidoc/reference-guide/configuration/configurationparameters.adoc index bfb339bdb2..b4f9d80046 100644 --- a/src/main/asciidoc/reference-guide/configuration/configurationparameters.adoc +++ b/src/main/asciidoc/reference-guide/configuration/configurationparameters.adoc @@ -38,7 +38,7 @@ behaviors at runtime, expecially with high-availability. * `jwt.lifetime.minutes` - validity of https://en.wikipedia.org/wiki/JSON_Web_Token[JSON Web Token^] values used for <<rest-authentication-and-authorization,authentication>> (in minutes); * `notificationjob.cronExpression` - -https://docs.spring.io/spring-framework/reference/6.2/integration/scheduling.html#scheduling-cron-expression[cron^] expression describing how +https://docs.spring.io/spring-framework/reference/7.0/integration/scheduling.html#scheduling-cron-expression[cron^] expression describing how frequently the pending <<tasks-notification,notification tasks>> are processed: empty means disabled; [NOTE] Restarting the deployment is required when changing value for this parameter. diff --git a/src/main/asciidoc/reference-guide/configuration/deployment.adoc b/src/main/asciidoc/reference-guide/configuration/deployment.adoc index c9d18ce736..a627f7ea79 100644 --- a/src/main/asciidoc/reference-guide/configuration/deployment.adoc +++ b/src/main/asciidoc/reference-guide/configuration/deployment.adoc @@ -24,7 +24,7 @@ Jakarta EE containers. [WARNING] The only exception is <<secure-remote-access>> that, being based on Spring Cloud Gateway - which in turn is built on -https://docs.spring.io/spring-framework/reference/6.2/web-reactive.html[Spring WebFlux^] and +https://docs.spring.io/spring-framework/reference/7.0/web-reactive.html[Spring WebFlux^] and https://projectreactor.io/docs[Project Reactor^], is only available as standalone application. [CAUTION] @@ -58,7 +58,7 @@ https://docs.spring.io/spring-boot/4.0/reference/features/spring-application.htm .Run Core application as standalone under GNU / Linux ==== -Assuming that the JDBC driver JAR file for the configured <<dbms>> is available under `/opt/syncope/lib`, +Assuming that the JDBC driver JAR file for the configured <<internal-storage>> is available under `/opt/syncope/lib`, the Core application can be built and run as follows: [source,bash] @@ -93,8 +93,8 @@ settings. **** The <<persistence,internal storage>> is the central place where all data of a given <<Core>> deployment are located. -After choosing the appropriate <<DBMS>>, it is of fundamental importance to provide an adequate configuration for the -related database https://en.wikipedia.org/wiki/Connection_pool[connection pool^]. +After choosing the appropriate technology for <<internal-storage>>, it is of fundamental importance to provide an +adequate configuration for the related database https://en.wikipedia.org/wiki/Connection_pool[connection pool^]. The database connection pool can be: diff --git a/src/main/asciidoc/reference-guide/configuration/domainsmanagement.adoc b/src/main/asciidoc/reference-guide/configuration/domainsmanagement.adoc index 28363caf4a..2437504aa1 100644 --- a/src/main/asciidoc/reference-guide/configuration/domainsmanagement.adoc +++ b/src/main/asciidoc/reference-guide/configuration/domainsmanagement.adoc @@ -18,10 +18,9 @@ // === Domains Management -Besides the pre-defined `Master` domain, other <<domains>> are bootstrapped during <<core>> startup from three files +Besides the pre-defined `Master` domain, other <<domains>> are bootstrapped during <<core>> startup from two files in the <<properties-files-location,configuration directory>>; assuming that the domain name is `Two`, such files are: -* `domains/TwoSecurity.json` - admin credentials; * `domains/TwoKeymasterConfParams.json` - for <<keymaster>> initialization; * `domains/TwoContent.xml` - for <<import,content>> initialization. diff --git a/src/main/asciidoc/reference-guide/configuration/dbms.adoc b/src/main/asciidoc/reference-guide/configuration/storage.adoc similarity index 79% rename from src/main/asciidoc/reference-guide/configuration/dbms.adoc rename to src/main/asciidoc/reference-guide/configuration/storage.adoc index 123c87c0f4..67146c24ca 100644 --- a/src/main/asciidoc/reference-guide/configuration/dbms.adoc +++ b/src/main/asciidoc/reference-guide/configuration/storage.adoc @@ -16,7 +16,7 @@ // specific language governing permissions and limitations // under the License. // -=== DBMS +=== Internal Storage ==== PostgreSQL @@ -163,3 +163,65 @@ for the Core application. [WARNING] This assumes that you have an Oracle instance running on localhost, listening on its default port 1521 with a database `syncope` under tablespace `SYNCOPE`, fully accessible by user `syncope` with password `syncope`. + +==== Neo4j + +[NOTE] +Apache Syncope {docVersion} is verified with Neo4j Graph Database >= {neo4j}). + +[WARNING] +While completely functional, the code is not considered stable for production environments. + +Replace + +[source,xml] +.... + <dependency> + <groupId>org.apache.syncope.core</groupId> + <artifactId>syncope-core-starter</artifactId> + </dependency> +.... + +with + +[source,xml] +.... + <dependency> + <groupId>org.apache.syncope.core</groupId> + <artifactId>syncope-core-starter</artifactId> + <exclusions> + <exclusion> + <groupId>org.apache.syncope.core</groupId> + <artifactId>syncope-core-persistence-jpa</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.apache.syncope.core</groupId> + <artifactId>syncope-core-persistence-neo4j</artifactId> + <version>${syncope.version}</version> + </dependency> +.... + +in `core/pom.xml`. + +Create + +[source] +.... +persistence.domain[0].key=Master +persistence.domain[0].uri=bolt://localhost:7687/ +persistence.domain[0].username=neo4j +persistence.domain[0].password=null +persistence.domain[0].maxConnectionPoolSize=100 +.... + +as `core/src/main/resources/core-neo4j.properties`. + +Do not forget to include `neo4j` as +https://docs.spring.io/spring-boot/3.5/reference/features/profiles.html#features.profiles.adding-active-profiles[Spring Boot profile^] +for the Core application. + +[WARNING] +This assumes that you have a Neo4j instance running on localhost, listening on its default port 7687, +fully accessible by user `neo4j` with no password set. diff --git a/src/main/asciidoc/reference-guide/howto/upgrade.adoc b/src/main/asciidoc/reference-guide/howto/upgrade.adoc index d7c2b8e4c3..b5a380e1b5 100644 --- a/src/main/asciidoc/reference-guide/howto/upgrade.adoc +++ b/src/main/asciidoc/reference-guide/howto/upgrade.adoc @@ -31,7 +31,7 @@ Also, ensure to have a full backup of the existing database used as <<persistenc ==== Persistence Storage upgrade [CAUTION] -Ensure to <<dbms,check the compatibility>> of the existing DBMS and upgrade, if needed. +Ensure to <<internal-storage,check the compatibility>> of the existing DBMS and upgrade, if needed. Download https://syncope.apache.org/downloads[`syncope-core-persistence-jpa-upgrader-{docVersion}.jar`^]: this tool will generate the full set of SQL statements required to upgrade the internal storage to Syncope 4.1.
