You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2015/01/12 17:32:29 UTC

[50/52] [abbrv] [partial] syncope git commit: [SYNCOPE-620] Unit tests all in

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ConfigurationLogic.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ConfigurationLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ConfigurationLogic.java
index 581f640..06bb568 100644
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ConfigurationLogic.java
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ConfigurationLogic.java
@@ -26,17 +26,17 @@ import java.util.Set;
 import org.apache.syncope.common.lib.to.AttrTO;
 import org.apache.syncope.common.lib.to.ConfTO;
 import org.apache.syncope.common.lib.wrap.Validator;
-import org.apache.syncope.persistence.api.content.ContentExporter;
-import org.apache.syncope.persistence.api.dao.ConfDAO;
-import org.apache.syncope.persistence.api.dao.NotFoundException;
-import org.apache.syncope.persistence.api.dao.PlainSchemaDAO;
-import org.apache.syncope.persistence.api.entity.conf.CPlainAttr;
-import org.apache.syncope.persistence.api.entity.conf.CPlainSchema;
-import org.apache.syncope.server.logic.data.ConfigurationDataBinder;
+import org.apache.syncope.server.persistence.api.content.ContentExporter;
+import org.apache.syncope.server.persistence.api.dao.ConfDAO;
+import org.apache.syncope.server.persistence.api.dao.NotFoundException;
+import org.apache.syncope.server.persistence.api.dao.PlainSchemaDAO;
+import org.apache.syncope.server.persistence.api.entity.conf.CPlainAttr;
+import org.apache.syncope.server.persistence.api.entity.conf.CPlainSchema;
+import org.apache.syncope.server.provisioning.api.data.ConfigurationDataBinder;
 import org.apache.syncope.server.logic.init.ImplementationClassNamesLoader;
 import org.apache.syncope.server.logic.init.WorkflowAdapterLoader;
-import org.apache.syncope.server.logic.notification.NotificationManager;
-import org.apache.syncope.server.spring.ResourceWithFallbackLoader;
+import org.apache.syncope.server.provisioning.java.notification.NotificationManager;
+import org.apache.syncope.server.misc.spring.ResourceWithFallbackLoader;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.Resource;
 import org.springframework.security.access.prepost.PreAuthorize;

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ConnectorLogic.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ConnectorLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ConnectorLogic.java
index ee550cd..f7043cd 100644
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ConnectorLogic.java
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ConnectorLogic.java
@@ -33,15 +33,15 @@ import org.apache.syncope.common.lib.to.ConnBundleTO;
 import org.apache.syncope.common.lib.to.ConnInstanceTO;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
-import org.apache.syncope.persistence.api.dao.ConnInstanceDAO;
-import org.apache.syncope.persistence.api.dao.ExternalResourceDAO;
-import org.apache.syncope.persistence.api.dao.NotFoundException;
-import org.apache.syncope.persistence.api.entity.ConnInstance;
-import org.apache.syncope.persistence.api.entity.ExternalResource;
-import org.apache.syncope.provisioning.api.ConnIdBundleManager;
-import org.apache.syncope.provisioning.api.Connector;
-import org.apache.syncope.provisioning.api.ConnectorFactory;
-import org.apache.syncope.server.logic.data.ConnInstanceDataBinder;
+import org.apache.syncope.server.persistence.api.dao.ConnInstanceDAO;
+import org.apache.syncope.server.persistence.api.dao.ExternalResourceDAO;
+import org.apache.syncope.server.persistence.api.dao.NotFoundException;
+import org.apache.syncope.server.persistence.api.entity.ConnInstance;
+import org.apache.syncope.server.persistence.api.entity.ExternalResource;
+import org.apache.syncope.server.provisioning.api.ConnIdBundleManager;
+import org.apache.syncope.server.provisioning.api.Connector;
+import org.apache.syncope.server.provisioning.api.ConnectorFactory;
+import org.apache.syncope.server.provisioning.api.data.ConnInstanceDataBinder;
 import org.identityconnectors.common.l10n.CurrentLocale;
 import org.identityconnectors.framework.api.ConfigurationProperties;
 import org.identityconnectors.framework.api.ConnectorInfo;

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/EntitlementLogic.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/EntitlementLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/EntitlementLogic.java
index e71fcb9..d0b051c 100644
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/EntitlementLogic.java
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/EntitlementLogic.java
@@ -23,9 +23,9 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 import org.apache.syncope.common.lib.wrap.EntitlementTO;
-import org.apache.syncope.persistence.api.dao.EntitlementDAO;
-import org.apache.syncope.persistence.api.entity.Entitlement;
-import org.apache.syncope.server.security.AuthContextUtil;
+import org.apache.syncope.server.persistence.api.dao.EntitlementDAO;
+import org.apache.syncope.server.persistence.api.entity.Entitlement;
+import org.apache.syncope.server.misc.security.AuthContextUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/LoggerLogic.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/LoggerLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/LoggerLogic.java
index 5356b86..47db825 100644
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/LoggerLogic.java
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/LoggerLogic.java
@@ -40,16 +40,16 @@ import org.apache.syncope.common.lib.types.LoggerLevel;
 import org.apache.syncope.common.lib.types.LoggerType;
 import org.apache.syncope.common.lib.types.ResourceOperation;
 import org.apache.syncope.common.lib.types.TaskType;
-import org.apache.syncope.persistence.api.dao.ExternalResourceDAO;
-import org.apache.syncope.persistence.api.dao.LoggerDAO;
-import org.apache.syncope.persistence.api.dao.NotFoundException;
-import org.apache.syncope.persistence.api.dao.TaskDAO;
-import org.apache.syncope.persistence.api.entity.EntityFactory;
-import org.apache.syncope.persistence.api.entity.ExternalResource;
-import org.apache.syncope.persistence.api.entity.Logger;
-import org.apache.syncope.persistence.api.entity.task.SchedTask;
-import org.apache.syncope.persistence.api.entity.task.SyncTask;
-import org.apache.syncope.server.spring.BeanUtils;
+import org.apache.syncope.server.persistence.api.dao.ExternalResourceDAO;
+import org.apache.syncope.server.persistence.api.dao.LoggerDAO;
+import org.apache.syncope.server.persistence.api.dao.NotFoundException;
+import org.apache.syncope.server.persistence.api.dao.TaskDAO;
+import org.apache.syncope.server.persistence.api.entity.EntityFactory;
+import org.apache.syncope.server.persistence.api.entity.ExternalResource;
+import org.apache.syncope.server.persistence.api.entity.Logger;
+import org.apache.syncope.server.persistence.api.entity.task.SchedTask;
+import org.apache.syncope.server.persistence.api.entity.task.SyncTask;
+import org.apache.syncope.server.misc.spring.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.Resource;
 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/LogicInvocationHandler.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/LogicInvocationHandler.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/LogicInvocationHandler.java
index 81ca56f..0baad34 100644
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/LogicInvocationHandler.java
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/LogicInvocationHandler.java
@@ -21,8 +21,8 @@ package org.apache.syncope.server.logic;
 import java.lang.reflect.Method;
 import java.util.Arrays;
 import org.apache.syncope.common.lib.types.AuditElements;
-import org.apache.syncope.server.logic.audit.AuditManager;
-import org.apache.syncope.server.logic.notification.NotificationManager;
+import org.apache.syncope.server.misc.AuditManager;
+import org.apache.syncope.server.provisioning.java.notification.NotificationManager;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/NotificationController.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/NotificationController.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/NotificationController.java
deleted file mode 100644
index 053cf3f..0000000
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/NotificationController.java
+++ /dev/null
@@ -1,127 +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.
- */
-package org.apache.syncope.server.logic;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.commons.lang3.ArrayUtils;
-import org.apache.syncope.common.lib.to.NotificationTO;
-import org.apache.syncope.persistence.api.dao.NotFoundException;
-import org.apache.syncope.persistence.api.dao.NotificationDAO;
-import org.apache.syncope.persistence.api.entity.Notification;
-import org.apache.syncope.server.logic.data.NotificationDataBinder;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.stereotype.Component;
-
-@Component
-public class NotificationController extends AbstractTransactionalLogic<NotificationTO> {
-
-    @Autowired
-    private NotificationDAO notificationDAO;
-
-    @Autowired
-    private NotificationDataBinder binder;
-
-    @PreAuthorize("hasRole('NOTIFICATION_READ')")
-    public NotificationTO read(final Long notificationId) {
-        Notification notification = notificationDAO.find(notificationId);
-        if (notification == null) {
-            LOG.error("Could not find notification '" + notificationId + "'");
-
-            throw new NotFoundException(String.valueOf(notificationId));
-        }
-
-        return binder.getNotificationTO(notification);
-    }
-
-    @PreAuthorize("hasRole('NOTIFICATION_LIST')")
-    public List<NotificationTO> list() {
-        List<Notification> notifications = notificationDAO.findAll();
-
-        List<NotificationTO> notificationTOs = new ArrayList<NotificationTO>();
-        for (Notification notification : notifications) {
-            notificationTOs.add(binder.getNotificationTO(notification));
-        }
-
-        return notificationTOs;
-    }
-
-    @PreAuthorize("hasRole('NOTIFICATION_CREATE')")
-    public NotificationTO create(final NotificationTO notificationTO) {
-        return binder.getNotificationTO(notificationDAO.save(binder.create(notificationTO)));
-    }
-
-    @PreAuthorize("hasRole('NOTIFICATION_UPDATE')")
-    public NotificationTO update(final NotificationTO notificationTO) {
-        Notification notification = notificationDAO.find(notificationTO.getKey());
-        if (notification == null) {
-            LOG.error("Could not find notification '" + notificationTO.getKey() + "'");
-            throw new NotFoundException(String.valueOf(notificationTO.getKey()));
-        }
-
-        binder.update(notification, notificationTO);
-        notification = notificationDAO.save(notification);
-
-        return binder.getNotificationTO(notification);
-    }
-
-    @PreAuthorize("hasRole('CONNECTOR_DELETE')")
-    public NotificationTO delete(final Long notificationId) {
-        Notification notification = notificationDAO.find(notificationId);
-        if (notification == null) {
-            LOG.error("Could not find notification '" + notificationId + "'");
-
-            throw new NotFoundException(String.valueOf(notificationId));
-        }
-
-        NotificationTO deleted = binder.getNotificationTO(notification);
-        notificationDAO.delete(notificationId);
-        return deleted;
-    }
-
-    @Override
-    protected NotificationTO resolveReference(final Method method, final Object... args)
-            throws UnresolvedReferenceException {
-
-        Long id = null;
-
-        if (ArrayUtils.isNotEmpty(args)) {
-            for (int i = 0; id == null && i < args.length; i++) {
-                if (args[i] instanceof Long) {
-                    id = (Long) args[i];
-                } else if (args[i] instanceof NotificationTO) {
-                    id = ((NotificationTO) args[i]).getKey();
-                }
-            }
-        }
-
-        if ((id != null) && !id.equals(0l)) {
-            try {
-                return binder.getNotificationTO(notificationDAO.find(id));
-            } catch (Throwable ignore) {
-                LOG.debug("Unresolved reference", ignore);
-                throw new UnresolvedReferenceException(ignore);
-            }
-        }
-
-        throw new UnresolvedReferenceException();
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/NotificationLogic.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/NotificationLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/NotificationLogic.java
new file mode 100644
index 0000000..3e4ce46
--- /dev/null
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/NotificationLogic.java
@@ -0,0 +1,127 @@
+/*
+ * 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.
+ */
+package org.apache.syncope.server.logic;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.syncope.common.lib.to.NotificationTO;
+import org.apache.syncope.server.persistence.api.dao.NotFoundException;
+import org.apache.syncope.server.persistence.api.dao.NotificationDAO;
+import org.apache.syncope.server.persistence.api.entity.Notification;
+import org.apache.syncope.server.provisioning.api.data.NotificationDataBinder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Component;
+
+@Component
+public class NotificationLogic extends AbstractTransactionalLogic<NotificationTO> {
+
+    @Autowired
+    private NotificationDAO notificationDAO;
+
+    @Autowired
+    private NotificationDataBinder binder;
+
+    @PreAuthorize("hasRole('NOTIFICATION_READ')")
+    public NotificationTO read(final Long notificationId) {
+        Notification notification = notificationDAO.find(notificationId);
+        if (notification == null) {
+            LOG.error("Could not find notification '" + notificationId + "'");
+
+            throw new NotFoundException(String.valueOf(notificationId));
+        }
+
+        return binder.getNotificationTO(notification);
+    }
+
+    @PreAuthorize("hasRole('NOTIFICATION_LIST')")
+    public List<NotificationTO> list() {
+        List<Notification> notifications = notificationDAO.findAll();
+
+        List<NotificationTO> notificationTOs = new ArrayList<NotificationTO>();
+        for (Notification notification : notifications) {
+            notificationTOs.add(binder.getNotificationTO(notification));
+        }
+
+        return notificationTOs;
+    }
+
+    @PreAuthorize("hasRole('NOTIFICATION_CREATE')")
+    public NotificationTO create(final NotificationTO notificationTO) {
+        return binder.getNotificationTO(notificationDAO.save(binder.create(notificationTO)));
+    }
+
+    @PreAuthorize("hasRole('NOTIFICATION_UPDATE')")
+    public NotificationTO update(final NotificationTO notificationTO) {
+        Notification notification = notificationDAO.find(notificationTO.getKey());
+        if (notification == null) {
+            LOG.error("Could not find notification '" + notificationTO.getKey() + "'");
+            throw new NotFoundException(String.valueOf(notificationTO.getKey()));
+        }
+
+        binder.update(notification, notificationTO);
+        notification = notificationDAO.save(notification);
+
+        return binder.getNotificationTO(notification);
+    }
+
+    @PreAuthorize("hasRole('CONNECTOR_DELETE')")
+    public NotificationTO delete(final Long notificationId) {
+        Notification notification = notificationDAO.find(notificationId);
+        if (notification == null) {
+            LOG.error("Could not find notification '" + notificationId + "'");
+
+            throw new NotFoundException(String.valueOf(notificationId));
+        }
+
+        NotificationTO deleted = binder.getNotificationTO(notification);
+        notificationDAO.delete(notificationId);
+        return deleted;
+    }
+
+    @Override
+    protected NotificationTO resolveReference(final Method method, final Object... args)
+            throws UnresolvedReferenceException {
+
+        Long id = null;
+
+        if (ArrayUtils.isNotEmpty(args)) {
+            for (int i = 0; id == null && i < args.length; i++) {
+                if (args[i] instanceof Long) {
+                    id = (Long) args[i];
+                } else if (args[i] instanceof NotificationTO) {
+                    id = ((NotificationTO) args[i]).getKey();
+                }
+            }
+        }
+
+        if ((id != null) && !id.equals(0l)) {
+            try {
+                return binder.getNotificationTO(notificationDAO.find(id));
+            } catch (Throwable ignore) {
+                LOG.debug("Unresolved reference", ignore);
+                throw new UnresolvedReferenceException(ignore);
+            }
+        }
+
+        throw new UnresolvedReferenceException();
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/PolicyController.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/PolicyController.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/PolicyController.java
deleted file mode 100644
index fbfb127..0000000
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/PolicyController.java
+++ /dev/null
@@ -1,197 +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.
- */
-package org.apache.syncope.server.logic;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import org.apache.commons.lang3.ArrayUtils;
-import org.apache.syncope.common.lib.to.AbstractPolicyTO;
-import org.apache.syncope.common.lib.to.AccountPolicyTO;
-import org.apache.syncope.common.lib.to.PasswordPolicyTO;
-import org.apache.syncope.common.lib.to.SyncPolicyTO;
-import org.apache.syncope.common.lib.types.PolicyType;
-import org.apache.syncope.persistence.api.dao.NotFoundException;
-import org.apache.syncope.persistence.api.dao.PolicyDAO;
-import org.apache.syncope.persistence.api.entity.AccountPolicy;
-import org.apache.syncope.persistence.api.entity.PasswordPolicy;
-import org.apache.syncope.persistence.api.entity.Policy;
-import org.apache.syncope.persistence.api.entity.SyncPolicy;
-import org.apache.syncope.server.logic.data.PolicyDataBinder;
-import org.apache.syncope.server.logic.init.ImplementationClassNamesLoader;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.stereotype.Component;
-
-@Component
-public class PolicyController extends AbstractTransactionalLogic<AbstractPolicyTO> {
-
-    @Autowired
-    private ImplementationClassNamesLoader classNamesLoader;
-
-    @Autowired
-    private PolicyDAO policyDAO;
-
-    @Autowired
-    private PolicyDataBinder binder;
-
-    @PreAuthorize("hasRole('POLICY_CREATE')")
-    public <T extends AbstractPolicyTO> T create(final T policyTO) {
-        return binder.getPolicyTO(policyDAO.save(binder.getPolicy(null, policyTO)));
-    }
-
-    private <T extends AbstractPolicyTO, K extends Policy> T update(final T policyTO, final K policy) {
-        binder.getPolicy(policy, policyTO);
-        K savedPolicy = policyDAO.save(policy);
-        return binder.getPolicyTO(savedPolicy);
-    }
-
-    @PreAuthorize("hasRole('POLICY_UPDATE')")
-    public PasswordPolicyTO update(final PasswordPolicyTO policyTO) {
-        Policy policy = policyDAO.find(policyTO.getId());
-        if (!(policy instanceof PasswordPolicy)) {
-            throw new NotFoundException("PasswordPolicy with id " + policyTO.getId());
-        }
-
-        return update(policyTO, policy);
-    }
-
-    @PreAuthorize("hasRole('POLICY_UPDATE')")
-    public AccountPolicyTO update(final AccountPolicyTO policyTO) {
-        Policy policy = policyDAO.find(policyTO.getId());
-        if (!(policy instanceof AccountPolicy)) {
-            throw new NotFoundException("AccountPolicy with id " + policyTO.getId());
-        }
-
-        return update(policyTO, policy);
-    }
-
-    @PreAuthorize("hasRole('POLICY_UPDATE')")
-    public SyncPolicyTO update(final SyncPolicyTO policyTO) {
-        Policy policy = policyDAO.find(policyTO.getId());
-        if (!(policy instanceof SyncPolicy)) {
-            throw new NotFoundException("SyncPolicy with id " + policyTO.getId());
-        }
-
-        return update(policyTO, policy);
-    }
-
-    @PreAuthorize("hasRole('POLICY_LIST')")
-    @SuppressWarnings("unchecked")
-    public <T extends AbstractPolicyTO> List<T> list(final PolicyType type) {
-
-        List<? extends Policy> policies = policyDAO.find(type);
-
-        final List<T> policyTOs = new ArrayList<T>();
-        for (Policy policy : policies) {
-            policyTOs.add((T) binder.getPolicyTO(policy));
-        }
-
-        return policyTOs;
-    }
-
-    @PreAuthorize("hasRole('POLICY_READ')")
-    public PasswordPolicyTO getGlobalPasswordPolicy() {
-        PasswordPolicy policy = policyDAO.getGlobalPasswordPolicy();
-        if (policy == null) {
-            throw new NotFoundException("No password policy found");
-        }
-
-        return (PasswordPolicyTO) binder.getPolicyTO(policy);
-    }
-
-    @PreAuthorize("hasRole('POLICY_READ')")
-    public AccountPolicyTO getGlobalAccountPolicy() {
-        AccountPolicy policy = policyDAO.getGlobalAccountPolicy();
-        if (policy == null) {
-            throw new NotFoundException("No account policy found");
-        }
-
-        return (AccountPolicyTO) binder.getPolicyTO(policy);
-    }
-
-    @PreAuthorize("hasRole('POLICY_READ')")
-    public SyncPolicyTO getGlobalSyncPolicy() {
-        SyncPolicy policy = policyDAO.getGlobalSyncPolicy();
-        if (policy == null) {
-            throw new NotFoundException("No sync policy found");
-        }
-
-        return (SyncPolicyTO) binder.getPolicyTO(policy);
-    }
-
-    @PreAuthorize("hasRole('POLICY_READ')")
-    public <T extends AbstractPolicyTO> T read(final Long id) {
-        Policy policy = policyDAO.find(id);
-        if (policy == null) {
-            throw new NotFoundException("Policy " + id + " not found");
-        }
-
-        return binder.getPolicyTO(policy);
-    }
-
-    @PreAuthorize("hasRole('POLICY_DELETE')")
-    public <T extends AbstractPolicyTO> T delete(final Long id) {
-        Policy policy = policyDAO.find(id);
-        if (policy == null) {
-            throw new NotFoundException("Policy " + id + " not found");
-        }
-
-        T policyToDelete = binder.getPolicyTO(policy);
-        policyDAO.delete(policy);
-
-        return policyToDelete;
-    }
-
-    @PreAuthorize("hasRole('POLICY_LIST')")
-    public Set<String> getSyncCorrelationRuleClasses() {
-        return classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.SYNC_CORRELATION_RULES);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected AbstractPolicyTO resolveReference(final Method method, final Object... args)
-            throws UnresolvedReferenceException {
-        Long id = null;
-
-        if (ArrayUtils.isNotEmpty(args)) {
-            for (int i = 0; id == null && i < args.length; i++) {
-                if (args[i] instanceof Long) {
-                    id = (Long) args[i];
-                } else if (args[i] instanceof AbstractPolicyTO) {
-                    id = ((AbstractPolicyTO) args[i]).getId();
-                }
-            }
-        }
-
-        if ((id != null) && !id.equals(0l)) {
-            try {
-                return binder.getPolicyTO(policyDAO.find(id));
-            } catch (Throwable ignore) {
-                LOG.debug("Unresolved reference", ignore);
-                throw new UnresolvedReferenceException(ignore);
-            }
-        }
-
-        throw new UnresolvedReferenceException();
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/PolicyLogic.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/PolicyLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/PolicyLogic.java
new file mode 100644
index 0000000..1bc03de
--- /dev/null
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/PolicyLogic.java
@@ -0,0 +1,197 @@
+/*
+ * 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.
+ */
+package org.apache.syncope.server.logic;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.syncope.common.lib.to.AbstractPolicyTO;
+import org.apache.syncope.common.lib.to.AccountPolicyTO;
+import org.apache.syncope.common.lib.to.PasswordPolicyTO;
+import org.apache.syncope.common.lib.to.SyncPolicyTO;
+import org.apache.syncope.common.lib.types.PolicyType;
+import org.apache.syncope.server.persistence.api.dao.NotFoundException;
+import org.apache.syncope.server.persistence.api.dao.PolicyDAO;
+import org.apache.syncope.server.persistence.api.entity.AccountPolicy;
+import org.apache.syncope.server.persistence.api.entity.PasswordPolicy;
+import org.apache.syncope.server.persistence.api.entity.Policy;
+import org.apache.syncope.server.persistence.api.entity.SyncPolicy;
+import org.apache.syncope.server.provisioning.api.data.PolicyDataBinder;
+import org.apache.syncope.server.logic.init.ImplementationClassNamesLoader;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Component;
+
+@Component
+public class PolicyLogic extends AbstractTransactionalLogic<AbstractPolicyTO> {
+
+    @Autowired
+    private ImplementationClassNamesLoader classNamesLoader;
+
+    @Autowired
+    private PolicyDAO policyDAO;
+
+    @Autowired
+    private PolicyDataBinder binder;
+
+    @PreAuthorize("hasRole('POLICY_CREATE')")
+    public <T extends AbstractPolicyTO> T create(final T policyTO) {
+        return binder.getPolicyTO(policyDAO.save(binder.getPolicy(null, policyTO)));
+    }
+
+    private <T extends AbstractPolicyTO, K extends Policy> T update(final T policyTO, final K policy) {
+        binder.getPolicy(policy, policyTO);
+        K savedPolicy = policyDAO.save(policy);
+        return binder.getPolicyTO(savedPolicy);
+    }
+
+    @PreAuthorize("hasRole('POLICY_UPDATE')")
+    public PasswordPolicyTO update(final PasswordPolicyTO policyTO) {
+        Policy policy = policyDAO.find(policyTO.getKey());
+        if (!(policy instanceof PasswordPolicy)) {
+            throw new NotFoundException("PasswordPolicy with id " + policyTO.getKey());
+        }
+
+        return update(policyTO, policy);
+    }
+
+    @PreAuthorize("hasRole('POLICY_UPDATE')")
+    public AccountPolicyTO update(final AccountPolicyTO policyTO) {
+        Policy policy = policyDAO.find(policyTO.getKey());
+        if (!(policy instanceof AccountPolicy)) {
+            throw new NotFoundException("AccountPolicy with id " + policyTO.getKey());
+        }
+
+        return update(policyTO, policy);
+    }
+
+    @PreAuthorize("hasRole('POLICY_UPDATE')")
+    public SyncPolicyTO update(final SyncPolicyTO policyTO) {
+        Policy policy = policyDAO.find(policyTO.getKey());
+        if (!(policy instanceof SyncPolicy)) {
+            throw new NotFoundException("SyncPolicy with id " + policyTO.getKey());
+        }
+
+        return update(policyTO, policy);
+    }
+
+    @PreAuthorize("hasRole('POLICY_LIST')")
+    @SuppressWarnings("unchecked")
+    public <T extends AbstractPolicyTO> List<T> list(final PolicyType type) {
+
+        List<? extends Policy> policies = policyDAO.find(type);
+
+        final List<T> policyTOs = new ArrayList<T>();
+        for (Policy policy : policies) {
+            policyTOs.add((T) binder.getPolicyTO(policy));
+        }
+
+        return policyTOs;
+    }
+
+    @PreAuthorize("hasRole('POLICY_READ')")
+    public PasswordPolicyTO getGlobalPasswordPolicy() {
+        PasswordPolicy policy = policyDAO.getGlobalPasswordPolicy();
+        if (policy == null) {
+            throw new NotFoundException("No password policy found");
+        }
+
+        return (PasswordPolicyTO) binder.getPolicyTO(policy);
+    }
+
+    @PreAuthorize("hasRole('POLICY_READ')")
+    public AccountPolicyTO getGlobalAccountPolicy() {
+        AccountPolicy policy = policyDAO.getGlobalAccountPolicy();
+        if (policy == null) {
+            throw new NotFoundException("No account policy found");
+        }
+
+        return (AccountPolicyTO) binder.getPolicyTO(policy);
+    }
+
+    @PreAuthorize("hasRole('POLICY_READ')")
+    public SyncPolicyTO getGlobalSyncPolicy() {
+        SyncPolicy policy = policyDAO.getGlobalSyncPolicy();
+        if (policy == null) {
+            throw new NotFoundException("No sync policy found");
+        }
+
+        return (SyncPolicyTO) binder.getPolicyTO(policy);
+    }
+
+    @PreAuthorize("hasRole('POLICY_READ')")
+    public <T extends AbstractPolicyTO> T read(final Long id) {
+        Policy policy = policyDAO.find(id);
+        if (policy == null) {
+            throw new NotFoundException("Policy " + id + " not found");
+        }
+
+        return binder.getPolicyTO(policy);
+    }
+
+    @PreAuthorize("hasRole('POLICY_DELETE')")
+    public <T extends AbstractPolicyTO> T delete(final Long id) {
+        Policy policy = policyDAO.find(id);
+        if (policy == null) {
+            throw new NotFoundException("Policy " + id + " not found");
+        }
+
+        T policyToDelete = binder.getPolicyTO(policy);
+        policyDAO.delete(policy);
+
+        return policyToDelete;
+    }
+
+    @PreAuthorize("hasRole('POLICY_LIST')")
+    public Set<String> getSyncCorrelationRuleClasses() {
+        return classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.SYNC_CORRELATION_RULES);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected AbstractPolicyTO resolveReference(final Method method, final Object... args)
+            throws UnresolvedReferenceException {
+        Long id = null;
+
+        if (ArrayUtils.isNotEmpty(args)) {
+            for (int i = 0; id == null && i < args.length; i++) {
+                if (args[i] instanceof Long) {
+                    id = (Long) args[i];
+                } else if (args[i] instanceof AbstractPolicyTO) {
+                    id = ((AbstractPolicyTO) args[i]).getKey();
+                }
+            }
+        }
+
+        if ((id != null) && !id.equals(0l)) {
+            try {
+                return binder.getPolicyTO(policyDAO.find(id));
+            } catch (Throwable ignore) {
+                LOG.debug("Unresolved reference", ignore);
+                throw new UnresolvedReferenceException(ignore);
+            }
+        }
+
+        throw new UnresolvedReferenceException();
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ReportLogic.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ReportLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ReportLogic.java
index 0d8af57..dbf0833 100644
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ReportLogic.java
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ReportLogic.java
@@ -45,16 +45,19 @@ import org.apache.syncope.common.lib.to.ReportTO;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.ReportExecExportFormat;
 import org.apache.syncope.common.lib.types.ReportExecStatus;
-import org.apache.syncope.persistence.api.dao.NotFoundException;
-import org.apache.syncope.persistence.api.dao.ReportDAO;
-import org.apache.syncope.persistence.api.dao.ReportExecDAO;
-import org.apache.syncope.persistence.api.dao.search.OrderByClause;
-import org.apache.syncope.persistence.api.entity.EntityFactory;
-import org.apache.syncope.persistence.api.entity.Report;
-import org.apache.syncope.persistence.api.entity.ReportExec;
-import org.apache.syncope.server.logic.data.ReportDataBinder;
+import org.apache.syncope.server.persistence.api.dao.NotFoundException;
+import org.apache.syncope.server.persistence.api.dao.ReportDAO;
+import org.apache.syncope.server.persistence.api.dao.ReportExecDAO;
+import org.apache.syncope.server.persistence.api.dao.search.OrderByClause;
+import org.apache.syncope.server.persistence.api.entity.EntityFactory;
+import org.apache.syncope.server.persistence.api.entity.Report;
+import org.apache.syncope.server.persistence.api.entity.ReportExec;
+import org.apache.syncope.server.provisioning.api.data.ReportDataBinder;
+import org.apache.syncope.server.provisioning.api.job.JobNamer;
+import org.apache.syncope.server.logic.init.ImplementationClassNamesLoader;
 import org.apache.syncope.server.logic.init.JobInstanceLoader;
 import org.apache.syncope.server.logic.report.Reportlet;
+import org.apache.syncope.server.logic.report.ReportletConfClass;
 import org.apache.syncope.server.logic.report.TextSerializer;
 import org.apache.xmlgraphics.util.MimeConstants;
 import org.quartz.JobKey;
@@ -64,6 +67,7 @@ import org.springframework.scheduling.quartz.SchedulerFactoryBean;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ClassUtils;
 
 @Component
 public class ReportLogic extends AbstractTransactionalLogic<ReportTO> {
@@ -86,6 +90,9 @@ public class ReportLogic extends AbstractTransactionalLogic<ReportTO> {
     @Autowired
     private EntityFactory entityFactory;
 
+    @Autowired
+    private ImplementationClassNamesLoader classNamesLoader;
+
     @PreAuthorize("hasRole('REPORT_CREATE')")
     public ReportTO create(final ReportTO reportTO) {
         Report report = entityFactory.newEntity(Report.class);
@@ -107,9 +114,9 @@ public class ReportLogic extends AbstractTransactionalLogic<ReportTO> {
 
     @PreAuthorize("hasRole('REPORT_UPDATE')")
     public ReportTO update(final ReportTO reportTO) {
-        Report report = reportDAO.find(reportTO.getId());
+        Report report = reportDAO.find(reportTO.getKey());
         if (report == null) {
-            throw new NotFoundException("Report " + reportTO.getId());
+            throw new NotFoundException("Report " + reportTO.getKey());
         }
 
         binder.getReport(report, reportTO);
@@ -136,20 +143,60 @@ public class ReportLogic extends AbstractTransactionalLogic<ReportTO> {
     @PreAuthorize("hasRole('REPORT_LIST')")
     public List<ReportTO> list(final int page, final int size, final List<OrderByClause> orderByClauses) {
         List<Report> reports = reportDAO.findAll(page, size, orderByClauses);
-        List<ReportTO> result = new ArrayList<ReportTO>(reports.size());
+        List<ReportTO> result = new ArrayList<>(reports.size());
         for (Report report : reports) {
             result.add(binder.getReportTO(report));
         }
         return result;
     }
 
+    private Class<? extends ReportletConf> getReportletConfClass(final Class<Reportlet> reportletClass) {
+        Class<? extends ReportletConf> result = null;
+
+        ReportletConfClass annotation = reportletClass.getAnnotation(ReportletConfClass.class);
+        if (annotation != null) {
+            result = annotation.value();
+        }
+
+        return result;
+    }
+
+    public Class<Reportlet> findReportletClassHavingConfClass(final Class<? extends ReportletConf> reportletConfClass) {
+        Class<Reportlet> result = null;
+        for (Class<Reportlet> reportletClass : getAllReportletClasses()) {
+            Class<? extends ReportletConf> found = getReportletConfClass(reportletClass);
+            if (found != null && found.equals(reportletConfClass)) {
+                result = reportletClass;
+            }
+        }
+
+        return result;
+    }
+
+    @SuppressWarnings({ "unchecked", "rawtypes" })
+    private Set<Class<Reportlet>> getAllReportletClasses() {
+        Set<Class<Reportlet>> reportletClasses = new HashSet<>();
+
+        for (String className : classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.REPORTLET)) {
+            try {
+                Class reportletClass = ClassUtils.forName(className, ClassUtils.getDefaultClassLoader());
+                reportletClasses.add(reportletClass);
+            } catch (ClassNotFoundException e) {
+                LOG.warn("Could not load class {}", className);
+            } catch (LinkageError e) {
+                LOG.warn("Could not link class {}", className);
+            }
+        }
+        return reportletClasses;
+    }
+
     @PreAuthorize("hasRole('REPORT_LIST')")
     @SuppressWarnings("rawtypes")
     public Set<String> getReportletConfClasses() {
-        Set<String> reportletConfClasses = new HashSet<String>();
+        Set<String> reportletConfClasses = new HashSet<>();
 
-        for (Class<Reportlet> reportletClass : binder.getAllReportletClasses()) {
-            Class<? extends ReportletConf> reportletConfClass = binder.getReportletConfClass(reportletClass);
+        for (Class<Reportlet> reportletClass : getAllReportletClasses()) {
+            Class<? extends ReportletConf> reportletConfClass = getReportletConfClass(reportletClass);
             if (reportletConfClass != null) {
                 reportletConfClasses.add(reportletConfClass.getName());
             }
@@ -270,7 +317,7 @@ public class ReportLogic extends AbstractTransactionalLogic<ReportTO> {
             jobInstanceLoader.registerJob(report);
 
             scheduler.getScheduler().triggerJob(
-                    new JobKey(JobInstanceLoader.getJobName(report), Scheduler.DEFAULT_GROUP));
+                    new JobKey(JobNamer.getJobName(report), Scheduler.DEFAULT_GROUP));
         } catch (Exception e) {
             LOG.error("While executing report {}", report, e);
 
@@ -329,7 +376,7 @@ public class ReportLogic extends AbstractTransactionalLogic<ReportTO> {
                 if (args[i] instanceof Long) {
                     id = (Long) args[i];
                 } else if (args[i] instanceof ReportTO) {
-                    id = ((ReportTO) args[i]).getId();
+                    id = ((ReportTO) args[i]).getKey();
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ResourceLogic.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ResourceLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ResourceLogic.java
index d1b2851..d18fc15 100644
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ResourceLogic.java
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ResourceLogic.java
@@ -31,24 +31,24 @@ import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.MappingPurpose;
 import org.apache.syncope.common.lib.types.SubjectType;
-import org.apache.syncope.persistence.api.dao.ConnInstanceDAO;
-import org.apache.syncope.persistence.api.dao.DuplicateException;
-import org.apache.syncope.persistence.api.dao.ExternalResourceDAO;
-import org.apache.syncope.persistence.api.dao.NotFoundException;
-import org.apache.syncope.persistence.api.dao.RoleDAO;
-import org.apache.syncope.persistence.api.dao.UserDAO;
-import org.apache.syncope.persistence.api.entity.AttributableUtil;
-import org.apache.syncope.persistence.api.entity.AttributableUtilFactory;
-import org.apache.syncope.persistence.api.entity.ConnInstance;
-import org.apache.syncope.persistence.api.entity.ExternalResource;
-import org.apache.syncope.persistence.api.entity.MappingItem;
-import org.apache.syncope.persistence.api.entity.Subject;
-import org.apache.syncope.provisioning.api.Connector;
-import org.apache.syncope.provisioning.api.ConnectorFactory;
-import org.apache.syncope.server.logic.data.ResourceDataBinder;
+import org.apache.syncope.server.persistence.api.dao.ConnInstanceDAO;
+import org.apache.syncope.server.persistence.api.dao.DuplicateException;
+import org.apache.syncope.server.persistence.api.dao.ExternalResourceDAO;
+import org.apache.syncope.server.persistence.api.dao.NotFoundException;
+import org.apache.syncope.server.persistence.api.dao.RoleDAO;
+import org.apache.syncope.server.persistence.api.dao.UserDAO;
+import org.apache.syncope.server.persistence.api.entity.AttributableUtil;
+import org.apache.syncope.server.persistence.api.entity.AttributableUtilFactory;
+import org.apache.syncope.server.persistence.api.entity.ConnInstance;
+import org.apache.syncope.server.persistence.api.entity.ExternalResource;
+import org.apache.syncope.server.persistence.api.entity.MappingItem;
+import org.apache.syncope.server.persistence.api.entity.Subject;
+import org.apache.syncope.server.provisioning.api.Connector;
+import org.apache.syncope.server.provisioning.api.ConnectorFactory;
+import org.apache.syncope.server.provisioning.api.data.ResourceDataBinder;
 import org.apache.syncope.server.logic.init.ImplementationClassNamesLoader;
-import org.apache.syncope.server.utils.ConnObjectUtil;
-import org.apache.syncope.server.utils.MappingUtil;
+import org.apache.syncope.server.misc.ConnObjectUtil;
+import org.apache.syncope.server.misc.MappingUtil;
 import org.identityconnectors.framework.common.objects.Attribute;
 import org.identityconnectors.framework.common.objects.AttributeUtil;
 import org.identityconnectors.framework.common.objects.ConnectorObject;

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/RoleLogic.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/RoleLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/RoleLogic.java
index aee0d27..c1a5582 100644
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/RoleLogic.java
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/RoleLogic.java
@@ -35,22 +35,22 @@ import org.apache.syncope.common.lib.to.PropagationStatus;
 import org.apache.syncope.common.lib.to.RoleTO;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.SubjectType;
-import org.apache.syncope.persistence.api.RoleEntitlementUtil;
-import org.apache.syncope.persistence.api.dao.NotFoundException;
-import org.apache.syncope.persistence.api.dao.RoleDAO;
-import org.apache.syncope.persistence.api.dao.SubjectSearchDAO;
-import org.apache.syncope.persistence.api.dao.UserDAO;
-import org.apache.syncope.persistence.api.dao.search.OrderByClause;
-import org.apache.syncope.persistence.api.dao.search.SearchCond;
-import org.apache.syncope.persistence.api.entity.role.Role;
-import org.apache.syncope.persistence.api.entity.user.User;
-import org.apache.syncope.provisioning.api.AttributableTransformer;
-import org.apache.syncope.provisioning.api.RoleProvisioningManager;
-import org.apache.syncope.provisioning.api.propagation.PropagationManager;
-import org.apache.syncope.provisioning.api.propagation.PropagationTaskExecutor;
-import org.apache.syncope.server.logic.data.RoleDataBinder;
-import org.apache.syncope.server.security.AuthContextUtil;
-import org.apache.syncope.server.security.UnauthorizedRoleException;
+import org.apache.syncope.server.persistence.api.RoleEntitlementUtil;
+import org.apache.syncope.server.persistence.api.dao.NotFoundException;
+import org.apache.syncope.server.persistence.api.dao.RoleDAO;
+import org.apache.syncope.server.persistence.api.dao.SubjectSearchDAO;
+import org.apache.syncope.server.persistence.api.dao.UserDAO;
+import org.apache.syncope.server.persistence.api.dao.search.OrderByClause;
+import org.apache.syncope.server.persistence.api.dao.search.SearchCond;
+import org.apache.syncope.server.persistence.api.entity.role.Role;
+import org.apache.syncope.server.persistence.api.entity.user.User;
+import org.apache.syncope.server.provisioning.api.AttributableTransformer;
+import org.apache.syncope.server.provisioning.api.RoleProvisioningManager;
+import org.apache.syncope.server.provisioning.api.data.RoleDataBinder;
+import org.apache.syncope.server.provisioning.api.propagation.PropagationManager;
+import org.apache.syncope.server.provisioning.api.propagation.PropagationTaskExecutor;
+import org.apache.syncope.server.misc.security.AuthContextUtil;
+import org.apache.syncope.server.misc.security.UnauthorizedRoleException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Component;
@@ -100,7 +100,7 @@ public class RoleLogic extends AbstractSubjectLogic<RoleTO, RoleMod> {
         if (anonymousUser.equals(AuthContextUtil.getAuthenticatedUsername())) {
             role = roleDAO.find(roleKey);
         } else {
-            role = roleDAO.authFetchRole(roleKey);
+            role = roleDAO.authFetch(roleKey);
         }
 
         if (role == null) {
@@ -140,7 +140,7 @@ public class RoleLogic extends AbstractSubjectLogic<RoleTO, RoleMod> {
     @PreAuthorize("hasRole('ROLE_READ')")
     @Transactional(readOnly = true)
     public RoleTO parent(final Long roleKey) {
-        Role role = roleDAO.authFetchRole(roleKey);
+        Role role = roleDAO.authFetch(roleKey);
 
         Set<Long> allowedRoleIds = RoleEntitlementUtil.getRoleKeys(AuthContextUtil.getOwnedEntitlementNames());
         if (role.getParent() != null && !allowedRoleIds.contains(role.getParent().getKey())) {
@@ -157,12 +157,12 @@ public class RoleLogic extends AbstractSubjectLogic<RoleTO, RoleMod> {
     @PreAuthorize("hasRole('ROLE_READ')")
     @Transactional(readOnly = true)
     public List<RoleTO> children(final Long roleKey) {
-        Role role = roleDAO.authFetchRole(roleKey);
+        Role role = roleDAO.authFetch(roleKey);
 
         Set<Long> allowedRoleIds = RoleEntitlementUtil.getRoleKeys(AuthContextUtil.getOwnedEntitlementNames());
 
         List<Role> children = roleDAO.findChildren(role);
-        List<RoleTO> childrenTOs = new ArrayList<RoleTO>(children.size());
+        List<RoleTO> childrenTOs = new ArrayList<>(children.size());
         for (Role child : children) {
             if (allowedRoleIds.contains(child.getKey())) {
                 childrenTOs.add(binder.getRoleTO(child));
@@ -244,7 +244,7 @@ public class RoleLogic extends AbstractSubjectLogic<RoleTO, RoleMod> {
     @Override
     public RoleTO update(final RoleMod roleMod) {
         // Check that this operation is allowed to be performed by caller
-        roleDAO.authFetchRole(roleMod.getKey());
+        roleDAO.authFetch(roleMod.getKey());
 
         // Attribute value transformation (if configured)
         RoleMod actual = attrTransformer.transform(roleMod);
@@ -350,7 +350,7 @@ public class RoleLogic extends AbstractSubjectLogic<RoleTO, RoleMod> {
     @Transactional(rollbackFor = { Throwable.class })
     @Override
     public RoleTO deprovision(final Long roleKey, final Collection<String> resources) {
-        final Role role = roleDAO.authFetchRole(roleKey);
+        final Role role = roleDAO.authFetch(roleKey);
 
         List<PropagationStatus> statuses = provisioningManager.deprovision(roleKey, resources);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SchemaLogic.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SchemaLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SchemaLogic.java
index 675bd42..ccf191f 100644
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SchemaLogic.java
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SchemaLogic.java
@@ -31,17 +31,17 @@ import org.apache.syncope.common.lib.to.VirSchemaTO;
 import org.apache.syncope.common.lib.types.AttributableType;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.SchemaType;
-import org.apache.syncope.persistence.api.dao.DerSchemaDAO;
-import org.apache.syncope.persistence.api.dao.DuplicateException;
-import org.apache.syncope.persistence.api.dao.NotFoundException;
-import org.apache.syncope.persistence.api.dao.PlainSchemaDAO;
-import org.apache.syncope.persistence.api.dao.VirSchemaDAO;
-import org.apache.syncope.persistence.api.entity.AttributableUtil;
-import org.apache.syncope.persistence.api.entity.AttributableUtilFactory;
-import org.apache.syncope.persistence.api.entity.DerSchema;
-import org.apache.syncope.persistence.api.entity.PlainSchema;
-import org.apache.syncope.persistence.api.entity.VirSchema;
-import org.apache.syncope.server.logic.data.SchemaDataBinder;
+import org.apache.syncope.server.persistence.api.dao.DerSchemaDAO;
+import org.apache.syncope.server.persistence.api.dao.DuplicateException;
+import org.apache.syncope.server.persistence.api.dao.NotFoundException;
+import org.apache.syncope.server.persistence.api.dao.PlainSchemaDAO;
+import org.apache.syncope.server.persistence.api.dao.VirSchemaDAO;
+import org.apache.syncope.server.persistence.api.entity.AttributableUtil;
+import org.apache.syncope.server.persistence.api.entity.AttributableUtilFactory;
+import org.apache.syncope.server.persistence.api.entity.DerSchema;
+import org.apache.syncope.server.persistence.api.entity.PlainSchema;
+import org.apache.syncope.server.persistence.api.entity.VirSchema;
+import org.apache.syncope.server.provisioning.api.data.SchemaDataBinder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Component;

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SecurityQuestionLogic.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SecurityQuestionLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SecurityQuestionLogic.java
index 01b2a57..65f3ce2 100644
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SecurityQuestionLogic.java
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SecurityQuestionLogic.java
@@ -23,12 +23,12 @@ import java.util.ArrayList;
 import java.util.List;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.syncope.common.lib.to.SecurityQuestionTO;
-import org.apache.syncope.persistence.api.dao.NotFoundException;
-import org.apache.syncope.persistence.api.dao.SecurityQuestionDAO;
-import org.apache.syncope.persistence.api.dao.UserDAO;
-import org.apache.syncope.persistence.api.entity.user.SecurityQuestion;
-import org.apache.syncope.persistence.api.entity.user.User;
-import org.apache.syncope.server.logic.data.SecurityQuestionDataBinder;
+import org.apache.syncope.server.persistence.api.dao.NotFoundException;
+import org.apache.syncope.server.persistence.api.dao.SecurityQuestionDAO;
+import org.apache.syncope.server.persistence.api.dao.UserDAO;
+import org.apache.syncope.server.persistence.api.entity.user.SecurityQuestion;
+import org.apache.syncope.server.persistence.api.entity.user.User;
+import org.apache.syncope.server.provisioning.api.data.SecurityQuestionDataBinder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Component;
@@ -47,7 +47,7 @@ public class SecurityQuestionLogic extends AbstractTransactionalLogic<SecurityQu
 
     @PreAuthorize("isAuthenticated()")
     public List<SecurityQuestionTO> list() {
-        List<SecurityQuestionTO> result = new ArrayList<SecurityQuestionTO>();
+        List<SecurityQuestionTO> result = new ArrayList<>();
         for (SecurityQuestion securityQuestion : securityQuestionDAO.findAll()) {
             result.add(binder.getSecurityQuestionTO(securityQuestion));
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SpringBeanJobFactory.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SpringBeanJobFactory.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SpringBeanJobFactory.java
new file mode 100644
index 0000000..9eccaea
--- /dev/null
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SpringBeanJobFactory.java
@@ -0,0 +1,97 @@
+/*
+ * 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.
+ */
+package org.apache.syncope.server.logic;
+
+import org.apache.syncope.server.provisioning.api.job.JobNamer;
+import org.apache.syncope.server.logic.init.JobInstanceLoader;
+import org.quartz.SchedulerContext;
+import org.quartz.spi.TriggerFiredBundle;
+import org.springframework.beans.BeanWrapper;
+import org.springframework.beans.MutablePropertyValues;
+import org.springframework.beans.PropertyAccessorFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ConfigurableApplicationContext;
+
+public class SpringBeanJobFactory extends org.springframework.scheduling.quartz.SpringBeanJobFactory {
+
+    private String[] ignoredUnknownProperties;
+
+    private SchedulerContext schedulerContext;
+
+    @Override
+    public void setIgnoredUnknownProperties(final String[] ignoredUnknownProperties) {
+        String[] defensiveCopy = ignoredUnknownProperties.clone();
+        super.setIgnoredUnknownProperties(defensiveCopy);
+        this.ignoredUnknownProperties = defensiveCopy;
+    }
+
+    @Override
+    public void setSchedulerContext(final SchedulerContext schedulerContext) {
+        super.setSchedulerContext(schedulerContext);
+        this.schedulerContext = schedulerContext;
+    }
+
+    /**
+     * An implementation of SpringBeanJobFactory that retrieves the bean from the Spring context so that autowiring and
+     * transactions work.
+     *
+     * {@inheritDoc}
+     */
+    @Override
+    protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception {
+        final ApplicationContext ctx = ((ConfigurableApplicationContext) schedulerContext.get("applicationContext"));
+
+        // Try to re-create job bean from underlying task (useful for managing failover scenarios)
+        if (!ctx.containsBean(bundle.getJobDetail().getKey().getName())) {
+            Long taskId = JobNamer.getTaskIdFromJobName(bundle.getJobDetail().getKey().getName());
+            if (taskId != null) {
+                JobInstanceLoader jobInstanceLoader = ctx.getBean(JobInstanceLoader.class);
+                jobInstanceLoader.registerTaskJob(taskId);
+            }
+
+            Long reportId = JobNamer.getReportIdFromJobName(bundle.getJobDetail().getKey().getName());
+            if (reportId != null) {
+                JobInstanceLoader jobInstanceLoader = ctx.getBean(JobInstanceLoader.class);
+                jobInstanceLoader.registerReportJob(reportId);
+            }
+        }
+
+        final Object job = ctx.getBean(bundle.getJobDetail().getKey().getName());
+        final BeanWrapper wrapper = PropertyAccessorFactory.forBeanPropertyAccess(job);
+        if (isEligibleForPropertyPopulation(wrapper.getWrappedInstance())) {
+            final MutablePropertyValues pvs = new MutablePropertyValues();
+            if (this.schedulerContext != null) {
+                pvs.addPropertyValues(this.schedulerContext);
+            }
+            pvs.addPropertyValues(bundle.getJobDetail().getJobDataMap());
+            pvs.addPropertyValues(bundle.getTrigger().getJobDataMap());
+            if (this.ignoredUnknownProperties == null) {
+                wrapper.setPropertyValues(pvs, true);
+            } else {
+                for (String propName : this.ignoredUnknownProperties) {
+                    if (pvs.contains(propName) && !wrapper.isWritableProperty(propName)) {
+                        pvs.removePropertyValue(propName);
+                    }
+                }
+                wrapper.setPropertyValues(pvs);
+            }
+        }
+        return job;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/TaskLogic.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/TaskLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/TaskLogic.java
index 11c9b4b..683cda6 100644
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/TaskLogic.java
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/TaskLogic.java
@@ -35,20 +35,21 @@ import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.PropagationMode;
 import org.apache.syncope.common.lib.types.PropagationTaskExecStatus;
 import org.apache.syncope.common.lib.types.TaskType;
-import org.apache.syncope.persistence.api.dao.NotFoundException;
-import org.apache.syncope.persistence.api.dao.TaskDAO;
-import org.apache.syncope.persistence.api.dao.TaskExecDAO;
-import org.apache.syncope.persistence.api.dao.search.OrderByClause;
-import org.apache.syncope.persistence.api.entity.task.NotificationTask;
-import org.apache.syncope.persistence.api.entity.task.PropagationTask;
-import org.apache.syncope.persistence.api.entity.task.SchedTask;
-import org.apache.syncope.persistence.api.entity.task.Task;
-import org.apache.syncope.persistence.api.entity.task.TaskExec;
-import org.apache.syncope.persistence.api.entity.task.TaskUtil;
-import org.apache.syncope.persistence.api.entity.task.TaskUtilFactory;
-import org.apache.syncope.provisioning.api.job.TaskJob;
-import org.apache.syncope.provisioning.api.propagation.PropagationTaskExecutor;
-import org.apache.syncope.server.logic.data.TaskDataBinder;
+import org.apache.syncope.server.persistence.api.dao.NotFoundException;
+import org.apache.syncope.server.persistence.api.dao.TaskDAO;
+import org.apache.syncope.server.persistence.api.dao.TaskExecDAO;
+import org.apache.syncope.server.persistence.api.dao.search.OrderByClause;
+import org.apache.syncope.server.persistence.api.entity.task.NotificationTask;
+import org.apache.syncope.server.persistence.api.entity.task.PropagationTask;
+import org.apache.syncope.server.persistence.api.entity.task.SchedTask;
+import org.apache.syncope.server.persistence.api.entity.task.Task;
+import org.apache.syncope.server.persistence.api.entity.task.TaskExec;
+import org.apache.syncope.server.persistence.api.entity.task.TaskUtil;
+import org.apache.syncope.server.persistence.api.entity.task.TaskUtilFactory;
+import org.apache.syncope.server.provisioning.api.data.TaskDataBinder;
+import org.apache.syncope.server.provisioning.api.job.JobNamer;
+import org.apache.syncope.server.provisioning.api.job.TaskJob;
+import org.apache.syncope.server.provisioning.api.propagation.PropagationTaskExecutor;
 import org.apache.syncope.server.logic.init.ImplementationClassNamesLoader;
 import org.apache.syncope.server.logic.init.JobInstanceLoader;
 import org.apache.syncope.server.logic.notification.NotificationJob;
@@ -117,9 +118,9 @@ public class TaskLogic extends AbstractTransactionalLogic<AbstractTaskTO> {
 
     @PreAuthorize("hasRole('TASK_UPDATE')")
     public <T extends SchedTaskTO> T updateSched(final SchedTaskTO taskTO) {
-        SchedTask task = taskDAO.find(taskTO.getId());
+        SchedTask task = taskDAO.find(taskTO.getKey());
         if (task == null) {
-            throw new NotFoundException("Task " + taskTO.getId());
+            throw new NotFoundException("Task " + taskTO.getKey());
         }
 
         TaskUtil taskUtil = taskUtilFactory.getInstance(task);
@@ -226,7 +227,7 @@ public class TaskLogic extends AbstractTransactionalLogic<AbstractTaskTO> {
                     map.put(TaskJob.DRY_RUN_JOBDETAIL_KEY, dryRun);
 
                     scheduler.getScheduler().triggerJob(
-                            new JobKey(JobInstanceLoader.getJobName(task), Scheduler.DEFAULT_GROUP), map);
+                            new JobKey(JobNamer.getJobName(task), Scheduler.DEFAULT_GROUP), map);
                 } catch (Exception e) {
                     LOG.error("While executing task {}", task, e);
 
@@ -334,7 +335,7 @@ public class TaskLogic extends AbstractTransactionalLogic<AbstractTaskTO> {
             case DELETE:
                 for (String taskId : bulkAction.getTargets()) {
                     try {
-                        res.add(delete(Long.valueOf(taskId)).getId(), BulkActionResult.Status.SUCCESS);
+                        res.add(delete(Long.valueOf(taskId)).getKey(), BulkActionResult.Status.SUCCESS);
                     } catch (Exception e) {
                         LOG.error("Error performing delete for task {}", taskId, e);
                         res.add(taskId, BulkActionResult.Status.FAILURE);
@@ -388,7 +389,7 @@ public class TaskLogic extends AbstractTransactionalLogic<AbstractTaskTO> {
                 if (args[i] instanceof Long) {
                     id = (Long) args[i];
                 } else if (args[i] instanceof AbstractTaskTO) {
-                    id = ((AbstractTaskTO) args[i]).getId();
+                    id = ((AbstractTaskTO) args[i]).getKey();
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/UserLogic.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/UserLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/UserLogic.java
index 870a075..6b6d313 100644
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/UserLogic.java
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/UserLogic.java
@@ -18,7 +18,7 @@
  */
 package org.apache.syncope.server.logic;
 
-import org.apache.syncope.server.security.UnauthorizedRoleException;
+import org.apache.syncope.server.misc.security.UnauthorizedRoleException;
 import java.lang.reflect.Method;
 import java.security.AccessControlException;
 import java.util.ArrayList;
@@ -41,22 +41,23 @@ import org.apache.syncope.common.lib.to.PropagationStatus;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.SubjectType;
-import org.apache.syncope.persistence.api.RoleEntitlementUtil;
-import org.apache.syncope.persistence.api.dao.ConfDAO;
-import org.apache.syncope.persistence.api.dao.NotFoundException;
-import org.apache.syncope.persistence.api.dao.RoleDAO;
-import org.apache.syncope.persistence.api.dao.SubjectSearchDAO;
-import org.apache.syncope.persistence.api.dao.UserDAO;
-import org.apache.syncope.persistence.api.dao.search.OrderByClause;
-import org.apache.syncope.persistence.api.dao.search.SearchCond;
-import org.apache.syncope.persistence.api.entity.role.Role;
-import org.apache.syncope.persistence.api.entity.user.User;
-import org.apache.syncope.provisioning.api.AttributableTransformer;
-import org.apache.syncope.provisioning.api.UserProvisioningManager;
-import org.apache.syncope.provisioning.api.propagation.PropagationManager;
-import org.apache.syncope.provisioning.api.propagation.PropagationTaskExecutor;
-import org.apache.syncope.server.logic.data.UserDataBinder;
-import org.apache.syncope.server.security.AuthContextUtil;
+import org.apache.syncope.server.persistence.api.RoleEntitlementUtil;
+import org.apache.syncope.server.persistence.api.dao.ConfDAO;
+import org.apache.syncope.server.persistence.api.dao.NotFoundException;
+import org.apache.syncope.server.persistence.api.dao.RoleDAO;
+import org.apache.syncope.server.persistence.api.dao.SubjectSearchDAO;
+import org.apache.syncope.server.persistence.api.dao.UserDAO;
+import org.apache.syncope.server.persistence.api.dao.search.OrderByClause;
+import org.apache.syncope.server.persistence.api.dao.search.SearchCond;
+import org.apache.syncope.server.persistence.api.entity.role.Role;
+import org.apache.syncope.server.persistence.api.entity.user.User;
+import org.apache.syncope.server.provisioning.api.AttributableTransformer;
+import org.apache.syncope.server.provisioning.api.UserProvisioningManager;
+import org.apache.syncope.server.provisioning.api.data.UserDataBinder;
+import org.apache.syncope.server.provisioning.api.propagation.PropagationManager;
+import org.apache.syncope.server.provisioning.api.propagation.PropagationTaskExecutor;
+import org.apache.syncope.server.provisioning.java.VirAttrHandler;
+import org.apache.syncope.server.misc.security.AuthContextUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Component;
@@ -86,6 +87,9 @@ public class UserLogic extends AbstractSubjectLogic<UserTO, UserMod> {
     protected UserDataBinder binder;
 
     @Autowired
+    protected VirAttrHandler virtAttrHandler;
+
+    @Autowired
     protected PropagationManager propagationManager;
 
     @Autowired
@@ -191,7 +195,7 @@ public class UserLogic extends AbstractSubjectLogic<UserTO, UserMod> {
 
     @PreAuthorize("hasRole('USER_CREATE')")
     public UserTO create(final UserTO userTO, final boolean storePassword) {
-        Set<Long> requestRoleIds = new HashSet<Long>(userTO.getMemberships().size());
+        Set<Long> requestRoleIds = new HashSet<>(userTO.getMemberships().size());
         for (MembershipTO membership : userTO.getMemberships()) {
             requestRoleIds.add(membership.getRoleId());
         }
@@ -238,7 +242,7 @@ public class UserLogic extends AbstractSubjectLogic<UserTO, UserMod> {
         // SYNCOPE-501: check if there are memberships to be removed with virtual attributes assigned
         boolean removeMemberships = false;
         for (Long membershipId : actual.getMembershipsToRemove()) {
-            if (!binder.fillMembershipVirtual(
+            if (!virtAttrHandler.fillMembershipVirtual(
                     null,
                     null,
                     membershipId,
@@ -283,7 +287,7 @@ public class UserLogic extends AbstractSubjectLogic<UserTO, UserMod> {
     @PreAuthorize("hasRole('USER_UPDATE')")
     @Transactional(rollbackFor = { Throwable.class })
     public UserTO status(final StatusMod statusMod) {
-        User user = userDAO.authFecthUser(statusMod.getId());
+        User user = userDAO.authFetch(statusMod.getKey());
 
         Map.Entry<Long, List<PropagationStatus>> updated = setStatusOnWfAdapter(user, statusMod);
         final UserTO savedTO = binder.getUserTO(updated.getKey());
@@ -382,7 +386,7 @@ public class UserLogic extends AbstractSubjectLogic<UserTO, UserMod> {
             case SUSPEND:
                 for (String key : bulkAction.getTargets()) {
                     StatusMod statusMod = new StatusMod();
-                    statusMod.setId(Long.valueOf(key));
+                    statusMod.setKey(Long.valueOf(key));
                     statusMod.setType(StatusMod.ModType.SUSPEND);
                     try {
                         res.add(status(statusMod).getKey(), Status.SUCCESS);
@@ -396,7 +400,7 @@ public class UserLogic extends AbstractSubjectLogic<UserTO, UserMod> {
             case REACTIVATE:
                 for (String key : bulkAction.getTargets()) {
                     StatusMod statusMod = new StatusMod();
-                    statusMod.setId(Long.valueOf(key));
+                    statusMod.setKey(Long.valueOf(key));
                     statusMod.setType(StatusMod.ModType.REACTIVATE);
                     try {
                         res.add(status(statusMod).getKey(), Status.SUCCESS);
@@ -473,7 +477,7 @@ public class UserLogic extends AbstractSubjectLogic<UserTO, UserMod> {
     @Transactional(rollbackFor = { Throwable.class })
     @Override
     public UserTO deprovision(final Long key, final Collection<String> resources) {
-        final User user = userDAO.authFecthUser(key);
+        final User user = userDAO.authFetch(key);
 
         List<PropagationStatus> statuses = provisioningManager.deprovision(key, resources);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/UserWorkflowLogic.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/UserWorkflowLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/UserWorkflowLogic.java
index 08b5e71..999dddc 100644
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/UserWorkflowLogic.java
+++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/UserWorkflowLogic.java
@@ -26,14 +26,14 @@ import org.apache.syncope.common.lib.mod.AbstractAttributableMod;
 import org.apache.syncope.common.lib.mod.UserMod;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.to.WorkflowFormTO;
-import org.apache.syncope.persistence.api.dao.UserDAO;
-import org.apache.syncope.persistence.api.entity.task.PropagationTask;
-import org.apache.syncope.persistence.api.entity.user.User;
-import org.apache.syncope.provisioning.api.propagation.PropagationManager;
-import org.apache.syncope.provisioning.api.propagation.PropagationTaskExecutor;
-import org.apache.syncope.server.logic.data.UserDataBinder;
+import org.apache.syncope.server.persistence.api.dao.UserDAO;
+import org.apache.syncope.server.persistence.api.entity.task.PropagationTask;
+import org.apache.syncope.server.persistence.api.entity.user.User;
+import org.apache.syncope.server.provisioning.api.propagation.PropagationManager;
+import org.apache.syncope.server.provisioning.api.propagation.PropagationTaskExecutor;
 import org.apache.syncope.server.workflow.api.UserWorkflowAdapter;
-import org.apache.syncope.provisioning.api.WorkflowResult;
+import org.apache.syncope.server.provisioning.api.WorkflowResult;
+import org.apache.syncope.server.provisioning.api.data.UserDataBinder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Component;
@@ -83,7 +83,7 @@ public class UserWorkflowLogic extends AbstractTransactionalLogic<WorkflowFormTO
     @PreAuthorize("hasRole('WORKFLOW_FORM_READ') and hasRole('USER_READ')")
     @Transactional(rollbackFor = { Throwable.class })
     public WorkflowFormTO getFormForUser(final Long key) {
-        User user = userDAO.authFecthUser(key);
+        User user = userDAO.authFetch(key);
         return uwfAdapter.getForm(user.getWorkflowId());
     }
 
@@ -96,7 +96,7 @@ public class UserWorkflowLogic extends AbstractTransactionalLogic<WorkflowFormTO
     @PreAuthorize("hasRole('WORKFLOW_FORM_READ') and hasRole('USER_READ')")
     @Transactional(rollbackFor = { Throwable.class })
     public List<WorkflowFormTO> getForms(final Long key, final String formName) {
-        User user = userDAO.authFecthUser(key);
+        User user = userDAO.authFetch(key);
         return uwfAdapter.getForms(user.getWorkflowId(), formName);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/audit/AuditManager.java
----------------------------------------------------------------------
diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/audit/AuditManager.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/audit/AuditManager.java
deleted file mode 100644
index ed674fd..0000000
--- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/audit/AuditManager.java
+++ /dev/null
@@ -1,107 +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.
- */
-package org.apache.syncope.server.logic.audit;
-
-import org.apache.commons.lang3.ArrayUtils;
-import org.apache.syncope.common.lib.types.AuditElements;
-import org.apache.syncope.common.lib.types.AuditElements.Result;
-import org.apache.syncope.common.lib.types.AuditLoggerName;
-import org.apache.syncope.common.lib.types.LoggerLevel;
-import org.apache.syncope.persistence.api.dao.LoggerDAO;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.context.SecurityContext;
-import org.springframework.security.core.context.SecurityContextHolder;
-
-public class AuditManager {
-
-    /**
-     * Logger.
-     */
-    private static final Logger LOG = LoggerFactory.getLogger(AuditManager.class);
-
-    @Autowired
-    private LoggerDAO loggerDAO;
-
-    public void audit(
-            final AuditElements.EventCategoryType type,
-            final String category,
-            final String subcategory,
-            final String event,
-            final Result result,
-            final Object before,
-            final Object output,
-            final Object... input) {
-
-        final Throwable throwable;
-        final StringBuilder message = new StringBuilder();
-
-        message.append("BEFORE:\n");
-        message.append("\t").append(before == null ? "unknown" : before).append("\n");
-
-        message.append("INPUT:\n");
-
-        if (ArrayUtils.isNotEmpty(input)) {
-            for (Object obj : input) {
-                message.append("\t").append(obj == null ? null : obj.toString()).append("\n");
-            }
-        } else {
-            message.append("\t").append("none").append("\n");
-        }
-
-        message.append("OUTPUT:\n");
-
-        if (output instanceof Throwable) {
-            throwable = (Throwable) output;
-            message.append("\t").append(throwable.getMessage());
-        } else {
-            throwable = null;
-            message.append("\t").append(output == null ? "none" : output.toString());
-        }
-
-        AuditLoggerName auditLoggerName = null;
-        try {
-            auditLoggerName = new AuditLoggerName(type, category, subcategory, event, result);
-        } catch (IllegalArgumentException e) {
-            LOG.error("Invalid audit parameters, aborting...", e);
-        }
-
-        if (auditLoggerName != null) {
-            org.apache.syncope.persistence.api.entity.Logger syncopeLogger =
-                     loggerDAO.find(auditLoggerName.toLoggerName());
-            if (syncopeLogger != null && syncopeLogger.getLevel() == LoggerLevel.DEBUG) {
-                StringBuilder auditMessage = new StringBuilder();
-
-                final SecurityContext ctx = SecurityContextHolder.getContext();
-                if (ctx != null && ctx.getAuthentication() != null) {
-                    auditMessage.append('[').append(ctx.getAuthentication().getName()).append(']').append(' ');
-                }
-                auditMessage.append(message);
-
-                final Logger logger = LoggerFactory.getLogger(auditLoggerName.toLoggerName());
-                if (throwable == null) {
-                    logger.debug(auditMessage.toString());
-                } else {
-                    logger.debug(auditMessage.toString(), throwable);
-                }
-            }
-        }
-    }
-}