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 2016/04/19 15:02:04 UTC

[17/24] syncope git commit: [SYNCOPE-822] UUID keys

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java
index e754798..77fd1c9 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java
@@ -60,7 +60,7 @@ public class UserTO extends AnyTO implements RelatableTO, GroupableTO {
 
     private Integer failedLogins;
 
-    private Long securityQuestion;
+    private String securityQuestion;
 
     private String securityAnswer;
 
@@ -70,7 +70,7 @@ public class UserTO extends AnyTO implements RelatableTO, GroupableTO {
 
     private final List<MembershipTO> memberships = new ArrayList<>();
 
-    private final List<Long> dynGroups = new ArrayList<>();
+    private final List<String> dynGroups = new ArrayList<>();
 
     @Override
     public String getType() {
@@ -156,11 +156,11 @@ public class UserTO extends AnyTO implements RelatableTO, GroupableTO {
         this.lastLoginDate = lastLoginDate;
     }
 
-    public Long getSecurityQuestion() {
+    public String getSecurityQuestion() {
         return securityQuestion;
     }
 
-    public void setSecurityQuestion(final Long securityQuestion) {
+    public void setSecurityQuestion(final String securityQuestion) {
         this.securityQuestion = securityQuestion;
     }
 
@@ -190,8 +190,8 @@ public class UserTO extends AnyTO implements RelatableTO, GroupableTO {
 
     @JsonIgnore
     @Override
-    public Map<Pair<String, Long>, RelationshipTO> getRelationshipMap() {
-        Map<Pair<String, Long>, RelationshipTO> result = new HashMap<>(getRelationships().size());
+    public Map<Pair<String, String>, RelationshipTO> getRelationshipMap() {
+        Map<Pair<String, String>, RelationshipTO> result = new HashMap<>(getRelationships().size());
         for (RelationshipTO relationship : getRelationships()) {
             result.put(Pair.of(relationship.getType(), relationship.getRightKey()), relationship);
         }
@@ -208,8 +208,8 @@ public class UserTO extends AnyTO implements RelatableTO, GroupableTO {
 
     @JsonIgnore
     @Override
-    public Map<Long, MembershipTO> getMembershipMap() {
-        Map<Long, MembershipTO> result = new HashMap<>(getMemberships().size());
+    public Map<String, MembershipTO> getMembershipMap() {
+        Map<String, MembershipTO> result = new HashMap<>(getMemberships().size());
         for (MembershipTO membership : getMemberships()) {
             result.put(membership.getRightKey(), membership);
         }
@@ -222,7 +222,7 @@ public class UserTO extends AnyTO implements RelatableTO, GroupableTO {
     @XmlElement(name = "role")
     @JsonProperty("dynGroups")
     @Override
-    public List<Long> getDynGroups() {
+    public List<String> getDynGroups() {
         return dynGroups;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/VirSchemaTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/VirSchemaTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/VirSchemaTO.java
index 1d0534d..2d0710a 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/VirSchemaTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/VirSchemaTO.java
@@ -29,7 +29,7 @@ public class VirSchemaTO extends AbstractSchemaTO {
 
     private String resource;
 
-    private long provision;
+    private String provision;
 
     private String extAttrName;
 
@@ -49,11 +49,11 @@ public class VirSchemaTO extends AbstractSchemaTO {
         this.resource = resource;
     }
 
-    public long getProvision() {
+    public String getProvision() {
         return provision;
     }
 
-    public void setProvision(final long provision) {
+    public void setProvision(final String provision) {
         this.provision = provision;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormTO.java
index 43e6d2c..97be831 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormTO.java
@@ -38,7 +38,7 @@ public class WorkflowFormTO extends AbstractBaseBean {
 
     private static final long serialVersionUID = -7044543391316529128L;
 
-    private long userKey;
+    private String userKey;
 
     private String taskId;
 
@@ -54,11 +54,11 @@ public class WorkflowFormTO extends AbstractBaseBean {
 
     private final List<WorkflowFormPropertyTO> properties = new ArrayList<>();
 
-    public long getUserKey() {
+    public String getUserKey() {
         return userKey;
     }
 
-    public void setUserKey(final long userKey) {
+    public void setUserKey(final String userKey) {
         this.userKey = userKey;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java
index 951a4ca..556a25f 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java
@@ -30,6 +30,7 @@ public enum ClientExceptionType {
     DataIntegrityViolation(Response.Status.CONFLICT),
     EntityExists(Response.Status.CONFLICT),
     GenericPersistence(Response.Status.BAD_REQUEST),
+    HasChildren(Response.Status.BAD_REQUEST),
     InvalidSecurityAnswer(Response.Status.BAD_REQUEST),
     InvalidEntity(Response.Status.BAD_REQUEST),
     InvalidLogger(Response.Status.BAD_REQUEST),

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/test/java/org/apache/syncope/common/lib/JSONTest.java
----------------------------------------------------------------------
diff --git a/common/lib/src/test/java/org/apache/syncope/common/lib/JSONTest.java b/common/lib/src/test/java/org/apache/syncope/common/lib/JSONTest.java
index 4eeaf8f..a0ef746 100644
--- a/common/lib/src/test/java/org/apache/syncope/common/lib/JSONTest.java
+++ b/common/lib/src/test/java/org/apache/syncope/common/lib/JSONTest.java
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertNotNull;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import java.io.IOException;
 import java.io.StringWriter;
+import java.util.UUID;
 import org.apache.syncope.common.lib.patch.PasswordPatch;
 import org.apache.syncope.common.lib.patch.StringPatchItem;
 import org.apache.syncope.common.lib.patch.StringReplacePatchItem;
@@ -70,7 +71,7 @@ public class JSONTest {
     @Test
     public void patch() throws IOException {
         UserPatch patch = new UserPatch();
-        patch.setKey(12L);
+        patch.setKey(UUID.randomUUID().toString());
         patch.setUsername(new StringReplacePatchItem.Builder().value("newusername").build());
         assertNotNull(patch.getUsername().getValue());
         patch.setPassword(new PasswordPatch.Builder().

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/RESTHeaders.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/RESTHeaders.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/RESTHeaders.java
index 0b69531..9312543 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/RESTHeaders.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/RESTHeaders.java
@@ -25,10 +25,6 @@ public final class RESTHeaders {
 
     public static final String DOMAIN = "X-Syncope-Domain";
 
-    public static final String USER_KEY = "X-Syncope-User-Key";
-
-    public static final String USERNAME = "X-Syncope-Username";
-
     public static final String OWNED_ENTITLEMENTS = "X-Syncope-Entitlements";
 
     public static final String RESOURCE_KEY = "X-Syncope-Key";

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AbstractQuery.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AbstractQuery.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AbstractQuery.java
index eb37f52..73d0bb3 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AbstractQuery.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AbstractQuery.java
@@ -92,11 +92,11 @@ public abstract class AbstractQuery extends AbstractBaseBean {
         this.size = size;
     }
 
-    @QueryParam(JAXRSService.PARAM_ORDERBY)
     public String getOrderBy() {
         return orderBy;
     }
 
+    @QueryParam(JAXRSService.PARAM_ORDERBY)
     public void setOrderBy(final String orderBy) {
         this.orderBy = orderBy;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/BulkExecDeleteQuery.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/BulkExecDeleteQuery.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/BulkExecDeleteQuery.java
index 4030a15..10e36bc 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/BulkExecDeleteQuery.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/BulkExecDeleteQuery.java
@@ -32,7 +32,7 @@ public class BulkExecDeleteQuery extends AbstractBaseBean {
 
         private final BulkExecDeleteQuery instance = new BulkExecDeleteQuery();
 
-        public Builder key(final long key) {
+        public Builder key(final String key) {
             instance.setKey(key);
             return this;
         }
@@ -62,7 +62,7 @@ public class BulkExecDeleteQuery extends AbstractBaseBean {
         }
     }
 
-    private Long key;
+    private String key;
 
     private Date startedBefore;
 
@@ -72,13 +72,13 @@ public class BulkExecDeleteQuery extends AbstractBaseBean {
 
     private Date endedAfter;
 
-    public Long getKey() {
+    public String getKey() {
         return key;
     }
 
     @NotNull
     @PathParam("key")
-    public void setKey(final Long key) {
+    public void setKey(final String key) {
         this.key = key;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/ExecuteQuery.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/ExecuteQuery.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/ExecuteQuery.java
index c550e78..1b1f5ca 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/ExecuteQuery.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/ExecuteQuery.java
@@ -33,7 +33,7 @@ public class ExecuteQuery extends AbstractBaseBean {
 
         private final ExecuteQuery instance = new ExecuteQuery();
 
-        public Builder key(final long key) {
+        public Builder key(final String key) {
             instance.setKey(key);
             return this;
         }
@@ -53,19 +53,19 @@ public class ExecuteQuery extends AbstractBaseBean {
         }
     }
 
-    private Long key;
+    private String key;
 
     private Date startAt;
 
     private Boolean dryRun;
 
-    public Long getKey() {
+    public String getKey() {
         return key;
     }
 
     @NotNull
     @PathParam("key")
-    public void setKey(final Long key) {
+    public void setKey(final String key) {
         this.key = key;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskExecQuery.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskExecQuery.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskExecQuery.java
index 626b0bb..f7a9692 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskExecQuery.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskExecQuery.java
@@ -32,21 +32,21 @@ public class TaskExecQuery extends AbstractQuery {
             return new TaskExecQuery();
         }
 
-        public Builder key(final Long key) {
+        public Builder key(final String key) {
             getInstance().setKey(key);
             return this;
         }
     }
 
-    private Long key;
+    private String key;
 
-    public Long getKey() {
+    public String getKey() {
         return key;
     }
 
     @NotNull
     @PathParam("key")
-    public void setKey(final Long key) {
+    public void setKey(final String key) {
         this.key = key;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskQuery.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskQuery.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskQuery.java
index fb8b048..c869a15 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskQuery.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/TaskQuery.java
@@ -56,7 +56,7 @@ public class TaskQuery extends AbstractQuery {
             }
         }
 
-        public Builder notification(final Long notification) {
+        public Builder notification(final String notification) {
             switch (getInstance().getType()) {
                 case NOTIFICATION:
                     getInstance().setNotification(notification);
@@ -79,7 +79,7 @@ public class TaskQuery extends AbstractQuery {
             }
         }
 
-        public Builder anyTypeKey(final Long anyTypeKey) {
+        public Builder anyTypeKey(final String anyTypeKey) {
             switch (getInstance().getType()) {
                 case PROPAGATION:
                 case NOTIFICATION:
@@ -110,11 +110,11 @@ public class TaskQuery extends AbstractQuery {
 
     private String resource;
 
-    private Long notification;
+    private String notification;
 
     private AnyTypeKind anyTypeKind;
 
-    private Long anyTypeKey;
+    private String anyTypeKey;
 
     private Boolean details;
 
@@ -137,12 +137,12 @@ public class TaskQuery extends AbstractQuery {
         this.resource = resource;
     }
 
-    public Long getNotification() {
+    public String getNotification() {
         return notification;
     }
 
     @QueryParam(JAXRSService.PARAM_NOTIFICATION)
-    public void setNotification(final Long notification) {
+    public void setNotification(final String notification) {
         this.notification = notification;
     }
 
@@ -155,13 +155,13 @@ public class TaskQuery extends AbstractQuery {
         this.anyTypeKind = anyTypeKind;
     }
 
-    public Long getAnyTypeKey() {
+    public String getAnyTypeKey() {
         return anyTypeKey;
     }
 
     @Min(1)
     @QueryParam(JAXRSService.PARAM_ANYTYPE_KEY)
-    public void setAnyTypeKey(final Long anyTypeKey) {
+    public void setAnyTypeKey(final String anyTypeKey) {
         this.anyTypeKey = anyTypeKey;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/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 c0b520c..56d3bfd 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
@@ -55,7 +55,7 @@ public interface AnyService<TO extends AnyTO, P extends AnyPatch> extends JAXRSS
     @GET
     @Path("{key}/{schemaType}")
     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
-    Set<AttrTO> read(@NotNull @PathParam("key") Long key, @NotNull @PathParam("schemaType") SchemaType schemaType);
+    Set<AttrTO> read(@NotNull @PathParam("key") String key, @NotNull @PathParam("schemaType") SchemaType schemaType);
 
     /**
      * Reads the attribute, owned by the given any object, for the given schema type and schema.
@@ -69,7 +69,7 @@ public interface AnyService<TO extends AnyTO, P extends AnyPatch> extends JAXRSS
     @Path("{key}/{schemaType}/{schema}")
     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
     AttrTO read(
-            @NotNull @PathParam("key") Long key,
+            @NotNull @PathParam("key") String key,
             @NotNull @PathParam("schemaType") SchemaType schemaType,
             @NotNull @PathParam("schema") String schema);
 
@@ -82,7 +82,7 @@ public interface AnyService<TO extends AnyTO, P extends AnyPatch> extends JAXRSS
     @GET
     @Path("{key}")
     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
-    TO read(@NotNull @PathParam("key") Long key);
+    TO read(@NotNull @PathParam("key") String key);
 
     /**
      * Returns a paged list of any objects matching the given query.
@@ -133,7 +133,7 @@ public interface AnyService<TO extends AnyTO, P extends AnyPatch> extends JAXRSS
     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
     @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
     Response update(
-            @NotNull @PathParam("key") Long key,
+            @NotNull @PathParam("key") String key,
             @NotNull @PathParam("schemaType") SchemaType schemaType,
             @NotNull AttrTO attrTO);
 
@@ -162,7 +162,7 @@ public interface AnyService<TO extends AnyTO, P extends AnyPatch> extends JAXRSS
     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
     @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
     void delete(
-            @NotNull @PathParam("key") Long key,
+            @NotNull @PathParam("key") String key,
             @NotNull @PathParam("schemaType") SchemaType schemaType,
             @NotNull @PathParam("schema") String schema);
 
@@ -177,7 +177,7 @@ public interface AnyService<TO extends AnyTO, P extends AnyPatch> extends JAXRSS
     @Path("{key}")
     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
     @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
-    Response delete(@NotNull @PathParam("key") Long key);
+    Response delete(@NotNull @PathParam("key") String key);
 
     /**
      * Executes resource-related operations on given any object.

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorService.java
index 50778a8..d080648 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConnectorService.java
@@ -84,7 +84,7 @@ public interface ConnectorService extends JAXRSService {
     @GET
     @Path("{key}")
     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
-    ConnInstanceTO read(@NotNull @PathParam("key") Long key, @QueryParam("lang") String lang);
+    ConnInstanceTO read(@NotNull @PathParam("key") String key, @QueryParam("lang") String lang);
 
     /**
      * Returns connector instance for matching resource.
@@ -138,7 +138,7 @@ public interface ConnectorService extends JAXRSService {
      */
     @DELETE
     @Path("{key}")
-    void delete(@NotNull @PathParam("key") Long key);
+    void delete(@NotNull @PathParam("key") String key);
 
     /**
      * Checks whether the connection to resource could be established.

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/NotificationService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/NotificationService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/NotificationService.java
index c0ed504..3baf310 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/NotificationService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/NotificationService.java
@@ -50,7 +50,7 @@ public interface NotificationService extends JAXRSService {
     @GET
     @Path("{key}")
     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
-    NotificationTO read(@NotNull @PathParam("key") Long key);
+    NotificationTO read(@NotNull @PathParam("key") String key);
 
     /**
      * Returns a list of all notifications.
@@ -88,7 +88,7 @@ public interface NotificationService extends JAXRSService {
      */
     @DELETE
     @Path("{key}")
-    void delete(@NotNull @PathParam("key") Long key);
+    void delete(@NotNull @PathParam("key") String key);
 
     /**
      * Returns details about notification job.

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/PolicyService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/PolicyService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/PolicyService.java
index 073e5dd..2177d51 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/PolicyService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/PolicyService.java
@@ -50,7 +50,7 @@ public interface PolicyService extends JAXRSService {
     @GET
     @Path("{key}")
     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
-    <T extends AbstractPolicyTO> T read(@NotNull @PathParam("key") Long key);
+    <T extends AbstractPolicyTO> T read(@NotNull @PathParam("key") String key);
 
     /**
      * Returns a list of policies of the matching type.
@@ -90,6 +90,6 @@ public interface PolicyService extends JAXRSService {
      */
     @DELETE
     @Path("{key}")
-    void delete(@NotNull @PathParam("key") Long key);
+    void delete(@NotNull @PathParam("key") String key);
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RealmService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RealmService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RealmService.java
index 17259f2..75e7a1b 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RealmService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RealmService.java
@@ -81,9 +81,9 @@ public interface RealmService extends JAXRSService {
     void update(@NotNull RealmTO realmTO);
 
     /**
-     * Deletes the notification matching the given key.
+     * Deletes the realm under the given path.
      *
-     * @param fullPath key for notification to be deleted
+     * @param fullPath realm path
      */
     @DELETE
     @Path("{fullPath:.*}")

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReportService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReportService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReportService.java
index cd810e8..2fceb88 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReportService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReportService.java
@@ -58,7 +58,7 @@ public interface ReportService extends JAXRSService {
     @GET
     @Path("{key}")
     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
-    ReportTO read(@NotNull @PathParam("key") Long key);
+    ReportTO read(@NotNull @PathParam("key") String key);
 
     /**
      * Returns a list of all existing reports.
@@ -96,7 +96,7 @@ public interface ReportService extends JAXRSService {
      */
     @DELETE
     @Path("{key}")
-    void delete(@NotNull @PathParam("key") Long key);
+    void delete(@NotNull @PathParam("key") String key);
 
     /**
      * Returns the list of recently completed report executions, ordered by end date descendent.
@@ -116,7 +116,7 @@ public interface ReportService extends JAXRSService {
      */
     @DELETE
     @Path("executions/{executionKey}")
-    void deleteExecution(@NotNull @PathParam("executionKey") Long executionKey);
+    void deleteExecution(@NotNull @PathParam("executionKey") String executionKey);
 
     /**
      * Deletes the report executions belonging matching the given query.
@@ -151,7 +151,7 @@ public interface ReportService extends JAXRSService {
     @Path("executions/{executionKey}/stream")
     @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
     Response exportExecutionResult(
-            @NotNull @PathParam("executionKey") Long executionKey,
+            @NotNull @PathParam("executionKey") String executionKey,
             @QueryParam("format") ReportExecExportFormat fmt);
 
     /**
@@ -172,5 +172,5 @@ public interface ReportService extends JAXRSService {
      */
     @POST
     @Path("jobs/{key}")
-    void actionJob(@NotNull @PathParam("key") Long key, @QueryParam("action") JobAction action);
+    void actionJob(@NotNull @PathParam("key") String key, @QueryParam("action") JobAction action);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
index 2aeb6aa..6fa1e82 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
@@ -59,7 +59,7 @@ public interface ResourceService extends JAXRSService {
     ConnObjectTO readConnObject(
             @NotNull @PathParam("key") String key,
             @NotNull @PathParam("anyTypeKey") String anyTypeKey,
-            @NotNull @PathParam("anyKey") Long anyKey);
+            @NotNull @PathParam("anyKey") String anyKey);
 
     /**
      * Returns a paged list of connector objects from external resource, for the given type, matching

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SecurityQuestionService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SecurityQuestionService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SecurityQuestionService.java
index 546365e..08ebbfe 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SecurityQuestionService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SecurityQuestionService.java
@@ -56,7 +56,7 @@ public interface SecurityQuestionService extends JAXRSService {
     @GET
     @Path("{key}")
     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
-    SecurityQuestionTO read(@NotNull @PathParam("key") Long key);
+    SecurityQuestionTO read(@NotNull @PathParam("key") String key);
 
     /**
      * Creates a new security question.
@@ -85,7 +85,7 @@ public interface SecurityQuestionService extends JAXRSService {
      */
     @DELETE
     @Path("{key}")
-    void delete(@NotNull @PathParam("key") Long key);
+    void delete(@NotNull @PathParam("key") String key);
 
     /**
      * Ask for security question configured for the user matching the given username, if any.

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/TaskService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/TaskService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/TaskService.java
index 965c9c7..c1727d3 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/TaskService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/TaskService.java
@@ -65,7 +65,7 @@ public interface TaskService extends JAXRSService {
     @Path("{key}")
     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
     <T extends AbstractTaskTO> T read(
-            @NotNull @PathParam("key") Long key,
+            @NotNull @PathParam("key") String key,
             @QueryParam(JAXRSService.PARAM_DETAILS) @DefaultValue("true") boolean details);
 
     /**
@@ -106,7 +106,7 @@ public interface TaskService extends JAXRSService {
      */
     @DELETE
     @Path("{key}")
-    void delete(@NotNull @PathParam("key") Long key);
+    void delete(@NotNull @PathParam("key") String key);
 
     /**
      * Returns a paged list of task executions matching the given query.
@@ -137,7 +137,7 @@ public interface TaskService extends JAXRSService {
      */
     @DELETE
     @Path("executions/{executionKey}")
-    void deleteExecution(@NotNull @PathParam("executionKey") Long executionKey);
+    void deleteExecution(@NotNull @PathParam("executionKey") String executionKey);
 
     /**
      * Deletes the task executions belonging matching the given query.
@@ -191,5 +191,5 @@ public interface TaskService extends JAXRSService {
      */
     @POST
     @Path("jobs/{key}")
-    void actionJob(@NotNull @PathParam("key") Long key, @QueryParam("action") JobAction action);
+    void actionJob(@NotNull @PathParam("key") String key, @QueryParam("action") JobAction action);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserService.java
index df57bd5..d443e35 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserService.java
@@ -23,10 +23,8 @@ import javax.ws.rs.BeanParam;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DefaultValue;
 import javax.ws.rs.GET;
-import javax.ws.rs.OPTIONS;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
@@ -44,26 +42,6 @@ import org.apache.syncope.common.rest.api.beans.AnyListQuery;
 public interface UserService extends AnyService<UserTO, UserPatch> {
 
     /**
-     * Gives the username for the provided user key.
-     *
-     * @param key user key
-     * @return Response object featuring HTTP header with username matching the given key
-     */
-    @OPTIONS
-    @Path("{key}/username")
-    Response getUsername(@NotNull @PathParam("key") Long key);
-
-    /**
-     * Gives the user key for the provided username.
-     *
-     * @param username username
-     * @return Response object featuring HTTP header with key matching the given username
-     */
-    @OPTIONS
-    @Path("{username}/key")
-    Response getUserKey(@NotNull @PathParam("username") String username);
-
-    /**
      * Returns a paged list of existing users matching the given query.
      *
      * @param listQuery query conditions

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserWorkflowService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserWorkflowService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserWorkflowService.java
index f9362e0..a4ecc46 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserWorkflowService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserWorkflowService.java
@@ -55,7 +55,7 @@ public interface UserWorkflowService extends JAXRSService {
     @GET
     @Path("forms/{userKey}")
     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
-    WorkflowFormTO getFormForUser(@NotNull @PathParam("userKey") Long userKey);
+    WorkflowFormTO getFormForUser(@NotNull @PathParam("userKey") String userKey);
 
     /**
      * Claims the form for the given task id.

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
index 42701e0..e1b778e 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
@@ -82,7 +82,7 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, P extends AnyPatch>
     }
 
     protected Pair<TO, List<LogicActions>> beforeCreate(final TO input) {
-        Realm realm = realmDAO.find(input.getRealm());
+        Realm realm = realmDAO.findByFullPath(input.getRealm());
         if (realm == null) {
             SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidRealm);
             sce.getElements().add(input.getRealm());
@@ -115,7 +115,7 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, P extends AnyPatch>
     }
 
     protected Pair<P, List<LogicActions>> beforeUpdate(final P input, final String realmPath) {
-        Realm realm = realmDAO.find(realmPath);
+        Realm realm = realmDAO.findByFullPath(realmPath);
         if (realm == null) {
             SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidRealm);
             sce.getElements().add(realmPath);
@@ -135,7 +135,7 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, P extends AnyPatch>
     }
 
     protected Pair<TO, List<LogicActions>> beforeDelete(final TO input) {
-        Realm realm = realmDAO.find(input.getRealm());
+        Realm realm = realmDAO.findByFullPath(input.getRealm());
         if (realm == null) {
             SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidRealm);
             sce.getElements().add(input.getRealm());
@@ -205,7 +205,7 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, P extends AnyPatch>
         return effective;
     }
 
-    protected void securityChecks(final Set<String> effectiveRealms, final String realm, final Long key) {
+    protected void securityChecks(final Set<String> effectiveRealms, final String realm, final String key) {
         if (!IterableUtils.matchesAny(effectiveRealms, new Predicate<String>() {
 
             @Override
@@ -224,7 +224,7 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, P extends AnyPatch>
         }
     }
 
-    public abstract TO read(Long key);
+    public abstract TO read(String key);
 
     public abstract int count(String realm);
 
@@ -232,7 +232,7 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, P extends AnyPatch>
 
     public abstract ProvisioningResult<TO> update(P anyPatch, boolean nullPriorityAsync);
 
-    public abstract ProvisioningResult<TO> delete(Long key, boolean nullPriorityAsync);
+    public abstract ProvisioningResult<TO> delete(String key, boolean nullPriorityAsync);
 
     public abstract List<TO> list(
             int page, int size, List<OrderByClause> orderBy,

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractJobLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractJobLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractJobLogic.java
index 2841c9d..ac4af1c 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractJobLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractJobLogic.java
@@ -42,7 +42,7 @@ abstract class AbstractJobLogic<T extends AbstractBaseBean> extends AbstractTran
     @Autowired
     protected SchedulerFactoryBean scheduler;
 
-    protected abstract Triple<JobType, Long, String> getReference(final JobKey jobKey);
+    protected abstract Triple<JobType, String, String> getReference(final JobKey jobKey);
 
     protected List<JobTO> listJobs() {
         List<JobTO> jobTOs = new ArrayList<>();
@@ -53,7 +53,7 @@ abstract class AbstractJobLogic<T extends AbstractBaseBean> extends AbstractTran
 
                 JobTO jobTO = new JobTO();
 
-                Triple<JobType, Long, String> reference = getReference(jobKey);
+                Triple<JobType, String, String> reference = getReference(jobKey);
                 if (reference != null) {
                     jobTOs.add(jobTO);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractResourceAssociator.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractResourceAssociator.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractResourceAssociator.java
index 3bd4492..577455b 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractResourceAssociator.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractResourceAssociator.java
@@ -24,19 +24,19 @@ import org.apache.syncope.common.lib.to.ProvisioningResult;
 
 public abstract class AbstractResourceAssociator<A extends AnyTO> extends AbstractLogic<A> {
 
-    public abstract A unlink(Long key, Collection<String> resources);
+    public abstract A unlink(String key, Collection<String> resources);
 
-    public abstract A link(Long key, Collection<String> resources);
+    public abstract A link(String key, Collection<String> resources);
 
     public abstract ProvisioningResult<A> unassign(
-            Long key, Collection<String> resources, boolean nullPriorityAsync);
+            String key, Collection<String> resources, boolean nullPriorityAsync);
 
     public abstract ProvisioningResult<A> assign(
-            Long key, Collection<String> resources, boolean changepwd, String password, boolean nullPriorityAsync);
+            String key, Collection<String> resources, boolean changepwd, String password, boolean nullPriorityAsync);
 
     public abstract ProvisioningResult<A> deprovision(
-            Long key, Collection<String> resources, boolean nullPriorityAsync);
+            String key, Collection<String> resources, boolean nullPriorityAsync);
 
     public abstract ProvisioningResult<A> provision(
-            Long key, Collection<String> resources, boolean changepwd, String password, boolean nullPriorityAsync);
+            String key, Collection<String> resources, boolean changepwd, String password, boolean nullPriorityAsync);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/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 a03ca58..d6dafda 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
@@ -73,7 +73,7 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
 
     @Transactional(readOnly = true)
     @Override
-    public AnyObjectTO read(final Long key) {
+    public AnyObjectTO read(final String key) {
         return binder.getAnyObjectTO(key);
     }
 
@@ -146,7 +146,7 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
                 before.getLeft().getRealm());
         securityChecks(effectiveRealms, before.getLeft().getRealm(), null);
 
-        Pair<Long, List<PropagationStatus>> created = provisioningManager.create(before.getLeft(), nullPriorityAsync);
+        Pair<String, List<PropagationStatus>> created = provisioningManager.create(before.getLeft(), nullPriorityAsync);
 
         return after(binder.getAnyObjectTO(created.getKey()), created.getRight(), before.getRight());
     }
@@ -167,13 +167,13 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
                 realm);
         securityChecks(effectiveRealms, realm, before.getLeft().getKey());
 
-        Pair<Long, List<PropagationStatus>> updated = provisioningManager.update(anyObjectPatch, nullPriorityAsync);
+        Pair<String, List<PropagationStatus>> updated = provisioningManager.update(anyObjectPatch, nullPriorityAsync);
 
         return after(binder.getAnyObjectTO(updated.getKey()), updated.getRight(), before.getRight());
     }
 
     @Override
-    public ProvisioningResult<AnyObjectTO> delete(final Long key, final boolean nullPriorityAsync) {
+    public ProvisioningResult<AnyObjectTO> delete(final String key, final boolean nullPriorityAsync) {
         AnyObjectTO anyObject = binder.getAnyObjectTO(key);
         Pair<AnyObjectTO, List<LogicActions>> before = beforeDelete(anyObject);
 
@@ -191,7 +191,7 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
     }
 
     @Override
-    public AnyObjectTO unlink(final Long key, final Collection<String> resources) {
+    public AnyObjectTO unlink(final String key, final Collection<String> resources) {
         // security checks
         AnyObjectTO anyObjectTO = binder.getAnyObjectTO(key);
         Set<String> effectiveRealms = getEffectiveRealms(
@@ -213,7 +213,7 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
     }
 
     @Override
-    public AnyObjectTO link(final Long key, final Collection<String> resources) {
+    public AnyObjectTO link(final String key, final Collection<String> resources) {
         // security checks
         AnyObjectTO anyObjectTO = binder.getAnyObjectTO(key);
         Set<String> effectiveRealms = getEffectiveRealms(
@@ -236,7 +236,7 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
 
     @Override
     public ProvisioningResult<AnyObjectTO> unassign(
-            final Long key, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String key, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         // security checks
         AnyObjectTO anyObjectTO = binder.getAnyObjectTO(key);
@@ -260,7 +260,7 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
 
     @Override
     public ProvisioningResult<AnyObjectTO> assign(
-            final Long key,
+            final String key,
             final Collection<String> resources,
             final boolean changepwd,
             final String password,
@@ -288,7 +288,7 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
 
     @Override
     public ProvisioningResult<AnyObjectTO> deprovision(
-            final Long key, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String key, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         // security checks
         AnyObjectTO anyObjectTO = binder.getAnyObjectTO(key);
@@ -307,7 +307,7 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
 
     @Override
     public ProvisioningResult<AnyObjectTO> provision(
-            final Long key,
+            final String key,
             final Collection<String> resources,
             final boolean changePwd,
             final String password,
@@ -332,12 +332,12 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
     protected AnyObjectTO resolveReference(final Method method, final Object... args)
             throws UnresolvedReferenceException {
 
-        Long key = null;
+        String key = null;
 
         if (ArrayUtils.isNotEmpty(args)) {
             for (int i = 0; key == null && i < args.length; i++) {
-                if (args[i] instanceof Long) {
-                    key = (Long) args[i];
+                if (args[i] instanceof String) {
+                    key = (String) args[i];
                 } else if (args[i] instanceof AnyObjectTO) {
                     key = ((AnyObjectTO) args[i]).getKey();
                 } else if (args[i] instanceof AnyObjectPatch) {
@@ -346,7 +346,7 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
             }
         }
 
-        if ((key != null) && !key.equals(0L)) {
+        if (key != null) {
             try {
                 return binder.getAnyObjectTO(key);
             } catch (Throwable ignore) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
index 19129d1..2a5e89b 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
@@ -75,7 +75,7 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> {
     public AnyTypeTO create(final AnyTypeTO anyTypeTO) {
         if (StringUtils.isBlank(anyTypeTO.getKey())) {
             SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.RequiredValuesMissing);
-            sce.getElements().add(AnyType.class.getSimpleName() + " name");
+            sce.getElements().add(AnyType.class.getSimpleName() + " key");
             throw sce;
         }
         if (anyTypeDAO.find(anyTypeTO.getKey()) != null) {
@@ -117,12 +117,12 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> {
         AnyTypeTO deleted = binder.getAnyTypeTO(anyType);
         try {
             anyTypeDAO.delete(key);
+            EntitlementsHolder.getInstance().removeFor(deleted.getKey());
         } catch (IllegalArgumentException e) {
             SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidAnyType);
             sce.getElements().add(e.getMessage());
             throw sce;
         }
-        EntitlementsHolder.getInstance().removeFor(deleted.getKey());
         return deleted;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
index 0546f8f..8f7ec57 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
@@ -108,7 +108,7 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.CONNECTOR_DELETE + "')")
-    public ConnInstanceTO delete(final Long key) {
+    public ConnInstanceTO delete(final String key) {
         ConnInstance connInstance = connInstanceDAO.find(key);
         if (connInstance == null) {
             throw new NotFoundException("Connector '" + key + "'");
@@ -155,7 +155,7 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.CONNECTOR_READ + "')")
     @Transactional(readOnly = true)
-    public ConnInstanceTO read(final Long key, final String lang) {
+    public ConnInstanceTO read(final String key, final String lang) {
         CurrentLocale.set(StringUtils.isBlank(lang) ? Locale.ENGLISH : new Locale(lang));
 
         ConnInstance connInstance = connInstanceDAO.find(key);
@@ -262,19 +262,19 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
     protected ConnInstanceTO resolveReference(final Method method, final Object... args)
             throws UnresolvedReferenceException {
 
-        Long key = null;
+        String key = null;
 
         if (ArrayUtils.isNotEmpty(args)) {
             for (int i = 0; key == null && i < args.length; i++) {
-                if (args[i] instanceof Long) {
-                    key = (Long) args[i];
+                if (args[i] instanceof String) {
+                    key = (String) args[i];
                 } else if (args[i] instanceof ConnInstanceTO) {
                     key = ((ConnInstanceTO) args[i]).getKey();
                 }
             }
         }
 
-        if ((key != null) && !key.equals(0L)) {
+        if (key != null) {
             try {
                 return binder.getConnInstanceTO(connInstanceDAO.find(key));
             } catch (Throwable ignore) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/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 344675c..232010e 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
@@ -81,7 +81,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
     protected GroupProvisioningManager provisioningManager;
 
     @Override
-    protected void securityChecks(final Set<String> effectiveRealms, final String realm, final Long key) {
+    protected void securityChecks(final Set<String> effectiveRealms, final String realm, final String key) {
         if (!IterableUtils.matchesAny(effectiveRealms, new Predicate<String>() {
 
             @Override
@@ -97,7 +97,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
     @PreAuthorize("hasRole('" + StandardEntitlement.GROUP_READ + "')")
     @Transactional(readOnly = true)
     @Override
-    public GroupTO read(final Long key) {
+    public GroupTO read(final String key) {
         return binder.getGroupTO(key);
     }
 
@@ -105,7 +105,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
     @Transactional(readOnly = true)
     public List<GroupTO> own() {
         return CollectionUtils.collect(
-                userDAO.findAllGroups(userDAO.find(AuthContextUtils.getUsername())),
+                userDAO.findAllGroups(userDAO.findByUsername(AuthContextUtils.getUsername())),
                 new Transformer<Group, GroupTO>() {
 
             @Override
@@ -182,7 +182,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
                 before.getLeft().getRealm());
         securityChecks(effectiveRealms, before.getLeft().getRealm(), null);
 
-        Pair<Long, List<PropagationStatus>> created =
+        Pair<String, List<PropagationStatus>> created =
                 provisioningManager.create(before.getLeft(), nullPriorityAsync);
 
         return after(binder.getGroupTO(created.getKey()), created.getRight(), before.getRight());
@@ -201,14 +201,14 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
             securityChecks(effectiveRealms, before.getLeft().getRealm().getValue(), before.getLeft().getKey());
         }
 
-        Pair<Long, List<PropagationStatus>> updated = provisioningManager.update(groupPatch, nullPriorityAsync);
+        Pair<String, List<PropagationStatus>> updated = provisioningManager.update(groupPatch, nullPriorityAsync);
 
         return after(binder.getGroupTO(updated.getKey()), updated.getRight(), before.getRight());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.GROUP_DELETE + "')")
     @Override
-    public ProvisioningResult<GroupTO> delete(final Long key, final boolean nullPriorityAsync) {
+    public ProvisioningResult<GroupTO> delete(final String key, final boolean nullPriorityAsync) {
         GroupTO group = binder.getGroupTO(key);
         Pair<GroupTO, List<LogicActions>> before = beforeDelete(group);
 
@@ -240,7 +240,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.GROUP_UPDATE + "')")
     @Override
-    public GroupTO unlink(final Long key, final Collection<String> resources) {
+    public GroupTO unlink(final String key, final Collection<String> resources) {
         // security checks
         GroupTO group = binder.getGroupTO(key);
         Set<String> effectiveRealms = getEffectiveRealms(
@@ -263,7 +263,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.GROUP_UPDATE + "')")
     @Override
-    public GroupTO link(final Long key, final Collection<String> resources) {
+    public GroupTO link(final String key, final Collection<String> resources) {
         // security checks
         GroupTO group = binder.getGroupTO(key);
         Set<String> effectiveRealms = getEffectiveRealms(
@@ -287,7 +287,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
     @PreAuthorize("hasRole('" + StandardEntitlement.GROUP_UPDATE + "')")
     @Override
     public ProvisioningResult<GroupTO> unassign(
-            final Long key, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String key, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         // security checks
         GroupTO group = binder.getGroupTO(key);
@@ -312,7 +312,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
     @PreAuthorize("hasRole('" + StandardEntitlement.GROUP_UPDATE + "')")
     @Override
     public ProvisioningResult<GroupTO> assign(
-            final Long key,
+            final String key,
             final Collection<String> resources,
             final boolean changepwd,
             final String password,
@@ -341,7 +341,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
     @PreAuthorize("hasRole('" + StandardEntitlement.GROUP_UPDATE + "')")
     @Override
     public ProvisioningResult<GroupTO> deprovision(
-            final Long key, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String key, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         // security checks
         GroupTO group = binder.getGroupTO(key);
@@ -361,7 +361,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
     @PreAuthorize("hasRole('" + StandardEntitlement.GROUP_UPDATE + "')")
     @Override
     public ProvisioningResult<GroupTO> provision(
-            final Long key,
+            final String key,
             final Collection<String> resources,
             final boolean changePwd,
             final String password,
@@ -384,12 +384,12 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
 
     @Override
     protected GroupTO resolveReference(final Method method, final Object... args) throws UnresolvedReferenceException {
-        Long key = null;
+        String key = null;
 
         if (ArrayUtils.isNotEmpty(args)) {
             for (int i = 0; key == null && i < args.length; i++) {
-                if (args[i] instanceof Long) {
-                    key = (Long) args[i];
+                if (args[i] instanceof String) {
+                    key = (String) args[i];
                 } else if (args[i] instanceof GroupTO) {
                     key = ((GroupTO) args[i]).getKey();
                 } else if (args[i] instanceof GroupPatch) {
@@ -398,7 +398,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
             }
         }
 
-        if ((key != null) && !key.equals(0L)) {
+        if (key != null) {
             try {
                 return binder.getGroupTO(key);
             } catch (Throwable ignore) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java
index 79f2baa..95597f0 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java
@@ -51,7 +51,7 @@ public class NotificationLogic extends AbstractJobLogic<NotificationTO> {
     private NotificationDataBinder binder;
 
     @PreAuthorize("hasRole('" + StandardEntitlement.NOTIFICATION_READ + "')")
-    public NotificationTO read(final Long key) {
+    public NotificationTO read(final String key) {
         Notification notification = notificationDAO.find(key);
         if (notification == null) {
             LOG.error("Could not find notification '" + key + "'");
@@ -93,7 +93,7 @@ public class NotificationLogic extends AbstractJobLogic<NotificationTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.NOTIFICATION_DELETE + "')")
-    public NotificationTO delete(final Long key) {
+    public NotificationTO delete(final String key) {
         Notification notification = notificationDAO.find(key);
         if (notification == null) {
             LOG.error("Could not find notification '" + key + "'");
@@ -107,9 +107,9 @@ public class NotificationLogic extends AbstractJobLogic<NotificationTO> {
     }
 
     @Override
-    protected Triple<JobType, Long, String> getReference(final JobKey jobKey) {
+    protected Triple<JobType, String, String> getReference(final JobKey jobKey) {
         return JobManager.NOTIFICATION_JOB.equals(jobKey)
-                ? Triple.of(JobType.NOTIFICATION, 0L, NotificationJob.class.getSimpleName())
+                ? Triple.of(JobType.NOTIFICATION, (String) null, NotificationJob.class.getSimpleName())
                 : null;
     }
 
@@ -127,19 +127,19 @@ public class NotificationLogic extends AbstractJobLogic<NotificationTO> {
     protected NotificationTO resolveReference(final Method method, final Object... args)
             throws UnresolvedReferenceException {
 
-        Long key = null;
+        String key = null;
 
         if (ArrayUtils.isNotEmpty(args)) {
             for (int i = 0; key == null && i < args.length; i++) {
-                if (args[i] instanceof Long) {
-                    key = (Long) args[i];
+                if (args[i] instanceof String) {
+                    key = (String) args[i];
                 } else if (args[i] instanceof NotificationTO) {
                     key = ((NotificationTO) args[i]).getKey();
                 }
             }
         }
 
-        if ((key != null) && !key.equals(0L)) {
+        if (key != null) {
             try {
                 return binder.getNotificationTO(notificationDAO.find(key));
             } catch (Throwable ignore) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/PolicyLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/PolicyLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/PolicyLogic.java
index 7452138..0cffd0c 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/PolicyLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/PolicyLogic.java
@@ -88,7 +88,7 @@ public class PolicyLogic extends AbstractTransactionalLogic<AbstractPolicyTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.POLICY_READ + "')")
-    public <T extends AbstractPolicyTO> T read(final Long key) {
+    public <T extends AbstractPolicyTO> T read(final String key) {
         Policy policy = policyDAO.find(key);
         if (policy == null) {
             throw new NotFoundException("Policy " + key + " not found");
@@ -98,7 +98,7 @@ public class PolicyLogic extends AbstractTransactionalLogic<AbstractPolicyTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.POLICY_DELETE + "')")
-    public <T extends AbstractPolicyTO> T delete(final Long key) {
+    public <T extends AbstractPolicyTO> T delete(final String key) {
         Policy policy = policyDAO.find(key);
         if (policy == null) {
             throw new NotFoundException("Policy " + key + " not found");
@@ -114,19 +114,19 @@ public class PolicyLogic extends AbstractTransactionalLogic<AbstractPolicyTO> {
     protected AbstractPolicyTO resolveReference(final Method method, final Object... args)
             throws UnresolvedReferenceException {
 
-        Long key = null;
+        String key = null;
 
         if (ArrayUtils.isNotEmpty(args)) {
             for (int i = 0; key == null && i < args.length; i++) {
-                if (args[i] instanceof Long) {
-                    key = (Long) args[i];
+                if (args[i] instanceof String) {
+                    key = (String) args[i];
                 } else if (args[i] instanceof AbstractPolicyTO) {
                     key = ((AbstractPolicyTO) args[i]).getKey();
                 }
             }
         }
 
-        if ((key != null) && !key.equals(0L)) {
+        if (key != null) {
             try {
                 return binder.getPolicyTO(policyDAO.find(key));
             } catch (Throwable ignore) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
index c9822a5..2b78a3e 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
@@ -26,12 +26,14 @@ import java.util.Set;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.Transformer;
 import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.RealmTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
+import org.apache.syncope.core.persistence.api.dao.DuplicateException;
 import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.RealmDAO;
 import org.apache.syncope.core.persistence.api.dao.search.AnyCond;
@@ -57,7 +59,7 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REALM_LIST + "')")
     public List<RealmTO> list(final String fullPath) {
-        Realm realm = realmDAO.find(fullPath);
+        Realm realm = realmDAO.findByFullPath(fullPath);
         if (realm == null) {
             LOG.error("Could not find realm '" + fullPath + "'");
 
@@ -75,12 +77,17 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REALM_CREATE + "')")
     public RealmTO create(final String parentPath, final RealmTO realmTO) {
+        String fullPath = StringUtils.appendIfMissing(parentPath, "/") + realmTO.getName();
+        if (realmDAO.findByFullPath(fullPath) != null) {
+            throw new DuplicateException(fullPath);
+        }
+
         return binder.getRealmTO(realmDAO.save(binder.create(parentPath, realmTO)));
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REALM_UPDATE + "')")
     public RealmTO update(final RealmTO realmTO) {
-        Realm realm = realmDAO.find(realmTO.getFullPath());
+        Realm realm = realmDAO.findByFullPath(realmTO.getFullPath());
         if (realm == null) {
             LOG.error("Could not find realm '" + realmTO.getFullPath() + "'");
 
@@ -95,17 +102,21 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REALM_DELETE + "')")
     public RealmTO delete(final String fullPath) {
-        Realm realm = realmDAO.find(fullPath);
+        Realm realm = realmDAO.findByFullPath(fullPath);
         if (realm == null) {
             LOG.error("Could not find realm '" + fullPath + "'");
 
             throw new NotFoundException(fullPath);
         }
 
+        if (!realmDAO.findChildren(realm).isEmpty()) {
+            throw SyncopeClientException.build(ClientExceptionType.HasChildren);
+        }
+
         Set<String> adminRealms = Collections.singleton(realm.getFullPath());
-        AnyCond idCond = new AnyCond(AttributeCond.Type.ISNOTNULL);
-        idCond.setSchema("id");
-        SearchCond allMatchingCond = SearchCond.getLeafCond(idCond);
+        AnyCond keyCond = new AnyCond(AttributeCond.Type.ISNOTNULL);
+        keyCond.setSchema("key");
+        SearchCond allMatchingCond = SearchCond.getLeafCond(keyCond);
         int users = searchDAO.count(adminRealms, allMatchingCond, AnyTypeKind.USER);
         int groups = searchDAO.count(adminRealms, allMatchingCond, AnyTypeKind.GROUP);
         int anyObjects = searchDAO.count(adminRealms, allMatchingCond, AnyTypeKind.ANY_OBJECT);
@@ -141,7 +152,7 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
 
         if (fullPath != null) {
             try {
-                return binder.getRealmTO(realmDAO.find(fullPath));
+                return binder.getRealmTO(realmDAO.findByFullPath(fullPath));
             } catch (Throwable e) {
                 LOG.debug("Unresolved reference", e);
                 throw new UnresolvedReferenceException(e);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
index 33f8e0e..9a57a59 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
@@ -146,7 +146,7 @@ public class ReportLogic extends AbstractJobLogic<ReportTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REPORT_READ + "')")
-    public ReportTO read(final Long key) {
+    public ReportTO read(final String key) {
         Report report = reportDAO.find(key);
         if (report == null) {
             throw new NotFoundException("Report " + key);
@@ -155,7 +155,7 @@ public class ReportLogic extends AbstractJobLogic<ReportTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REPORT_EXECUTE + "')")
-    public ExecTO execute(final Long key, final Date startAt) {
+    public ExecTO execute(final String key, final Date startAt) {
         Report report = reportDAO.find(key);
         if (report == null) {
             throw new NotFoundException("Report " + key);
@@ -194,7 +194,7 @@ public class ReportLogic extends AbstractJobLogic<ReportTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REPORT_READ + "')")
-    public ReportExec getReportExec(final Long executionKey) {
+    public ReportExec getReportExec(final String executionKey) {
         ReportExec reportExec = reportExecDAO.find(executionKey);
         if (reportExec == null) {
             throw new NotFoundException("Report execution " + executionKey);
@@ -280,7 +280,7 @@ public class ReportLogic extends AbstractJobLogic<ReportTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REPORT_DELETE + "')")
-    public ReportTO delete(final Long key) {
+    public ReportTO delete(final String key) {
         Report report = reportDAO.find(key);
         if (report == null) {
             throw new NotFoundException("Report " + key);
@@ -304,7 +304,7 @@ public class ReportLogic extends AbstractJobLogic<ReportTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REPORT_DELETE + "')")
-    public ExecTO deleteExecution(final Long executionKey) {
+    public ExecTO deleteExecution(final String executionKey) {
         ReportExec reportExec = reportExecDAO.find(executionKey);
         if (reportExec == null) {
             throw new NotFoundException("Report execution " + executionKey);
@@ -317,7 +317,7 @@ public class ReportLogic extends AbstractJobLogic<ReportTO> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REPORT_DELETE + "')")
     public BulkActionResult deleteExecutions(
-            final Long key,
+            final String key,
             final Date startedBefore, final Date startedAfter, final Date endedBefore, final Date endedAfter) {
 
         Report report = reportDAO.find(key);
@@ -341,8 +341,8 @@ public class ReportLogic extends AbstractJobLogic<ReportTO> {
     }
 
     @Override
-    protected Triple<JobType, Long, String> getReference(final JobKey jobKey) {
-        Long key = JobNamer.getReportKeyFromJobName(jobKey.getName());
+    protected Triple<JobType, String, String> getReference(final JobKey jobKey) {
+        String key = JobNamer.getReportKeyFromJobName(jobKey.getName());
 
         Report report = reportDAO.find(key);
         return report == null
@@ -357,7 +357,7 @@ public class ReportLogic extends AbstractJobLogic<ReportTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REPORT_EXECUTE + "')")
-    public void actionJob(final Long key, final JobAction action) {
+    public void actionJob(final String key, final JobAction action) {
         Report report = reportDAO.find(key);
         if (report == null) {
             throw new NotFoundException("Report " + key);
@@ -370,21 +370,21 @@ public class ReportLogic extends AbstractJobLogic<ReportTO> {
     protected ReportTO resolveReference(final Method method, final Object... args)
             throws UnresolvedReferenceException {
 
-        Long key = null;
+        String key = null;
 
         if (ArrayUtils.isNotEmpty(args) && ("create".equals(method.getName())
                 || "update".equals(method.getName())
                 || "delete".equals(method.getName()))) {
             for (int i = 0; key == null && i < args.length; i++) {
-                if (args[i] instanceof Long) {
-                    key = (Long) args[i];
+                if (args[i] instanceof String) {
+                    key = (String) args[i];
                 } else if (args[i] instanceof ReportTO) {
                     key = ((ReportTO) args[i]).getKey();
                 }
             }
         }
 
-        if ((key != null) && !key.equals(0L)) {
+        if (key != null) {
             try {
                 return binder.getReportTO(reportDAO.find(key));
             } catch (Throwable ignore) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
index da51c71..5c2dad4 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
@@ -114,12 +114,12 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
     public ResourceTO create(final ResourceTO resourceTO) {
         if (StringUtils.isBlank(resourceTO.getKey())) {
             SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.RequiredValuesMissing);
-            sce.getElements().add("Resource name");
+            sce.getElements().add("Resource key");
             throw sce;
         }
 
         if (resourceDAO.find(resourceTO.getKey()) != null) {
-            throw new DuplicateException("Resource '" + resourceTO.getKey() + "'");
+            throw new DuplicateException(resourceTO.getKey());
         }
 
         ExternalResource resource = null;
@@ -215,7 +215,7 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.RESOURCE_GET_CONNOBJECT + "')")
     @Transactional(readOnly = true)
-    public ConnObjectTO readConnObject(final String key, final String anyTypeKey, final Long anyKey) {
+    public ConnObjectTO readConnObject(final String key, final String anyTypeKey, final String anyKey) {
         Triple<ExternalResource, AnyType, Provision> init = connObjectInit(key, anyTypeKey);
 
         // 1. find any

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java
index 1e94c96..2eb14c5 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java
@@ -30,6 +30,7 @@ import org.apache.syncope.common.lib.to.AbstractSchemaTO;
 import org.apache.syncope.common.lib.to.DerSchemaTO;
 import org.apache.syncope.common.lib.to.PlainSchemaTO;
 import org.apache.syncope.common.lib.to.VirSchemaTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.SchemaType;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
@@ -150,6 +151,8 @@ public class SchemaLogic extends AbstractTransactionalLogic<AbstractSchemaTO> {
 
         List<AnyTypeClass> classes = new ArrayList<>(anyTypeClasses == null ? 0 : anyTypeClasses.size());
         if (anyTypeClasses != null) {
+            anyTypeClasses.remove(AnyTypeKind.USER.name());
+            anyTypeClasses.remove(AnyTypeKind.GROUP.name());
             for (String anyTypeClass : anyTypeClasses) {
                 AnyTypeClass clazz = anyTypeClassDAO.find(anyTypeClass);
                 if (clazz == null) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/SecurityQuestionLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/SecurityQuestionLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/SecurityQuestionLogic.java
index fb45942..3f13a29 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/SecurityQuestionLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/SecurityQuestionLogic.java
@@ -53,20 +53,20 @@ public class SecurityQuestionLogic extends AbstractTransactionalLogic<SecurityQu
         return CollectionUtils.collect(securityQuestionDAO.findAll(),
                 new Transformer<SecurityQuestion, SecurityQuestionTO>() {
 
-                    @Override
-                    public SecurityQuestionTO transform(final SecurityQuestion input) {
-                        return binder.getSecurityQuestionTO(input);
-                    }
-                }, new ArrayList<SecurityQuestionTO>());
+            @Override
+            public SecurityQuestionTO transform(final SecurityQuestion input) {
+                return binder.getSecurityQuestionTO(input);
+            }
+        }, new ArrayList<SecurityQuestionTO>());
     }
 
     @PreAuthorize("isAuthenticated()")
-    public SecurityQuestionTO read(final Long securityQuestionId) {
-        SecurityQuestion securityQuestion = securityQuestionDAO.find(securityQuestionId);
+    public SecurityQuestionTO read(final String key) {
+        SecurityQuestion securityQuestion = securityQuestionDAO.find(key);
         if (securityQuestion == null) {
-            LOG.error("Could not find security question '" + securityQuestionId + "'");
+            LOG.error("Could not find security question '" + key + "'");
 
-            throw new NotFoundException(String.valueOf(securityQuestionId));
+            throw new NotFoundException(String.valueOf(key));
         }
 
         return binder.getSecurityQuestionTO(securityQuestion);
@@ -93,25 +93,25 @@ public class SecurityQuestionLogic extends AbstractTransactionalLogic<SecurityQu
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.SECURITY_QUESTION_DELETE + "')")
-    public SecurityQuestionTO delete(final Long securityQuestionId) {
-        SecurityQuestion securityQuestion = securityQuestionDAO.find(securityQuestionId);
+    public SecurityQuestionTO delete(final String key) {
+        SecurityQuestion securityQuestion = securityQuestionDAO.find(key);
         if (securityQuestion == null) {
-            LOG.error("Could not find security question '" + securityQuestionId + "'");
+            LOG.error("Could not find security question '" + key + "'");
 
-            throw new NotFoundException(String.valueOf(securityQuestionId));
+            throw new NotFoundException(String.valueOf(key));
         }
 
         SecurityQuestionTO deleted = binder.getSecurityQuestionTO(securityQuestion);
-        securityQuestionDAO.delete(securityQuestionId);
+        securityQuestionDAO.delete(key);
         return deleted;
     }
 
     @PreAuthorize("isAnonymous() or hasRole('" + StandardEntitlement.ANONYMOUS + "')")
-    public SecurityQuestionTO read(final String username) {
+    public SecurityQuestionTO readForUsername(final String username) {
         if (username == null) {
             throw new NotFoundException("Null username");
         }
-        User user = userDAO.find(username);
+        User user = userDAO.findByUsername(username);
         if (user == null) {
             throw new NotFoundException("User " + username);
         }
@@ -129,19 +129,19 @@ public class SecurityQuestionLogic extends AbstractTransactionalLogic<SecurityQu
     protected SecurityQuestionTO resolveReference(final Method method, final Object... args)
             throws UnresolvedReferenceException {
 
-        Long key = null;
+        String key = null;
 
         if (ArrayUtils.isNotEmpty(args)) {
             for (int i = 0; key == null && i < args.length; i++) {
-                if (args[i] instanceof Long) {
-                    key = (Long) args[i];
+                if (args[i] instanceof String) {
+                    key = (String) args[i];
                 } else if (args[i] instanceof SecurityQuestionTO) {
                     key = ((SecurityQuestionTO) args[i]).getKey();
                 }
             }
         }
 
-        if ((key != null) && !key.equals(0L)) {
+        if (key != null) {
             try {
                 return binder.getSecurityQuestionTO(securityQuestionDAO.find(key));
             } catch (Throwable ignore) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/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 515d440..9d88b43 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
@@ -149,9 +149,9 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
     public int count(
             final TaskType type,
             final String resource,
-            final Long notification,
+            final String notification,
             final AnyTypeKind anyTypeKind,
-            final Long anyTypeKey) {
+            final String anyTypeKey) {
 
         return taskDAO.count(
                 type, resourceDAO.find(resource), notificationDAO.find(notification), anyTypeKind, anyTypeKey);
@@ -162,9 +162,9 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
     public <T extends AbstractTaskTO> List<T> list(
             final TaskType type,
             final String resource,
-            final Long notification,
+            final String notification,
             final AnyTypeKind anyTypeKind,
-            final Long anyTypeKey,
+            final String anyTypeKey,
             final int page,
             final int size,
             final List<OrderByClause> orderByClauses,
@@ -182,7 +182,7 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_READ + "')")
-    public <T extends AbstractTaskTO> T read(final Long key, final boolean details) {
+    public <T extends AbstractTaskTO> T read(final String key, final boolean details) {
         Task task = taskDAO.find(key);
         if (task == null) {
             throw new NotFoundException("Task " + key);
@@ -191,7 +191,7 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_EXECUTE + "')")
-    public ExecTO execute(final Long key, final Date startAt, final boolean dryRun) {
+    public ExecTO execute(final String key, final Date startAt, final boolean dryRun) {
         Task task = taskDAO.find(key);
         if (task == null) {
             throw new NotFoundException("Task " + key);
@@ -255,7 +255,7 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_DELETE + "')")
-    public <T extends AbstractTaskTO> T delete(final Long key) {
+    public <T extends AbstractTaskTO> T delete(final String key) {
         Task task = taskDAO.find(key);
         if (task == null) {
             throw new NotFoundException("Task " + key);
@@ -276,13 +276,13 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_READ + "')")
-    public int countExecutions(final Long key) {
+    public int countExecutions(final String key) {
         return taskExecDAO.count(key);
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_READ + "')")
     public List<ExecTO> listExecutions(
-            final Long key, final int page, final int size, final List<OrderByClause> orderByClauses) {
+            final String key, final int page, final int size, final List<OrderByClause> orderByClauses) {
 
         Task task = taskDAO.find(key);
         if (task == null) {
@@ -311,7 +311,7 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_DELETE + "')")
-    public ExecTO deleteExecution(final Long execKey) {
+    public ExecTO deleteExecution(final String execKey) {
         TaskExec taskExec = taskExecDAO.find(execKey);
         if (taskExec == null) {
             throw new NotFoundException("Task execution " + execKey);
@@ -324,7 +324,7 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_DELETE + "')")
     public BulkActionResult deleteExecutions(
-            final Long key,
+            final String key,
             final Date startedBefore, final Date startedAfter, final Date endedBefore, final Date endedAfter) {
 
         Task task = taskDAO.find(key);
@@ -348,8 +348,8 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
     }
 
     @Override
-    protected Triple<JobType, Long, String> getReference(final JobKey jobKey) {
-        Long key = JobNamer.getTaskKeyFromJobName(jobKey.getName());
+    protected Triple<JobType, String, String> getReference(final JobKey jobKey) {
+        String key = JobNamer.getTaskKeyFromJobName(jobKey.getName());
 
         Task task = taskDAO.find(key);
         return task == null || !(task instanceof SchedTask)
@@ -364,7 +364,7 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_EXECUTE + "')")
-    public void actionJob(final Long key, final JobAction action) {
+    public void actionJob(final String key, final JobAction action) {
         Task task = taskDAO.find(key);
         if (task == null) {
             throw new NotFoundException("Task " + key);
@@ -377,21 +377,21 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
     protected AbstractTaskTO resolveReference(final Method method, final Object... args)
             throws UnresolvedReferenceException {
 
-        Long key = null;
+        String key = null;
 
         if (ArrayUtils.isNotEmpty(args)
                 && !"deleteExecution".equals(method.getName()) && !"readExecution".equals(method.getName())) {
 
             for (int i = 0; key == null && i < args.length; i++) {
-                if (args[i] instanceof Long) {
-                    key = (Long) args[i];
+                if (args[i] instanceof String) {
+                    key = (String) args[i];
                 } else if (args[i] instanceof AbstractTaskTO) {
                     key = ((AbstractTaskTO) args[i]).getKey();
                 }
             }
         }
 
-        if ((key != null) && !key.equals(0L)) {
+        if (key != null) {
             try {
                 final Task task = taskDAO.find(key);
                 return binder.getTaskTO(task, taskUtilsFactory.getInstance(task), false);