You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by md...@apache.org on 2015/08/14 10:30:50 UTC

[21/31] syncope git commit: [SYNCOPE-652] Still several things to refine, but it starts taking shape

[SYNCOPE-652] Still several things to refine, but it starts taking shape


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/6dfedd8f
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/6dfedd8f
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/6dfedd8f

Branch: refs/heads/SYNCOPE-156
Commit: 6dfedd8f334c8d9b50aca076b0c53eab004081e7
Parents: b2e8401
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Sun Aug 2 07:44:52 2015 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Aug 13 17:16:51 2015 +0200

----------------------------------------------------------------------
 .travis.yml                                     |    9 +-
 .../console/pages/BulkActionModalPage.java      |   12 +-
 .../client/console/rest/GroupRestClient.java    |   14 +-
 .../client/console/rest/UserRestClient.java     |   14 +-
 .../client/console/pages/Configuration.java     |    2 -
 .../syncope/common/lib/to/BulkAction.java       |   10 +-
 .../syncope/common/lib/to/SchedTaskTO.java      |   10 +-
 .../common/lib/types/AbstractPolicySpec.java    |   19 +
 .../syncope/common/lib/types/AuditElements.java |    8 +
 .../syncope/common/lib/types/LoggerType.java    |    5 +-
 .../lib/types/ResourceAssociationAction.java    |   39 +
 .../types/ResourceAssociationActionType.java    |   39 -
 .../common/rest/api/CollectionWrapper.java      |    8 +-
 .../common/rest/api/service/AnyService.java     |    8 +-
 core/logic/pom.xml                              |   22 +
 .../syncope/core/logic/AnyObjectLogic.java      |   57 +-
 .../syncope/core/logic/ConfigurationLogic.java  |    3 +-
 .../apache/syncope/core/logic/GroupLogic.java   |   58 +-
 .../apache/syncope/core/logic/LoggerLogic.java  |   24 +-
 .../apache/syncope/core/logic/SyncopeLogic.java |    2 +-
 .../apache/syncope/core/logic/TaskLogic.java    |   76 +-
 .../apache/syncope/core/logic/UserLogic.java    |   67 +-
 .../logic/audit/AuditConnectionFactory.java     |  159 ---
 .../init/ImplementationClassNamesLoader.java    |   18 +-
 .../core/logic/init/JobInstanceLoaderImpl.java  |  181 ++-
 .../syncope/core/logic/init/LoggerLoader.java   |   64 +-
 .../core/logic/init/LogicInitializer.java       |    3 +
 .../logic/notification/NotificationJob.java     |  237 +---
 .../notification/NotificationJobDelegate.java   |  258 ++++
 .../syncope/core/logic/report/ReportJob.java    |  158 +--
 .../core/logic/report/ReportJobDelegate.java    |  181 +++
 .../apache/syncope/core/logic/AbstractTest.java |    4 +-
 .../apache/syncope/core/logic/MappingTest.java  |    2 +
 .../syncope/core/logic/NotificationTest.java    |    6 +-
 core/logic/src/test/resources/logicTest.xml     |    6 +-
 .../apache/syncope/core/misc/AuditManager.java  |   23 +-
 .../apache/syncope/core/misc/MappingUtils.java  |   26 +-
 .../core/misc/policy/AccountPolicyEnforcer.java |   15 +-
 .../misc/policy/PasswordPolicyEnforcer.java     |    4 +-
 .../core/misc/policy/PolicyEnforcer.java        |   10 +-
 .../core/misc/policy/PolicyEvaluator.java       |    5 +-
 .../core/misc/security/AuthContextUtils.java    |   27 +
 .../core/misc/security/PasswordGenerator.java   |   11 +-
 .../security/SyncopeAuthenticationProvider.java |   10 +-
 .../misc/security/SyncopeGrantedAuthority.java  |    7 +
 .../misc/spring/ApplicationContextProvider.java |   12 +-
 .../core/persistence/api/DomainsHolder.java     |   27 +
 .../api/content/ContentExporter.java            |    2 +-
 .../syncope/core/persistence/api/dao/DAO.java   |    2 -
 .../persistence/api/entity/task/SchedTask.java  |    4 +-
 core/persistence-jpa/pom.xml                    |    5 +
 .../jpa/content/AbstractContentDealer.java      |   57 +-
 .../jpa/content/XMLContentExporter.java         |   36 +-
 .../jpa/content/XMLContentLoader.java           |  113 +-
 .../persistence/jpa/dao/AbstractAnyDAO.java     |   17 +-
 .../core/persistence/jpa/dao/AbstractDAO.java   |   33 +-
 .../persistence/jpa/dao/JPAAnyObjectDAO.java    |    8 +-
 .../persistence/jpa/dao/JPAAnySearchDAO.java    |    6 +-
 .../persistence/jpa/dao/JPAAnyTypeClassDAO.java |    8 +-
 .../core/persistence/jpa/dao/JPAAnyTypeDAO.java |   10 +-
 .../core/persistence/jpa/dao/JPAConfDAO.java    |    8 +-
 .../persistence/jpa/dao/JPAConnInstanceDAO.java |    8 +-
 .../core/persistence/jpa/dao/JPADerAttrDAO.java |    8 +-
 .../persistence/jpa/dao/JPADerSchemaDAO.java    |   12 +-
 .../core/persistence/jpa/dao/JPADomainDAO.java  |    8 +-
 .../jpa/dao/JPAExternalResourceDAO.java         |   24 +-
 .../core/persistence/jpa/dao/JPAGroupDAO.java   |   16 +-
 .../core/persistence/jpa/dao/JPALoggerDAO.java  |    8 +-
 .../persistence/jpa/dao/JPANotificationDAO.java |    8 +-
 .../persistence/jpa/dao/JPAPlainAttrDAO.java    |    4 +-
 .../jpa/dao/JPAPlainAttrValueDAO.java           |    8 +-
 .../persistence/jpa/dao/JPAPlainSchemaDAO.java  |   12 +-
 .../core/persistence/jpa/dao/JPAPolicyDAO.java  |   12 +-
 .../core/persistence/jpa/dao/JPARealmDAO.java   |   14 +-
 .../jpa/dao/JPARelationshipTypeDAO.java         |   14 +-
 .../core/persistence/jpa/dao/JPAReportDAO.java  |   13 +-
 .../persistence/jpa/dao/JPAReportExecDAO.java   |   10 +-
 .../core/persistence/jpa/dao/JPARoleDAO.java    |   12 +-
 .../jpa/dao/JPASecurityQuestionDAO.java         |    8 +-
 .../core/persistence/jpa/dao/JPATaskDAO.java    |   15 +-
 .../persistence/jpa/dao/JPATaskExecDAO.java     |   10 +-
 .../core/persistence/jpa/dao/JPAUserDAO.java    |  181 ++-
 .../core/persistence/jpa/dao/JPAVirAttrDAO.java |    8 +-
 .../persistence/jpa/dao/JPAVirSchemaDAO.java    |   12 +-
 .../persistence/jpa/entity/group/JPAGroup.java  |    2 +-
 .../entity/task/AbstractProvisioningTask.java   |    6 +-
 .../jpa/entity/task/JPAPushTask.java            |    3 +-
 .../jpa/entity/task/JPASchedTask.java           |   11 +-
 .../jpa/entity/task/JPASyncTask.java            |    3 +-
 .../persistence/jpa/entity/user/JPAUser.java    |   10 +-
 .../spring/CommonEntityManagerFactoryConf.java  |  107 ++
 .../spring/DomainEntityManagerFactoryBean.java  |   45 +
 .../spring/DomainTransactionInterceptor.java    |   70 ++
 .../jpa/spring/SpringComponentReplacer.java     |   42 +
 .../entity/EntityValidationListener.java        |    2 +-
 .../entity/ProvisioningTaskValidator.java       |   14 +-
 .../validation/entity/SchedTaskValidator.java   |   44 +-
 .../jpa/validation/entity/UserCheck.java        |   41 -
 .../jpa/validation/entity/UserValidator.java    |  199 ---
 .../src/main/resources/audit/audit.sql          |    4 +-
 .../src/main/resources/content.xml              |  117 --
 .../src/main/resources/domains.xml              |   56 +
 .../main/resources/domains/Master.properties    |   28 +
 .../main/resources/domains/MasterContent.xml    |  124 ++
 .../src/main/resources/domains/MasterDomain.xml |  125 ++
 .../src/main/resources/persistence.properties   |   13 -
 .../src/main/resources/persistenceContext.xml   |   93 +-
 .../resources/persistenceContextEMFactory.xml   |   68 --
 .../src/main/resources/quartz/tables_h2.sql     |  266 ----
 .../main/resources/quartz/tables_mariadb.sql    |  206 ----
 .../src/main/resources/quartz/tables_mysql.sql  |  206 ----
 .../resources/quartz/tables_mysql_innodb.sql    |  221 ----
 .../src/main/resources/quartz/tables_oracle.sql |  208 ----
 .../main/resources/quartz/tables_postgres.sql   |  204 ----
 .../main/resources/quartz/tables_sqlServer.sql  |  296 -----
 .../core/persistence/jpa/AbstractTest.java      |   16 +
 .../persistence/jpa/inner/MultitenancyTest.java |  111 ++
 .../core/persistence/jpa/inner/UserTest.java    |    4 +-
 .../persistence/jpa/outer/AnyTypeClassTest.java |    4 -
 .../core/persistence/jpa/outer/GroupTest.java   |   11 +-
 .../persistence/jpa/outer/ResourceTest.java     |    5 +-
 .../core/persistence/jpa/outer/RoleTest.java    |    8 +-
 .../resources/META-INF/persistence-enhance.xml  |    2 +-
 .../src/test/resources/content.xml              | 1138 ------------------
 .../test/resources/domains/Master.properties    |   28 +
 .../test/resources/domains/MasterContent.xml    | 1131 +++++++++++++++++
 .../src/test/resources/domains/Two.properties   |   28 +
 .../src/test/resources/domains/TwoContent.xml   |  124 ++
 .../src/test/resources/domains/TwoDomain.xml    |  125 ++
 .../src/test/resources/persistence.properties   |   31 -
 .../src/test/resources/persistenceTest.xml      |    1 +
 .../api/AnyObjectProvisioningManager.java       |    5 +
 .../api/GroupProvisioningManager.java           |    3 +
 .../api/UserProvisioningManager.java            |   11 +-
 .../provisioning/api/job/JobInstanceLoader.java |   12 +-
 .../core/provisioning/api/job/JobNamer.java     |   10 +-
 .../provisioning/api/job/ProvisioningJob.java   |   28 -
 .../core/provisioning/api/job/PushJob.java      |   26 -
 .../api/job/SchedTaskJobDelegate.java           |   26 +
 .../core/provisioning/api/job/SyncJob.java      |   26 -
 .../core/provisioning/api/job/TaskJob.java      |   43 -
 .../api/propagation/PropagationManager.java     |    5 +-
 core/provisioning-java/pom.xml                  |    7 +
 .../provisioning/java/ConnectorFacadeProxy.java |    2 +-
 .../provisioning/java/ConnectorManager.java     |    2 +-
 .../DefaultAnyObjectProvisioningManager.java    |   46 +-
 .../java/DefaultGroupProvisioningManager.java   |   62 +-
 .../java/DefaultUserProvisioningManager.java    |  120 +-
 .../provisioning/java/UserSuspenderImpl.java    |    2 +-
 .../java/data/AbstractAnyDataBinder.java        |   18 +-
 .../java/data/AnyObjectDataBinderImpl.java      |    2 -
 .../java/data/ConfigurationDataBinderImpl.java  |    2 -
 .../java/data/TaskDataBinderImpl.java           |    8 +-
 .../java/job/AbstractSchedTaskJobDelegate.java  |  144 +++
 .../provisioning/java/job/AbstractTaskJob.java  |  216 ----
 .../java/job/AbstractTransactionalTaskJob.java  |   35 -
 .../core/provisioning/java/job/SampleJob.java   |   52 -
 .../java/job/SpringBeanJobFactory.java          |   12 +-
 .../core/provisioning/java/job/TaskJob.java     |  119 ++
 .../propagation/PropagationManagerImpl.java     |    6 +-
 .../java/sync/AbstractProvisioningJob.java      |  480 --------
 .../sync/AbstractProvisioningJobDelegate.java   |  434 +++++++
 .../java/sync/AbstractPushResultHandler.java    |    3 +-
 .../java/sync/AbstractSyncResultHandler.java    |    6 +-
 .../java/sync/AbstractSyncopeResultHandler.java |    2 +-
 .../provisioning/java/sync/PushJobDelegate.java |  192 +++
 .../provisioning/java/sync/PushJobImpl.java     |  189 ---
 .../provisioning/java/sync/SyncJobDelegate.java |  221 ++++
 .../provisioning/java/sync/SyncJobImpl.java     |  212 ----
 .../core/provisioning/java/sync/SyncUtils.java  |    2 +
 .../java/sync/UserSyncResultHandlerImpl.java    |    7 +-
 .../src/main/resources/provisioning.properties  |    3 +
 .../src/main/resources/provisioningContext.xml  |   27 +-
 .../src/main/resources/quartz/tables_h2.sql     |  266 ++++
 .../main/resources/quartz/tables_mariadb.sql    |  206 ++++
 .../src/main/resources/quartz/tables_mysql.sql  |  206 ++++
 .../resources/quartz/tables_mysql_innodb.sql    |  221 ++++
 .../src/main/resources/quartz/tables_oracle.sql |  208 ++++
 .../main/resources/quartz/tables_postgres.sql   |  204 ++++
 .../main/resources/quartz/tables_sqlServer.sql  |  296 +++++
 .../core/provisioning/java/AbstractTest.java    |    2 +
 .../provisioning/java/ConnectorManagerTest.java |    2 +-
 .../core/provisioning/java/TestInitializer.java |   37 +
 .../src/test/resources/provisioningTest.xml     |    7 +-
 .../rest/cxf/service/AbstractAnyService.java    |   14 +-
 .../rest/cxf/service/ConnectorServiceImpl.java  |    2 +-
 .../rest/cxf/service/ResourceServiceImpl.java   |    2 +-
 .../core/rest/cxf/service/TaskServiceImpl.java  |    2 +-
 .../activiti/ActivitiDefinitionLoader.java      |   67 +-
 .../workflow/activiti/ActivitiImportUtils.java  |   35 +-
 .../activiti/ActivitiUserWorkflowAdapter.java   |  134 +--
 .../activiti/spring/DomainProcessEngine.java    |  102 ++
 .../spring/DomainProcessEngineFactoryBean.java  |  104 ++
 .../task/AbstractActivitiServiceTask.java       |    7 +-
 .../workflow/activiti/task/AutoActivate.java    |    2 +-
 .../core/workflow/activiti/task/Create.java     |    8 +-
 .../core/workflow/activiti/task/Delete.java     |    5 +-
 .../workflow/activiti/task/GenerateToken.java   |    5 +-
 .../core/workflow/activiti/task/Notify.java     |    9 +-
 .../workflow/activiti/task/PasswordReset.java   |   11 +-
 .../core/workflow/activiti/task/Update.java     |   12 +-
 .../main/resources/workflowActivitiContext.xml  |   17 +-
 .../core/workflow/api/UserWorkflowAdapter.java  |    6 +-
 .../java/AbstractAnyObjectWorkflowAdapter.java  |    3 +-
 .../java/AbstractGroupWorkflowAdapter.java      |    3 +-
 .../java/AbstractUserWorkflowAdapter.java       |    3 +-
 .../java/DefaultUserWorkflowAdapter.java        |    2 -
 .../core/logic/init/CamelRouteLoader.java       |   28 +-
 .../persistence/jpa/dao/JPACamelRouteDAO.java   |   10 +-
 .../CamelAnyObjectProvisioningManager.java      |   19 +
 .../camel/CamelGroupProvisioningManager.java    |   23 +-
 .../camel/CamelUserProvisioningManager.java     |   59 +-
 .../processor/AnyObjectCreateProcessor.java     |    2 +-
 .../processor/AnyObjectDeleteProcessor.java     |    2 +-
 .../AnyObjectDeprovisionProcessor.java          |    2 +-
 .../processor/AnyObjectProvisionProcessor.java  |   77 ++
 .../processor/AnyObjectUpdateProcessor.java     |    2 +-
 .../camel/processor/GroupCreateProcessor.java   |    2 +-
 .../camel/processor/GroupDeleteProcessor.java   |    2 +-
 .../processor/GroupDeprovisionProcessor.java    |    4 +-
 .../processor/GroupProvisionProcessor.java      |   77 ++
 .../camel/processor/GroupUpdateProcessor.java   |    2 +-
 .../processor/UserConfirmPwdResetProcessor.java |    7 +-
 .../camel/processor/UserCreateProcessor.java    |    2 +-
 .../camel/processor/UserDeleteProcessor.java    |    2 +-
 .../processor/UserDeprovisionProcessor.java     |    2 +-
 .../camel/processor/UserProvisionProcessor.java |   98 ++
 .../processor/UserSetStatusInSyncProcessor.java |    2 +-
 .../UserStatusPropagationProcessor.java         |   13 +-
 .../processor/UserUpdateInSyncProcessor.java    |    2 +-
 .../camel/processor/UserUpdateProcessor.java    |    2 +-
 .../src/main/resources/anyObjectRoutes.xml      |    6 +
 .../src/main/resources/groupRoutes.xml          |    6 +
 .../src/main/resources/userRoutes.xml           |    8 +-
 fit/core-reference/pom.xml                      |   12 +-
 .../fit/core/reference/TestSampleJob.java       |   64 -
 .../core/reference/TestSampleJobDelegate.java   |   64 +
 .../main/resources/all/provisioning.properties  |    6 +-
 .../src/main/resources/coreContext.xml          |    2 +
 .../src/main/resources/log4j2.xml               |   35 +-
 .../src/main/resources/provisioning.properties  |    4 +
 .../src/main/webapp/cacheStats.jsp              |    5 +-
 .../fit/core/reference/AnyTypeITCase.java       |    1 -
 .../core/reference/AuthenticationITCase.java    |   10 +-
 .../fit/core/reference/CamelRouteITCase.java    |    5 +-
 .../fit/core/reference/ConnectorITCase.java     |    2 +-
 .../core/reference/ExceptionMapperITCase.java   |    3 +-
 .../syncope/fit/core/reference/GroupITCase.java |   24 +-
 .../fit/core/reference/LoggerITCase.java        |    4 +-
 .../core/reference/PropagationTaskITCase.java   |    2 +-
 .../fit/core/reference/PushTaskITCase.java      |    5 +-
 .../fit/core/reference/ResourceITCase.java      |    2 +-
 .../fit/core/reference/SchedTaskITCase.java     |    5 +-
 .../fit/core/reference/SyncTaskITCase.java      |   26 +-
 .../syncope/fit/core/reference/UserITCase.java  |   54 +-
 255 files changed, 7694 insertions(+), 6435 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index e17fd2c..4ec5ae7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,13 +13,18 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+cache:
+  directories:
+  - $HOME/.m2
 language: java
 jdk:
   - openjdk7
 # default install is mvn install --quiet -DskipTests=true
 install: mvn --show-version --quiet -P all,skipTests
 #invoker.streamLogs: we cannot access to log files through Travis web ui, so display everything in the console
-#script: mvn --show-version --quiet clean install -Dinvoker.streamLogs=true
-script: mvn --show-version --quiet -PskipTests -Dinvoker.streamLogs=true
+script:
+  - sudo rm /etc/mavenrc
+  - export MAVEN_OPTS="-Xmx2469m -XX:MaxPermSize=512m"
+  - mvn --show-version --quiet clean install -Dinvoker.streamLogs=true
 notifications:
   webhooks: http://rovere.tirasa.net/cgi-bin/travis.cgi

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java
index 6172639..5c1d31f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java
@@ -101,19 +101,19 @@ public class BulkActionModalPage<T, S> extends BaseModalPage {
 
             switch (action) {
                 case DELETE:
-                    bulkAction.setOperation(BulkAction.Type.DELETE);
+                    bulkAction.setType(BulkAction.Type.DELETE);
                     break;
                 case SUSPEND:
-                    bulkAction.setOperation(BulkAction.Type.SUSPEND);
+                    bulkAction.setType(BulkAction.Type.SUSPEND);
                     break;
                 case REACTIVATE:
-                    bulkAction.setOperation(BulkAction.Type.REACTIVATE);
+                    bulkAction.setType(BulkAction.Type.REACTIVATE);
                     break;
                 case EXECUTE:
-                    bulkAction.setOperation(BulkAction.Type.EXECUTE);
+                    bulkAction.setType(BulkAction.Type.EXECUTE);
                     break;
                 case DRYRUN:
-                    bulkAction.setOperation(BulkAction.Type.DRYRUN);
+                    bulkAction.setType(BulkAction.Type.DRYRUN);
                     break;
                 default:
                     LOG.error("Bulk action type not supported");
@@ -133,7 +133,7 @@ public class BulkActionModalPage<T, S> extends BaseModalPage {
                     } catch (NoSuchMethodException | SecurityException | IllegalAccessException 
                             | IllegalArgumentException | InvocationTargetException e) {
                         error(getString(Constants.ERROR)
-                                + ": Operation " + bulkAction.getOperation() + " not supported");
+                                + ": Operation " + bulkAction.getType() + " not supported");
                         feedbackPanel.refresh(target);
                     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
index 512e08f..4644fc0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
@@ -31,7 +31,7 @@ import org.apache.syncope.common.lib.to.BulkActionResult;
 import org.apache.syncope.common.lib.to.ConnObjectTO;
 import org.apache.syncope.common.lib.to.GroupTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.ResourceAssociationActionType;
+import org.apache.syncope.common.lib.types.ResourceAssociationAction;
 import org.apache.syncope.common.lib.types.ResourceDeassociationActionType;
 import org.apache.syncope.common.lib.wrap.ResourceKey;
 import org.apache.syncope.common.rest.api.CollectionWrapper;
@@ -123,7 +123,7 @@ public class GroupRestClient extends AbstractAnyRestClient {
     public void unlink(final String etag, final long groupKey, final List<StatusBean> statuses) {
         synchronized (this) {
             GroupService service = getService(etag, GroupService.class);
-            service.bulkDeassociation(groupKey, ResourceDeassociationActionType.UNLINK,
+            service.deassociate(groupKey, ResourceDeassociationActionType.UNLINK,
                     CollectionWrapper.wrap(StatusUtils.buildStatusMod(statuses).getResourceNames(),
                             ResourceKey.class));
             resetClient(GroupService.class);
@@ -137,7 +137,7 @@ public class GroupRestClient extends AbstractAnyRestClient {
             ResourceAssociationMod associationMod = new ResourceAssociationMod();
             associationMod.getTargetResources().addAll(
                     CollectionWrapper.wrap(StatusUtils.buildStatusMod(statuses).getResourceNames(), ResourceKey.class));
-            service.bulkAssociation(groupKey, ResourceAssociationActionType.LINK, associationMod);
+            service.associate(groupKey, ResourceAssociationAction.LINK, associationMod);
 
             resetClient(GroupService.class);
         }
@@ -147,7 +147,7 @@ public class GroupRestClient extends AbstractAnyRestClient {
         BulkActionResult result;
         synchronized (this) {
             GroupService service = getService(etag, GroupService.class);
-            result = service.bulkDeassociation(groupKey, ResourceDeassociationActionType.DEPROVISION,
+            result = service.deassociate(groupKey, ResourceDeassociationActionType.DEPROVISION,
                     CollectionWrapper.wrap(StatusUtils.buildStatusMod(statuses).getResourceNames(),
                             ResourceKey.class)).
                     readEntity(BulkActionResult.class);
@@ -165,7 +165,7 @@ public class GroupRestClient extends AbstractAnyRestClient {
             associationMod.getTargetResources().addAll(
                     CollectionWrapper.wrap(StatusUtils.buildStatusMod(statuses).getResourceNames(), ResourceKey.class));
 
-            result = service.bulkAssociation(groupKey, ResourceAssociationActionType.PROVISION, associationMod).
+            result = service.associate(groupKey, ResourceAssociationAction.PROVISION, associationMod).
                     readEntity(BulkActionResult.class);
             resetClient(GroupService.class);
         }
@@ -176,7 +176,7 @@ public class GroupRestClient extends AbstractAnyRestClient {
         BulkActionResult result;
         synchronized (this) {
             GroupService service = getService(etag, GroupService.class);
-            result = service.bulkDeassociation(groupKey, ResourceDeassociationActionType.UNASSIGN,
+            result = service.deassociate(groupKey, ResourceDeassociationActionType.UNASSIGN,
                     CollectionWrapper.wrap(StatusUtils.buildStatusMod(statuses).getResourceNames(),
                             ResourceKey.class)).
                     readEntity(BulkActionResult.class);
@@ -194,7 +194,7 @@ public class GroupRestClient extends AbstractAnyRestClient {
             associationMod.getTargetResources().addAll(
                     CollectionWrapper.wrap(StatusUtils.buildStatusMod(statuses).getResourceNames(), ResourceKey.class));
 
-            result = service.bulkAssociation(groupKey, ResourceAssociationActionType.ASSIGN, associationMod).
+            result = service.associate(groupKey, ResourceAssociationAction.ASSIGN, associationMod).
                     readEntity(BulkActionResult.class);
 
             resetClient(GroupService.class);

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
index 338851d..5c5c062 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
@@ -32,7 +32,7 @@ import org.apache.syncope.common.lib.to.BulkActionResult;
 import org.apache.syncope.common.lib.to.ConnObjectTO;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.ResourceAssociationActionType;
+import org.apache.syncope.common.lib.types.ResourceAssociationAction;
 import org.apache.syncope.common.lib.types.ResourceDeassociationActionType;
 import org.apache.syncope.common.lib.wrap.ResourceKey;
 import org.apache.syncope.common.rest.api.CollectionWrapper;
@@ -150,7 +150,7 @@ public class UserRestClient extends AbstractAnyRestClient {
     public void unlink(final String etag, final long userKey, final List<StatusBean> statuses) {
         synchronized (this) {
             UserService service = getService(etag, UserService.class);
-            service.bulkDeassociation(userKey, ResourceDeassociationActionType.UNLINK,
+            service.deassociate(userKey, ResourceDeassociationActionType.UNLINK,
                     CollectionWrapper.wrap(StatusUtils.buildStatusMod(statuses).getResourceNames(),
                             ResourceKey.class));
             resetClient(UserService.class);
@@ -164,7 +164,7 @@ public class UserRestClient extends AbstractAnyRestClient {
             ResourceAssociationMod associationMod = new ResourceAssociationMod();
             associationMod.getTargetResources().addAll(
                     CollectionWrapper.wrap(StatusUtils.buildStatusMod(statuses).getResourceNames(), ResourceKey.class));
-            service.bulkAssociation(userKey, ResourceAssociationActionType.LINK, associationMod);
+            service.associate(userKey, ResourceAssociationAction.LINK, associationMod);
 
             resetClient(UserService.class);
         }
@@ -174,7 +174,7 @@ public class UserRestClient extends AbstractAnyRestClient {
         BulkActionResult result;
         synchronized (this) {
             UserService service = getService(etag, UserService.class);
-            result = service.bulkDeassociation(userKey, ResourceDeassociationActionType.DEPROVISION,
+            result = service.deassociate(userKey, ResourceDeassociationActionType.DEPROVISION,
                     CollectionWrapper.wrap(StatusUtils.buildStatusMod(statuses).getResourceNames(),
                             ResourceKey.class)).
                     readEntity(BulkActionResult.class);
@@ -196,7 +196,7 @@ public class UserRestClient extends AbstractAnyRestClient {
             associationMod.setChangePwd(changepwd);
             associationMod.setPassword(password);
 
-            result = service.bulkAssociation(userKey, ResourceAssociationActionType.PROVISION, associationMod).
+            result = service.associate(userKey, ResourceAssociationAction.PROVISION, associationMod).
                     readEntity(BulkActionResult.class);
             resetClient(UserService.class);
         }
@@ -207,7 +207,7 @@ public class UserRestClient extends AbstractAnyRestClient {
         BulkActionResult result;
         synchronized (this) {
             UserService service = getService(etag, UserService.class);
-            result = service.bulkDeassociation(userKey, ResourceDeassociationActionType.UNASSIGN,
+            result = service.deassociate(userKey, ResourceDeassociationActionType.UNASSIGN,
                     CollectionWrapper.wrap(StatusUtils.buildStatusMod(statuses).getResourceNames(),
                             ResourceKey.class)).
                     readEntity(BulkActionResult.class);
@@ -229,7 +229,7 @@ public class UserRestClient extends AbstractAnyRestClient {
             associationMod.setChangePwd(changepwd);
             associationMod.setPassword(password);
 
-            result = service.bulkAssociation(userKey, ResourceAssociationActionType.ASSIGN, associationMod).
+            result = service.associate(userKey, ResourceAssociationAction.ASSIGN, associationMod).
                     readEntity(BulkActionResult.class);
             resetClient(UserService.class);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/client/old_console/src/main/java/org/apache/syncope/client/console/pages/Configuration.java
----------------------------------------------------------------------
diff --git a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/Configuration.java b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/Configuration.java
index 9f8c734..bb6fcdf 100644
--- a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/Configuration.java
+++ b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/Configuration.java
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.client.console.pages;
 
-import static org.apache.syncope.client.console.pages.AbstractBasePage.LOG;
-
 import java.io.File;
 import java.io.Serializable;
 import java.util.ArrayList;

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkAction.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkAction.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkAction.java
index a514dcb..5b46616 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkAction.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkAction.java
@@ -46,19 +46,19 @@ public class BulkAction extends AbstractBaseBean {
 
     }
 
-    private Type operation;
+    private Type type;
 
     /**
      * Serialized identifiers.
      */
     private final List<String> targets = new ArrayList<>();
 
-    public Type getOperation() {
-        return operation;
+    public Type getType() {
+        return type;
     }
 
-    public void setOperation(final Type operation) {
-        this.operation = operation;
+    public void setType(final Type type) {
+        this.type = type;
     }
 
     @XmlElementWrapper(name = "targets")

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/common/lib/src/main/java/org/apache/syncope/common/lib/to/SchedTaskTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/SchedTaskTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/SchedTaskTO.java
index abea52d..08e4c53 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/SchedTaskTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/SchedTaskTO.java
@@ -33,7 +33,7 @@ public class SchedTaskTO extends AbstractTaskTO {
 
     private String cronExpression;
 
-    private String jobClassName;
+    private String jobDelegateClassName;
 
     private String name;
 
@@ -51,12 +51,12 @@ public class SchedTaskTO extends AbstractTaskTO {
         this.cronExpression = cronExpression;
     }
 
-    public String getJobClassName() {
-        return jobClassName;
+    public String getJobDelegateClassName() {
+        return jobDelegateClassName;
     }
 
-    public void setJobClassName(final String jobClassName) {
-        this.jobClassName = jobClassName;
+    public void setJobDelegateClassName(final String jobDelegateClassName) {
+        this.jobDelegateClassName = jobDelegateClassName;
     }
 
     @SuppressWarnings("CPD-START")

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/common/lib/src/main/java/org/apache/syncope/common/lib/types/AbstractPolicySpec.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AbstractPolicySpec.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AbstractPolicySpec.java
index 5f2fd1e..e1e7333 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AbstractPolicySpec.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AbstractPolicySpec.java
@@ -24,6 +24,10 @@ import java.util.List;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlType;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
 import org.apache.syncope.common.lib.annotation.SchemaList;
 
 @XmlType
@@ -80,4 +84,19 @@ public abstract class AbstractPolicySpec implements PolicySpec {
         return suffixesNotPermitted;
     }
 
+    @Override
+    public boolean equals(final Object obj) {
+        return EqualsBuilder.reflectionEquals(this, obj);
+    }
+
+    @Override
+    public int hashCode() {
+        return HashCodeBuilder.reflectionHashCode(this);
+    }
+
+    @Override
+    public String toString() {
+        return ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/common/lib/src/main/java/org/apache/syncope/common/lib/types/AuditElements.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AuditElements.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AuditElements.java
index 323ea09..c3d4af5 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AuditElements.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AuditElements.java
@@ -26,6 +26,10 @@ public final class AuditElements implements Serializable {
 
     private static final long serialVersionUID = -4385059255522273254L;
 
+    public static final String AUTHENTICATION_CATEGORY = "Authentication";
+
+    public static final String LOGIN_EVENT = "login";
+
     @XmlEnum
     public enum EventCategoryType {
 
@@ -55,4 +59,8 @@ public final class AuditElements implements Serializable {
         FAILURE
 
     }
+
+    private AuditElements() {
+        // private constructor for static utility class
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/common/lib/src/main/java/org/apache/syncope/common/lib/types/LoggerType.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/LoggerType.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/LoggerType.java
index f77ed81..f129a7d 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/LoggerType.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/LoggerType.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.common.lib.types;
 
 import javax.xml.bind.annotation.XmlEnum;
+import org.apache.commons.lang3.StringUtils;
 
 @XmlEnum
 public enum LoggerType {
@@ -26,7 +27,7 @@ public enum LoggerType {
     /**
      * This type describes a common logger used to handle system and application events.
      */
-    LOG(""),
+    LOG(StringUtils.EMPTY),
     /**
      * Audit logger only focus on security related events, usually logging how did what and when.
      * In case of a security incident audit loggers should allow an administrator to recall all
@@ -34,7 +35,7 @@ public enum LoggerType {
      */
     AUDIT("syncope.audit");
 
-    private String prefix;
+    private final String prefix;
 
     LoggerType(final String prefix) {
         this.prefix = prefix;

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/common/lib/src/main/java/org/apache/syncope/common/lib/types/ResourceAssociationAction.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/ResourceAssociationAction.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/ResourceAssociationAction.java
new file mode 100644
index 0000000..efbe0ef
--- /dev/null
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/ResourceAssociationAction.java
@@ -0,0 +1,39 @@
+/*
+ * 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.common.lib.types;
+
+import javax.xml.bind.annotation.XmlEnum;
+
+@XmlEnum
+public enum ResourceAssociationAction {
+
+    /**
+     * Link user/group/any object on Syncope and external resource(s) without any propagation.
+     */
+    LINK,
+    /**
+     * Send user/group/any object data to external resource(s).
+     */
+    PROVISION,
+    /**
+     * Assign (link + provision) external resource(s) to user/group/any object.
+     */
+    ASSIGN
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/common/lib/src/main/java/org/apache/syncope/common/lib/types/ResourceAssociationActionType.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/ResourceAssociationActionType.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/ResourceAssociationActionType.java
deleted file mode 100644
index 3d7955d..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/ResourceAssociationActionType.java
+++ /dev/null
@@ -1,39 +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.common.lib.types;
-
-import javax.xml.bind.annotation.XmlEnum;
-
-@XmlEnum
-public enum ResourceAssociationActionType {
-
-    /**
-     * Add association between user/group on Syncope and external resource(s) without any propagation.
-     */
-    LINK,
-    /**
-     * Add user/group into external resource(s).
-     */
-    PROVISION,
-    /**
-     * Assign (link + provision) external resource(s) with user/group.
-     */
-    ASSIGN
-
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/CollectionWrapper.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/CollectionWrapper.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/CollectionWrapper.java
index 94bf21f..3cdf1fa 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/CollectionWrapper.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/CollectionWrapper.java
@@ -57,9 +57,9 @@ public final class CollectionWrapper {
 
     public static List<AuditLoggerName> wrapLogger(final Collection<LoggerTO> logger) {
         List<AuditLoggerName> respons = new ArrayList<>();
-        for (LoggerTO l : logger) {
+        for (LoggerTO loggerTO : logger) {
             try {
-                respons.add(AuditLoggerName.fromLoggerName(l.getKey()));
+                respons.add(AuditLoggerName.fromLoggerName(loggerTO.getKey()));
             } catch (Exception ignore) {
                 // ignore
             }
@@ -69,9 +69,9 @@ public final class CollectionWrapper {
 
     public static List<LoggerTO> unwrapLogger(final Collection<AuditLoggerName> auditNames) {
         List<LoggerTO> respons = new ArrayList<>();
-        for (AuditLoggerName l : auditNames) {
+        for (AuditLoggerName name : auditNames) {
             LoggerTO loggerTO = new LoggerTO();
-            loggerTO.setKey(l.toLoggerName());
+            loggerTO.setKey(name.toLoggerName());
             loggerTO.setLevel(LoggerLevel.DEBUG);
             respons.add(loggerTO);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyService.java
index 93167cb..1c0fda2 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyService.java
@@ -39,7 +39,7 @@ import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.BulkAction;
 import org.apache.syncope.common.lib.to.BulkActionResult;
 import org.apache.syncope.common.lib.to.PagedResult;
-import org.apache.syncope.common.lib.types.ResourceAssociationActionType;
+import org.apache.syncope.common.lib.types.ResourceAssociationAction;
 import org.apache.syncope.common.lib.types.ResourceDeassociationActionType;
 import org.apache.syncope.common.lib.wrap.ResourceKey;
 import org.apache.syncope.common.rest.api.beans.AnyListQuery;
@@ -150,7 +150,7 @@ public interface AnyService<TO extends AnyTO, MOD extends AnyMod> extends JAXRSS
     @Path("{key}/deassociate/{type}")
     @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
     @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    Response bulkDeassociation(
+    Response deassociate(
             @NotNull @PathParam("key") Long key,
             @NotNull @PathParam("type") ResourceDeassociationActionType type,
             @NotNull List<ResourceKey> resourceNames);
@@ -171,9 +171,9 @@ public interface AnyService<TO extends AnyTO, MOD extends AnyMod> extends JAXRSS
     @Path("{key}/associate/{type}")
     @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
     @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    Response bulkAssociation(
+    Response associate(
             @NotNull @PathParam("key") Long key,
-            @NotNull @PathParam("type") ResourceAssociationActionType type,
+            @NotNull @PathParam("type") ResourceAssociationAction type,
             @NotNull ResourceAssociationMod associationMod);
 
     /**

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/core/logic/pom.xml
----------------------------------------------------------------------
diff --git a/core/logic/pom.xml b/core/logic/pom.xml
index 60ba05f..7ce109f 100644
--- a/core/logic/pom.xml
+++ b/core/logic/pom.xml
@@ -153,6 +153,13 @@ under the License.
         <filtering>true</filtering>
       </testResource>
       <testResource>
+        <directory>${basedir}/../persistence-jpa/src/main/resources</directory>
+        <includes>
+          <include>persistence.properties</include>
+        </includes>
+        <filtering>true</filtering>
+      </testResource>
+      <testResource>
         <directory>${basedir}/../persistence-jpa/src/test/resources</directory>
         <filtering>true</filtering>
       </testResource>
@@ -161,6 +168,21 @@ under the License.
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <inherited>true</inherited>
+        <executions>
+          <execution>
+            <id>set-bundles</id>
+            <phase>process-test-resources</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-checkstyle-plugin</artifactId>
       </plugin>
     </plugins>

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
index 05db8b5..38927ce 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
@@ -55,7 +55,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.interceptor.TransactionInterceptor;
 
 /**
  * Note that this controller does not extend {@link AbstractTransactionalLogic}, hence does not provide any
@@ -96,7 +95,7 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectMod>
     }
 
     @PreAuthorize("isAuthenticated()")
-    @Transactional(readOnly = true, rollbackFor = { Throwable.class })
+    @Transactional(readOnly = true)
     @Override
     public int count(final List<String> realms) {
         return anyObjectDAO.count(getEffectiveRealms(SyncopeConstants.FULL_ADMIN_REALMS, realms));
@@ -133,7 +132,7 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectMod>
     }
 
     @PreAuthorize("hasRole('" + Entitlement.ANY_OBJECT_SEARCH + "')")
-    @Transactional(readOnly = true, rollbackFor = { Throwable.class })
+    @Transactional(readOnly = true)
     @Override
     public int searchCount(final SearchCond searchCondition, final List<String> realms) {
         return searchDAO.count(
@@ -142,7 +141,7 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectMod>
     }
 
     @PreAuthorize("hasRole('" + Entitlement.ANY_OBJECT_SEARCH + "')")
-    @Transactional(readOnly = true, rollbackFor = { Throwable.class })
+    @Transactional(readOnly = true)
     @Override
     public List<AnyObjectTO> search(final SearchCond searchCondition, final int page, final int size,
             final List<OrderByClause> orderBy, final List<String> realms, final boolean details) {
@@ -239,29 +238,26 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectMod>
     }
 
     @PreAuthorize("hasRole('" + Entitlement.ANY_OBJECT_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
     public AnyObjectTO unlink(final Long anyObjectKey, final Collection<String> resources) {
         AnyObjectMod anyObjectMod = new AnyObjectMod();
         anyObjectMod.setKey(anyObjectKey);
         anyObjectMod.getResourcesToRemove().addAll(resources);
-        final Long updatedResult = provisioningManager.unlink(anyObjectMod);
 
-        return binder.getAnyObjectTO(updatedResult);
+        return binder.getAnyObjectTO(provisioningManager.unlink(anyObjectMod));
     }
 
     @PreAuthorize("hasRole('" + Entitlement.ANY_OBJECT_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
     public AnyObjectTO link(final Long anyObjectKey, final Collection<String> resources) {
         AnyObjectMod anyObjectMod = new AnyObjectMod();
         anyObjectMod.setKey(anyObjectKey);
         anyObjectMod.getResourcesToAdd().addAll(resources);
+
         return binder.getAnyObjectTO(provisioningManager.link(anyObjectMod));
     }
 
     @PreAuthorize("hasRole('" + Entitlement.ANY_OBJECT_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
     public AnyObjectTO unassign(final Long anyObjectKey, final Collection<String> resources) {
         AnyObjectMod anyObjectMod = new AnyObjectMod();
@@ -271,44 +267,41 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectMod>
     }
 
     @PreAuthorize("hasRole('" + Entitlement.ANY_OBJECT_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
-    public AnyObjectTO assign(final Long anyObjectKey, final Collection<String> resources,
-            final boolean changePwd, final String password) {
+    public AnyObjectTO assign(
+            final Long key,
+            final Collection<String> resources,
+            final boolean changepwd,
+            final String password) {
 
-        AnyObjectMod userMod = new AnyObjectMod();
-        userMod.setKey(anyObjectKey);
-        userMod.getResourcesToAdd().addAll(resources);
-        return update(userMod);
+        AnyObjectMod anyObjectMod = new AnyObjectMod();
+        anyObjectMod.setKey(key);
+        anyObjectMod.getResourcesToAdd().addAll(resources);
+
+        return update(anyObjectMod);
     }
 
     @PreAuthorize("hasRole('" + Entitlement.ANY_OBJECT_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
-    public AnyObjectTO deprovision(final Long anyObjectKey, final Collection<String> resources) {
-        AnyObject anyObject = anyObjectDAO.authFind(anyObjectKey);
+    public AnyObjectTO deprovision(final Long key, final Collection<String> resources) {
+        List<PropagationStatus> statuses = provisioningManager.deprovision(key, resources);
 
-        List<PropagationStatus> statuses = provisioningManager.deprovision(anyObjectKey, resources);
-
-        AnyObjectTO updatedTO = binder.getAnyObjectTO(anyObject, true);
+        AnyObjectTO updatedTO = binder.getAnyObjectTO(key);
         updatedTO.getPropagationStatusTOs().addAll(statuses);
         return updatedTO;
     }
 
     @PreAuthorize("hasRole('" + Entitlement.ANY_OBJECT_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
-    public AnyObjectTO provision(final Long anyObjectKey, final Collection<String> resources,
-            final boolean changePwd, final String password) {
-
-        AnyObjectTO original = binder.getAnyObjectTO(anyObjectKey);
+    public AnyObjectTO provision(
+            final Long key,
+            final Collection<String> resources,
+            final boolean changePwd,
+            final String password) {
 
-        //trick: assign and retrieve propagation statuses ...
-        original.getPropagationStatusTOs().addAll(
-                assign(anyObjectKey, resources, changePwd, password).getPropagationStatusTOs());
+        AnyObjectTO original = binder.getAnyObjectTO(key);
+        original.getPropagationStatusTOs().addAll(provisioningManager.provision(key, resources));
 
-        // .... rollback.
-        TransactionInterceptor.currentTransactionStatus().setRollbackOnly();
         return original;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
index 7d28c88..1598498 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
@@ -23,6 +23,7 @@ import java.lang.reflect.Method;
 import org.apache.syncope.common.lib.to.AttrTO;
 import org.apache.syncope.common.lib.to.ConfTO;
 import org.apache.syncope.common.lib.types.Entitlement;
+import org.apache.syncope.core.misc.security.AuthContextUtils;
 import org.apache.syncope.core.persistence.api.content.ContentExporter;
 import org.apache.syncope.core.persistence.api.dao.ConfDAO;
 import org.apache.syncope.core.persistence.api.dao.NotFoundException;
@@ -97,7 +98,7 @@ public class ConfigurationLogic extends AbstractTransactionalLogic<ConfTO> {
     @Transactional(readOnly = true)
     public void export(final OutputStream os) {
         try {
-            exporter.export(os, uwfAdapter.getPrefix(), gwfAdapter.getPrefix());
+            exporter.export(AuthContextUtils.getDomain(), os, uwfAdapter.getPrefix(), gwfAdapter.getPrefix());
             LOG.debug("Database content successfully exported");
         } catch (Exception e) {
             LOG.error("While exporting database content", e);

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
index f476210..33b0447 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
@@ -56,7 +56,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.interceptor.TransactionInterceptor;
 
 /**
  * Note that this controller does not extend {@link AbstractTransactionalLogic}, hence does not provide any
@@ -114,7 +113,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupMod> {
     }
 
     @PreAuthorize("isAuthenticated()")
-    @Transactional(readOnly = true, rollbackFor = { Throwable.class })
+    @Transactional(readOnly = true)
     @Override
     public int count(final List<String> realms) {
         return groupDAO.count(getEffectiveRealms(SyncopeConstants.FULL_ADMIN_REALMS, realms));
@@ -140,7 +139,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupMod> {
     }
 
     @PreAuthorize("hasRole('" + Entitlement.GROUP_SEARCH + "')")
-    @Transactional(readOnly = true, rollbackFor = { Throwable.class })
+    @Transactional(readOnly = true)
     @Override
     public int searchCount(final SearchCond searchCondition, final List<String> realms) {
         return searchDAO.count(
@@ -149,7 +148,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupMod> {
     }
 
     @PreAuthorize("hasRole('" + Entitlement.GROUP_SEARCH + "')")
-    @Transactional(readOnly = true, rollbackFor = { Throwable.class })
+    @Transactional(readOnly = true)
     @Override
     public List<GroupTO> search(final SearchCond searchCondition, final int page, final int size,
             final List<OrderByClause> orderBy, final List<String> realms, final boolean details) {
@@ -256,75 +255,70 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupMod> {
     }
 
     @PreAuthorize("hasRole('" + Entitlement.GROUP_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
     public GroupTO unlink(final Long groupKey, final Collection<String> resources) {
-        final GroupMod groupMod = new GroupMod();
+        GroupMod groupMod = new GroupMod();
         groupMod.setKey(groupKey);
         groupMod.getResourcesToRemove().addAll(resources);
-        final Long updatedResult = provisioningManager.unlink(groupMod);
 
-        return binder.getGroupTO(updatedResult);
+        return binder.getGroupTO(provisioningManager.unlink(groupMod));
     }
 
     @PreAuthorize("hasRole('" + Entitlement.GROUP_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
     public GroupTO link(final Long groupKey, final Collection<String> resources) {
-        final GroupMod groupMod = new GroupMod();
+        GroupMod groupMod = new GroupMod();
         groupMod.setKey(groupKey);
         groupMod.getResourcesToAdd().addAll(resources);
+
         return binder.getGroupTO(provisioningManager.link(groupMod));
     }
 
     @PreAuthorize("hasRole('" + Entitlement.GROUP_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
     public GroupTO unassign(final Long groupKey, final Collection<String> resources) {
-        final GroupMod groupMod = new GroupMod();
+        GroupMod groupMod = new GroupMod();
         groupMod.setKey(groupKey);
         groupMod.getResourcesToRemove().addAll(resources);
         return update(groupMod);
     }
 
     @PreAuthorize("hasRole('" + Entitlement.GROUP_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
     public GroupTO assign(
-            final Long groupKey, final Collection<String> resources, final boolean changePwd, final String password) {
+            final Long key,
+            final Collection<String> resources,
+            final boolean changepwd,
+            final String password) {
 
-        final GroupMod userMod = new GroupMod();
-        userMod.setKey(groupKey);
-        userMod.getResourcesToAdd().addAll(resources);
-        return update(userMod);
+        GroupMod groupMod = new GroupMod();
+        groupMod.setKey(key);
+        groupMod.getResourcesToAdd().addAll(resources);
+
+        return update(groupMod);
     }
 
     @PreAuthorize("hasRole('" + Entitlement.GROUP_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
-    public GroupTO deprovision(final Long groupKey, final Collection<String> resources) {
-        final Group group = groupDAO.authFind(groupKey);
-
-        List<PropagationStatus> statuses = provisioningManager.deprovision(groupKey, resources);
+    public GroupTO deprovision(final Long key, final Collection<String> resources) {
+        List<PropagationStatus> statuses = provisioningManager.deprovision(key, resources);
 
-        GroupTO updatedTO = binder.getGroupTO(group, true);
+        GroupTO updatedTO = binder.getGroupTO(key);
         updatedTO.getPropagationStatusTOs().addAll(statuses);
         return updatedTO;
     }
 
     @PreAuthorize("hasRole('" + Entitlement.GROUP_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
     public GroupTO provision(
-            final Long groupKey, final Collection<String> resources, final boolean changePwd, final String password) {
-        GroupTO original = binder.getGroupTO(groupKey);
+            final Long key,
+            final Collection<String> resources,
+            final boolean changePwd,
+            final String password) {
 
-        //trick: assign and retrieve propagation statuses ...
-        original.getPropagationStatusTOs().addAll(
-                assign(groupKey, resources, changePwd, password).getPropagationStatusTOs());
+        GroupTO original = binder.getGroupTO(key);
+        original.getPropagationStatusTOs().addAll(provisioningManager.provision(key, resources));
 
-        // .... rollback.
-        TransactionInterceptor.currentTransactionStatus().setRollbackOnly();
         return original;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
index 4b5aac8..d407dba 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
@@ -46,6 +46,7 @@ import org.apache.syncope.common.lib.types.ResourceOperation;
 import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.syncope.common.lib.types.UnmatchingRule;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.lib.types.AuditElements;
 import org.apache.syncope.common.lib.types.Entitlement;
 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
 import org.apache.syncope.core.persistence.api.dao.LoggerDAO;
@@ -55,8 +56,9 @@ import org.apache.syncope.core.persistence.api.entity.EntityFactory;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.Logger;
 import org.apache.syncope.core.persistence.api.entity.task.SchedTask;
-import org.apache.syncope.core.persistence.api.entity.task.SyncTask;
 import org.apache.syncope.core.misc.spring.BeanUtils;
+import org.apache.syncope.core.provisioning.java.sync.PushJobDelegate;
+import org.apache.syncope.core.provisioning.java.sync.SyncJobDelegate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.Resource;
 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
@@ -255,10 +257,10 @@ public class LoggerLogic extends AbstractTransactionalLogic<LoggerTO> {
                 }
             }
 
-            //SYNCOPE-608
+            // SYNCOPE-608
             EventCategoryTO authenticationControllerEvents = new EventCategoryTO();
-            authenticationControllerEvents.setCategory("AuthenticationController");
-            authenticationControllerEvents.getEvents().add("login");
+            authenticationControllerEvents.setCategory(AuditElements.AUTHENTICATION_CATEGORY);
+            authenticationControllerEvents.getEvents().add(AuditElements.LOGIN_EVENT);
             events.add(authenticationControllerEvents);
 
             events.add(new EventCategoryTO(EventCategoryType.PROPAGATION));
@@ -305,15 +307,17 @@ public class LoggerLogic extends AbstractTransactionalLogic<LoggerTO> {
 
             for (SchedTask task : taskDAO.<SchedTask>findAll(TaskType.SCHEDULED)) {
                 EventCategoryTO eventCategoryTO = new EventCategoryTO(EventCategoryType.TASK);
-                eventCategoryTO.setCategory(Class.forName(task.getJobClassName()).getSimpleName());
+                eventCategoryTO.setCategory(Class.forName(task.getJobDelegateClassName()).getSimpleName());
                 events.add(eventCategoryTO);
             }
 
-            for (SyncTask task : taskDAO.<SyncTask>findAll(TaskType.SYNCHRONIZATION)) {
-                EventCategoryTO eventCategoryTO = new EventCategoryTO(EventCategoryType.TASK);
-                eventCategoryTO.setCategory(Class.forName(task.getJobClassName()).getSimpleName());
-                events.add(eventCategoryTO);
-            }
+            EventCategoryTO eventCategoryTO = new EventCategoryTO(EventCategoryType.TASK);
+            eventCategoryTO.setCategory(SyncJobDelegate.class.getSimpleName());
+            events.add(eventCategoryTO);
+
+            eventCategoryTO = new EventCategoryTO(EventCategoryType.TASK);
+            eventCategoryTO.setCategory(PushJobDelegate.class.getSimpleName());
+            events.add(eventCategoryTO);
         } catch (Exception e) {
             LOG.error("Failure retrieving audit/notification events", e);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
index bc8fb0f..8dd20a8 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
@@ -131,7 +131,7 @@ public class SyncopeLogic extends AbstractLogic<SyncopeTO> {
         syncopeTO.getReportlets().addAll(
                 classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.REPORTLET));
         syncopeTO.getTaskJobs().addAll(
-                classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.TASKJOB));
+                classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.TASKJOBDELEGATE));
         syncopeTO.getPropagationActions().addAll(
                 classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.PROPAGATION_ACTIONS));
         syncopeTO.getSyncActions().addAll(

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
index 82dc8d1..9c119f3 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
@@ -22,6 +22,7 @@ import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.Transformer;
 import org.apache.commons.lang3.ArrayUtils;
@@ -51,15 +52,15 @@ import org.apache.syncope.core.persistence.api.entity.task.TaskUtils;
 import org.apache.syncope.core.persistence.api.entity.task.TaskUtilsFactory;
 import org.apache.syncope.core.provisioning.api.data.TaskDataBinder;
 import org.apache.syncope.core.provisioning.api.job.JobNamer;
-import org.apache.syncope.core.provisioning.api.job.TaskJob;
 import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor;
 import org.apache.syncope.core.provisioning.api.job.JobInstanceLoader;
-import org.apache.syncope.core.logic.notification.NotificationJob;
+import org.apache.syncope.core.logic.notification.NotificationJobDelegate;
+import org.apache.syncope.core.persistence.api.dao.ConfDAO;
+import org.apache.syncope.core.provisioning.java.job.TaskJob;
 import org.quartz.JobDataMap;
 import org.quartz.JobKey;
 import org.quartz.Scheduler;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.quartz.SchedulerFactoryBean;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Component;
 
@@ -73,21 +74,21 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
     private TaskExecDAO taskExecDAO;
 
     @Autowired
+    private ConfDAO confDAO;
+
+    @Autowired
     private TaskDataBinder binder;
 
     @Autowired
     private PropagationTaskExecutor taskExecutor;
 
     @Autowired
-    private NotificationJob notificationJob;
+    private NotificationJobDelegate notificationJobDelegate;
 
     @Autowired
     private JobInstanceLoader jobInstanceLoader;
 
     @Autowired
-    private SchedulerFactoryBean scheduler;
-
-    @Autowired
     private TaskUtilsFactory taskUtilsFactory;
 
     @PreAuthorize("hasRole('" + Entitlement.TASK_CREATE + "')")
@@ -98,7 +99,9 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
         task = taskDAO.save(task);
 
         try {
-            jobInstanceLoader.registerJob(task, task.getJobClassName(), task.getCronExpression());
+            jobInstanceLoader.registerJob(
+                    task,
+                    confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
         } catch (Exception e) {
             LOG.error("While registering quartz job for task " + task.getKey(), e);
 
@@ -128,7 +131,9 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
         task = taskDAO.save(task);
 
         try {
-            jobInstanceLoader.registerJob(task, task.getJobClassName(), task.getCronExpression());
+            jobInstanceLoader.registerJob(
+                    task,
+                    confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
         } catch (Exception e) {
             LOG.error("While registering quartz job for task " + task.getKey(), e);
 
@@ -163,28 +168,28 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
     }
 
     @PreAuthorize("hasRole('" + Entitlement.TASK_READ + "')")
-    public <T extends AbstractTaskTO> T read(final Long taskId) {
-        Task task = taskDAO.find(taskId);
+    public <T extends AbstractTaskTO> T read(final Long taskKey) {
+        Task task = taskDAO.find(taskKey);
         if (task == null) {
-            throw new NotFoundException("Task " + taskId);
+            throw new NotFoundException("Task " + taskKey);
         }
         return binder.getTaskTO(task, taskUtilsFactory.getInstance(task));
     }
 
     @PreAuthorize("hasRole('" + Entitlement.TASK_READ + "')")
-    public TaskExecTO readExecution(final Long executionId) {
-        TaskExec taskExec = taskExecDAO.find(executionId);
+    public TaskExecTO readExecution(final Long execKey) {
+        TaskExec taskExec = taskExecDAO.find(execKey);
         if (taskExec == null) {
-            throw new NotFoundException("Task execution " + executionId);
+            throw new NotFoundException("Task execution " + execKey);
         }
         return binder.getTaskExecTO(taskExec);
     }
 
     @PreAuthorize("hasRole('" + Entitlement.TASK_EXECUTE + "')")
-    public TaskExecTO execute(final Long taskId, final boolean dryRun) {
-        Task task = taskDAO.find(taskId);
+    public TaskExecTO execute(final Long taskKey, final boolean dryRun) {
+        Task task = taskDAO.find(taskKey);
         if (task == null) {
-            throw new NotFoundException("Task " + taskId);
+            throw new NotFoundException("Task " + taskKey);
         }
         TaskUtils taskUtils = taskUtilsFactory.getInstance(task);
 
@@ -196,7 +201,7 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
                 break;
 
             case NOTIFICATION:
-                final TaskExec notExec = notificationJob.executeSingle((NotificationTask) task);
+                final TaskExec notExec = notificationJobDelegate.executeSingle((NotificationTask) task);
                 result = binder.getTaskExecTO(notExec);
                 break;
 
@@ -204,15 +209,14 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
             case SYNCHRONIZATION:
             case PUSH:
                 try {
-                    jobInstanceLoader.registerJob(task,
-                            ((SchedTask) task).getJobClassName(),
-                            ((SchedTask) task).getCronExpression());
-
-                    JobDataMap map = new JobDataMap();
-                    map.put(TaskJob.DRY_RUN_JOBDETAIL_KEY, dryRun);
+                    Map<String, Object> jobDataMap = jobInstanceLoader.registerJob(
+                            (SchedTask) task,
+                            confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
 
+                    jobDataMap.put(TaskJob.DRY_RUN_JOBDETAIL_KEY, dryRun);
                     scheduler.getScheduler().triggerJob(
-                            new JobKey(JobNamer.getJobName(task), Scheduler.DEFAULT_GROUP), map);
+                            new JobKey(JobNamer.getJobName(task), Scheduler.DEFAULT_GROUP),
+                            new JobDataMap(jobDataMap));
                 } catch (Exception e) {
                     LOG.error("While executing task {}", task, e);
 
@@ -222,7 +226,7 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
                 }
 
                 result = new TaskExecTO();
-                result.setTask(taskId);
+                result.setTask(taskKey);
                 result.setStartDate(new Date());
                 result.setStatus("JOB_FIRED");
                 result.setMessage("Job fired; waiting for results...");
@@ -235,10 +239,10 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
     }
 
     @PreAuthorize("hasRole('" + Entitlement.TASK_READ + "')")
-    public TaskExecTO report(final Long executionId, final PropagationTaskExecStatus status, final String message) {
-        TaskExec exec = taskExecDAO.find(executionId);
+    public TaskExecTO report(final Long execKey, final PropagationTaskExecStatus status, final String message) {
+        TaskExec exec = taskExecDAO.find(execKey);
         if (exec == null) {
-            throw new NotFoundException("Task execution " + executionId);
+            throw new NotFoundException("Task execution " + execKey);
         }
 
         SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidPropagationTaskExecReport);
@@ -277,10 +281,10 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
     }
 
     @PreAuthorize("hasRole('" + Entitlement.TASK_DELETE + "')")
-    public <T extends AbstractTaskTO> T delete(final Long taskId) {
-        Task task = taskDAO.find(taskId);
+    public <T extends AbstractTaskTO> T delete(final Long taskKey) {
+        Task task = taskDAO.find(taskKey);
         if (task == null) {
-            throw new NotFoundException("Task " + taskId);
+            throw new NotFoundException("Task " + taskKey);
         }
         TaskUtils taskUtils = taskUtilsFactory.getInstance(task);
 
@@ -298,10 +302,10 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
     }
 
     @PreAuthorize("hasRole('" + Entitlement.TASK_DELETE + "')")
-    public TaskExecTO deleteExecution(final Long executionId) {
-        TaskExec taskExec = taskExecDAO.find(executionId);
+    public TaskExecTO deleteExecution(final Long execKey) {
+        TaskExec taskExec = taskExecDAO.find(execKey);
         if (taskExec == null) {
-            throw new NotFoundException("Task execution " + executionId);
+            throw new NotFoundException("Task execution " + execKey);
         }
 
         TaskExecTO taskExecutionToDelete = binder.getTaskExecTO(taskExec);

http://git-wip-us.apache.org/repos/asf/syncope/blob/6dfedd8f/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
index 3aec28c..28e7401 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
@@ -60,7 +60,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.interceptor.TransactionInterceptor;
 
 /**
  * Note that this controller does not extend {@link AbstractTransactionalLogic}, hence does not provide any
@@ -100,17 +99,19 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserMod> {
     protected SyncopeLogic syncopeLogic;
 
     @PreAuthorize("hasRole('" + Entitlement.USER_READ + "')")
+    @Transactional(readOnly = true)
     public String getUsername(final Long key) {
         return binder.getUserTO(key).getUsername();
     }
 
     @PreAuthorize("hasRole('" + Entitlement.USER_READ + "')")
+    @Transactional(readOnly = true)
     public Long getKey(final String username) {
         return binder.getUserTO(username).getKey();
     }
 
     @PreAuthorize("hasRole('" + Entitlement.USER_LIST + "')")
-    @Transactional(readOnly = true, rollbackFor = { Throwable.class })
+    @Transactional(readOnly = true)
     @Override
     public int count(final List<String> realms) {
         return userDAO.count(
@@ -118,7 +119,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserMod> {
     }
 
     @PreAuthorize("hasRole('" + Entitlement.USER_LIST + "')")
-    @Transactional(readOnly = true, rollbackFor = { Throwable.class })
+    @Transactional(readOnly = true)
     @Override
     public List<UserTO> list(
             final int page, final int size, final List<OrderByClause> orderBy,
@@ -152,7 +153,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserMod> {
     }
 
     @PreAuthorize("hasRole('" + Entitlement.USER_SEARCH + "')")
-    @Transactional(readOnly = true, rollbackFor = { Throwable.class })
+    @Transactional(readOnly = true)
     @Override
     public int searchCount(final SearchCond searchCondition, final List<String> realms) {
         return searchDAO.count(
@@ -161,7 +162,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserMod> {
     }
 
     @PreAuthorize("hasRole('" + Entitlement.USER_SEARCH + "')")
-    @Transactional(readOnly = true, rollbackFor = { Throwable.class })
+    @Transactional(readOnly = true)
     @Override
     public List<UserTO> search(final SearchCond searchCondition, final int page, final int size,
             final List<OrderByClause> orderBy, final List<String> realms, final boolean details) {
@@ -242,22 +243,21 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserMod> {
         return updatedTO;
     }
 
-    protected Map.Entry<Long, List<PropagationStatus>> setStatusOnWfAdapter(final User user,
-            final StatusMod statusMod) {
+    protected Map.Entry<Long, List<PropagationStatus>> setStatusOnWfAdapter(final StatusMod statusMod) {
         Map.Entry<Long, List<PropagationStatus>> updated;
 
         switch (statusMod.getType()) {
             case SUSPEND:
-                updated = provisioningManager.suspend(user, statusMod);
+                updated = provisioningManager.suspend(statusMod);
                 break;
 
             case REACTIVATE:
-                updated = provisioningManager.reactivate(user, statusMod);
+                updated = provisioningManager.reactivate(statusMod);
                 break;
 
             case ACTIVATE:
             default:
-                updated = provisioningManager.activate(user, statusMod);
+                updated = provisioningManager.activate(statusMod);
                 break;
 
         }
@@ -266,11 +266,8 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserMod> {
     }
 
     @PreAuthorize("hasRole('" + Entitlement.USER_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     public UserTO status(final StatusMod statusMod) {
-        User user = userDAO.authFind(statusMod.getKey());
-
-        Map.Entry<Long, List<PropagationStatus>> updated = setStatusOnWfAdapter(user, statusMod);
+        Map.Entry<Long, List<PropagationStatus>> updated = setStatusOnWfAdapter(statusMod);
         final UserTO savedTO = binder.getUserTO(updated.getKey());
         savedTO.getPropagationStatusTOs().addAll(updated.getValue());
         return savedTO;
@@ -304,7 +301,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserMod> {
         if (user == null) {
             throw new NotFoundException("User with token " + token);
         }
-        provisioningManager.confirmPasswordReset(user, token, password);
+        provisioningManager.confirmPasswordReset(user.getKey(), token, password);
     }
 
     @PreAuthorize("isAuthenticated() and not(hasRole('" + Entitlement.ANONYMOUS + "'))")
@@ -332,9 +329,8 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserMod> {
 
         List<PropagationStatus> statuses = provisioningManager.delete(key);
 
-        final UserTO deletedTO;
-        User deleted = userDAO.find(key);
-        if (deleted == null) {
+        UserTO deletedTO;
+        if (userDAO.find(key) == null) {
             deletedTO = new UserTO();
             deletedTO.setKey(key);
         } else {
@@ -346,39 +342,35 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserMod> {
     }
 
     @PreAuthorize("hasRole('" + Entitlement.USER_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
     public UserTO unlink(final Long key, final Collection<String> resources) {
-        final UserMod userMod = new UserMod();
+        UserMod userMod = new UserMod();
         userMod.setKey(key);
         userMod.getResourcesToRemove().addAll(resources);
-        Long updatedKey = provisioningManager.unlink(userMod);
 
-        return binder.getUserTO(updatedKey);
+        return binder.getUserTO(provisioningManager.unlink(userMod));
     }
 
     @PreAuthorize("hasRole('" + Entitlement.USER_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
     public UserTO link(final Long key, final Collection<String> resources) {
-        final UserMod userMod = new UserMod();
+        UserMod userMod = new UserMod();
         userMod.setKey(key);
         userMod.getResourcesToAdd().addAll(resources);
+
         return binder.getUserTO(provisioningManager.link(userMod));
     }
 
     @PreAuthorize("hasRole('" + Entitlement.USER_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
     public UserTO unassign(final Long key, final Collection<String> resources) {
-        final UserMod userMod = new UserMod();
+        UserMod userMod = new UserMod();
         userMod.setKey(key);
         userMod.getResourcesToRemove().addAll(resources);
         return update(userMod);
     }
 
     @PreAuthorize("hasRole('" + Entitlement.USER_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
     public UserTO assign(
             final Long key,
@@ -386,7 +378,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserMod> {
             final boolean changepwd,
             final String password) {
 
-        final UserMod userMod = new UserMod();
+        UserMod userMod = new UserMod();
         userMod.setKey(key);
         userMod.getResourcesToAdd().addAll(resources);
 
@@ -402,20 +394,16 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserMod> {
     }
 
     @PreAuthorize("hasRole('" + Entitlement.USER_UPDATE + "')")
-    @Transactional(rollbackFor = { Throwable.class })
     @Override
     public UserTO deprovision(final Long key, final Collection<String> resources) {
-        User user = userDAO.authFind(key);
-
         List<PropagationStatus> statuses = provisioningManager.deprovision(key, resources);
 
-        final UserTO updatedUserTO = binder.getUserTO(user, true);
-        updatedUserTO.getPropagationStatusTOs().addAll(statuses);
-        return updatedUserTO;
+        UserTO updatedTO = binder.getUserTO(key);
+        updatedTO.getPropagationStatusTOs().addAll(statuses);
+        return updatedTO;
     }
 
     @PreAuthorize("hasRole('" + Entitlement.USER_UPDATE + "')")
-    @Transactional(readOnly = true)
     @Override
     public UserTO provision(
             final Long key,
@@ -423,14 +411,9 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserMod> {
             final boolean changePwd,
             final String password) {
 
-        final UserTO original = binder.getUserTO(key);
-
-        //trick: assign and retrieve propagation statuses ...
-        original.getPropagationStatusTOs().addAll(
-                assign(key, resources, changePwd, password).getPropagationStatusTOs());
+        UserTO original = binder.getUserTO(key);
+        original.getPropagationStatusTOs().addAll(provisioningManager.provision(key, changePwd, password, resources));
 
-        // .... rollback.
-        TransactionInterceptor.currentTransactionStatus().setRollbackOnly();
         return original;
     }