This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/2_1_X by this push:
     new cde9736  [SYNCOPE-1395] Renaming in preparation of supporting other 
DBMSes
cde9736 is described below

commit cde97361f51410758208f8e767e98c1a95dcd6a7
Author: Francesco Chicchiriccò <ilgro...@apache.org>
AuthorDate: Sat Nov 24 08:07:11 2018 +0100

    [SYNCOPE-1395] Renaming in preparation of supporting other DBMSes
---
 .../pom.xml                                        |  16 ++-
 .../core/persistence/api/dao/JPAJSONAnyDAO.java}   |   2 +-
 .../core/persistence/api/entity/JSONAny.java}      |   9 +-
 .../persistence/api/entity/JSONPlainAttr.java}     |   8 +-
 .../persistence/jpa/dao/JPAJSONAnyObjectDAO.java}  |  20 +--
 .../core/persistence/jpa/dao/JPAJSONConfDAO.java}  |   2 +-
 .../core/persistence/jpa/dao/JPAJSONGroupDAO.java} |  10 +-
 .../persistence/jpa/dao/JPAJSONPlainAttrDAO.java}  |   2 +-
 .../jpa/dao/JPAJSONPlainAttrValueDAO.java}         |   2 +-
 .../jpa/dao/JPAJSONPlainSchemaDAO.java}            |   2 +-
 .../core/persistence/jpa/dao/JPAJSONUserDAO.java}  |  22 +--
 .../core/persistence/jpa/dao/PGJPAJSONAnyDAO.java} |  10 +-
 .../jpa/dao/PGJPAJSONAnySearchDAO.java}            |   6 +-
 .../jpa/entity/JPAJSONEntityFactory.java}          | 103 ++++++++------
 .../jpa/entity/JPAJSONEntityListener.java}         |  10 +-
 .../jpa/entity/PGJPAJSONEntityFactory.java}        |  22 +--
 .../jpa/entity/anyobject/JPAJSONAPlainAttr.java}   |  28 ++--
 .../anyobject/JPAJSONAPlainAttrUniqueValue.java}   |   8 +-
 .../entity/anyobject/JPAJSONAPlainAttrValue.java}  |   8 +-
 .../jpa/entity/anyobject/JPAJSONAnyObject.java}    |  28 ++--
 .../anyobject/JPAJSONAnyObjectListener.java}       |  16 +--
 .../jpa/entity/conf/JPAJSONCPlainAttr.java}        |  28 ++--
 .../entity/conf/JPAJSONCPlainAttrUniqueValue.java} |   8 +-
 .../jpa/entity/conf/JPAJSONCPlainAttrValue.java}   |   8 +-
 .../persistence/jpa/entity/conf/JPAJSONConf.java}  |  22 +--
 .../jpa/entity/conf/JPAJSONConfListener.java}      |  16 +--
 .../jpa/entity/group/JPAJSONGPlainAttr.java}       |  28 ++--
 .../group/JPAJSONGPlainAttrUniqueValue.java}       |   8 +-
 .../jpa/entity/group/JPAJSONGPlainAttrValue.java}  |   8 +-
 .../jpa/entity/group/JPAJSONGroup.java}            |  22 +--
 .../jpa/entity/group/JPAJSONGroupListener.java}    |  16 +--
 .../jpa/entity/user/JPAJSONUPlainAttr.java}        |  28 ++--
 .../entity/user/JPAJSONUPlainAttrUniqueValue.java} |   8 +-
 .../jpa/entity/user/JPAJSONUPlainAttrValue.java}   |   8 +-
 .../persistence/jpa/entity/user/JPAJSONUser.java}  |  24 ++--
 .../jpa/entity/user/JPAJSONUserListener.java}      |  16 +--
 .../jpa/validation/entity/JPAJSONAnyCheck.java}    |   4 +-
 .../validation/entity/JPAJSONAnyValidator.java}    |   6 +-
 .../main/resources/META-INF/spring-orm-pgjsonb.xml |  64 +++++++--
 .../src/main/resources/persistence-enhance.xml     |   0
 .../resources/pgjsonb}/domains/Master.properties   |   0
 .../src/main/resources/pgjsonb/indexes.xml         |   0
 .../main/resources/pgjsonb}/persistence.properties |  18 +--
 .../src/main/resources/pgjsonb/views.xml           |   0
 .../src/test/resources/persistenceTest.xml         |   0
 .../resources/pgjsonb}/domains/MasterContent.xml   |   0
 .../src/test/resources/simplelogger.properties     |   0
 .../src/main/resources/indexes.xml                 |  63 ---------
 .../src/main/resources/views.xml                   | 154 ---------------------
 core/pom.xml                                       |   2 +-
 fit/core-reference/pom.xml                         |   7 +-
 .../main/resources/pgjsonb/persistence.properties  |  27 ----
 .../systemadministration/dbms.adoc                 |  20 +--
 53 files changed, 379 insertions(+), 568 deletions(-)

diff --git a/core/persistence-jpa-pgjsonb/pom.xml 
b/core/persistence-jpa-json/pom.xml
similarity index 94%
rename from core/persistence-jpa-pgjsonb/pom.xml
rename to core/persistence-jpa-json/pom.xml
index da125d2..dfd7bb2 100644
--- a/core/persistence-jpa-pgjsonb/pom.xml
+++ b/core/persistence-jpa-json/pom.xml
@@ -27,10 +27,10 @@ under the License.
     <version>2.1.3-SNAPSHOT</version>
   </parent>
 
-  <name>Apache Syncope Core Persistence JPA PostgreSQL jsonb</name>
-  <description>Apache Syncope Core Persistence JPA PostgreSQL 
jsonb</description>
+  <name>Apache Syncope Core Persistence JPA JSON</name>
+  <description>Apache Syncope Core Persistence JPA JSON</description>
   <groupId>org.apache.syncope.core</groupId>
-  <artifactId>syncope-core-persistence-jpa-pgjsonb</artifactId>
+  <artifactId>syncope-core-persistence-jpa-json</artifactId>
   <packaging>jar</packaging>
   
   <properties>
@@ -129,7 +129,7 @@ under the License.
 
   <profiles>
     <profile>
-      <id>ut</id>
+      <id>postgres</id>
       
       <dependencies>
         <dependency>
@@ -227,9 +227,17 @@ under the License.
             <filtering>true</filtering>
           </testResource>
           <testResource>
+            <directory>src/test/resources/pgjsonb</directory>
+            <filtering>true</filtering>
+          </testResource>
+          <testResource>
             <directory>src/main/resources</directory>
             <filtering>true</filtering>
           </testResource>
+          <testResource>
+            <directory>src/main/resources/pgjsonb</directory>
+            <filtering>true</filtering>
+          </testResource>
         </testResources>
       </build>
     </profile>
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/api/dao/PGAnyDAO.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/api/dao/JPAJSONAnyDAO.java
similarity index 98%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/api/dao/PGAnyDAO.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/api/dao/JPAJSONAnyDAO.java
index 2fecad7..9794cc8 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/api/dao/PGAnyDAO.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/api/dao/JPAJSONAnyDAO.java
@@ -23,7 +23,7 @@ import org.apache.syncope.core.persistence.api.entity.Any;
 import org.apache.syncope.core.persistence.api.entity.AnyUtils;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
 
-public interface PGAnyDAO {
+public interface JPAJSONAnyDAO {
 
     <A extends Any<?>> List<A> findByDerAttrValue(
             String table, AnyUtils anyUtils, String schemaKey, String value, 
boolean ignoreCaseMatch);
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGJPAAny.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/api/entity/JSONAny.java
similarity index 78%
copy from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGJPAAny.java
copy to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/api/entity/JSONAny.java
index 005e616..1571566 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGJPAAny.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/api/entity/JSONAny.java
@@ -16,18 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.syncope.core.persistence.jpa.entity;
+package org.apache.syncope.core.persistence.api.entity;
 
 import java.util.List;
-import org.apache.syncope.core.persistence.api.entity.Any;
 
-public interface PGJPAAny<A extends Any<?>> {
+public interface JSONAny<A extends Any<?>> {
 
     String getPlainAttrsJSON();
 
     void setPlainAttrsJSON(String plainAttrs);
 
-    boolean add(PGPlainAttr<A> attr);
+    boolean add(JSONPlainAttr<A> attr);
 
-    List<? extends PGPlainAttr<A>> getPlainAttrList();
+    List<? extends JSONPlainAttr<A>> getPlainAttrList();
 }
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGPlainAttr.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/api/entity/JSONPlainAttr.java
similarity index 73%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGPlainAttr.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/api/entity/JSONPlainAttr.java
index a802d3c..78f7503 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGPlainAttr.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/api/entity/JSONPlainAttr.java
@@ -16,13 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.syncope.core.persistence.jpa.entity;
+package org.apache.syncope.core.persistence.api.entity;
 
-import org.apache.syncope.core.persistence.api.entity.Any;
-import org.apache.syncope.core.persistence.api.entity.PlainAttr;
-import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
-
-public interface PGPlainAttr<A extends Any<?>> extends PlainAttr<A> {
+public interface JSONPlainAttr<A extends Any<?>> extends PlainAttr<A> {
 
     String getSchemaKey();
 
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAAnyObjectDAO.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONAnyObjectDAO.java
similarity index 76%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAAnyObjectDAO.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONAnyObjectDAO.java
index f821f7f..3e07af3 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAAnyObjectDAO.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONAnyObjectDAO.java
@@ -19,19 +19,19 @@
 package org.apache.syncope.core.persistence.jpa.dao;
 
 import java.util.List;
-import org.apache.syncope.core.persistence.api.dao.PGAnyDAO;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
-import org.apache.syncope.core.persistence.jpa.entity.anyobject.PGJPAAnyObject;
+import 
org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAJSONAnyObject;
 import org.apache.syncope.core.spring.ApplicationContextProvider;
+import org.apache.syncope.core.persistence.api.dao.JPAJSONAnyDAO;
 
-public class PGJPAAnyObjectDAO extends JPAAnyObjectDAO {
+public class JPAJSONAnyObjectDAO extends JPAAnyObjectDAO {
 
-    private PGAnyDAO anyDAO;
+    private JPAJSONAnyDAO anyDAO;
 
-    private PGAnyDAO anyDAO() {
+    private JPAJSONAnyDAO anyDAO() {
         if (anyDAO == null) {
-            anyDAO = 
ApplicationContextProvider.getApplicationContext().getBean(PGAnyDAO.class);
+            anyDAO = 
ApplicationContextProvider.getApplicationContext().getBean(JPAJSONAnyDAO.class);
         }
         return anyDAO;
     }
@@ -43,7 +43,7 @@ public class PGJPAAnyObjectDAO extends JPAAnyObjectDAO {
             final PlainAttrValue attrValue,
             final boolean ignoreCaseMatch) {
 
-        return anyDAO().findByPlainAttrValue(PGJPAAnyObject.TABLE, anyUtils(), 
schemaKey, attrValue, ignoreCaseMatch);
+        return anyDAO().findByPlainAttrValue(JPAJSONAnyObject.TABLE, 
anyUtils(), schemaKey, attrValue, ignoreCaseMatch);
     }
 
     @Override
@@ -52,7 +52,7 @@ public class PGJPAAnyObjectDAO extends JPAAnyObjectDAO {
             final PlainAttrValue attrUniqueValue,
             final boolean ignoreCaseMatch) {
 
-        return anyDAO().findByPlainAttrUniqueValue(PGJPAAnyObject.TABLE, 
anyUtils(),
+        return anyDAO().findByPlainAttrUniqueValue(JPAJSONAnyObject.TABLE, 
anyUtils(),
                 schemaKey, attrUniqueValue, ignoreCaseMatch);
     }
 
@@ -63,12 +63,12 @@ public class PGJPAAnyObjectDAO extends JPAAnyObjectDAO {
             final String value,
             final boolean ignoreCaseMatch) {
 
-        return anyDAO().findByDerAttrValue(PGJPAAnyObject.TABLE, anyUtils(), 
schemaKey, value, ignoreCaseMatch);
+        return anyDAO().findByDerAttrValue(JPAJSONAnyObject.TABLE, anyUtils(), 
schemaKey, value, ignoreCaseMatch);
     }
 
     @Override
     public AnyObject save(final AnyObject anyObject) {
-        anyDAO().checkBeforeSave(PGJPAAnyObject.TABLE, anyUtils(), anyObject);
+        anyDAO().checkBeforeSave(JPAJSONAnyObject.TABLE, anyUtils(), 
anyObject);
         return super.save(anyObject);
     }
 }
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAConfDAO.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONConfDAO.java
similarity index 97%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAConfDAO.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONConfDAO.java
index 130d730..52ad5da 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAConfDAO.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONConfDAO.java
@@ -23,7 +23,7 @@ import org.apache.openjpa.util.ImplHelper;
 import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttr;
 import org.apache.syncope.core.persistence.api.entity.conf.Conf;
 
-public class PGJPAConfDAO extends JPAConfDAO {
+public class JPAJSONConfDAO extends JPAConfDAO {
 
     /**
      * Marks the {@code plainAttrs} field as dirty, to force OpenJPA 
generating an update statement on the
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAGroupDAO.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONGroupDAO.java
similarity index 91%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAGroupDAO.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONGroupDAO.java
index e69252a..f6223ec 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAGroupDAO.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONGroupDAO.java
@@ -19,19 +19,19 @@
 package org.apache.syncope.core.persistence.jpa.dao;
 
 import java.util.List;
-import org.apache.syncope.core.persistence.api.dao.PGAnyDAO;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.group.Group;
 import org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup;
 import org.apache.syncope.core.spring.ApplicationContextProvider;
+import org.apache.syncope.core.persistence.api.dao.JPAJSONAnyDAO;
 
-public class PGJPAGroupDAO extends JPAGroupDAO {
+public class JPAJSONGroupDAO extends JPAGroupDAO {
 
-    private PGAnyDAO anyDAO;
+    private JPAJSONAnyDAO anyDAO;
 
-    private PGAnyDAO anyDAO() {
+    private JPAJSONAnyDAO anyDAO() {
         if (anyDAO == null) {
-            anyDAO = 
ApplicationContextProvider.getApplicationContext().getBean(PGAnyDAO.class);
+            anyDAO = 
ApplicationContextProvider.getApplicationContext().getBean(JPAJSONAnyDAO.class);
         }
         return anyDAO;
     }
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAPlainAttrDAO.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainAttrDAO.java
similarity index 93%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAPlainAttrDAO.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainAttrDAO.java
index 5ede5a6..55d13a8 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAPlainAttrDAO.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainAttrDAO.java
@@ -22,7 +22,7 @@ import 
org.apache.syncope.core.persistence.api.dao.PlainAttrDAO;
 import org.apache.syncope.core.persistence.api.entity.Any;
 import org.apache.syncope.core.persistence.api.entity.PlainAttr;
 
-public class PGJPAPlainAttrDAO extends AbstractDAO<PlainAttr<?>> implements 
PlainAttrDAO {
+public class JPAJSONPlainAttrDAO extends AbstractDAO<PlainAttr<?>> implements 
PlainAttrDAO {
 
     @Override
     @SuppressWarnings("unchecked")
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAPlainAttrValueDAO.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainAttrValueDAO.java
similarity index 92%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAPlainAttrValueDAO.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainAttrValueDAO.java
index c1d9c54..2976148 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAPlainAttrValueDAO.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainAttrValueDAO.java
@@ -23,7 +23,7 @@ import 
org.apache.syncope.core.persistence.api.entity.AnyUtils;
 import org.apache.syncope.core.persistence.api.entity.PlainAttr;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
 
-public class PGJPAPlainAttrValueDAO extends AbstractDAO<PlainAttrValue> 
implements PlainAttrValueDAO {
+public class JPAJSONPlainAttrValueDAO extends AbstractDAO<PlainAttrValue> 
implements PlainAttrValueDAO {
 
     @Override
     public void deleteAll(final PlainAttr<?> attr, final AnyUtils anyUtils) {
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAPlainSchemaDAO.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainSchemaDAO.java
similarity index 95%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAPlainSchemaDAO.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainSchemaDAO.java
index ba8b97b..63349ba 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAPlainSchemaDAO.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainSchemaDAO.java
@@ -23,7 +23,7 @@ import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.PlainAttr;
 import org.apache.syncope.core.persistence.api.entity.PlainSchema;
 
-public class PGJPAPlainSchemaDAO extends JPAPlainSchemaDAO {
+public class JPAJSONPlainSchemaDAO extends JPAPlainSchemaDAO {
 
     @Override
     public <T extends PlainAttr<?>> List<T> findAttrs(final PlainSchema 
schema, final Class<T> reference) {
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAUserDAO.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONUserDAO.java
similarity index 75%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAUserDAO.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONUserDAO.java
index f1c420f..62d804c 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAUserDAO.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONUserDAO.java
@@ -21,19 +21,19 @@ package org.apache.syncope.core.persistence.jpa.dao;
 import java.util.List;
 import java.util.Set;
 import org.apache.commons.lang3.tuple.Pair;
-import org.apache.syncope.core.persistence.api.dao.PGAnyDAO;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.user.User;
-import org.apache.syncope.core.persistence.jpa.entity.user.PGJPAUser;
+import org.apache.syncope.core.persistence.jpa.entity.user.JPAJSONUser;
 import org.apache.syncope.core.spring.ApplicationContextProvider;
+import org.apache.syncope.core.persistence.api.dao.JPAJSONAnyDAO;
 
-public class PGJPAUserDAO extends JPAUserDAO {
+public class JPAJSONUserDAO extends JPAUserDAO {
 
-    private PGAnyDAO anyDAO;
+    private JPAJSONAnyDAO anyDAO;
 
-    private PGAnyDAO anyDAO() {
+    private JPAJSONAnyDAO anyDAO() {
         if (anyDAO == null) {
-            anyDAO = 
ApplicationContextProvider.getApplicationContext().getBean(PGAnyDAO.class);
+            anyDAO = 
ApplicationContextProvider.getApplicationContext().getBean(JPAJSONAnyDAO.class);
         }
         return anyDAO;
     }
@@ -45,7 +45,7 @@ public class PGJPAUserDAO extends JPAUserDAO {
             final PlainAttrValue attrValue,
             final boolean ignoreCaseMatch) {
 
-        return anyDAO().findByPlainAttrValue(PGJPAUser.TABLE, anyUtils(), 
schemaKey, attrValue, ignoreCaseMatch);
+        return anyDAO().findByPlainAttrValue(JPAJSONUser.TABLE, anyUtils(), 
schemaKey, attrValue, ignoreCaseMatch);
     }
 
     @Override
@@ -54,7 +54,7 @@ public class PGJPAUserDAO extends JPAUserDAO {
             final PlainAttrValue attrUniqueValue,
             final boolean ignoreCaseMatch) {
 
-        return anyDAO().findByPlainAttrUniqueValue(PGJPAUser.TABLE, anyUtils(),
+        return anyDAO().findByPlainAttrUniqueValue(JPAJSONUser.TABLE, 
anyUtils(),
                 schemaKey, attrUniqueValue, ignoreCaseMatch);
     }
 
@@ -65,18 +65,18 @@ public class PGJPAUserDAO extends JPAUserDAO {
             final String value,
             final boolean ignoreCaseMatch) {
 
-        return anyDAO().findByDerAttrValue(PGJPAUser.TABLE, anyUtils(), 
schemaKey, value, ignoreCaseMatch);
+        return anyDAO().findByDerAttrValue(JPAJSONUser.TABLE, anyUtils(), 
schemaKey, value, ignoreCaseMatch);
     }
 
     @Override
     public User save(final User user) {
-        anyDAO().checkBeforeSave(PGJPAUser.TABLE, anyUtils(), user);
+        anyDAO().checkBeforeSave(JPAJSONUser.TABLE, anyUtils(), user);
         return super.save(user);
     }
 
     @Override
     public Pair<Set<String>, Set<String>> saveAndGetDynGroupMembs(final User 
user) {
-        anyDAO().checkBeforeSave(PGJPAUser.TABLE, anyUtils(), user);
+        anyDAO().checkBeforeSave(JPAJSONUser.TABLE, anyUtils(), user);
         return super.saveAndGetDynGroupMembs(user);
     }
 }
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAAnyDAO.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnyDAO.java
similarity index 97%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAAnyDAO.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnyDAO.java
index 030bba8..94bb72a 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAAnyDAO.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnyDAO.java
@@ -35,7 +35,6 @@ import org.apache.commons.jexl3.parser.Token;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
 import org.apache.syncope.core.persistence.api.dao.DuplicateException;
-import org.apache.syncope.core.persistence.api.dao.PGAnyDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
 import org.apache.syncope.core.persistence.api.entity.Any;
 import org.apache.syncope.core.persistence.api.entity.AnyUtils;
@@ -45,15 +44,16 @@ import 
org.apache.syncope.core.persistence.api.entity.PlainAttrUniqueValue;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.PlainSchema;
 import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
-import org.apache.syncope.core.persistence.jpa.entity.PGPlainAttr;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
 import org.apache.syncope.core.spring.security.AuthContextUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
+import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
+import org.apache.syncope.core.persistence.api.dao.JPAJSONAnyDAO;
 
 @Repository
-public class PGJPAAnyDAO extends AbstractDAO<AbstractEntity> implements 
PGAnyDAO {
+public class PGJPAJSONAnyDAO extends AbstractDAO<AbstractEntity> implements 
JPAJSONAnyDAO {
 
     @Autowired
     private PlainSchemaDAO plainSchemaDAO;
@@ -118,7 +118,7 @@ public class PGJPAAnyDAO extends 
AbstractDAO<AbstractEntity> implements PGAnyDAO
             if (attrValue instanceof PlainAttrUniqueValue) {
                 container.setUniqueValue((PlainAttrUniqueValue) attrValue);
             } else {
-                ((PGPlainAttr) container).add(attrValue);
+                ((JSONPlainAttr) container).add(attrValue);
             }
             return "plainAttrs @> '" + 
POJOHelper.serialize(Arrays.asList(container)) + "'::jsonb";
         }
@@ -333,7 +333,7 @@ public class PGJPAAnyDAO extends 
AbstractDAO<AbstractEntity> implements PGAnyDAO
         // check UNIQUE constraints
         any.getPlainAttrs().stream().
                 filter(attr -> attr.getUniqueValue() != null).
-                map(PGPlainAttr.class::cast).
+                map(JSONPlainAttr.class::cast).
                 forEach(attr -> {
                     String schemaKey = attr.getSchemaKey();
                     List<A> others = findByPlainAttrValue(table, anyUtils, 
schemaKey, attr.getUniqueValue(), false);
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAAnySearchDAO.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnySearchDAO.java
similarity index 97%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAAnySearchDAO.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnySearchDAO.java
index 0fa44f0..f240705 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAAnySearchDAO.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnySearchDAO.java
@@ -29,10 +29,10 @@ import 
org.apache.syncope.core.persistence.api.entity.PlainAttr;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrUniqueValue;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.PlainSchema;
-import org.apache.syncope.core.persistence.jpa.entity.PGPlainAttr;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
+import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
 
-public class PGJPAAnySearchDAO extends JPAAnySearchDAO {
+public class PGJPAJSONAnySearchDAO extends JPAAnySearchDAO {
 
     @Override
     SearchSupport buildSearchSupport(final AnyTypeKind kind) {
@@ -110,7 +110,7 @@ public class PGJPAAnySearchDAO extends JPAAnySearchDAO {
             if (attrValue instanceof PlainAttrUniqueValue) {
                 container.setUniqueValue((PlainAttrUniqueValue) attrValue);
             } else {
-                ((PGPlainAttr) container).add(attrValue);
+                ((JSONPlainAttr) container).add(attrValue);
             }
 
             query.append("plainAttrs @> '").
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGJPAEntityFactory.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAJSONEntityFactory.java
similarity index 53%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGJPAEntityFactory.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAJSONEntityFactory.java
index 0054d3f..bcd046d 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGJPAEntityFactory.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAJSONEntityFactory.java
@@ -18,7 +18,7 @@
  */
 package org.apache.syncope.core.persistence.jpa.entity;
 
-import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
+import org.apache.syncope.core.persistence.api.dao.JPAJSONAnyDAO;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 import org.apache.syncope.core.persistence.api.entity.anyobject.APlainAttr;
 import 
org.apache.syncope.core.persistence.api.entity.anyobject.APlainAttrUniqueValue;
@@ -36,26 +36,32 @@ import 
org.apache.syncope.core.persistence.api.entity.user.UPlainAttr;
 import 
org.apache.syncope.core.persistence.api.entity.user.UPlainAttrUniqueValue;
 import org.apache.syncope.core.persistence.api.entity.user.UPlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.user.User;
-import org.apache.syncope.core.persistence.jpa.dao.PGJPAAnySearchDAO;
-import org.apache.syncope.core.persistence.jpa.entity.anyobject.PGAPlainAttr;
-import 
org.apache.syncope.core.persistence.jpa.entity.anyobject.PGAPlainAttrUniqueValue;
-import 
org.apache.syncope.core.persistence.jpa.entity.anyobject.PGAPlainAttrValue;
-import org.apache.syncope.core.persistence.jpa.entity.anyobject.PGJPAAnyObject;
-import org.apache.syncope.core.persistence.jpa.entity.conf.PGCPlainAttr;
-import 
org.apache.syncope.core.persistence.jpa.entity.conf.PGCPlainAttrUniqueValue;
-import org.apache.syncope.core.persistence.jpa.entity.conf.PGCPlainAttrValue;
-import org.apache.syncope.core.persistence.jpa.entity.conf.PGJPAConf;
-import org.apache.syncope.core.persistence.jpa.entity.group.PGGPlainAttr;
-import 
org.apache.syncope.core.persistence.jpa.entity.group.PGGPlainAttrUniqueValue;
-import org.apache.syncope.core.persistence.jpa.entity.group.PGGPlainAttrValue;
-import org.apache.syncope.core.persistence.jpa.entity.group.PGJPAGroup;
-import org.apache.syncope.core.persistence.jpa.entity.user.PGJPAUser;
-import org.apache.syncope.core.persistence.jpa.entity.user.PGUPlainAttr;
-import 
org.apache.syncope.core.persistence.jpa.entity.user.PGUPlainAttrUniqueValue;
-import org.apache.syncope.core.persistence.jpa.entity.user.PGUPlainAttrValue;
+import 
org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAJSONAPlainAttr;
+import 
org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAJSONAPlainAttrUniqueValue;
+import 
org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAJSONAPlainAttrValue;
+import 
org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAJSONAnyObject;
+import org.apache.syncope.core.persistence.jpa.entity.conf.JPAJSONCPlainAttr;
+import 
org.apache.syncope.core.persistence.jpa.entity.conf.JPAJSONCPlainAttrUniqueValue;
+import 
org.apache.syncope.core.persistence.jpa.entity.conf.JPAJSONCPlainAttrValue;
+import org.apache.syncope.core.persistence.jpa.entity.conf.JPAJSONConf;
+import org.apache.syncope.core.persistence.jpa.entity.group.JPAJSONGPlainAttr;
+import 
org.apache.syncope.core.persistence.jpa.entity.group.JPAJSONGPlainAttrUniqueValue;
+import 
org.apache.syncope.core.persistence.jpa.entity.group.JPAJSONGPlainAttrValue;
+import org.apache.syncope.core.persistence.jpa.entity.group.JPAJSONGroup;
+import org.apache.syncope.core.persistence.jpa.entity.user.JPAJSONUser;
+import org.apache.syncope.core.persistence.jpa.entity.user.JPAJSONUPlainAttr;
+import 
org.apache.syncope.core.persistence.jpa.entity.user.JPAJSONUPlainAttrUniqueValue;
+import 
org.apache.syncope.core.persistence.jpa.entity.user.JPAJSONUPlainAttrValue;
 import org.apache.syncope.core.spring.security.SecureRandomUtils;
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.BeanFactoryAware;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
 
-public class PGJPAEntityFactory extends JPAEntityFactory {
+public abstract class JPAJSONEntityFactory extends JPAEntityFactory implements 
InitializingBean, BeanFactoryAware {
+
+    private DefaultListableBeanFactory beanFactory;
 
     @Override
     @SuppressWarnings("unchecked")
@@ -63,41 +69,41 @@ public class PGJPAEntityFactory extends JPAEntityFactory {
         E result;
 
         if (reference.equals(User.class)) {
-            result = (E) new PGJPAUser();
-            ((PGJPAUser) 
result).setKey(SecureRandomUtils.generateRandomUUID().toString());
+            result = (E) new JPAJSONUser();
+            ((JPAJSONUser) 
result).setKey(SecureRandomUtils.generateRandomUUID().toString());
         } else if (reference.equals(Group.class)) {
-            result = (E) new PGJPAGroup();
-            ((PGJPAGroup) 
result).setKey(SecureRandomUtils.generateRandomUUID().toString());
+            result = (E) new JPAJSONGroup();
+            ((JPAJSONGroup) 
result).setKey(SecureRandomUtils.generateRandomUUID().toString());
         } else if (reference.equals(AnyObject.class)) {
-            result = (E) new PGJPAAnyObject();
-            ((PGJPAAnyObject) 
result).setKey(SecureRandomUtils.generateRandomUUID().toString());
+            result = (E) new JPAJSONAnyObject();
+            ((JPAJSONAnyObject) 
result).setKey(SecureRandomUtils.generateRandomUUID().toString());
         } else if (reference.equals(Conf.class)) {
-            result = (E) new PGJPAConf();
-            ((PGJPAConf) 
result).setKey(SecureRandomUtils.generateRandomUUID().toString());
+            result = (E) new JPAJSONConf();
+            ((JPAJSONConf) 
result).setKey(SecureRandomUtils.generateRandomUUID().toString());
         } else if (reference.equals(APlainAttr.class)) {
-            result = (E) new PGAPlainAttr();
+            result = (E) new JPAJSONAPlainAttr();
         } else if (reference.equals(APlainAttrValue.class)) {
-            result = (E) new PGAPlainAttrValue();
+            result = (E) new JPAJSONAPlainAttrValue();
         } else if (reference.equals(APlainAttrUniqueValue.class)) {
-            result = (E) new PGAPlainAttrUniqueValue();
+            result = (E) new JPAJSONAPlainAttrUniqueValue();
         } else if (reference.equals(CPlainAttr.class)) {
-            result = (E) new PGCPlainAttr();
+            result = (E) new JPAJSONCPlainAttr();
         } else if (reference.equals(CPlainAttrValue.class)) {
-            result = (E) new PGCPlainAttrValue();
+            result = (E) new JPAJSONCPlainAttrValue();
         } else if (reference.equals(CPlainAttrUniqueValue.class)) {
-            result = (E) new PGCPlainAttrUniqueValue();
+            result = (E) new JPAJSONCPlainAttrUniqueValue();
         } else if (reference.equals(GPlainAttr.class)) {
-            result = (E) new PGGPlainAttr();
+            result = (E) new JPAJSONGPlainAttr();
         } else if (reference.equals(GPlainAttrValue.class)) {
-            result = (E) new PGGPlainAttrValue();
+            result = (E) new JPAJSONGPlainAttrValue();
         } else if (reference.equals(GPlainAttrUniqueValue.class)) {
-            result = (E) new PGGPlainAttrUniqueValue();
+            result = (E) new JPAJSONGPlainAttrUniqueValue();
         } else if (reference.equals(UPlainAttr.class)) {
-            result = (E) new PGUPlainAttr();
+            result = (E) new JPAJSONUPlainAttr();
         } else if (reference.equals(UPlainAttrValue.class)) {
-            result = (E) new PGUPlainAttrValue();
+            result = (E) new JPAJSONUPlainAttrValue();
         } else if (reference.equals(UPlainAttrUniqueValue.class)) {
-            result = (E) new PGUPlainAttrUniqueValue();
+            result = (E) new JPAJSONUPlainAttrUniqueValue();
         } else {
             result = super.newEntity(reference);
         }
@@ -107,26 +113,33 @@ public class PGJPAEntityFactory extends JPAEntityFactory {
 
     @Override
     public Class<? extends User> userClass() {
-        return PGJPAUser.class;
+        return JPAJSONUser.class;
     }
 
     @Override
     public Class<? extends Group> groupClass() {
-        return PGJPAGroup.class;
+        return JPAJSONGroup.class;
     }
 
     @Override
     public Class<? extends AnyObject> anyObjectClass() {
-        return PGJPAAnyObject.class;
+        return JPAJSONAnyObject.class;
     }
 
     @Override
     public Class<? extends Conf> confClass() {
-        return PGJPAConf.class;
+        return JPAJSONConf.class;
+    }
+
+    protected abstract Class<? extends JPAJSONAnyDAO> jpaJSONAnyDAOClass();
+
+    @Override
+    public void setBeanFactory(final BeanFactory beanFactory) {
+        this.beanFactory = (DefaultListableBeanFactory) beanFactory;
     }
 
     @Override
-    public Class<? extends AnySearchDAO> anySearchDAOClass() {
-        return PGJPAAnySearchDAO.class;
+    public void afterPropertiesSet() throws Exception {
+        beanFactory.createBean(jpaJSONAnyDAOClass(), 
AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
     }
 }
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGJPAEntityListener.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAJSONEntityListener.java
similarity index 81%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGJPAEntityListener.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAJSONEntityListener.java
index 2c4c4e4..d58043f 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGJPAEntityListener.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAJSONEntityListener.java
@@ -19,15 +19,17 @@
 package org.apache.syncope.core.persistence.jpa.entity;
 
 import java.util.List;
+import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
+import org.apache.syncope.core.persistence.api.entity.JSONAny;
 import org.apache.syncope.core.persistence.api.entity.Any;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
 
-public abstract class PGJPAEntityListener<A extends Any<?>> {
+public abstract class JPAJSONEntityListener<A extends Any<?>> {
 
-    protected abstract List<? extends PGPlainAttr<A>> getValues(String 
plainAttrsJSON);
+    protected abstract List<? extends JSONPlainAttr<A>> getValues(String 
plainAttrsJSON);
 
     @SuppressWarnings("unchecked")
-    protected void json2list(final PGJPAAny<A> entity, final boolean 
clearFirst) {
+    protected void json2list(final JSONAny<A> entity, final boolean 
clearFirst) {
         if (clearFirst) {
             entity.getPlainAttrList().clear();
         }
@@ -44,7 +46,7 @@ public abstract class PGJPAEntityListener<A extends Any<?>> {
         }
     }
 
-    protected void list2json(final PGJPAAny<A> entity) {
+    protected void list2json(final JSONAny<A> entity) {
         entity.setPlainAttrsJSON(entity.getPlainAttrList().isEmpty()
                 ? "[{}]"
                 : POJOHelper.serialize(entity.getPlainAttrList()));
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGJPAAny.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGJPAJSONEntityFactory.java
similarity index 59%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGJPAAny.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGJPAJSONEntityFactory.java
index 005e616..998fc73 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGJPAAny.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/PGJPAJSONEntityFactory.java
@@ -18,16 +18,20 @@
  */
 package org.apache.syncope.core.persistence.jpa.entity;
 
-import java.util.List;
-import org.apache.syncope.core.persistence.api.entity.Any;
+import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
+import org.apache.syncope.core.persistence.api.dao.JPAJSONAnyDAO;
+import org.apache.syncope.core.persistence.jpa.dao.PGJPAJSONAnyDAO;
+import org.apache.syncope.core.persistence.jpa.dao.PGJPAJSONAnySearchDAO;
 
-public interface PGJPAAny<A extends Any<?>> {
+public class PGJPAJSONEntityFactory extends JPAJSONEntityFactory {
 
-    String getPlainAttrsJSON();
+    @Override
+    public Class<? extends AnySearchDAO> anySearchDAOClass() {
+        return PGJPAJSONAnySearchDAO.class;
+    }
 
-    void setPlainAttrsJSON(String plainAttrs);
-
-    boolean add(PGPlainAttr<A> attr);
-
-    List<? extends PGPlainAttr<A>> getPlainAttrList();
+    @Override
+    protected Class<? extends JPAJSONAnyDAO> jpaJSONAnyDAOClass() {
+        return PGJPAJSONAnyDAO.class;
+    }
 }
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/PGAPlainAttr.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAJSONAPlainAttr.java
similarity index 85%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/PGAPlainAttr.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAJSONAPlainAttr.java
index 292107e..a2768ee 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/PGAPlainAttr.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAJSONAPlainAttr.java
@@ -38,12 +38,12 @@ import 
org.apache.syncope.core.persistence.api.entity.anyobject.APlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
 import org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttr;
 import org.apache.syncope.core.persistence.jpa.entity.JPAPlainSchema;
-import org.apache.syncope.core.persistence.jpa.entity.PGPlainAttr;
 import org.apache.syncope.core.spring.ApplicationContextProvider;
+import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
 
 @JsonIgnoreProperties("valuesAsStrings")
 @JsonInclude(JsonInclude.Include.NON_EMPTY)
-public class PGAPlainAttr extends AbstractPlainAttr<AnyObject> implements 
APlainAttr, PGPlainAttr<AnyObject> {
+public class JPAJSONAPlainAttr extends AbstractPlainAttr<AnyObject> implements 
APlainAttr, JSONPlainAttr<AnyObject> {
 
     private static final long serialVersionUID = 806271775349587902L;
 
@@ -51,7 +51,7 @@ public class PGAPlainAttr extends 
AbstractPlainAttr<AnyObject> implements APlain
      * The owner of this attribute.
      */
     @JsonIgnore
-    private PGJPAAnyObject owner;
+    private JPAJSONAnyObject owner;
 
     @JsonProperty
     private String schema;
@@ -65,13 +65,13 @@ public class PGAPlainAttr extends 
AbstractPlainAttr<AnyObject> implements APlain
     /**
      * Values of this attribute (if schema is not UNIQUE).
      */
-    private final List<PGAPlainAttrValue> values = new ArrayList<>();
+    private final List<JPAJSONAPlainAttrValue> values = new ArrayList<>();
 
     /**
      * Value of this attribute (if schema is UNIQUE).
      */
     @JsonProperty
-    private PGAPlainAttrUniqueValue uniqueValue;
+    private JPAJSONAPlainAttrUniqueValue uniqueValue;
 
     @Override
     public AnyObject getOwner() {
@@ -80,8 +80,8 @@ public class PGAPlainAttr extends 
AbstractPlainAttr<AnyObject> implements APlain
 
     @Override
     public void setOwner(final AnyObject owner) {
-        checkType(owner, PGJPAAnyObject.class);
-        this.owner = (PGJPAAnyObject) owner;
+        checkType(owner, JPAJSONAnyObject.class);
+        this.owner = (JPAJSONAnyObject) owner;
     }
 
     @JsonIgnore
@@ -133,8 +133,8 @@ public class PGAPlainAttr extends 
AbstractPlainAttr<AnyObject> implements APlain
 
     @Override
     protected boolean addForMultiValue(final PlainAttrValue attrValue) {
-        checkType(attrValue, PGAPlainAttrValue.class);
-        return values.add((PGAPlainAttrValue) attrValue);
+        checkType(attrValue, JPAJSONAPlainAttrValue.class);
+        return values.add((JPAJSONAPlainAttrValue) attrValue);
     }
 
     @Override
@@ -148,20 +148,20 @@ public class PGAPlainAttr extends 
AbstractPlainAttr<AnyObject> implements APlain
     }
 
     @JsonIgnore
-    public List<PGAPlainAttrValue> getPGValues() {
+    public List<JPAJSONAPlainAttrValue> getPGValues() {
         return values;
     }
 
     @Override
-    public PGAPlainAttrUniqueValue getUniqueValue() {
+    public JPAJSONAPlainAttrUniqueValue getUniqueValue() {
         return uniqueValue;
     }
 
     @JsonIgnore
     @Override
     public void setUniqueValue(final PlainAttrUniqueValue uniqueValue) {
-        checkType(uniqueValue, PGAPlainAttrUniqueValue.class);
-        this.uniqueValue = (PGAPlainAttrUniqueValue) uniqueValue;
+        checkType(uniqueValue, JPAJSONAPlainAttrUniqueValue.class);
+        this.uniqueValue = (JPAJSONAPlainAttrUniqueValue) uniqueValue;
     }
 
     @Override
@@ -185,7 +185,7 @@ public class PGAPlainAttr extends 
AbstractPlainAttr<AnyObject> implements APlain
         if (getClass() != obj.getClass()) {
             return false;
         }
-        final PGAPlainAttr other = (PGAPlainAttr) obj;
+        final JPAJSONAPlainAttr other = (JPAJSONAPlainAttr) obj;
         return new EqualsBuilder().
                 append(schema, other.schema).
                 append(membership, other.membership).
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/PGAPlainAttrUniqueValue.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAJSONAPlainAttrUniqueValue.java
similarity index 89%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/PGAPlainAttrUniqueValue.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAJSONAPlainAttrUniqueValue.java
index dd24599..cd8247e 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/PGAPlainAttrUniqueValue.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAJSONAPlainAttrUniqueValue.java
@@ -29,12 +29,12 @@ import 
org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttrValue;
 
 @JsonIgnoreProperties({ "valueAsString", "value" })
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class PGAPlainAttrUniqueValue extends AbstractPlainAttrValue implements 
APlainAttrUniqueValue {
+public class JPAJSONAPlainAttrUniqueValue extends AbstractPlainAttrValue 
implements APlainAttrUniqueValue {
 
     private static final long serialVersionUID = -4053996864791245312L;
 
     @JsonIgnore
-    private PGAPlainAttr attr;
+    private JPAJSONAPlainAttr attr;
 
     @Override
     public APlainAttr getAttr() {
@@ -43,8 +43,8 @@ public class PGAPlainAttrUniqueValue extends 
AbstractPlainAttrValue implements A
 
     @Override
     public void setAttr(final PlainAttr<?> attr) {
-        checkType(attr, PGAPlainAttr.class);
-        this.attr = (PGAPlainAttr) attr;
+        checkType(attr, JPAJSONAPlainAttr.class);
+        this.attr = (JPAJSONAPlainAttr) attr;
     }
 
     @JsonIgnore
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/PGAPlainAttrValue.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAJSONAPlainAttrValue.java
similarity index 88%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/PGAPlainAttrValue.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAJSONAPlainAttrValue.java
index b3b76fd..d4815d3 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/PGAPlainAttrValue.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAJSONAPlainAttrValue.java
@@ -28,12 +28,12 @@ import 
org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttrValue;
 
 @JsonIgnoreProperties({ "valueAsString", "value" })
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class PGAPlainAttrValue extends AbstractPlainAttrValue implements 
APlainAttrValue {
+public class JPAJSONAPlainAttrValue extends AbstractPlainAttrValue implements 
APlainAttrValue {
 
     private static final long serialVersionUID = 1832825176101443555L;
 
     @JsonIgnore
-    private PGAPlainAttr attr;
+    private JPAJSONAPlainAttr attr;
 
     @Override
     public APlainAttr getAttr() {
@@ -42,7 +42,7 @@ public class PGAPlainAttrValue extends AbstractPlainAttrValue 
implements APlainA
 
     @Override
     public void setAttr(final PlainAttr<?> attr) {
-        checkType(attr, PGAPlainAttr.class);
-        this.attr = (PGAPlainAttr) attr;
+        checkType(attr, JPAJSONAPlainAttr.class);
+        this.attr = (JPAJSONAPlainAttr) attr;
     }
 }
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/PGJPAAnyObject.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAJSONAnyObject.java
similarity index 81%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/PGJPAAnyObject.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAJSONAnyObject.java
index 568b533..df8bb8a 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/PGJPAAnyObject.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAJSONAnyObject.java
@@ -23,34 +23,30 @@ import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
-import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
-import javax.persistence.Lob;
 import javax.persistence.Table;
 import javax.persistence.Transient;
 import org.apache.syncope.core.persistence.api.entity.Membership;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AMembership;
 import org.apache.syncope.core.persistence.api.entity.anyobject.APlainAttr;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
-import org.apache.syncope.core.persistence.jpa.entity.PGPlainAttr;
-import org.apache.syncope.core.persistence.jpa.entity.PGJPAAny;
-import org.apache.syncope.core.persistence.jpa.validation.entity.PGJPAAnyCheck;
+import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
+import org.apache.syncope.core.persistence.api.entity.JSONAny;
+import 
org.apache.syncope.core.persistence.jpa.validation.entity.JPAJSONAnyCheck;
 
 @Entity
 @Table(name = JPAAnyObject.TABLE)
-@EntityListeners({ PGJPAAnyObjectListener.class })
-@PGJPAAnyCheck
-public class PGJPAAnyObject extends JPAAnyObject implements 
PGJPAAny<AnyObject>, AnyObject {
+@EntityListeners({ JPAJSONAnyObjectListener.class })
+@JPAJSONAnyCheck
+public class JPAJSONAnyObject extends JPAAnyObject implements 
JSONAny<AnyObject>, AnyObject {
 
     private static final long serialVersionUID = -8543654943709531885L;
 
-    @Lob
-    @Column(columnDefinition = "jsonb")
     private String plainAttrs;
 
     @Transient
-    private final List<PGAPlainAttr> plainAttrList = new ArrayList<>();
+    private final List<JPAJSONAPlainAttr> plainAttrList = new ArrayList<>();
 
     @Override
     public String getPlainAttrsJSON() {
@@ -63,26 +59,26 @@ public class PGJPAAnyObject extends JPAAnyObject implements 
PGJPAAny<AnyObject>,
     }
 
     @Override
-    public List<PGAPlainAttr> getPlainAttrList() {
+    public List<JPAJSONAPlainAttr> getPlainAttrList() {
         return plainAttrList;
     }
 
     @Override
-    public boolean add(final PGPlainAttr<AnyObject> attr) {
+    public boolean add(final JSONPlainAttr<AnyObject> attr) {
         return add((APlainAttr) attr);
     }
 
     @Override
     public boolean add(final APlainAttr attr) {
-        checkType(attr, PGAPlainAttr.class);
-        return plainAttrList.add((PGAPlainAttr) attr);
+        checkType(attr, JPAJSONAPlainAttr.class);
+        return plainAttrList.add((JPAJSONAPlainAttr) attr);
     }
 
     @Override
     public boolean remove(final APlainAttr attr) {
         return plainAttrList.removeIf(pgattr
                 -> pgattr.getSchemaKey().equals(attr.getSchema().getKey())
-                && Objects.equals(pgattr.getMembershipKey(), ((PGAPlainAttr) 
attr).getMembershipKey()));
+                && Objects.equals(pgattr.getMembershipKey(), 
((JPAJSONAPlainAttr) attr).getMembershipKey()));
     }
 
     @Override
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/PGJPAAnyObjectListener.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAJSONAnyObjectListener.java
similarity index 74%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/PGJPAAnyObjectListener.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAJSONAnyObjectListener.java
index 112a676..ad03fc5 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/PGJPAAnyObjectListener.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAJSONAnyObjectListener.java
@@ -26,32 +26,32 @@ import javax.persistence.PostUpdate;
 import javax.persistence.PrePersist;
 import javax.persistence.PreUpdate;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
-import org.apache.syncope.core.persistence.jpa.entity.PGJPAEntityListener;
-import org.apache.syncope.core.persistence.jpa.entity.PGPlainAttr;
+import org.apache.syncope.core.persistence.jpa.entity.JPAJSONEntityListener;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
+import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
 
-public class PGJPAAnyObjectListener extends PGJPAEntityListener<AnyObject> {
+public class JPAJSONAnyObjectListener extends JPAJSONEntityListener<AnyObject> 
{
 
     @Override
-    protected List<? extends PGPlainAttr<AnyObject>> getValues(final String 
plainAttrsJSON) {
-        return POJOHelper.deserialize(plainAttrsJSON, new 
TypeReference<List<PGAPlainAttr>>() {
+    protected List<? extends JSONPlainAttr<AnyObject>> getValues(final String 
plainAttrsJSON) {
+        return POJOHelper.deserialize(plainAttrsJSON, new 
TypeReference<List<JPAJSONAPlainAttr>>() {
         });
     }
 
     @PostLoad
-    public void read(final PGJPAAnyObject anyObject) {
+    public void read(final JPAJSONAnyObject anyObject) {
         super.json2list(anyObject, false);
     }
 
     @PrePersist
     @PreUpdate
-    public void save(final PGJPAAnyObject anyObject) {
+    public void save(final JPAJSONAnyObject anyObject) {
         super.list2json(anyObject);
     }
 
     @PostPersist
     @PostUpdate
-    public void readAfterSave(final PGJPAAnyObject anyObject) {
+    public void readAfterSave(final JPAJSONAnyObject anyObject) {
         super.json2list(anyObject, true);
     }
 }
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/PGCPlainAttr.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAJSONCPlainAttr.java
similarity index 83%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/PGCPlainAttr.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAJSONCPlainAttr.java
index a45d7d5..4979d17 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/PGCPlainAttr.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAJSONCPlainAttr.java
@@ -36,12 +36,12 @@ import 
org.apache.syncope.core.persistence.api.entity.conf.CPlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.conf.Conf;
 import org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttr;
 import org.apache.syncope.core.persistence.jpa.entity.JPAPlainSchema;
-import org.apache.syncope.core.persistence.jpa.entity.PGPlainAttr;
 import org.apache.syncope.core.spring.ApplicationContextProvider;
+import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
 
 @JsonIgnoreProperties("valuesAsStrings")
 @JsonInclude(JsonInclude.Include.NON_EMPTY)
-public class PGCPlainAttr extends AbstractPlainAttr<Conf> implements 
CPlainAttr, PGPlainAttr<Conf> {
+public class JPAJSONCPlainAttr extends AbstractPlainAttr<Conf> implements 
CPlainAttr, JSONPlainAttr<Conf> {
 
     private static final long serialVersionUID = 806271775349587902L;
 
@@ -49,7 +49,7 @@ public class PGCPlainAttr extends AbstractPlainAttr<Conf> 
implements CPlainAttr,
      * The owner of this attribute.
      */
     @JsonIgnore
-    private PGJPAConf owner;
+    private JPAJSONConf owner;
 
     @JsonProperty
     private String schema;
@@ -57,13 +57,13 @@ public class PGCPlainAttr extends AbstractPlainAttr<Conf> 
implements CPlainAttr,
     /**
      * Values of this attribute (if schema is not UNIQUE).
      */
-    private final List<PGCPlainAttrValue> values = new ArrayList<>();
+    private final List<JPAJSONCPlainAttrValue> values = new ArrayList<>();
 
     /**
      * Value of this attribute (if schema is UNIQUE).
      */
     @JsonProperty
-    private PGCPlainAttrUniqueValue uniqueValue;
+    private JPAJSONCPlainAttrUniqueValue uniqueValue;
 
     @Override
     public Conf getOwner() {
@@ -72,8 +72,8 @@ public class PGCPlainAttr extends AbstractPlainAttr<Conf> 
implements CPlainAttr,
 
     @Override
     public void setOwner(final Conf owner) {
-        checkType(owner, PGJPAConf.class);
-        this.owner = (PGJPAConf) owner;
+        checkType(owner, JPAJSONConf.class);
+        this.owner = (JPAJSONConf) owner;
     }
 
     @JsonIgnore
@@ -102,8 +102,8 @@ public class PGCPlainAttr extends AbstractPlainAttr<Conf> 
implements CPlainAttr,
 
     @Override
     protected boolean addForMultiValue(final PlainAttrValue attrValue) {
-        checkType(attrValue, PGCPlainAttrValue.class);
-        return values.add((PGCPlainAttrValue) attrValue);
+        checkType(attrValue, JPAJSONCPlainAttrValue.class);
+        return values.add((JPAJSONCPlainAttrValue) attrValue);
     }
 
     @Override
@@ -117,20 +117,20 @@ public class PGCPlainAttr extends AbstractPlainAttr<Conf> 
implements CPlainAttr,
     }
 
     @JsonIgnore
-    public List<PGCPlainAttrValue> getPGValues() {
+    public List<JPAJSONCPlainAttrValue> getPGValues() {
         return values;
     }
 
     @Override
-    public PGCPlainAttrUniqueValue getUniqueValue() {
+    public JPAJSONCPlainAttrUniqueValue getUniqueValue() {
         return uniqueValue;
     }
 
     @JsonIgnore
     @Override
     public void setUniqueValue(final PlainAttrUniqueValue uniqueValue) {
-        checkType(uniqueValue, PGCPlainAttrUniqueValue.class);
-        this.uniqueValue = (PGCPlainAttrUniqueValue) uniqueValue;
+        checkType(uniqueValue, JPAJSONCPlainAttrUniqueValue.class);
+        this.uniqueValue = (JPAJSONCPlainAttrUniqueValue) uniqueValue;
     }
 
     @Override
@@ -153,7 +153,7 @@ public class PGCPlainAttr extends AbstractPlainAttr<Conf> 
implements CPlainAttr,
         if (getClass() != obj.getClass()) {
             return false;
         }
-        final PGCPlainAttr other = (PGCPlainAttr) obj;
+        final JPAJSONCPlainAttr other = (JPAJSONCPlainAttr) obj;
         return new EqualsBuilder().
                 append(schema, other.schema).
                 append(values, other.values).
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/PGCPlainAttrUniqueValue.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAJSONCPlainAttrUniqueValue.java
similarity index 89%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/PGCPlainAttrUniqueValue.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAJSONCPlainAttrUniqueValue.java
index 5877f1c..dc7bc50 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/PGCPlainAttrUniqueValue.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAJSONCPlainAttrUniqueValue.java
@@ -29,12 +29,12 @@ import 
org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttrValue;
 
 @JsonIgnoreProperties({ "valueAsString", "value" })
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class PGCPlainAttrUniqueValue extends AbstractPlainAttrValue implements 
CPlainAttrUniqueValue {
+public class JPAJSONCPlainAttrUniqueValue extends AbstractPlainAttrValue 
implements CPlainAttrUniqueValue {
 
     private static final long serialVersionUID = -4326417972859745823L;
 
     @JsonIgnore
-    private PGCPlainAttr attr;
+    private JPAJSONCPlainAttr attr;
 
     @Override
     public CPlainAttr getAttr() {
@@ -43,8 +43,8 @@ public class PGCPlainAttrUniqueValue extends 
AbstractPlainAttrValue implements C
 
     @Override
     public void setAttr(final PlainAttr<?> attr) {
-        checkType(attr, PGCPlainAttr.class);
-        this.attr = (PGCPlainAttr) attr;
+        checkType(attr, JPAJSONCPlainAttr.class);
+        this.attr = (JPAJSONCPlainAttr) attr;
     }
 
     @JsonIgnore
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/PGCPlainAttrValue.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAJSONCPlainAttrValue.java
similarity index 87%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/PGCPlainAttrValue.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAJSONCPlainAttrValue.java
index a537f0f..9136621 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/PGCPlainAttrValue.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAJSONCPlainAttrValue.java
@@ -28,12 +28,12 @@ import 
org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttrValue;
 
 @JsonIgnoreProperties({ "valueAsString", "value" })
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class PGCPlainAttrValue extends AbstractPlainAttrValue implements 
CPlainAttrValue {
+public class JPAJSONCPlainAttrValue extends AbstractPlainAttrValue implements 
CPlainAttrValue {
 
     private static final long serialVersionUID = 1832825176101443555L;
 
     @JsonIgnore
-    private PGCPlainAttr attr;
+    private JPAJSONCPlainAttr attr;
 
     @Override
     public CPlainAttr getAttr() {
@@ -42,7 +42,7 @@ public class PGCPlainAttrValue extends AbstractPlainAttrValue 
implements CPlainA
 
     @Override
     public void setAttr(final PlainAttr<?> attr) {
-        checkType(attr, PGCPlainAttr.class);
-        this.attr = (PGCPlainAttr) attr;
+        checkType(attr, JPAJSONCPlainAttr.class);
+        this.attr = (JPAJSONCPlainAttr) attr;
     }
 }
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/PGJPAConf.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAJSONConf.java
similarity index 78%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/PGJPAConf.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAJSONConf.java
index a297d18..ea97ed5 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/PGJPAConf.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAJSONConf.java
@@ -28,15 +28,15 @@ import javax.persistence.Table;
 import javax.persistence.Transient;
 import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttr;
 import org.apache.syncope.core.persistence.api.entity.conf.Conf;
-import org.apache.syncope.core.persistence.jpa.entity.PGPlainAttr;
-import org.apache.syncope.core.persistence.jpa.entity.PGJPAAny;
-import org.apache.syncope.core.persistence.jpa.validation.entity.PGJPAAnyCheck;
+import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
+import org.apache.syncope.core.persistence.api.entity.JSONAny;
+import 
org.apache.syncope.core.persistence.jpa.validation.entity.JPAJSONAnyCheck;
 
 @Entity
 @Table(name = JPAConf.TABLE)
-@EntityListeners({ PGJPAConfListener.class })
-@PGJPAAnyCheck
-public class PGJPAConf extends JPAConf implements PGJPAAny<Conf>, Conf {
+@EntityListeners({ JPAJSONConfListener.class })
+@JPAJSONAnyCheck
+public class JPAJSONConf extends JPAConf implements JSONAny<Conf>, Conf {
 
     private static final long serialVersionUID = -8543654943709531885L;
 
@@ -45,7 +45,7 @@ public class PGJPAConf extends JPAConf implements 
PGJPAAny<Conf>, Conf {
     private String plainAttrs;
 
     @Transient
-    private final List<PGCPlainAttr> plainAttrList = new ArrayList<>();
+    private final List<JPAJSONCPlainAttr> plainAttrList = new ArrayList<>();
 
     @Override
     public String getPlainAttrsJSON() {
@@ -58,19 +58,19 @@ public class PGJPAConf extends JPAConf implements 
PGJPAAny<Conf>, Conf {
     }
 
     @Override
-    public List<PGCPlainAttr> getPlainAttrList() {
+    public List<JPAJSONCPlainAttr> getPlainAttrList() {
         return plainAttrList;
     }
 
     @Override
-    public boolean add(final PGPlainAttr<Conf> attr) {
+    public boolean add(final JSONPlainAttr<Conf> attr) {
         return add((CPlainAttr) attr);
     }
 
     @Override
     public boolean add(final CPlainAttr attr) {
-        checkType(attr, PGCPlainAttr.class);
-        return plainAttrList.add((PGCPlainAttr) attr);
+        checkType(attr, JPAJSONCPlainAttr.class);
+        return plainAttrList.add((JPAJSONCPlainAttr) attr);
     }
 
     @Override
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/PGJPAConfListener.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAJSONConfListener.java
similarity index 76%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/PGJPAConfListener.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAJSONConfListener.java
index 00ad5db..7923c47 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/PGJPAConfListener.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAJSONConfListener.java
@@ -26,32 +26,32 @@ import javax.persistence.PostUpdate;
 import javax.persistence.PrePersist;
 import javax.persistence.PreUpdate;
 import org.apache.syncope.core.persistence.api.entity.conf.Conf;
-import org.apache.syncope.core.persistence.jpa.entity.PGJPAEntityListener;
-import org.apache.syncope.core.persistence.jpa.entity.PGPlainAttr;
+import org.apache.syncope.core.persistence.jpa.entity.JPAJSONEntityListener;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
+import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
 
-public class PGJPAConfListener extends PGJPAEntityListener<Conf> {
+public class JPAJSONConfListener extends JPAJSONEntityListener<Conf> {
 
     @Override
-    protected List<? extends PGPlainAttr<Conf>> getValues(final String 
plainAttrsJSON) {
-        return POJOHelper.deserialize(plainAttrsJSON, new 
TypeReference<List<PGCPlainAttr>>() {
+    protected List<? extends JSONPlainAttr<Conf>> getValues(final String 
plainAttrsJSON) {
+        return POJOHelper.deserialize(plainAttrsJSON, new 
TypeReference<List<JPAJSONCPlainAttr>>() {
         });
     }
 
     @PostLoad
-    public void read(final PGJPAConf conf) {
+    public void read(final JPAJSONConf conf) {
         super.json2list(conf, false);
     }
 
     @PrePersist
     @PreUpdate
-    public void save(final PGJPAConf conf) {
+    public void save(final JPAJSONConf conf) {
         super.list2json(conf);
     }
 
     @PostPersist
     @PostUpdate
-    public void readAfterSave(final PGJPAConf conf) {
+    public void readAfterSave(final JPAJSONConf conf) {
         super.json2list(conf, true);
     }
 }
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/PGGPlainAttr.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAJSONGPlainAttr.java
similarity index 83%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/PGGPlainAttr.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAJSONGPlainAttr.java
index 9e78535..e783295 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/PGGPlainAttr.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAJSONGPlainAttr.java
@@ -36,12 +36,12 @@ import 
org.apache.syncope.core.persistence.api.entity.group.GPlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.group.Group;
 import org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttr;
 import org.apache.syncope.core.persistence.jpa.entity.JPAPlainSchema;
-import org.apache.syncope.core.persistence.jpa.entity.PGPlainAttr;
 import org.apache.syncope.core.spring.ApplicationContextProvider;
+import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
 
 @JsonIgnoreProperties("valuesAsStrings")
 @JsonInclude(JsonInclude.Include.NON_EMPTY)
-public class PGGPlainAttr extends AbstractPlainAttr<Group> implements 
GPlainAttr, PGPlainAttr<Group> {
+public class JPAJSONGPlainAttr extends AbstractPlainAttr<Group> implements 
GPlainAttr, JSONPlainAttr<Group> {
 
     private static final long serialVersionUID = 806271775349587902L;
 
@@ -49,7 +49,7 @@ public class PGGPlainAttr extends AbstractPlainAttr<Group> 
implements GPlainAttr
      * The owner of this attribute.
      */
     @JsonIgnore
-    private PGJPAGroup owner;
+    private JPAJSONGroup owner;
 
     @JsonProperty
     private String schema;
@@ -57,13 +57,13 @@ public class PGGPlainAttr extends AbstractPlainAttr<Group> 
implements GPlainAttr
     /**
      * Values of this attribute (if schema is not UNIQUE).
      */
-    private final List<PGGPlainAttrValue> values = new ArrayList<>();
+    private final List<JPAJSONGPlainAttrValue> values = new ArrayList<>();
 
     /**
      * Value of this attribute (if schema is UNIQUE).
      */
     @JsonProperty
-    private PGGPlainAttrUniqueValue uniqueValue;
+    private JPAJSONGPlainAttrUniqueValue uniqueValue;
 
     @Override
     public Group getOwner() {
@@ -72,8 +72,8 @@ public class PGGPlainAttr extends AbstractPlainAttr<Group> 
implements GPlainAttr
 
     @Override
     public void setOwner(final Group owner) {
-        checkType(owner, PGJPAGroup.class);
-        this.owner = (PGJPAGroup) owner;
+        checkType(owner, JPAJSONGroup.class);
+        this.owner = (JPAJSONGroup) owner;
     }
 
     @JsonIgnore
@@ -102,8 +102,8 @@ public class PGGPlainAttr extends AbstractPlainAttr<Group> 
implements GPlainAttr
 
     @Override
     protected boolean addForMultiValue(final PlainAttrValue attrValue) {
-        checkType(attrValue, PGGPlainAttrValue.class);
-        return values.add((PGGPlainAttrValue) attrValue);
+        checkType(attrValue, JPAJSONGPlainAttrValue.class);
+        return values.add((JPAJSONGPlainAttrValue) attrValue);
     }
 
     @Override
@@ -117,20 +117,20 @@ public class PGGPlainAttr extends 
AbstractPlainAttr<Group> implements GPlainAttr
     }
 
     @JsonIgnore
-    public List<PGGPlainAttrValue> getPGValues() {
+    public List<JPAJSONGPlainAttrValue> getPGValues() {
         return values;
     }
 
     @Override
-    public PGGPlainAttrUniqueValue getUniqueValue() {
+    public JPAJSONGPlainAttrUniqueValue getUniqueValue() {
         return uniqueValue;
     }
 
     @JsonIgnore
     @Override
     public void setUniqueValue(final PlainAttrUniqueValue uniqueValue) {
-        checkType(uniqueValue, PGGPlainAttrUniqueValue.class);
-        this.uniqueValue = (PGGPlainAttrUniqueValue) uniqueValue;
+        checkType(uniqueValue, JPAJSONGPlainAttrUniqueValue.class);
+        this.uniqueValue = (JPAJSONGPlainAttrUniqueValue) uniqueValue;
     }
 
     @Override
@@ -153,7 +153,7 @@ public class PGGPlainAttr extends AbstractPlainAttr<Group> 
implements GPlainAttr
         if (getClass() != obj.getClass()) {
             return false;
         }
-        final PGGPlainAttr other = (PGGPlainAttr) obj;
+        final JPAJSONGPlainAttr other = (JPAJSONGPlainAttr) obj;
         return new EqualsBuilder().
                 append(schema, other.schema).
                 append(values, other.values).
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/PGGPlainAttrUniqueValue.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAJSONGPlainAttrUniqueValue.java
similarity index 89%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/PGGPlainAttrUniqueValue.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAJSONGPlainAttrUniqueValue.java
index c6219a0..539e8fb 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/PGGPlainAttrUniqueValue.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAJSONGPlainAttrUniqueValue.java
@@ -29,12 +29,12 @@ import 
org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttrValue;
 
 @JsonIgnoreProperties({ "valueAsString", "value" })
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class PGGPlainAttrUniqueValue extends AbstractPlainAttrValue implements 
GPlainAttrUniqueValue {
+public class JPAJSONGPlainAttrUniqueValue extends AbstractPlainAttrValue 
implements GPlainAttrUniqueValue {
 
     private static final long serialVersionUID = -4326417972859745823L;
 
     @JsonIgnore
-    private PGGPlainAttr attr;
+    private JPAJSONGPlainAttr attr;
 
     @Override
     public GPlainAttr getAttr() {
@@ -43,8 +43,8 @@ public class PGGPlainAttrUniqueValue extends 
AbstractPlainAttrValue implements G
 
     @Override
     public void setAttr(final PlainAttr<?> attr) {
-        checkType(attr, PGGPlainAttr.class);
-        this.attr = (PGGPlainAttr) attr;
+        checkType(attr, JPAJSONGPlainAttr.class);
+        this.attr = (JPAJSONGPlainAttr) attr;
     }
 
     @JsonIgnore
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/PGGPlainAttrValue.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAJSONGPlainAttrValue.java
similarity index 87%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/PGGPlainAttrValue.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAJSONGPlainAttrValue.java
index 398e5b0..e662117 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/PGGPlainAttrValue.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAJSONGPlainAttrValue.java
@@ -28,12 +28,12 @@ import 
org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttrValue;
 
 @JsonIgnoreProperties({ "valueAsString", "value" })
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class PGGPlainAttrValue extends AbstractPlainAttrValue implements 
GPlainAttrValue {
+public class JPAJSONGPlainAttrValue extends AbstractPlainAttrValue implements 
GPlainAttrValue {
 
     private static final long serialVersionUID = 1832825176101443555L;
 
     @JsonIgnore
-    private PGGPlainAttr attr;
+    private JPAJSONGPlainAttr attr;
 
     @Override
     public GPlainAttr getAttr() {
@@ -42,7 +42,7 @@ public class PGGPlainAttrValue extends AbstractPlainAttrValue 
implements GPlainA
 
     @Override
     public void setAttr(final PlainAttr<?> attr) {
-        checkType(attr, PGGPlainAttr.class);
-        this.attr = (PGGPlainAttr) attr;
+        checkType(attr, JPAJSONGPlainAttr.class);
+        this.attr = (JPAJSONGPlainAttr) attr;
     }
 }
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/PGJPAGroup.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAJSONGroup.java
similarity index 78%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/PGJPAGroup.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAJSONGroup.java
index 6f65a43..b84169a 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/PGJPAGroup.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAJSONGroup.java
@@ -28,15 +28,15 @@ import javax.persistence.Table;
 import javax.persistence.Transient;
 import org.apache.syncope.core.persistence.api.entity.group.GPlainAttr;
 import org.apache.syncope.core.persistence.api.entity.group.Group;
-import org.apache.syncope.core.persistence.jpa.entity.PGPlainAttr;
-import org.apache.syncope.core.persistence.jpa.entity.PGJPAAny;
-import org.apache.syncope.core.persistence.jpa.validation.entity.PGJPAAnyCheck;
+import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
+import org.apache.syncope.core.persistence.api.entity.JSONAny;
+import 
org.apache.syncope.core.persistence.jpa.validation.entity.JPAJSONAnyCheck;
 
 @Entity
 @Table(name = JPAGroup.TABLE)
-@EntityListeners({ PGJPAGroupListener.class })
-@PGJPAAnyCheck
-public class PGJPAGroup extends JPAGroup implements PGJPAAny<Group>, Group {
+@EntityListeners({ JPAJSONGroupListener.class })
+@JPAJSONAnyCheck
+public class JPAJSONGroup extends JPAGroup implements JSONAny<Group>, Group {
 
     private static final long serialVersionUID = -8543654943709531885L;
 
@@ -45,7 +45,7 @@ public class PGJPAGroup extends JPAGroup implements 
PGJPAAny<Group>, Group {
     private String plainAttrs;
 
     @Transient
-    private final List<PGGPlainAttr> plainAttrList = new ArrayList<>();
+    private final List<JPAJSONGPlainAttr> plainAttrList = new ArrayList<>();
 
     @Override
     public String getPlainAttrsJSON() {
@@ -58,19 +58,19 @@ public class PGJPAGroup extends JPAGroup implements 
PGJPAAny<Group>, Group {
     }
 
     @Override
-    public List<PGGPlainAttr> getPlainAttrList() {
+    public List<JPAJSONGPlainAttr> getPlainAttrList() {
         return plainAttrList;
     }
 
     @Override
-    public boolean add(final PGPlainAttr<Group> attr) {
+    public boolean add(final JSONPlainAttr<Group> attr) {
         return add((GPlainAttr) attr);
     }
 
     @Override
     public boolean add(final GPlainAttr attr) {
-        checkType(attr, PGGPlainAttr.class);
-        return plainAttrList.add((PGGPlainAttr) attr);
+        checkType(attr, JPAJSONGPlainAttr.class);
+        return plainAttrList.add((JPAJSONGPlainAttr) attr);
     }
 
     @Override
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/PGJPAGroupListener.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAJSONGroupListener.java
similarity index 75%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/PGJPAGroupListener.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAJSONGroupListener.java
index f8e190f..a259238 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/PGJPAGroupListener.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAJSONGroupListener.java
@@ -26,32 +26,32 @@ import javax.persistence.PostUpdate;
 import javax.persistence.PrePersist;
 import javax.persistence.PreUpdate;
 import org.apache.syncope.core.persistence.api.entity.group.Group;
-import org.apache.syncope.core.persistence.jpa.entity.PGJPAEntityListener;
-import org.apache.syncope.core.persistence.jpa.entity.PGPlainAttr;
+import org.apache.syncope.core.persistence.jpa.entity.JPAJSONEntityListener;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
+import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
 
-public class PGJPAGroupListener extends PGJPAEntityListener<Group> {
+public class JPAJSONGroupListener extends JPAJSONEntityListener<Group> {
 
     @Override
-    protected List<? extends PGPlainAttr<Group>> getValues(final String 
plainAttrsJSON) {
-        return POJOHelper.deserialize(plainAttrsJSON, new 
TypeReference<List<PGGPlainAttr>>() {
+    protected List<? extends JSONPlainAttr<Group>> getValues(final String 
plainAttrsJSON) {
+        return POJOHelper.deserialize(plainAttrsJSON, new 
TypeReference<List<JPAJSONGPlainAttr>>() {
         });
     }
 
     @PostLoad
-    public void read(final PGJPAGroup group) {
+    public void read(final JPAJSONGroup group) {
         super.json2list(group, false);
     }
 
     @PrePersist
     @PreUpdate
-    public void save(final PGJPAGroup group) {
+    public void save(final JPAJSONGroup group) {
         super.list2json(group);
     }
 
     @PostPersist
     @PostUpdate
-    public void readAfterSave(final PGJPAGroup group) {
+    public void readAfterSave(final JPAJSONGroup group) {
         super.json2list(group, true);
     }
 }
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/PGUPlainAttr.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAJSONUPlainAttr.java
similarity index 86%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/PGUPlainAttr.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAJSONUPlainAttr.java
index 09abb26..c8082a1 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/PGUPlainAttr.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAJSONUPlainAttr.java
@@ -38,12 +38,12 @@ import 
org.apache.syncope.core.persistence.api.entity.user.UPlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.user.User;
 import org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttr;
 import org.apache.syncope.core.persistence.jpa.entity.JPAPlainSchema;
-import org.apache.syncope.core.persistence.jpa.entity.PGPlainAttr;
 import org.apache.syncope.core.spring.ApplicationContextProvider;
+import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
 
 @JsonIgnoreProperties("valuesAsStrings")
 @JsonInclude(JsonInclude.Include.NON_EMPTY)
-public class PGUPlainAttr extends AbstractPlainAttr<User> implements 
UPlainAttr, PGPlainAttr<User> {
+public class JPAJSONUPlainAttr extends AbstractPlainAttr<User> implements 
UPlainAttr, JSONPlainAttr<User> {
 
     private static final long serialVersionUID = 806271775349587902L;
 
@@ -51,7 +51,7 @@ public class PGUPlainAttr extends AbstractPlainAttr<User> 
implements UPlainAttr,
      * The owner of this attribute.
      */
     @JsonIgnore
-    private PGJPAUser owner;
+    private JPAJSONUser owner;
 
     @JsonProperty
     private String schema;
@@ -65,13 +65,13 @@ public class PGUPlainAttr extends AbstractPlainAttr<User> 
implements UPlainAttr,
     /**
      * Values of this attribute (if schema is not UNIQUE).
      */
-    private final List<PGUPlainAttrValue> values = new ArrayList<>();
+    private final List<JPAJSONUPlainAttrValue> values = new ArrayList<>();
 
     /**
      * Value of this attribute (if schema is UNIQUE).
      */
     @JsonProperty
-    private PGUPlainAttrUniqueValue uniqueValue;
+    private JPAJSONUPlainAttrUniqueValue uniqueValue;
 
     @Override
     public User getOwner() {
@@ -80,8 +80,8 @@ public class PGUPlainAttr extends AbstractPlainAttr<User> 
implements UPlainAttr,
 
     @Override
     public void setOwner(final User owner) {
-        checkType(owner, PGJPAUser.class);
-        this.owner = (PGJPAUser) owner;
+        checkType(owner, JPAJSONUser.class);
+        this.owner = (JPAJSONUser) owner;
     }
 
     @JsonIgnore
@@ -133,8 +133,8 @@ public class PGUPlainAttr extends AbstractPlainAttr<User> 
implements UPlainAttr,
 
     @Override
     protected boolean addForMultiValue(final PlainAttrValue attrValue) {
-        checkType(attrValue, PGUPlainAttrValue.class);
-        return values.add((PGUPlainAttrValue) attrValue);
+        checkType(attrValue, JPAJSONUPlainAttrValue.class);
+        return values.add((JPAJSONUPlainAttrValue) attrValue);
     }
 
     @Override
@@ -148,20 +148,20 @@ public class PGUPlainAttr extends AbstractPlainAttr<User> 
implements UPlainAttr,
     }
 
     @JsonIgnore
-    public List<PGUPlainAttrValue> getPGValues() {
+    public List<JPAJSONUPlainAttrValue> getPGValues() {
         return values;
     }
 
     @Override
-    public PGUPlainAttrUniqueValue getUniqueValue() {
+    public JPAJSONUPlainAttrUniqueValue getUniqueValue() {
         return uniqueValue;
     }
 
     @JsonIgnore
     @Override
     public void setUniqueValue(final PlainAttrUniqueValue uniqueValue) {
-        checkType(uniqueValue, PGUPlainAttrUniqueValue.class);
-        this.uniqueValue = (PGUPlainAttrUniqueValue) uniqueValue;
+        checkType(uniqueValue, JPAJSONUPlainAttrUniqueValue.class);
+        this.uniqueValue = (JPAJSONUPlainAttrUniqueValue) uniqueValue;
     }
 
     @Override
@@ -185,7 +185,7 @@ public class PGUPlainAttr extends AbstractPlainAttr<User> 
implements UPlainAttr,
         if (getClass() != obj.getClass()) {
             return false;
         }
-        final PGUPlainAttr other = (PGUPlainAttr) obj;
+        final JPAJSONUPlainAttr other = (JPAJSONUPlainAttr) obj;
         return new EqualsBuilder().
                 append(schema, other.schema).
                 append(membership, other.membership).
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/PGUPlainAttrUniqueValue.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAJSONUPlainAttrUniqueValue.java
similarity index 89%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/PGUPlainAttrUniqueValue.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAJSONUPlainAttrUniqueValue.java
index 9b6cd3e..ab4a8f4 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/PGUPlainAttrUniqueValue.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAJSONUPlainAttrUniqueValue.java
@@ -29,12 +29,12 @@ import 
org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttrValue;
 
 @JsonIgnoreProperties({ "valueAsString", "value" })
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class PGUPlainAttrUniqueValue extends AbstractPlainAttrValue implements 
UPlainAttrUniqueValue {
+public class JPAJSONUPlainAttrUniqueValue extends AbstractPlainAttrValue 
implements UPlainAttrUniqueValue {
 
     private static final long serialVersionUID = -4053996864791245312L;
 
     @JsonIgnore
-    private PGUPlainAttr attr;
+    private JPAJSONUPlainAttr attr;
 
     @Override
     public UPlainAttr getAttr() {
@@ -43,8 +43,8 @@ public class PGUPlainAttrUniqueValue extends 
AbstractPlainAttrValue implements U
 
     @Override
     public void setAttr(final PlainAttr<?> attr) {
-        checkType(attr, PGUPlainAttr.class);
-        this.attr = (PGUPlainAttr) attr;
+        checkType(attr, JPAJSONUPlainAttr.class);
+        this.attr = (JPAJSONUPlainAttr) attr;
     }
 
     @JsonIgnore
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/PGUPlainAttrValue.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAJSONUPlainAttrValue.java
similarity index 87%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/PGUPlainAttrValue.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAJSONUPlainAttrValue.java
index 6ba15d5..4a4415b 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/PGUPlainAttrValue.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAJSONUPlainAttrValue.java
@@ -28,12 +28,12 @@ import 
org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttrValue;
 
 @JsonIgnoreProperties({ "valueAsString", "value" })
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class PGUPlainAttrValue extends AbstractPlainAttrValue implements 
UPlainAttrValue {
+public class JPAJSONUPlainAttrValue extends AbstractPlainAttrValue implements 
UPlainAttrValue {
 
     private static final long serialVersionUID = 1832825176101443555L;
 
     @JsonIgnore
-    private PGUPlainAttr attr;
+    private JPAJSONUPlainAttr attr;
 
     @Override
     public UPlainAttr getAttr() {
@@ -42,7 +42,7 @@ public class PGUPlainAttrValue extends AbstractPlainAttrValue 
implements UPlainA
 
     @Override
     public void setAttr(final PlainAttr<?> attr) {
-        checkType(attr, PGUPlainAttr.class);
-        this.attr = (PGUPlainAttr) attr;
+        checkType(attr, JPAJSONUPlainAttr.class);
+        this.attr = (JPAJSONUPlainAttr) attr;
     }
 }
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/PGJPAUser.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAJSONUser.java
similarity index 84%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/PGJPAUser.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAJSONUser.java
index 5bc949c..1591b9c 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/PGJPAUser.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAJSONUser.java
@@ -33,15 +33,15 @@ import 
org.apache.syncope.core.persistence.api.entity.Membership;
 import org.apache.syncope.core.persistence.api.entity.user.UMembership;
 import org.apache.syncope.core.persistence.api.entity.user.UPlainAttr;
 import org.apache.syncope.core.persistence.api.entity.user.User;
-import org.apache.syncope.core.persistence.jpa.entity.PGPlainAttr;
-import org.apache.syncope.core.persistence.jpa.entity.PGJPAAny;
-import org.apache.syncope.core.persistence.jpa.validation.entity.PGJPAAnyCheck;
+import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
+import org.apache.syncope.core.persistence.api.entity.JSONAny;
+import 
org.apache.syncope.core.persistence.jpa.validation.entity.JPAJSONAnyCheck;
 
 @Entity
 @Table(name = JPAUser.TABLE)
-@EntityListeners({ PGJPAUserListener.class })
-@PGJPAAnyCheck
-public class PGJPAUser extends JPAUser implements PGJPAAny<User>, User {
+@EntityListeners({ JPAJSONUserListener.class })
+@JPAJSONAnyCheck
+public class JPAJSONUser extends JPAUser implements JSONAny<User>, User {
 
     private static final long serialVersionUID = -8543654943709531885L;
 
@@ -50,7 +50,7 @@ public class PGJPAUser extends JPAUser implements 
PGJPAAny<User>, User {
     private String plainAttrs;
 
     @Transient
-    private final List<PGUPlainAttr> plainAttrList = new ArrayList<>();
+    private final List<JPAJSONUPlainAttr> plainAttrList = new ArrayList<>();
 
     @Override
     public String getPlainAttrsJSON() {
@@ -63,26 +63,26 @@ public class PGJPAUser extends JPAUser implements 
PGJPAAny<User>, User {
     }
 
     @Override
-    public List<PGUPlainAttr> getPlainAttrList() {
+    public List<JPAJSONUPlainAttr> getPlainAttrList() {
         return plainAttrList;
     }
 
     @Override
-    public boolean add(final PGPlainAttr<User> attr) {
+    public boolean add(final JSONPlainAttr<User> attr) {
         return add((UPlainAttr) attr);
     }
 
     @Override
     public boolean add(final UPlainAttr attr) {
-        checkType(attr, PGUPlainAttr.class);
-        return plainAttrList.add((PGUPlainAttr) attr);
+        checkType(attr, JPAJSONUPlainAttr.class);
+        return plainAttrList.add((JPAJSONUPlainAttr) attr);
     }
 
     @Override
     public boolean remove(final UPlainAttr attr) {
         return plainAttrList.removeIf(pgattr
                 -> pgattr.getSchemaKey().equals(attr.getSchema().getKey())
-                && Objects.equals(pgattr.getMembershipKey(), ((PGUPlainAttr) 
attr).getMembershipKey()));
+                && Objects.equals(pgattr.getMembershipKey(), 
((JPAJSONUPlainAttr) attr).getMembershipKey()));
     }
 
     @Override
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/PGJPAUserListener.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAJSONUserListener.java
similarity index 76%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/PGJPAUserListener.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAJSONUserListener.java
index 7ab5d32..66f8b08 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/PGJPAUserListener.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAJSONUserListener.java
@@ -26,32 +26,32 @@ import javax.persistence.PostUpdate;
 import javax.persistence.PrePersist;
 import javax.persistence.PreUpdate;
 import org.apache.syncope.core.persistence.api.entity.user.User;
-import org.apache.syncope.core.persistence.jpa.entity.PGJPAEntityListener;
-import org.apache.syncope.core.persistence.jpa.entity.PGPlainAttr;
+import org.apache.syncope.core.persistence.jpa.entity.JPAJSONEntityListener;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
+import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
 
-public class PGJPAUserListener extends PGJPAEntityListener<User> {
+public class JPAJSONUserListener extends JPAJSONEntityListener<User> {
 
     @Override
-    protected List<? extends PGPlainAttr<User>> getValues(final String 
plainAttrsJSON) {
-        return POJOHelper.deserialize(plainAttrsJSON, new 
TypeReference<List<PGUPlainAttr>>() {
+    protected List<? extends JSONPlainAttr<User>> getValues(final String 
plainAttrsJSON) {
+        return POJOHelper.deserialize(plainAttrsJSON, new 
TypeReference<List<JPAJSONUPlainAttr>>() {
         });
     }
 
     @PostLoad
-    public void read(final PGJPAUser user) {
+    public void read(final JPAJSONUser user) {
         super.json2list(user, false);
     }
 
     @PrePersist
     @PreUpdate
-    public void save(final PGJPAUser user) {
+    public void save(final JPAJSONUser user) {
         super.list2json(user);
     }
 
     @PostPersist
     @PostUpdate
-    public void readAfterSave(final PGJPAUser user) {
+    public void readAfterSave(final JPAJSONUser user) {
         super.json2list(user, true);
     }
 }
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/PGJPAAnyCheck.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/JPAJSONAnyCheck.java
similarity index 94%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/PGJPAAnyCheck.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/JPAJSONAnyCheck.java
index ef6f87d..361894d 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/PGJPAAnyCheck.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/JPAJSONAnyCheck.java
@@ -29,9 +29,9 @@ import javax.validation.Payload;
 
 @Target({ ElementType.TYPE })
 @Retention(RetentionPolicy.RUNTIME)
-@Constraint(validatedBy = PGJPAAnyValidator.class)
+@Constraint(validatedBy = JPAJSONAnyValidator.class)
 @Documented
-public @interface PGJPAAnyCheck {
+public @interface JPAJSONAnyCheck {
 
     String message() default 
"{org.apache.syncope.core.persistence.validation.any}";
 
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/PGJPAAnyValidator.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/JPAJSONAnyValidator.java
similarity index 87%
rename from 
core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/PGJPAAnyValidator.java
rename to 
core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/JPAJSONAnyValidator.java
index 089808c..6a32456 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/PGJPAAnyValidator.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/JPAJSONAnyValidator.java
@@ -21,12 +21,12 @@ package 
org.apache.syncope.core.persistence.jpa.validation.entity;
 import java.util.concurrent.atomic.AtomicReference;
 import javax.validation.ConstraintValidatorContext;
 import org.apache.syncope.core.persistence.api.entity.PlainAttr;
-import org.apache.syncope.core.persistence.jpa.entity.PGJPAAny;
+import org.apache.syncope.core.persistence.api.entity.JSONAny;
 
-public class PGJPAAnyValidator extends AbstractValidator<PGJPAAnyCheck, 
PGJPAAny<?>> {
+public class JPAJSONAnyValidator extends AbstractValidator<JPAJSONAnyCheck, 
JSONAny<?>> {
 
     @Override
-    public boolean isValid(final PGJPAAny<?> entity, final 
ConstraintValidatorContext context) {
+    public boolean isValid(final JSONAny<?> entity, final 
ConstraintValidatorContext context) {
         context.disableDefaultConstraintViolation();
 
         PlainAttrValidator attrValidator = new PlainAttrValidator();
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/resources/META-INF/spring-orm-pgjsonb.xml
 b/core/persistence-jpa-json/src/main/resources/META-INF/spring-orm-pgjsonb.xml
similarity index 70%
rename from 
core/persistence-jpa-pgjsonb/src/main/resources/META-INF/spring-orm-pgjsonb.xml
rename to 
core/persistence-jpa-json/src/main/resources/META-INF/spring-orm-pgjsonb.xml
index 0118765..64160d4 100644
--- 
a/core/persistence-jpa-pgjsonb/src/main/resources/META-INF/spring-orm-pgjsonb.xml
+++ 
b/core/persistence-jpa-json/src/main/resources/META-INF/spring-orm-pgjsonb.xml
@@ -33,41 +33,77 @@ under the License.
       </entity-listeners>
     </persistence-unit-defaults>
   </persistence-unit-metadata>
-  
+ 
+  <entity 
class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAJSONAnyObject">
+    <attributes>
+      <basic name="plainAttrs">
+        <column column-definition="jsonb"/>
+        <lob/>
+      </basic>
+    </attributes>
+  </entity>
+    
+  <entity 
class="org.apache.syncope.core.persistence.jpa.entity.group.JPAJSONGroup">
+    <attributes>
+      <basic name="plainAttrs">
+        <column column-definition="jsonb"/>
+        <lob/>
+      </basic>
+    </attributes>
+  </entity>
+
+  <entity 
class="org.apache.syncope.core.persistence.jpa.entity.user.JPAJSONUser">
+    <attributes>
+      <basic name="plainAttrs">
+        <column column-definition="jsonb"/>
+        <lob/>
+      </basic>
+    </attributes>
+  </entity>
+
+  <entity 
class="org.apache.syncope.core.persistence.jpa.entity.conf.JPAJSONConf">
+    <attributes>
+      <basic name="plainAttrs">
+        <column column-definition="jsonb"/>
+        <lob/>
+      </basic>
+    </attributes>
+  </entity>
+
   <entity 
class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup">
     <attributes>
-      <many-to-one name="userOwner" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.user.PGJPAUser"/>
-      <many-to-one name="groupOwner" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.group.PGJPAGroup"/>
+      <many-to-one name="userOwner" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.user.JPAJSONUser"/>
+      <many-to-one name="groupOwner" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.group.JPAJSONGroup"/>
     </attributes>
   </entity>
 
   <entity 
class="org.apache.syncope.core.persistence.jpa.entity.group.JPATypeExtension">
     <attributes>
-      <many-to-one name="group" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.group.PGJPAGroup"/>
+      <many-to-one name="group" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.group.JPAJSONGroup"/>
     </attributes>
   </entity>
 
   <entity 
class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUMembership">
     <attributes>
-      <many-to-one name="leftEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.user.PGJPAUser">
+      <many-to-one name="leftEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.user.JPAJSONUser">
         <join-column name="user_id"/>
       </many-to-one>
-      <many-to-one name="rightEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.group.PGJPAGroup">
+      <many-to-one name="rightEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.group.JPAJSONGroup">
         <join-column name="group_id"/>
       </many-to-one>        
     </attributes>
   </entity>
   <entity 
class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUDynGroupMembership">
     <attributes>
-      <one-to-one name="group" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.group.PGJPAGroup"/>
+      <one-to-one name="group" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.group.JPAJSONGroup"/>
     </attributes>
   </entity>
   <entity 
class="org.apache.syncope.core.persistence.jpa.entity.user.JPAURelationship">
     <attributes>
-      <many-to-one name="leftEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.user.PGJPAUser">
+      <many-to-one name="leftEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.user.JPAJSONUser">
         <join-column name="user_id"/>
       </many-to-one>
-      <many-to-one name="rightEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.anyobject.PGJPAAnyObject">
+      <many-to-one name="rightEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAJSONAnyObject">
         <join-column name="anyObject_id"/>
       </many-to-one>
     </attributes>
@@ -75,25 +111,25 @@ under the License.
 
   <entity 
class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAMembership">
     <attributes>
-      <many-to-one name="leftEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.anyobject.PGJPAAnyObject">
+      <many-to-one name="leftEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAJSONAnyObject">
         <join-column name="anyObject_id"/>
       </many-to-one>
-      <many-to-one name="rightEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.group.PGJPAGroup">
+      <many-to-one name="rightEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.group.JPAJSONGroup">
         <join-column name="group_id"/>
       </many-to-one>
     </attributes>
   </entity>
   <entity 
class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAADynGroupMembership">
     <attributes>
-      <one-to-one name="group" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.group.PGJPAGroup"/>
+      <one-to-one name="group" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.group.JPAJSONGroup"/>
     </attributes>
   </entity>
   <entity 
class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAARelationship">
     <attributes>
-      <many-to-one name="leftEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.anyobject.PGJPAAnyObject">
+      <many-to-one name="leftEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAJSONAnyObject">
         <join-column name="left_anyObject_id"/>
       </many-to-one>
-      <many-to-one name="rightEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.anyobject.PGJPAAnyObject">
+      <many-to-one name="rightEnd" 
target-entity="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAJSONAnyObject">
         <join-column name="right_anyObject_id"/>
       </many-to-one>
     </attributes>
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/resources/persistence-enhance.xml 
b/core/persistence-jpa-json/src/main/resources/persistence-enhance.xml
similarity index 100%
rename from 
core/persistence-jpa-pgjsonb/src/main/resources/persistence-enhance.xml
rename to core/persistence-jpa-json/src/main/resources/persistence-enhance.xml
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/resources/domains/Master.properties 
b/core/persistence-jpa-json/src/main/resources/pgjsonb/domains/Master.properties
similarity index 100%
rename from 
core/persistence-jpa-pgjsonb/src/main/resources/domains/Master.properties
rename to 
core/persistence-jpa-json/src/main/resources/pgjsonb/domains/Master.properties
diff --git a/fit/core-reference/src/main/resources/pgjsonb/indexes.xml 
b/core/persistence-jpa-json/src/main/resources/pgjsonb/indexes.xml
similarity index 100%
rename from fit/core-reference/src/main/resources/pgjsonb/indexes.xml
rename to core/persistence-jpa-json/src/main/resources/pgjsonb/indexes.xml
diff --git 
a/core/persistence-jpa-pgjsonb/src/main/resources/persistence.properties 
b/core/persistence-jpa-json/src/main/resources/pgjsonb/persistence.properties
similarity index 63%
rename from 
core/persistence-jpa-pgjsonb/src/main/resources/persistence.properties
rename to 
core/persistence-jpa-json/src/main/resources/pgjsonb/persistence.properties
index a299527..50d568e 100644
--- a/core/persistence-jpa-pgjsonb/src/main/resources/persistence.properties
+++ 
b/core/persistence-jpa-json/src/main/resources/pgjsonb/persistence.properties
@@ -15,13 +15,13 @@
 # specific language governing permissions and limitations
 # under the License.
 content.directory=${conf.directory}
-entity.factory=org.apache.syncope.core.persistence.jpa.entity.PGJPAEntityFactory
-plainSchema.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAPlainSchemaDAO
-plainAttr.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAPlainAttrDAO
-plainAttrValue.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAPlainAttrValueDAO
-any.search.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAAnySearchDAO
-user.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAUserDAO
-group.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAGroupDAO
-anyObject.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAAnyObjectDAO
-conf.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAConfDAO
+entity.factory=org.apache.syncope.core.persistence.jpa.entity.PGJPAJSONEntityFactory
+plainSchema.dao=org.apache.syncope.core.persistence.jpa.dao.JPAJSONPlainSchemaDAO
+plainAttr.dao=org.apache.syncope.core.persistence.jpa.dao.JPAJSONPlainAttrDAO
+plainAttrValue.dao=org.apache.syncope.core.persistence.jpa.dao.JPAJSONPlainAttrValueDAO
+any.search.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAJSONAnySearchDAO
+user.dao=org.apache.syncope.core.persistence.jpa.dao.JPAJSONUserDAO
+group.dao=org.apache.syncope.core.persistence.jpa.dao.JPAJSONGroupDAO
+anyObject.dao=org.apache.syncope.core.persistence.jpa.dao.JPAJSONAnyObjectDAO
+conf.dao=org.apache.syncope.core.persistence.jpa.dao.JPAJSONConfDAO
 openjpa.RemoteCommitProvider=sjvm
diff --git a/fit/core-reference/src/main/resources/pgjsonb/views.xml 
b/core/persistence-jpa-json/src/main/resources/pgjsonb/views.xml
similarity index 100%
rename from fit/core-reference/src/main/resources/pgjsonb/views.xml
rename to core/persistence-jpa-json/src/main/resources/pgjsonb/views.xml
diff --git 
a/core/persistence-jpa-pgjsonb/src/test/resources/persistenceTest.xml 
b/core/persistence-jpa-json/src/test/resources/persistenceTest.xml
similarity index 100%
rename from core/persistence-jpa-pgjsonb/src/test/resources/persistenceTest.xml
rename to core/persistence-jpa-json/src/test/resources/persistenceTest.xml
diff --git 
a/core/persistence-jpa-pgjsonb/src/test/resources/domains/MasterContent.xml 
b/core/persistence-jpa-json/src/test/resources/pgjsonb/domains/MasterContent.xml
similarity index 100%
rename from 
core/persistence-jpa-pgjsonb/src/test/resources/domains/MasterContent.xml
rename to 
core/persistence-jpa-json/src/test/resources/pgjsonb/domains/MasterContent.xml
diff --git 
a/core/persistence-jpa-pgjsonb/src/test/resources/simplelogger.properties 
b/core/persistence-jpa-json/src/test/resources/simplelogger.properties
similarity index 100%
rename from 
core/persistence-jpa-pgjsonb/src/test/resources/simplelogger.properties
rename to core/persistence-jpa-json/src/test/resources/simplelogger.properties
diff --git a/core/persistence-jpa-pgjsonb/src/main/resources/indexes.xml 
b/core/persistence-jpa-pgjsonb/src/main/resources/indexes.xml
deleted file mode 100644
index 3e5b92b..0000000
--- a/core/persistence-jpa-pgjsonb/src/main/resources/indexes.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-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.
--->
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd";>
-<properties>
-  <comment>Additional indexes (in respect to JPA's)</comment>
-
-  <entry key="SyncopeUser_plainAttrs_idx">CREATE INDEX 
SyncopeUser_plainAttrs_idx ON SyncopeUser USING gin ((plainAttrs) 
jsonb_path_ops)</entry>
-  <entry key="SyncopeGroup_plainAttrs_idx">CREATE INDEX 
SyncopeGroup_plainAttrs_idx ON SyncopeGroup USING gin ((plainAttrs) 
jsonb_path_ops)</entry>
-  <entry key="AnyObject_plainAttrs_idx">CREATE INDEX AnyObject_plainAttrs_idx 
ON AnyObject USING gin ((plainAttrs) jsonb_path_ops)</entry>
-  <entry key="SyncopeConf_plainAttrs_idx">CREATE INDEX 
SyncopeConf_plainAttrs_idx ON SyncopeConf USING gin ((plainAttrs) 
jsonb_path_ops)</entry>
-
-  <entry key="UDynGroupMembers_any_id">CREATE INDEX UDynGroupMembers_any_id ON 
UDynGroupMembers(any_id)</entry>
-  <entry key="UDynGroupMembers_group_id">CREATE INDEX 
UDynGroupMembers_group_id ON UDynGroupMembers(group_id)</entry>
-  <entry key="ADynGroupMembers_any_id">CREATE INDEX ADynGroupMembers_any_id ON 
ADynGroupMembers(any_id)</entry>
-  <entry key="ADynGroupMembers_group_id">CREATE INDEX 
ADynGroupMembers_group_id ON ADynGroupMembers(group_id)</entry>
-
-  <entry key="DynRoleMembers_any_id">CREATE INDEX DynRoleMembers_any_id ON 
DynRoleMembers(any_id)</entry>
-  <entry key="DynRoleMembers_role_id">CREATE INDEX DynRoleMembers_role_id ON 
DynRoleMembers(role_id)</entry>
-
-  <entry key="DynRealmMembers_any_id">CREATE INDEX DynRealmMembers_any_id ON 
DynRealmMembers(any_id)</entry>
-  <entry key="DynRealmMembers_realm_id">CREATE INDEX 
DynRealmMembers_dynRealm_id ON DynRealmMembers(dynRealm_id)</entry>
-
-  <entry key="CPlainAttrValue_stringvalueIndex">CREATE INDEX 
CAttrValue_stringvalueIndex ON CPlainAttrValue(stringvalue)</entry>
-  <entry key="CPlainAttrValue_datevalueIndex">CREATE INDEX 
CAttrValue_datevalueIndex ON CPlainAttrValue(datevalue)</entry>
-  <entry key="CPlainAttrValue_longvalueIndex">CREATE INDEX 
CAttrValue_longvalueIndex ON CPlainAttrValue(longvalue)</entry>
-  <entry key="CPlainAttrValue_doublevalueIndex">CREATE INDEX 
CAttrValue_doublevalueIndex ON CPlainAttrValue(doublevalue)</entry>
-  <entry key="CPlainAttrValue_booleanvalueIndex">CREATE INDEX 
CAttrValue_booleanvalueIndex ON CPlainAttrValue(booleanvalue)</entry>
-
-  <entry key="UMembership_GroupIndex">CREATE INDEX UMembership_GroupIndex ON 
UMembership(group_id)</entry>
-  <entry key="UMembership_UserIndex">CREATE INDEX UMembership_UserIndex ON 
UMembership(user_id)</entry>
-  <entry key="AMembership_GroupIndex">CREATE INDEX AMembership_GroupIndex ON 
AMembership(group_id)</entry>
-  <entry key="AMembership_AnyObjectIndex">CREATE INDEX 
AMembership_AnyObjectIndex ON AMembership(anyObject_id)</entry>
-
-  <entry key="URelationship_RightIndex">CREATE INDEX URelationship_RightIndex 
ON URelationship(anyObject_id)</entry>
-  <entry key="URelationship_LeftIndex">CREATE INDEX URelationship_LeftIndex ON 
URelationship(user_id)</entry>
-  <entry key="ARelationship_RightIndex">CREATE INDEX ARelationship_RightIndex 
ON ARelationship(right_anyObject_id)</entry>
-  <entry key="ARelationship_AnyObjectIndex">CREATE INDEX 
ARelationship_AnyObjectIndex ON ARelationship(left_anyObject_id)</entry>
-
-  <entry key="CPlainAttrValue_attrIndex">CREATE INDEX 
CPlainAttrValue_attrIndex on CPlainAttrValue(attribute_id)</entry>
-  <entry key="CPAttrUniqueValue_attrIndex">CREATE INDEX 
CPAttrUniqueValue_attrIndex on CPlainAttrUniqueValue(attribute_id)</entry>
-
-  <entry key="CPlainAttr_owner_Index">CREATE INDEX CPlainAttr_owner_Index on 
CPlainAttr(owner_id)</entry>
-  <entry key="CPlainAttr_schema_Index">CREATE INDEX CPlainAttr_schema_Index on 
CPlainAttr(schema_id)</entry>
-
-  <entry key="Task_executedIndex">CREATE INDEX Task_executedIndex ON 
Task(executed)</entry>
-</properties>
diff --git a/core/persistence-jpa-pgjsonb/src/main/resources/views.xml 
b/core/persistence-jpa-pgjsonb/src/main/resources/views.xml
deleted file mode 100644
index eb450be..0000000
--- a/core/persistence-jpa-pgjsonb/src/main/resources/views.xml
+++ /dev/null
@@ -1,154 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-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.
--->
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd";>
-<properties>
-  
-  <entry key="UDynGroupMembers">
-    CREATE TABLE UDynGroupMembers(
-    any_id CHAR(36),
-    group_id CHAR(36),
-    UNIQUE(any_id, group_id))
-  </entry>
-  <entry key="ADynGroupMembers">
-    CREATE TABLE ADynGroupMembers(
-    anyType_id VARCHAR(255),
-    any_id CHAR(36),
-    group_id CHAR(36),
-    UNIQUE(anyType_id, any_id, group_id))
-  </entry>
-  <entry key="DynRoleMembers">
-    CREATE TABLE DynRoleMembers(
-    any_id CHAR(36),
-    role_id VARCHAR(255),
-    UNIQUE(any_id, role_id))
-  </entry>
-  <entry key="DynRealmMembers">
-    CREATE TABLE DynRealmMembers(
-    any_id CHAR(36),
-    dynRealm_id VARCHAR(255),
-    UNIQUE(any_id, dynRealm_id))
-  </entry>
-
-  <!-- user -->
-  <entry key="user_search">
-    CREATE VIEW user_search AS
-
-    SELECT u.id as any_id, u.*,attrs,attrValues
-    FROM SyncopeUser u, jsonb_array_elements(COALESCE(u.plainAttrs, 
'[{}]'::jsonb)) attrs,
-    jsonb_array_elements(COALESCE(attrs -> 'values', '[{}]'::jsonb)) attrValues
-  </entry>
-  <entry key="user_search_urelationship">
-    CREATE VIEW user_search_urelationship AS
-
-    SELECT m.user_id AS any_id, m.anyObject_id AS right_any_id, m.type_id AS 
type
-    FROM URelationship m
-  </entry>
-  <entry key="user_search_umembership">
-    CREATE VIEW user_search_umembership AS
-
-    SELECT m.user_id AS any_id, g.id AS group_id, g.name AS group_name
-    FROM UMembership m, SyncopeGroup g
-    WHERE m.group_id = g.id
-  </entry>
-  <entry key="user_search_role">
-    CREATE VIEW user_search_role AS
-
-    SELECT ss.user_id AS any_id, ss.role_id AS role_id
-    FROM SyncopeUser_SyncopeRole ss
-  </entry>
-  <entry key="user_search_priv">
-    CREATE VIEW user_search_priv AS
-
-    SELECT ss.user_id AS any_id, sp.privilege_id AS privilege_id
-    FROM SyncopeUser_SyncopeRole ss, SyncopeRole_Privilege sp
-    WHERE ss.role_id = sp.role_id
-  </entry>
-  <entry key="user_search_dynpriv">
-    CREATE VIEW user_search_dynpriv AS
-
-    SELECT any_id, privilege_id
-    FROM DynRoleMembers drm, SyncopeRole_Privilege rp
-    WHERE drm.role_id = rp.role_id
-  </entry>
-  <entry key="user_search_resource">
-    CREATE VIEW user_search_resource AS
-
-    SELECT st.user_id AS any_id, st.resource_id AS resource_id
-    FROM SyncopeUser_ExternalResource st
-  </entry>
-  <entry key="user_search_group_res">
-    CREATE VIEW user_search_group_res AS
-
-    SELECT m.user_id AS any_id, st.resource_id AS resource_id
-    FROM UMembership m, SyncopeGroup r, SyncopeGroup_ExternalResource st
-    WHERE m.group_id = r.id AND st.group_id = r.id
-  </entry>
-
-  <!-- anyObject -->
-  <entry key="anyObject_search">
-    CREATE VIEW anyObject_search AS
-
-    SELECT a.id as any_id, a.*,attrs,attrValues
-    FROM AnyObject a, jsonb_array_elements(COALESCE(a.plainAttrs, 
'[{}]'::jsonb)) attrs,
-    jsonb_array_elements(COALESCE(attrs -> 'values', '[{}]'::jsonb)) attrValues
-  </entry>
-  <entry key="anyObject_search_arelationship">
-    CREATE VIEW anyObject_search_arelationship AS
-
-    SELECT m.left_anyObject_id AS any_id, m.right_anyObject_id AS 
right_any_id, m.type_id AS type
-    FROM ARelationship m
-  </entry>
-  <entry key="anyObject_search_amembership">
-    CREATE VIEW anyObject_search_amembership AS
-
-    SELECT m.anyObject_id AS any_id, g.id AS group_id, g.name AS group_name
-    FROM AMembership m, SyncopeGroup g
-    WHERE m.group_id = g.id
-  </entry>
-  <entry key="anyObject_search_resource">
-    CREATE VIEW anyObject_search_resource AS
-
-    SELECT st.anyObject_id AS any_id, st.resource_id AS resource_id
-    FROM AnyObject_ExternalResource st
-  </entry>
-  <entry key="anyObject_search_group_res">
-    CREATE VIEW anyObject_search_group_res AS
-
-    SELECT m.anyObject_id AS any_id, st.resource_id AS resource_id
-    FROM AMembership m, SyncopeGroup r, SyncopeGroup_ExternalResource st
-    WHERE m.group_id = r.id AND st.group_id = r.id
-  </entry>
-
-  <!-- group -->
-  <entry key="group_search">
-    CREATE VIEW group_search AS
-
-    SELECT g.id as any_id, g.*,attrs,attrValues
-    FROM SyncopeGroup g, jsonb_array_elements(COALESCE(g.plainAttrs, 
'[{}]'::jsonb)) attrs,
-    jsonb_array_elements(COALESCE(attrs -> 'values', '[{}]'::jsonb)) attrValues
-  </entry>
-  <entry key="group_search_resource">
-    CREATE VIEW group_search_resource AS
-
-    SELECT st.group_id AS any_id, st.resource_id AS resource_id
-    FROM SyncopeGroup_ExternalResource st
-  </entry>
-
-</properties>
diff --git a/core/pom.xml b/core/pom.xml
index 57d8941..e780489 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -79,7 +79,7 @@ under the License.
   <modules>
     <module>persistence-api</module>
     <module>persistence-jpa</module>
-    <module>persistence-jpa-pgjsonb</module>
+    <module>persistence-jpa-json</module>
     <module>spring</module>
     <module>provisioning-api</module>
     <module>provisioning-java</module>
diff --git a/fit/core-reference/pom.xml b/fit/core-reference/pom.xml
index 754640c..b7ce361 100644
--- a/fit/core-reference/pom.xml
+++ b/fit/core-reference/pom.xml
@@ -601,7 +601,7 @@ under the License.
       <dependencies>
         <dependency>
           <groupId>org.apache.syncope.core</groupId>
-          <artifactId>syncope-core-persistence-jpa-pgjsonb</artifactId>
+          <artifactId>syncope-core-persistence-jpa-json</artifactId>
           <version>${project.version}</version>
         </dependency>
     
@@ -724,15 +724,16 @@ under the License.
             <filtering>true</filtering>
           </resource>
           <resource>
-            
<directory>${basedir}/../../core/persistence-jpa-pgjsonb/src/test/resources/domains</directory>
+            
<directory>${basedir}/../../core/persistence-jpa-json/src/test/resources/pgjsonb/domains</directory>
             <targetPath>${project.build.directory}/classes/domains</targetPath>
             <filtering>true</filtering>
           </resource>
         </resources>
         <testResources>
           <testResource>
-            <directory>src/main/resources/pgjsonb</directory>
+            
<directory>${basedir}/../../core/persistence-jpa-json/src/main/resources/pgjsonb</directory>
             <includes>
+              <include>persistence.properties</include>
               <include>indexes.xml</include>
               <include>views.xml</include>
             </includes>            
diff --git 
a/fit/core-reference/src/main/resources/pgjsonb/persistence.properties 
b/fit/core-reference/src/main/resources/pgjsonb/persistence.properties
deleted file mode 100644
index a299527..0000000
--- a/fit/core-reference/src/main/resources/pgjsonb/persistence.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-# 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.
-content.directory=${conf.directory}
-entity.factory=org.apache.syncope.core.persistence.jpa.entity.PGJPAEntityFactory
-plainSchema.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAPlainSchemaDAO
-plainAttr.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAPlainAttrDAO
-plainAttrValue.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAPlainAttrValueDAO
-any.search.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAAnySearchDAO
-user.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAUserDAO
-group.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAGroupDAO
-anyObject.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAAnyObjectDAO
-conf.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAConfDAO
-openjpa.RemoteCommitProvider=sjvm
diff --git 
a/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/dbms.adoc
 
b/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/dbms.adoc
index ec8f3c6..099ef0f 100644
--- 
a/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/dbms.adoc
+++ 
b/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/dbms.adoc
@@ -74,7 +74,7 @@ Add the following dependency to `core/pom.xml`:
 ----
 <dependency>
   <groupId>org.apache.syncope.core</groupId>
-  <artifactId>syncope-core-persistence-jpa-pgjsonb</artifactId>
+  <artifactId>syncope-core-persistence-jpa-json</artifactId>
   <version>${syncope.version}</version>
 </dependency>
 ----
@@ -82,15 +82,15 @@ Add the following dependency to `core/pom.xml`:
 In `persistence.properties`, replace as follows:
 
 ....
-entity.factory=org.apache.syncope.core.persistence.jpa.entity.PGJPAEntityFactory
-plainSchema.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAPlainSchemaDAO
-plainAttr.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAPlainAttrDAO
-plainAttrValue.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAPlainAttrValueDAO
-any.search.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAAnySearchDAO
-user.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAUserDAO
-group.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAGroupDAO
-anyObject.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAAnyObjectDAO
-conf.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAConfDAO
+entity.factory=org.apache.syncope.core.persistence.jpa.entity.PGJPAJSONEntityFactory
+plainSchema.dao=org.apache.syncope.core.persistence.jpa.dao.JPAJSONPlainSchemaDAO
+plainAttr.dao=org.apache.syncope.core.persistence.jpa.dao.JPAJSONPlainAttrDAO
+plainAttrValue.dao=org.apache.syncope.core.persistence.jpa.dao.JPAJSONPlainAttrValueDAO
+any.search.dao=org.apache.syncope.core.persistence.jpa.dao.PGJPAJSONAnySearchDAO
+user.dao=org.apache.syncope.core.persistence.jpa.dao.JPAJSONUserDAO
+group.dao=org.apache.syncope.core.persistence.jpa.dao.JPAJSONGroupDAO
+anyObject.dao=org.apache.syncope.core.persistence.jpa.dao.JPAJSONAnyObjectDAO
+conf.dao=org.apache.syncope.core.persistence.jpa.dao.JPAJSONConfDAO
 ....
 
 In `provisioning.properties`, replace as follows:

Reply via email to