You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2019/03/08 16:51:36 UTC

[syncope] branch master updated: [SYNCOPE-1445] docker-compose working with pgjsonb

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


The following commit(s) were added to refs/heads/master by this push:
     new 94581e2  [SYNCOPE-1445] docker-compose working with pgjsonb
94581e2 is described below

commit 94581e2d246c2dce598411c14d7fe94b695d97d3
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Fri Mar 8 17:47:16 2019 +0100

    [SYNCOPE-1445] docker-compose working with pgjsonb
---
 .../src/main/resources/quartz/tables_postgres.sql  |  22 +--
 docker/core/pom.xml                                |  14 +-
 docker/core/src/main/resources/Dockerfile          |   2 +
 .../resources/domains/MasterContent.xml.pgjsonb    | 183 +++++++++++++++++++++
 ...tence.properties => persistence.properties.all} |   0
 docker/core/src/main/resources/startup.sh          |  19 +++
 .../resources/docker-compose/docker-compose-ha.yml |  10 +-
 .../docker-compose/docker-compose-mariadb.yml      |   6 +-
 .../docker-compose/docker-compose-mssql.yml        |   6 +-
 .../docker-compose/docker-compose-mysql.yml        |   6 +-
 .../docker-compose/docker-compose-pgjsonb.yml      |  12 +-
 .../docker-compose/docker-compose-postgresql.yml   |   8 +-
 fit/core-reference/pom.xml                         |   2 +-
 pom.xml                                            |   6 +-
 14 files changed, 251 insertions(+), 45 deletions(-)

diff --git a/core/provisioning-java/src/main/resources/quartz/tables_postgres.sql b/core/provisioning-java/src/main/resources/quartz/tables_postgres.sql
index 9b7800f..634ade5 100644
--- a/core/provisioning-java/src/main/resources/quartz/tables_postgres.sql
+++ b/core/provisioning-java/src/main/resources/quartz/tables_postgres.sql
@@ -20,17 +20,17 @@
 -- In your Quartz properties file, you'll need to set 
 -- org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
 
-drop table qrtz_fired_triggers;
-DROP TABLE QRTZ_PAUSED_TRIGGER_GRPS;
-DROP TABLE QRTZ_SCHEDULER_STATE;
-DROP TABLE QRTZ_LOCKS;
-drop table qrtz_simple_triggers;
-drop table qrtz_cron_triggers;
-drop table qrtz_simprop_triggers;
-DROP TABLE QRTZ_BLOB_TRIGGERS;
-drop table qrtz_triggers;
-drop table qrtz_job_details;
-drop table qrtz_calendars;
+DROP TABLE IF EXISTS qrtz_fired_triggers;
+DROP TABLE IF EXISTS qrtz_paused_trigger_grps;
+DROP TABLE IF EXISTS qrtz_scheduler_state;
+DROP TABLE IF EXISTS qrtz_locks;
+DROP TABLE IF EXISTS qrtz_simple_triggers;
+DROP TABLE IF EXISTS qrtz_cron_triggers;
+DROP TABLE IF EXISTS qrtz_simprop_triggers;
+DROP TABLE IF EXISTS qrtz_blob_triggers;
+DROP TABLE IF EXISTS qrtz_triggers;
+DROP TABLE IF EXISTS qrtz_job_details;
+DROP TABLE IF EXISTS qrtz_calendars;
 
 CREATE TABLE qrtz_job_details
   (
diff --git a/docker/core/pom.xml b/docker/core/pom.xml
index a200835..2464cbf 100644
--- a/docker/core/pom.xml
+++ b/docker/core/pom.xml
@@ -56,7 +56,7 @@ under the License.
 
     <dependency>
       <groupId>org.apache.syncope.core</groupId>
-      <artifactId>syncope-core-persistence-jpa-json</artifactId>
+      <artifactId>syncope-core-persistence-jpa</artifactId>
       <version>${project.version}</version>
     </dependency>
     
@@ -143,7 +143,7 @@ under the License.
     <dependency>
       <groupId>com.microsoft.sqlserver</groupId>
       <artifactId>mssql-jdbc</artifactId>
-      <version>${jdbc.mssql.version}8</version>
+      <version>${jdbc.mssql.version}11</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
@@ -178,10 +178,12 @@ under the License.
             <phase>process-resources</phase>
             <configuration>
               <target>
-                <copy file="${settings.localRepository}/org/postgresql/postgresql/${jdbc.postgresql.version}/postgresql-${jdbc.postgresql.version}.jar" todir="${project.build.outputDirectory}/lib" overwrite="true" />
-                <copy file="${settings.localRepository}/mysql/mysql-connector-java/${jdbc.mysql.version}/mysql-connector-java-${jdbc.mysql.version}.jar" todir="${project.build.outputDirectory}/lib" overwrite="true" />
-                <copy file="${settings.localRepository}/org/mariadb/jdbc/mariadb-java-client/${jdbc.mariadb.version}/mariadb-java-client-${jdbc.mariadb.version}.jar" todir="${project.build.outputDirectory}/lib" overwrite="true" />
-                <copy file="${settings.localRepository}/com/microsoft/sqlserver/mssql-jdbc/${jdbc.mssql.version}8/mssql-jdbc-${jdbc.mssql.version}8.jar" todir="${project.build.outputDirectory}/lib" overwrite="true" />
+                <copy file="${settings.localRepository}/org/postgresql/postgresql/${jdbc.postgresql.version}/postgresql-${jdbc.postgresql.version}.jar" todir="${project.build.outputDirectory}/lib" overwrite="true"/>
+                <copy file="${settings.localRepository}/mysql/mysql-connector-java/${jdbc.mysql.version}/mysql-connector-java-${jdbc.mysql.version}.jar" todir="${project.build.outputDirectory}/lib" overwrite="true"/>
+                <copy file="${settings.localRepository}/org/mariadb/jdbc/mariadb-java-client/${jdbc.mariadb.version}/mariadb-java-client-${jdbc.mariadb.version}.jar" todir="${project.build.outputDirectory}/lib" overwrite="true"/>
+                <copy file="${settings.localRepository}/com/microsoft/sqlserver/mssql-jdbc/${jdbc.mssql.version}11/mssql-jdbc-${jdbc.mssql.version}11.jar" todir="${project.build.outputDirectory}/lib" overwrite="true"/>
+
+                <copy file="${basedir}/../../core/persistence-jpa-json/target/syncope-core-persistence-jpa-json-${project.version}.jar" todir="${project.build.outputDirectory}/pgjsonb" overwrite="true"/>
               </target>
             </configuration>
             <goals>
diff --git a/docker/core/src/main/resources/Dockerfile b/docker/core/src/main/resources/Dockerfile
index d991a27..5bf36e0 100644
--- a/docker/core/src/main/resources/Dockerfile
+++ b/docker/core/src/main/resources/Dockerfile
@@ -26,6 +26,7 @@ RUN mkdir /opt/syncope/bundles
 RUN mkdir /opt/syncope/conf
 RUN mkdir /opt/syncope/conf/domains
 RUN mkdir /opt/syncope/lib
+RUN mkdir /opt/syncope/pgjsonb
 RUN mkdir /opt/syncope/log
 
 COPY *.properties* /opt/syncope/conf/
@@ -35,6 +36,7 @@ COPY domains/* /opt/syncope/conf/domains/
 
 COPY bundles/*.jar /opt/syncope/bundles/
 COPY lib/*.jar /opt/syncope/lib/
+COPY pgjsonb/*.jar /opt/syncope/pgjsonb/
 
 COPY lib/syncope-docker-core-*war /opt/syncope/lib/syncope.war
 
diff --git a/docker/core/src/main/resources/domains/MasterContent.xml.pgjsonb b/docker/core/src/main/resources/domains/MasterContent.xml.pgjsonb
new file mode 100644
index 0000000..814b3c6
--- /dev/null
+++ b/docker/core/src/main/resources/domains/MasterContent.xml.pgjsonb
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<dataset>
+  <Realm id="ea696a4f-e77a-4ef1-be67-8f8093bc8686" name="/"/>  
+
+  <SyncopeSchema id="password.cipher.algorithm"/>
+  <PlainSchema id="password.cipher.algorithm" type="String"
+               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
+
+  <!-- notificationjob.cronExpression:
+  + not existing: NotificationJob runs according to NotificationJob.DEFAULT_CRON_EXP
+  + provided as empty string: NotificationJob disabled
+  + provided as non-empty string: NotificationJob runs according to the given value -->
+  <SyncopeSchema id="notificationjob.cronExpression"/>
+  <PlainSchema id="notificationjob.cronExpression" type="String"
+               mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
+  
+  <SyncopeSchema id="notification.maxRetries"/>
+  <PlainSchema id="notification.maxRetries" type="Long"
+               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
+
+  <SyncopeSchema id="token.length"/>
+  <PlainSchema id="token.length" type="Long"
+               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
+
+  <SyncopeSchema id="token.expireTime"/>
+  <PlainSchema id="token.expireTime" type="Long"
+               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
+
+  <SyncopeSchema id="selfRegistration.allowed"/>
+  <PlainSchema id="selfRegistration.allowed" type="Boolean"
+               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
+
+  <SyncopeSchema id="passwordReset.allowed"/>
+  <PlainSchema id="passwordReset.allowed" type="Boolean"
+               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
+
+  <SyncopeSchema id="passwordReset.securityQuestion"/>
+  <PlainSchema id="passwordReset.securityQuestion" type="Boolean"
+               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
+
+  <SyncopeSchema id="authentication.attributes"/>
+  <PlainSchema id="authentication.attributes" type="String" multivalue="1" uniqueConstraint="0" readonly="0"/>
+
+  <SyncopeSchema id="authentication.statuses"/>
+  <PlainSchema id="authentication.statuses" type="String" multivalue="1" uniqueConstraint="0" readonly="0"/>
+
+  <!-- Save user login date upon successful authentication -->
+  <SyncopeSchema id="log.lastlogindate"/>
+  <PlainSchema id="log.lastlogindate" type="Boolean"
+               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
+
+  <!-- Return hashed password values when reading users -->
+  <SyncopeSchema id="return.password.value"/>
+  <PlainSchema id="return.password.value" type="Boolean"
+               mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
+  
+  <!--  JWT lifetime in minutes -->                   
+  <SyncopeSchema id="jwt.lifetime.minutes"/>
+  <PlainSchema id="jwt.lifetime.minutes" type="Long"
+               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
+    
+  <!--  Connector and Resource configuration history -->                   
+  <SyncopeSchema id="connector.conf.history.size"/>
+  <PlainSchema id="connector.conf.history.size" type="Long"
+               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
+  
+  <SyncopeSchema id="resource.conf.history.size"/>
+  <PlainSchema id="resource.conf.history.size" type="Long"
+               mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
+  
+  <SyncopeConf id="cd64d66f-6fff-4008-b966-a06b1cc1436d"
+               plainAttrs="[{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;SSHA256&quot;}],&quot;schema&quot;:&quot;password.cipher.algorithm&quot;},{&quot;values&quot;:[{&quot;stringValue&quot;:&quot;&quot;}],&quot;schema&quot;:&quot;notificationjob.cronExpression&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:3}],&quot;schema&quot;:&quot;notification.maxRetries&quot;},{&quot;values&quot;:[{&quot;longValue&quot;:256}],&quot;schema&quot;:&quot;token.length&quot;},{&quot;values&q [...]
+
+  <AnyType id="USER" kind="USER"/>
+  <AnyTypeClass id="BaseUser"/>
+  <AnyType_AnyTypeClass anyType_id="USER" anyTypeClass_id="BaseUser"/>
+
+  <AnyType id="GROUP" kind="GROUP"/>
+  <AnyTypeClass id="BaseGroup"/>
+  <AnyType_AnyTypeClass anyType_id="GROUP" anyTypeClass_id="BaseGroup"/>
+        
+  <!-- Actual plain schemas -->
+  <Implementation id="EmailAddressValidator" type="VALIDATOR" engine="JAVA"
+                  body="org.apache.syncope.core.persistence.jpa.attrvalue.validation.EmailAddressValidator"/>
+  <SyncopeSchema id="email"/>
+  <PlainSchema id="email" type="String" anyTypeClass_id="BaseUser"
+               mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
+               validator_id="EmailAddressValidator"/>
+  
+  <Implementation id="BinaryValidator" type="VALIDATOR" engine="JAVA"
+                  body="org.apache.syncope.core.persistence.jpa.attrvalue.validation.BinaryValidator"/>
+
+  <Implementation id="PullJobDelegate" type="TASKJOB_DELEGATE" engine="JAVA"
+                  body="org.apache.syncope.core.provisioning.java.pushpull.PullJobDelegate"/>
+  <Implementation id="PushJobDelegate" type="TASKJOB_DELEGATE" engine="JAVA"
+                  body="org.apache.syncope.core.provisioning.java.pushpull.PushJobDelegate"/>
+
+
+  <Implementation id="ExpiredAccessTokenCleanup" type="TASKJOB_DELEGATE" engine="JAVA"
+                  body="org.apache.syncope.core.provisioning.java.job.ExpiredAccessTokenCleanup"/>
+  <Task DTYPE="SchedTask" id="89de5014-e3f5-4462-84d8-d97575740baf" name="Access Token Cleanup Task"  active="1"
+        jobDelegate_id="ExpiredAccessTokenCleanup" cronExpression="0 0/5 * * * ?"/>
+  <Implementation id="ExpiredBatchCleanup" type="TASKJOB_DELEGATE" engine="JAVA"
+                  body="org.apache.syncope.core.provisioning.java.job.ExpiredBatchCleanup"/>
+  <Task DTYPE="SchedTask" id="8ea0ea51-ce08-4fe3-a0c8-c281b31b5893" name="Expired Batch Operations Cleanup Task"  active="1"
+        jobDelegate_id="ExpiredBatchCleanup" cronExpression="0 0/5 * * * ?"/>
+
+  <!-- Password reset notifications -->
+  <MailTemplate id="requestPasswordReset"
+                textTemplate="Hi,
+a password reset was request for ${user.getUsername()}.
+
+In order to complete this request, you need to visit this link:
+
+http://localhost:9080/syncope-enduser/app/#!/confirmpasswordreset?token=${input.get(0).replaceAll(' ', '%20')}
+
+If you did not request this reset, just ignore the present e-mail.
+
+Best regards."
+                htmlTemplate="&lt;html&gt;
+&lt;body&gt;
+&lt;p&gt;Hi,
+a password reset was request for ${user.getUsername()}.&lt;/p&gt;
+
+&lt;p&gt;In order to complete this request, you need to visit this 
+&lt;a href=&quot;http://localhost:9080/syncope-enduser/app/#!/confirmpasswordreset?token=${input.get(0).replaceAll(' ', '%20')}&quot;&gt;link&lt;/a&gt;&lt;/p&gt;.
+
+&lt;p&gt;If you did not request this reset, just ignore the present e-mail.&lt;/p&gt;
+
+&lt;p&gt;Best regards.&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;"/>
+  <MailTemplate id="confirmPasswordReset"
+                textTemplate="Hi,
+we are happy to inform you that the password request was successfully executed for your account.
+
+Best regards."
+                htmlTemplate="&lt;html&gt;
+&lt;body&gt;
+&lt;p&gt;Hi,&lt;/br&gt;
+we are happy to inform you that the password request was successfully executed for your account.&lt;/p&gt;
+
+&lt;p&gt;Best regards.&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;"/>
+
+  <Notification id="e00945b5-1184-4d43-8e45-4318a8dcdfd4" active="1" recipientAttrName="email" selfAsRecipient="1" 
+                sender="admin@syncope.apache.org" subject="Password Reset request" template_id="requestPasswordReset" 
+                traceLevel="FAILURES"/> 
+  <AnyAbout id="a328f2e6-25e9-4cc1-badf-7425d7be4b39" anyType_id="USER" notification_id="e00945b5-1184-4d43-8e45-4318a8dcdfd4" filter="token!=$null"/>
+  <Notification_events notification_id="e00945b5-1184-4d43-8e45-4318a8dcdfd4" event="[CUSTOM]:[]:[]:[requestPasswordReset]:[SUCCESS]"/>
+  
+  <Notification id="bef0c250-e8a7-4848-bb63-2564fc409ce2" active="1" recipientAttrName="email" selfAsRecipient="1" 
+                sender="admin@syncope.apache.org" subject="Password Reset successful" template_id="confirmPasswordReset" 
+                traceLevel="FAILURES"/> 
+  <Notification_events notification_id="bef0c250-e8a7-4848-bb63-2564fc409ce2" event="[CUSTOM]:[]:[]:[confirmPasswordReset]:[SUCCESS]"/>
+
+  <ReportTemplate id="empty"/>  
+
+  <Report id="c3520ad9-179f-49e7-b315-d684d216dd97" name="reconciliation" active="1" template_id="empty"/>
+  <Implementation id="ReconciliationReportletConf" type="REPORTLET" engine="JAVA"
+                  body='{"@class":"org.apache.syncope.common.lib.report.ReconciliationReportletConf","name":"dashboardReconciliationReportlet","userMatchingCond":null,"groupMatchingCond":null,"anyObjectMatchingCond":null,"features":["key","username","groupName"]}'/>
+  <ReportReportlet report_id="c3520ad9-179f-49e7-b315-d684d216dd97" implementation_id="ReconciliationReportletConf"/>
+
+</dataset>
diff --git a/docker/core/src/main/resources/persistence.properties b/docker/core/src/main/resources/persistence.properties.all
similarity index 100%
rename from docker/core/src/main/resources/persistence.properties
rename to docker/core/src/main/resources/persistence.properties.all
diff --git a/docker/core/src/main/resources/startup.sh b/docker/core/src/main/resources/startup.sh
index 218696b..fd87711 100755
--- a/docker/core/src/main/resources/startup.sh
+++ b/docker/core/src/main/resources/startup.sh
@@ -22,6 +22,13 @@ cd /opt/syncope/conf
 rm -f provisioning.properties
 ln -s provisioning.properties.$DBMS provisioning.properties
 
+rm -f persistence.properties
+if [ $DBMS = "pgjsonb" ]; then
+  ln -s persistence.properties.pgjsonb persistence.properties
+else
+  ln -s persistence.properties.all persistence.properties
+fi
+
 rm -f views.xml
 ln -s views.xml.$DBMS views.xml
 
@@ -33,9 +40,21 @@ fi
 
 cd domains
 
+if [ $DBMS = "pgjsonb" ]; then
+  mv MasterContent.xml MasterContent.xml.all
+  ln -s MasterContent.xml.pgjsonb MasterContent.xml
+else
+  rm -f MasterContent.xml
+  mv MasterContent.xml.all MasterContent.xml
+fi
+
 rm -f Master.properties
 ln -s Master.properties.$DBMS Master.properties
 
+if [ $DBMS = "pgjsonb" ]; then
+export LOADER_PATH="/opt/syncope/conf,/opt/syncope/lib,/opt/syncope/pgjsonb"
+else
 export LOADER_PATH="/opt/syncope/conf,/opt/syncope/lib"
+fi
 java -Dfile.encoding=UTF-8 -server -Xms1536m -Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m \
  -XX:+DisableExplicitGC -Djava.security.egd=file:/dev/./urandom -jar /opt/syncope/lib/syncope.war
diff --git a/docker/src/main/resources/docker-compose/docker-compose-ha.yml b/docker/src/main/resources/docker-compose/docker-compose-ha.yml
index 8f9aa0c..c5857ba 100644
--- a/docker/src/main/resources/docker-compose/docker-compose-ha.yml
+++ b/docker/src/main/resources/docker-compose/docker-compose-ha.yml
@@ -22,7 +22,7 @@ version: '3.3'
 
 services:
    db:
-     image: postgres:latest
+     image: postgres:11.2
      restart: always
      environment:
        POSTGRES_DB: syncope
@@ -32,7 +32,7 @@ services:
    syncope1:
      depends_on:
        - db
-     image: apache/syncope:${syncope.version}
+     image: apache/syncope:${SYNCOPE_VERSION}
      ports:
        - "18080:8080"
      restart: always
@@ -48,7 +48,7 @@ services:
    syncope2:
      depends_on:
        - db
-     image: apache/syncope:${syncope.version}
+     image: apache/syncope:${SYNCOPE_VERSION}
      ports:
        - "18081:8080"
      restart: always
@@ -64,7 +64,7 @@ services:
    syncope-console:
      depends_on:
        - syncope1
-     image: apache/syncope-console:${syncope.version}
+     image: apache/syncope-console:${SYNCOPE_VERSION}
      ports:
        - "28080:8080"
      restart: always
@@ -76,7 +76,7 @@ services:
    syncope-enduser:
      depends_on:
        - syncope1
-     image: apache/syncope-enduser:${syncope.version}
+     image: apache/syncope-enduser:${SYNCOPE_VERSION}
      ports:
        - "38080:8080"
      restart: always
diff --git a/docker/src/main/resources/docker-compose/docker-compose-mariadb.yml b/docker/src/main/resources/docker-compose/docker-compose-mariadb.yml
index 3f15b25..e39ff8b 100644
--- a/docker/src/main/resources/docker-compose/docker-compose-mariadb.yml
+++ b/docker/src/main/resources/docker-compose/docker-compose-mariadb.yml
@@ -32,7 +32,7 @@ services:
    syncope:
      depends_on:
        - db
-     image: apache/syncope:${syncope.version}
+     image: apache/syncope:${SYNCOPE_VERSION}
      ports:
        - "18080:8080"
      restart: always
@@ -48,7 +48,7 @@ services:
    syncope-console:
      depends_on:
        - syncope
-     image: apache/syncope-console:${syncope.version}
+     image: apache/syncope-console:${SYNCOPE_VERSION}
      ports:
        - "28080:8080"
      restart: always
@@ -60,7 +60,7 @@ services:
    syncope-enduser:
      depends_on:
        - syncope
-     image: apache/syncope-enduser:${syncope.version}
+     image: apache/syncope-enduser:${SYNCOPE_VERSION}
      ports:
        - "38080:8080"
      restart: always
diff --git a/docker/src/main/resources/docker-compose/docker-compose-mssql.yml b/docker/src/main/resources/docker-compose/docker-compose-mssql.yml
index 462f749..32a9300 100644
--- a/docker/src/main/resources/docker-compose/docker-compose-mssql.yml
+++ b/docker/src/main/resources/docker-compose/docker-compose-mssql.yml
@@ -33,7 +33,7 @@ services:
    syncope:
      depends_on:
        - db
-     image: apache/syncope:${syncope.version}
+     image: apache/syncope:${SYNCOPE_VERSION}
      ports:
        - "18080:8080"
      restart: always
@@ -50,7 +50,7 @@ services:
    syncope-console:
      depends_on:
        - syncope
-     image: apache/syncope-console:${syncope.version}
+     image: apache/syncope-console:${SYNCOPE_VERSION}
      ports:
        - "28080:8080"
      restart: always
@@ -62,7 +62,7 @@ services:
    syncope-enduser:
      depends_on:
        - syncope
-     image: apache/syncope-enduser:${syncope.version}
+     image: apache/syncope-enduser:${SYNCOPE_VERSION}
      ports:
        - "38080:8080"
      restart: always
diff --git a/docker/src/main/resources/docker-compose/docker-compose-mysql.yml b/docker/src/main/resources/docker-compose/docker-compose-mysql.yml
index d2af8c0..c7ecd2b 100644
--- a/docker/src/main/resources/docker-compose/docker-compose-mysql.yml
+++ b/docker/src/main/resources/docker-compose/docker-compose-mysql.yml
@@ -31,7 +31,7 @@ services:
    syncope:
      depends_on:
        - db
-     image: apache/syncope:${syncope.version}
+     image: apache/syncope:${SYNCOPE_VERSION}
      ports:
        - "18080:8080"
      restart: always
@@ -47,7 +47,7 @@ services:
    syncope-console:
      depends_on:
        - syncope
-     image: apache/syncope-console:${syncope.version}
+     image: apache/syncope-console:${SYNCOPE_VERSION}
      ports:
        - "28080:8080"
      restart: always
@@ -59,7 +59,7 @@ services:
    syncope-enduser:
      depends_on:
        - syncope
-     image: apache/syncope-enduser:${syncope.version}
+     image: apache/syncope-enduser:${SYNCOPE_VERSION}
      ports:
        - "38080:8080"
      restart: always
diff --git a/docker/src/main/resources/docker-compose/docker-compose-pgjsonb.yml b/docker/src/main/resources/docker-compose/docker-compose-pgjsonb.yml
index a3f3547..8af76b7 100644
--- a/docker/src/main/resources/docker-compose/docker-compose-pgjsonb.yml
+++ b/docker/src/main/resources/docker-compose/docker-compose-pgjsonb.yml
@@ -15,13 +15,13 @@
 # specific language governing permissions and limitations
 # under the License.
 
-# Full deployment (Core, Console, Enduser) on PostgreSQL
+# Full deployment (Core, Console, Enduser) on PostgreSQL with JSONB support
 
 version: '3.3'
 
 services:
    db:
-     image: postgres:11.1
+     image: postgres:11.2
      restart: always
      environment:
        POSTGRES_DB: syncope
@@ -31,13 +31,13 @@ services:
    syncope:
      depends_on:
        - db
-     image: apache/syncope:${syncope.version}
+     image: apache/syncope:${SYNCOPE_VERSION}
      ports:
        - "18080:8080"
      restart: always
      environment:
        DBMS: pgjsonb
-       DB_URL: jdbc:postgresql://localhost:5432/syncope?stringtype=unspecified
+       DB_URL: jdbc:postgresql://db:5432/syncope?stringtype=unspecified
        DB_USER: syncope
        DB_PASSWORD: syncope
        DB_POOL_MAX: 10
@@ -47,7 +47,7 @@ services:
    syncope-console:
      depends_on:
        - syncope
-     image: apache/syncope-console:${syncope.version}
+     image: apache/syncope-console:${SYNCOPE_VERSION}
      ports:
        - "28080:8080"
      restart: always
@@ -59,7 +59,7 @@ services:
    syncope-enduser:
      depends_on:
        - syncope
-     image: apache/syncope-enduser:${syncope.version}
+     image: apache/syncope-enduser:${SYNCOPE_VERSION}
      ports:
        - "38080:8080"
      restart: always
diff --git a/docker/src/main/resources/docker-compose/docker-compose-postgresql.yml b/docker/src/main/resources/docker-compose/docker-compose-postgresql.yml
index 5e36ec0..5911083 100644
--- a/docker/src/main/resources/docker-compose/docker-compose-postgresql.yml
+++ b/docker/src/main/resources/docker-compose/docker-compose-postgresql.yml
@@ -21,7 +21,7 @@ version: '3.3'
 
 services:
    db:
-     image: postgres:11.1
+     image: postgres:11.2
      restart: always
      environment:
        POSTGRES_DB: syncope
@@ -31,7 +31,7 @@ services:
    syncope:
      depends_on:
        - db
-     image: apache/syncope:${syncope.version}
+     image: apache/syncope:${SYNCOPE_VERSION}
      ports:
        - "18080:8080"
      restart: always
@@ -47,7 +47,7 @@ services:
    syncope-console:
      depends_on:
        - syncope
-     image: apache/syncope-console:${syncope.version}
+     image: apache/syncope-console:${SYNCOPE_VERSION}
      ports:
        - "28080:8080"
      restart: always
@@ -59,7 +59,7 @@ services:
    syncope-enduser:
      depends_on:
        - syncope
-     image: apache/syncope-enduser:${syncope.version}
+     image: apache/syncope-enduser:${SYNCOPE_VERSION}
      ports:
        - "38080:8080"
      restart: always
diff --git a/fit/core-reference/pom.xml b/fit/core-reference/pom.xml
index da85d92..e138c96 100644
--- a/fit/core-reference/pom.xml
+++ b/fit/core-reference/pom.xml
@@ -1033,7 +1033,7 @@ under the License.
         <dependency>
           <groupId>com.microsoft.sqlserver</groupId>
           <artifactId>mssql-jdbc</artifactId>
-          <version>${jdbc.mssql.version}8</version>
+          <version>${jdbc.mssql.version}11</version>
           <scope>test</scope>
         </dependency>
       </dependencies>
diff --git a/pom.xml b/pom.xml
index 055a67c..de9c6a0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -514,13 +514,13 @@ under the License.
 
     <tomcat.version>9.0.16</tomcat.version>
 
-    <docker.postgresql.version>11.1</docker.postgresql.version>
+    <docker.postgresql.version>11.2</docker.postgresql.version>
     <docker.mariadb.version>10.4</docker.mariadb.version>
 
     <jdbc.postgresql.version>42.2.5</jdbc.postgresql.version>
     <jdbc.mysql.version>5.1.47</jdbc.mysql.version>
-    <jdbc.mariadb.version>2.3.0</jdbc.mariadb.version>
-    <jdbc.mssql.version>7.0.0.jre</jdbc.mssql.version>
+    <jdbc.mariadb.version>2.4.0</jdbc.mariadb.version>
+    <jdbc.mssql.version>7.2.1.jre</jdbc.mssql.version>
 
     <adminUser>admin</adminUser>
     <anonymousUser>anonymous</anonymousUser>