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:01:48 UTC

[01/24] syncope git commit: Upgrading Activiti

Repository: syncope
Updated Branches:
  refs/heads/master 1735c44c1 -> e7f67ceb8


Upgrading Activiti


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

Branch: refs/heads/master
Commit: e7f67ceb8b6281c2c6777f34868c7c3488fbb071
Parents: dbfcc55
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue Apr 19 09:18:11 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Apr 19 15:01:19 2016 +0200

----------------------------------------------------------------------
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/e7f67ceb/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 81f254a..65e8e2d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -353,7 +353,7 @@ under the License.
 
     <groovy.version>2.4.6</groovy.version>
 
-    <activiti.version>5.19.0.2</activiti.version>
+    <activiti.version>5.20.0</activiti.version>
 
     <slf4j.version>1.7.21</slf4j.version>
     <log4j.version>2.5</log4j.version>


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/resources/domains/TwoContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/domains/TwoContent.xml b/core/persistence-jpa/src/test/resources/domains/TwoContent.xml
index 14c65a8..b9b18a8 100644
--- a/core/persistence-jpa/src/test/resources/domains/TwoContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/TwoContent.xml
@@ -18,92 +18,110 @@ specific language governing permissions and limitations
 under the License.
 -->
 <dataset>
-  <Realm id="1" name="/"/>
+  <Realm key="ea696a4f-e77a-4ef1-be67-8f8093bc8686" name="/"/>
 
-  <SyncopeConf id="1" 
-               creator="admin" lastModifier="admin"
-               creationDate="2014-06-20 11:00:00" lastChangeDate="2014-06-20 11:00:00"/>
+  <SyncopeConf key="cd64d66f-6fff-4008-b966-a06b1cc1436d"/>
 
-  <PlainSchema name="password.cipher.algorithm" type="String"
+  <PlainSchema key="password.cipher.algorithm" type="String"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="1" owner_id="1" schema_name="password.cipher.algorithm"/>
-  <CPlainAttrValue id="1" attribute_id="1" stringValue="SHA1"/>
+  <CPlainAttr key="56db89b9-119e-4923-a16e-f42823b90c66" 
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="password.cipher.algorithm"/>
+  <CPlainAttrValue key="870323e8-8db6-4a64-b512-15f9fa094905" 
+                   attribute_key="56db89b9-119e-4923-a16e-f42823b90c66" stringValue="SHA1"/>
 
-  <PlainSchema name="token.length" type="Long"
+  <PlainSchema key="token.length" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="4" owner_id="1" schema_name="token.length"/>
-  <CPlainAttrValue id="4" attribute_id="4" longValue="256"/>
+  <CPlainAttr key="58977caa-dcf7-4ae3-8591-7e3d0a395200"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="token.length"/>
+  <CPlainAttrValue key="372e28e0-3af1-4774-b668-81aa84903b75"
+                   attribute_key="58977caa-dcf7-4ae3-8591-7e3d0a395200" longValue="256"/>
 
-  <PlainSchema name="token.expireTime" type="Long"
+  <PlainSchema key="token.expireTime" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="5" owner_id="1" schema_name="token.expireTime"/>
-  <CPlainAttrValue id="5" attribute_id="5" longValue="60"/>
+  <CPlainAttr key="01f69abd-df85-4e1b-bb88-ad570594e045"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="token.expireTime"/>
+  <CPlainAttrValue key="963970cf-4af6-46bb-875b-a1b758ac8d05"
+                   attribute_key="01f69abd-df85-4e1b-bb88-ad570594e045" longValue="60"/>
 
-  <PlainSchema name="selfRegistration.allowed" type="Boolean"
+  <PlainSchema key="selfRegistration.allowed" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="6" owner_id="1" schema_name="selfRegistration.allowed"/>
-  <CPlainAttrValue id="6" attribute_id="6" booleanValue="1"/>
+  <CPlainAttr key="7b19cefa-d606-477c-8431-c9464f53fe8b"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="selfRegistration.allowed"/>
+  <CPlainAttrValue key="c8b9a0f1-0168-4e2a-95b8-4819fc70e620"
+                   attribute_key="7b19cefa-d606-477c-8431-c9464f53fe8b" booleanValue="1"/>
 
-  <PlainSchema name="passwordReset.allowed" type="Boolean"
+  <PlainSchema key="passwordReset.allowed" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="7" owner_id="1" schema_name="passwordReset.allowed"/>
-  <CPlainAttrValue id="7" attribute_id="7" booleanValue="1"/>
+  <CPlainAttr key="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="passwordReset.allowed"/>
+  <CPlainAttrValue key="b1ecea41-ab7c-4dd3-9e3e-b6baf0f98046"
+                   attribute_key="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3" booleanValue="1"/>
 
-  <PlainSchema name="passwordReset.securityQuestion" type="Boolean"
+  <PlainSchema key="passwordReset.securityQuestion" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="8" owner_id="1" schema_name="passwordReset.securityQuestion"/>
-  <CPlainAttrValue id="8" attribute_id="8" booleanValue="1"/>
-
-  <PlainSchema name="authentication.statuses" type="String"
-               mandatoryCondition="true" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="9" owner_id="1" schema_name="authentication.statuses"/>
-  <CPlainAttrValue id="9" attribute_id="9" stringValue="created"/>
-  <CPlainAttrValue id="10" attribute_id="9" stringValue="active"/>
+  <CPlainAttr key="e5a712ad-53fd-4102-ba55-fb45caed5f7b"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="passwordReset.securityQuestion"/>
+  <CPlainAttrValue key="b5e8e79d-8039-4318-9698-fe5e181ebe98"
+                   attribute_key="e5a712ad-53fd-4102-ba55-fb45caed5f7b" booleanValue="1"/>
+
+  <PlainSchema key="authentication.statuses" type="String" multivalue="1" uniqueConstraint="0" readonly="0"/>
+  <CPlainAttr key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="authentication.statuses"/>
+  <CPlainAttrValue key="4b8e7d2b-f527-43a3-a2e2-5530dcab2f52"
+                   attribute_key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="created"/>
+  <CPlainAttrValue key="f0c89f2c-ea87-4c95-a1cf-142bf6e6f523"
+                   attribute_key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="active"/>
 
   <!-- Save user login date upon successful authentication -->
-  <PlainSchema name="log.lastlogindate" type="Boolean"
+  <PlainSchema key="log.lastlogindate" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="11" owner_id="1" schema_name="log.lastlogindate"/>
-  <CPlainAttrValue id="11" attribute_id="11" booleanValue="1"/>
+  <CPlainAttr key="9891c0a7-27ee-4215-9eea-ca32e580b4e4"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="log.lastlogindate"/>
+  <CPlainAttrValue key="162dd874-0417-4bb9-9724-db1ff2952dd1"
+                   attribute_key="9891c0a7-27ee-4215-9eea-ca32e580b4e4" booleanValue="1"/>
 
-  <PlainSchema name="tasks.interruptMaxRetries" type="Long"
+  <PlainSchema key="tasks.interruptMaxRetries" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="12" owner_id="1" schema_name="tasks.interruptMaxRetries"/>
-  <CPlainAttrValue id="12" attribute_id="12" longValue="20"/>
-
+  <CPlainAttr key="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="tasks.interruptMaxRetries"/>
+  <CPlainAttrValue key="5dc3f4e3-ff9f-4558-a9ac-15336b63a2ad"
+                   attribute_key="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db" longValue="20"/>
+  
   <!-- Return hashed password values when reading users -->
-  <PlainSchema name="return.password.value" type="Boolean"
+  <PlainSchema key="return.password.value" type="Boolean"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="14" owner_id="1" schema_name="return.password.value"/>
-  <CPlainAttrValue id="14" attribute_id="14" booleanValue="0"/>
+  <CPlainAttr key="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="return.password.value"/>
+  <CPlainAttrValue key="e5fa94db-b524-4309-908d-8198d0b3f779"
+                   attribute_key="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a" booleanValue="0"/>
   
-  <AnyType name="USER" kind="USER"/>
-  <AnyTypeClass name="BaseUser"/>
-  <AnyType_AnyTypeClass anyType_name="USER" anyTypeClass_name="BaseUser"/>
+  <AnyType key="USER" kind="USER"/>
+  <AnyTypeClass key="BaseUser"/>
+  <AnyType_AnyTypeClass anyType_key="USER" anyTypeClass_key="BaseUser"/>
 
-  <AnyType name="GROUP" kind="GROUP"/>
+  <AnyType key="GROUP" kind="GROUP"/>
   
   <!-- For usage with admin console -->
-  <PlainSchema name="admin.user.layout" type="String"
+  <PlainSchema key="admin.user.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="self.user.layout" type="String"
+  <PlainSchema key="self.user.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="admin.group.layout" type="String"
+  <PlainSchema key="admin.group.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="self.group.layout" type="String"
+  <PlainSchema key="self.group.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="admin.membership.layout" type="String"
+  <PlainSchema key="admin.membership.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="self.membership.layout" type="String"
+  <PlainSchema key="self.membership.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
         
-  <PlainSchema name="email" type="String" anyTypeClass_name="BaseUser"
+  <PlainSchema key="email" type="String" anyTypeClass_key="BaseUser"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                validatorClass="org.apache.syncope.core.persistence.jpa.attrvalue.validation.EmailAddressValidator"/>
   
   <!-- Password reset notifications -->
-  <MailTemplate name="requestPasswordReset"
-                  textTemplate="Hi,
+  <MailTemplate key="requestPasswordReset"
+                textTemplate="Hi,
 a password reset was request for ${user.getUsername()}.
 
 In order to complete this request, you need to visit this link:
@@ -113,7 +131,7 @@ http://localhost:9080/syncope-console/?pwdResetToken=${input.get(0).replaceAll('
 If you did not request this reset, just ignore the present e-mail.
 
 Best regards."
-                  htmlTemplate="&lt;html&gt;
+                htmlTemplate="&lt;html&gt;
 &lt;body&gt;
 &lt;p&gt;Hi,
 a password reset was request for ${user.getUsername()}.&lt;/p&gt;
@@ -126,7 +144,7 @@ a password reset was request for ${user.getUsername()}.&lt;/p&gt;
 &lt;p&gt;Best regards.&lt;/p&gt;
 &lt;/body&gt;
 &lt;/html&gt;"/>
-  <MailTemplate name="confirmPasswordReset"
+  <MailTemplate key="confirmPasswordReset"
                 textTemplate="Hi,
 we are happy to inform you that the password request was execute successfully for your account.
 
@@ -140,25 +158,25 @@ we are happy to inform you that the password request was execute successfully fo
 &lt;/body&gt;
 &lt;/html&gt;"/>
 
-  <Notification id="1" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
-                sender="admin@syncope.apache.org" subject="Password Reset request" template_name="requestPasswordReset" 
+  <Notification key="c74b4616-9c63-4350-b4bf-ae0077b1ae6a" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
+                sender="admin@syncope.apache.org" subject="Password Reset request" template_key="requestPasswordReset" 
                 traceLevel="FAILURES"/> 
-  <AnyAbout id="1" anyType_name="USER" notification_id="1" filter="token!=$null"/>
-  <Notification_events Notification_id="1" event="[CUSTOM]:[]:[]:[requestPasswordReset]:[SUCCESS]"/>
+  <AnyAbout key="0d4e37a1-a4f4-4865-afcb-4be01da3da53" anyType_key="USER" notification_key="c74b4616-9c63-4350-b4bf-ae0077b1ae6a" filter="token!=$null"/>
+  <Notification_events notification_key="c74b4616-9c63-4350-b4bf-ae0077b1ae6a" event="[CUSTOM]:[]:[]:[requestPasswordReset]:[SUCCESS]"/>
   
-  <Notification id="2" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
-                sender="admin@syncope.apache.org" subject="Password Reset successful" template_name="confirmPasswordReset" 
+  <Notification key="71769807-7f74-4dc3-ba61-e4a7a00eb8ad" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
+                sender="admin@syncope.apache.org" subject="Password Reset successful" template_key="confirmPasswordReset" 
                 traceLevel="FAILURES"/> 
-  <Notification_events Notification_id="2" event="[CUSTOM]:[]:[]:[confirmPasswordReset]:[SUCCESS]"/>
+  <Notification_events notification_key="71769807-7f74-4dc3-ba61-e4a7a00eb8ad" event="[CUSTOM]:[]:[]:[confirmPasswordReset]:[SUCCESS]"/>
 
-  <ConnInstance id="100" bundleName="net.tirasa.connid.bundles.ldap" displayName="LDAP"
+  <ConnInstance key="b7ea96c3-c633-488b-98a0-b52ac35850f7" bundleName="net.tirasa.connid.bundles.ldap" displayName="LDAP"
                 location="${connid.location}"
                 connectorName="net.tirasa.connid.bundles.ldap.LdapConnector"
                 version="${connid.ldap.version}" 
                 jsonConf='[{"schema":{"name":"synchronizePasswords","displayName":"Enable Password Synchronization","helpMessage":"If true, the connector will synchronize passwords. The Password Capture Plugin needs to be installed for password synchronization to work.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"maintainLdapGroupMembership","displayName":"Maintain LDAP Group Membership","helpMessage":"When enabled and a user is renamed or deleted, update any LDAP groups to which the user belongs to reflect the new name. Otherwise, the LDAP resource must maintain referential integrity with respect to group membership.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"host","displayName":"Host","helpMessage":"The name or IP address of the host where the LDAP server is running.","type":"jav
 a.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["localhost"]},{"schema":{"name":"passwordHashAlgorithm","displayName":"Password Hash Algorithm","helpMessage":"Indicates the algorithm that the Identity system should use to hash the password. Currently supported values are SSHA, SHA, SSHA1, and SHA1. A blank value indicates that the system will not hash passwords. This will cause cleartext passwords to be stored in LDAP unless the LDAP server performs the hash (Netscape Directory Server and iPlanet Directory Server do).","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["SHA"]},{"schema":{"name":"port","displayName":"TCP Port","helpMessage":"TCP/IP port number used to communicate with the LDAP server.","type":"int","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[1389]},{"schema":{"name":"vlvSo
 rtAttribute","displayName":"VLV Sort Attribute","helpMessage":"Specify the sort attribute to use for VLV indexes on the resource.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"statusManagementClass","displayName":"Status management class ","helpMessage":"Class to be used to manage enabled/disabled status. If no class is specified then identity status management wont be possible.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["net.tirasa.connid.bundles.ldap.commons.AttributeStatusManagement"]},{"schema":{"name":"accountObjectClasses","displayName":"Account Object Classes","helpMessage":"The object class or classes that will be used when creating new user objects in the LDAP tree. When entering more than one object class, each entry should be on its own line; do not use commas or semi-colons to separate m
 ultiple object classes. Some object classes may require that you specify all object classes in the class hierarchy.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["inetOrgPerson"]},{"schema":{"name":"accountUserNameAttributes","displayName":"Account User Name Attributes","helpMessage":"Attribute or attributes which holds the account user name. They will be used when authenticating to find the LDAP entry for the user name to authenticate.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["uid"]},{"schema":{"name":"baseContextsToSynchronize","displayName":"Base Contexts to Synchronize","helpMessage":"One or more starting points in the LDAP tree that will be used to determine if a change should be synchronized. The base contexts attribute will be used to synchronize a change if this property is not set.","type":"[Ljava.lang.S
 tring;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["ou=people,o=isp","ou=groups,o=isp"]},{"schema":{"name":"accountSynchronizationFilter","displayName":"LDAP Filter for Accounts to Synchronize","helpMessage":"An optional LDAP filter for the objects to synchronize. Because the change log is for all objects, this filter updates only objects that match the specified filter. If you specify a filter, an object will be synchronized only if it matches the filter and includes a synchronized object class.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"removeLogEntryObjectClassFromFilter","displayName":"Remove Log Entry Object Class from Filter","helpMessage":"If this property is set (the default), the filter used to fetch change log entries does not contain the \"changeLogEntry\" object class, expecting that there are no entries of oth
 er object types in the change log.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"passwordDecryptionKey","displayName":"Password Decryption Key","helpMessage":"The key to decrypt passwords with when performing password synchronization.","type":"org.identityconnectors.common.security.GuardedByteArray","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"readSchema","displayName":"Read Schema","helpMessage":"If true, the connector will read the schema from the server. If false, the connector will provide a default schema based on the object classes in the configuration. This property must be true in order to use extended object classes.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"ssl","displayName":"SSL","helpMessage"
 :"Select the check box to connect to the LDAP server using SSL.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"passwordAttributeToSynchronize","displayName":"Password Attribute to Synchronize","helpMessage":"The name of the password attribute to synchronize when performing password synchronization.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"accountSearchFilter","displayName":"LDAP Filter for Retrieving Accounts","helpMessage":"An optional LDAP filter to control which accounts are returned from the LDAP resource. If no filter is specified, only accounts that include all specified object classes are returned.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["uid=*"]},{"schema":{"name":"passwordDecryptionIn
 itializationVector","displayName":"Password Decryption Initialization Vector","helpMessage":"The initialization vector to decrypt passwords with when performing password synchronization.","type":"org.identityconnectors.common.security.GuardedByteArray","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"groupMemberAttribute","displayName":"Group Member Attribute","helpMessage":"The name of the group attribute that will be updated with the distinguished name of the user when the user is added to the group.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"failover","displayName":"Failover Servers","helpMessage":"List all servers that should be used for failover in case the preferred server fails. If the preferred server fails, JNDI will connect to the next available server in the list. List all servers in the form of 
 \"ldap://ldap.example.com:389/\", which follows the standard LDAP v3 URLs described in RFC 2255. Only the host and port parts of the URL are relevant in this setting.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"modifiersNamesToFilterOut","displayName":"Filter Out Changes By","helpMessage":"The names (DNs) of directory administrators to filter from the changes. Changes with the attribute \"modifiersName\" that match entries in this list will be filtered out. The standard value is the administrator name used by this adapter, to prevent loops. Entries should be of the format \"cn=Directory Manager\".","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"groupNameAttributes","displayName":"Group Name Attributes","helpMessage":"Attribute or attributes which holds the group name.","type
 ":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["cn"]},{"schema":{"name":"uidAttribute","displayName":"Uid Attribute","helpMessage":"The name of the LDAP attribute which is mapped to the Uid attribute.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["cn"]},{"schema":{"name":"respectResourcePasswordPolicyChangeAfterReset","displayName":"Respect Resource Password Policy Change-After-Reset","helpMessage":"When this resource is specified in a Login Module (i.e., this resource is a pass-through authentication target) and the resource password policy is configured for change-after-reset, a user whose resource account password has been administratively reset will be required to change that password after successfully authenticating.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":fals
 e,"values":["false"]},{"schema":{"name":"filterWithOrInsteadOfAnd","displayName":"Filter with Or Instead of And","helpMessage":"Normally the the filter used to fetch change log entries is an and-based filter retrieving an interval of change entries. If this property is set, the filter will or together the required change numbers instead.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"principal","displayName":"Principal","helpMessage":"The distinguished name with which to authenticate to the LDAP server.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["uid=admin,ou=system"]},{"schema":{"name":"changeLogBlockSize","displayName":"Change Log Block Size","helpMessage":"The number of change log entries to fetch per query.","type":"int","required":true,"order":0,"confidential":false,"defaultValues":null},"overrida
 ble":false,"values":[100]},{"schema":{"name":"baseContexts","displayName":"Base Contexts","helpMessage":"One or more starting points in the LDAP tree that will be used when searching the tree. Searches are performed when discovering users from the LDAP server or when looking for the groups of which a user is a member.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["ou=people,o=isp","ou=groups,o=isp"]},{"schema":{"name":"passwordAttribute","displayName":"Password Attribute","helpMessage":"The name of the LDAP attribute which holds the password. When changing an user password, the new password is set to this attribute.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["userpassword"]},{"schema":{"name":"changeNumberAttribute","displayName":"Change Number Attribute","helpMessage":"The name of the change number attribute in the c
 hange log entry.","type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["changeNumber"]},{"schema":{"name":"objectClassesToSynchronize","displayName":"Object Classes to Synchronize","helpMessage":"The object classes to synchronize. The change log is for all objects; this filters updates to just the listed object classes. You should not list the superclasses of an object class unless you intend to synchronize objects with any of the superclass values. For example, if only \"inetOrgPerson\" objects should be synchronized, but the superclasses of \"inetOrgPerson\" (\"person\", \"organizationalperson\" and \"top\") should be filtered out, then list only \"inetOrgPerson\" here. All objects in LDAP are subclassed from \"top\". For this reason, you should never list \"top\", otherwise no object would be filtered.","type":"[Ljava.lang.String;","required":true,"order":0,"confidential":false,"defaultValues":null},"overrida
 ble":false,"values":["inetOrgPerson","groupOfUniqueNames"]},{"schema":{"name":"credentials","displayName":"Password","helpMessage":"Password for the principal.","type":"org.identityconnectors.common.security.GuardedString","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["secret"]},{"schema":{"name":"attributesToSynchronize","displayName":"Attributes to Synchronize","helpMessage":"The names of the attributes to synchronize. This ignores updates from the change log if they do not update any of the named attributes. For example, if only \"department\" is listed, then only changes that affect \"department\" will be processed. All other updates are ignored. If blank (the default), then all changes are processed.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"maintainPosixGroupMembership","displayName":"Maintain POSIX Group Membership
 ","helpMessage":"When enabled and a user is renamed or deleted, update any POSIX groups to which the user belongs to reflect the new name. Otherwise, the LDAP resource must maintain referential integrity with respect to group membership.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["truemaintainLdapGroupMembership"]}]'/>
-  <ConnInstance_capabilities ConnInstance_id="100" capability="CREATE"/>
-  <ConnInstance_capabilities ConnInstance_id="100" capability="UPDATE"/>
-  <ConnInstance_capabilities ConnInstance_id="100" capability="DELETE"/>
-  <ConnInstance_capabilities ConnInstance_id="100" capability="SEARCH"/>
+  <ConnInstance_capabilities connInstance_key="b7ea96c3-c633-488b-98a0-b52ac35850f7" capability="CREATE"/>
+  <ConnInstance_capabilities connInstance_key="b7ea96c3-c633-488b-98a0-b52ac35850f7" capability="UPDATE"/>
+  <ConnInstance_capabilities connInstance_key="b7ea96c3-c633-488b-98a0-b52ac35850f7" capability="DELETE"/>
+  <ConnInstance_capabilities ConnInstance_key="b7ea96c3-c633-488b-98a0-b52ac35850f7" capability="SEARCH"/>
   
 </dataset>

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/AnyObjectProvisioningManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/AnyObjectProvisioningManager.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/AnyObjectProvisioningManager.java
index df9a204..1670c68 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/AnyObjectProvisioningManager.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/AnyObjectProvisioningManager.java
@@ -26,5 +26,5 @@ import org.apache.syncope.common.lib.to.PropagationStatus;
 
 public interface AnyObjectProvisioningManager extends ProvisioningManager<AnyObjectTO, AnyObjectPatch> {
 
-    List<PropagationStatus> provision(Long key, Collection<String> resources, boolean nullPriorityAsync);
+    List<PropagationStatus> provision(String key, Collection<String> resources, boolean nullPriorityAsync);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/GroupProvisioningManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/GroupProvisioningManager.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/GroupProvisioningManager.java
index 3aae89f..9a91668 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/GroupProvisioningManager.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/GroupProvisioningManager.java
@@ -29,9 +29,12 @@ import org.apache.syncope.common.lib.to.GroupTO;
 
 public interface GroupProvisioningManager extends ProvisioningManager<GroupTO, GroupPatch> {
 
-    Pair<Long, List<PropagationStatus>> create(
-            GroupTO groupTO, Map<Long, String> groupOwnerMap, Set<String> excludedResources, boolean nullPriorityAsync);
+    Pair<String, List<PropagationStatus>> create(
+            GroupTO groupTO,
+            Map<String, String> groupOwnerMap,
+            Set<String> excludedResources,
+            boolean nullPriorityAsync);
 
-    List<PropagationStatus> provision(Long key, Collection<String> resources, boolean nullPriorityAsync);
+    List<PropagationStatus> provision(String key, Collection<String> resources, boolean nullPriorityAsync);
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ProvisioningManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ProvisioningManager.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ProvisioningManager.java
index 72a1253..cc8b9c1 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ProvisioningManager.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ProvisioningManager.java
@@ -28,22 +28,22 @@ import org.apache.syncope.common.lib.to.PropagationStatus;
 
 public interface ProvisioningManager<T extends AnyTO, P extends AnyPatch> {
 
-    Pair<Long, List<PropagationStatus>> create(T anyTO, boolean nullPriorityAsync);
+    Pair<String, List<PropagationStatus>> create(T anyTO, boolean nullPriorityAsync);
 
-    Pair<Long, List<PropagationStatus>> create(T anyTO, Set<String> excludedResources, boolean nullPriorityAsync);
+    Pair<String, List<PropagationStatus>> create(T anyTO, Set<String> excludedResources, boolean nullPriorityAsync);
 
-    Pair<Long, List<PropagationStatus>> update(P patch, boolean nullPriorityAsync);
+    Pair<String, List<PropagationStatus>> update(P patch, boolean nullPriorityAsync);
 
-    Pair<Long, List<PropagationStatus>> update(P patch, Set<String> excludedResources, boolean nullPriorityAsync);
+    Pair<String, List<PropagationStatus>> update(P patch, Set<String> excludedResources, boolean nullPriorityAsync);
 
-    List<PropagationStatus> delete(Long anyKey, boolean nullPriorityAsync);
+    List<PropagationStatus> delete(String anyKey, boolean nullPriorityAsync);
 
-    List<PropagationStatus> delete(Long anyKey, Set<String> excludedResources, boolean nullPriorityAsync);
+    List<PropagationStatus> delete(String anyKey, Set<String> excludedResources, boolean nullPriorityAsync);
 
-    Long unlink(P anyMod);
+    String unlink(P anyMod);
 
-    Long link(P anyMod);
+    String link(P anyMod);
 
-    List<PropagationStatus> deprovision(Long anyKey, Collection<String> resources, boolean nullPriorityAsync);
+    List<PropagationStatus> deprovision(String anyKey, Collection<String> resources, boolean nullPriorityAsync);
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/UserProvisioningManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/UserProvisioningManager.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/UserProvisioningManager.java
index 37db510..d1160a2 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/UserProvisioningManager.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/UserProvisioningManager.java
@@ -30,17 +30,17 @@ import org.apache.syncope.core.provisioning.api.pushpull.ProvisioningReport;
 
 public interface UserProvisioningManager extends ProvisioningManager<UserTO, UserPatch> {
 
-    Pair<Long, List<PropagationStatus>> activate(StatusPatch statusPatch, boolean nullPriorityAsync);
+    Pair<String, List<PropagationStatus>> activate(StatusPatch statusPatch, boolean nullPriorityAsync);
 
-    Pair<Long, List<PropagationStatus>> reactivate(StatusPatch statusPatch, boolean nullPriorityAsync);
+    Pair<String, List<PropagationStatus>> reactivate(StatusPatch statusPatch, boolean nullPriorityAsync);
 
-    Pair<Long, List<PropagationStatus>> suspend(StatusPatch statusPatch, boolean nullPriorityAsync);
+    Pair<String, List<PropagationStatus>> suspend(StatusPatch statusPatch, boolean nullPriorityAsync);
 
-    void internalSuspend(Long key);
+    void internalSuspend(String key);
 
-    Pair<Long, List<PropagationStatus>> create(UserTO userTO, boolean storePassword, boolean nullPriorityAsync);
+    Pair<String, List<PropagationStatus>> create(UserTO userTO, boolean storePassword, boolean nullPriorityAsync);
 
-    Pair<Long, List<PropagationStatus>> create(
+    Pair<String, List<PropagationStatus>> create(
             UserTO userTO,
             boolean storePassword,
             boolean disablePwdPolicyCheck,
@@ -48,18 +48,18 @@ public interface UserProvisioningManager extends ProvisioningManager<UserTO, Use
             Set<String> excludedResources,
             boolean nullPriorityAsync);
 
-    Pair<Long, List<PropagationStatus>> update(
+    Pair<String, List<PropagationStatus>> update(
             UserPatch userPatch,
             ProvisioningReport result,
             Boolean enabled,
             Set<String> excludedResources,
             boolean nullPriorityAsync);
 
-    void requestPasswordReset(Long key);
+    void requestPasswordReset(String key);
 
-    void confirmPasswordReset(Long key, String token, String password);
+    void confirmPasswordReset(String key, String token, String password);
 
     List<PropagationStatus> provision(
-            Long key, boolean changePwd, String password, Collection<String> resources, boolean nullPriorityAsync);
+            String key, boolean changePwd, String password, Collection<String> resources, boolean nullPriorityAsync);
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCache.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCache.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCache.java
index 7ab5d9b..4e50a11 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCache.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCache.java
@@ -28,19 +28,19 @@ public interface VirAttrCache {
      *
      * @param type any object
      * @param key any object key
-     * @param schemaName virtual attribute schema name
+     * @param schemaKey virtual attribute schema
      */
-    void expire(String type, Long key, String schemaName);
+    void expire(String type, String key, String schemaKey);
 
     /**
      * Retrieve cached value. Return null in case of virtual attribute not cached.
      *
      * @param type any object
      * @param key any object key
-     * @param schemaName virtual attribute schema name.
+     * @param schemaKey virtual attribute schema.
      * @return cached values or null if virtual attribute is not cached.
      */
-    VirAttrCacheValue get(String type, Long key, String schemaName);
+    VirAttrCacheValue get(String type, String key, String schemaKey);
 
     /**
      * Cache entry is valid if and only if value exist and it is not expired.
@@ -58,6 +58,6 @@ public interface VirAttrCache {
      * @param schemaName virtual attribute name
      * @param value virtual attribute values
      */
-    void put(String type, Long key, String schemaName, VirAttrCacheValue value);
+    void put(String type, String key, String schemaName, VirAttrCacheValue value);
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheKey.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheKey.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheKey.java
index da74000..10e76a5 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheKey.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheKey.java
@@ -36,14 +36,14 @@ public class VirAttrCacheKey {
     /**
      * Any object key.
      */
-    private final transient Long key;
+    private final transient String key;
 
     /**
      * Virtual attribute schema name.
      */
     private final transient String virSchema;
 
-    public VirAttrCacheKey(final String type, final Long key, final String virSchema) {
+    public VirAttrCacheKey(final String type, final String key, final String virSchema) {
         this.type = type;
         this.key = key;
         this.virSchema = virSchema;
@@ -53,7 +53,7 @@ public class VirAttrCacheKey {
         return type;
     }
 
-    public Long getKey() {
+    public String getKey() {
         return key;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AnyObjectDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AnyObjectDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AnyObjectDataBinder.java
index 25b381e..92fc48b 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AnyObjectDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AnyObjectDataBinder.java
@@ -25,7 +25,7 @@ import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
 
 public interface AnyObjectDataBinder {
 
-    AnyObjectTO getAnyObjectTO(Long key);
+    AnyObjectTO getAnyObjectTO(String key);
 
     AnyObjectTO getAnyObjectTO(AnyObject anyObject, boolean details);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConnInstanceDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConnInstanceDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConnInstanceDataBinder.java
index a111cc4..698fd25 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConnInstanceDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConnInstanceDataBinder.java
@@ -31,6 +31,6 @@ public interface ConnInstanceDataBinder {
 
     ConnInstanceTO getConnInstanceTO(ConnInstance connInstance);
 
-    ConnInstance update(Long key, ConnInstanceTO connInstanceTO);
+    ConnInstance update(String key, ConnInstanceTO connInstanceTO);
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/GroupDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/GroupDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/GroupDataBinder.java
index 62753f0..6cb0a5b 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/GroupDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/GroupDataBinder.java
@@ -25,7 +25,7 @@ import org.apache.syncope.core.persistence.api.entity.group.Group;
 
 public interface GroupDataBinder {
 
-    GroupTO getGroupTO(Long key);
+    GroupTO getGroupTO(String key);
 
     GroupTO getGroupTO(Group group, boolean details);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/UserDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/UserDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/UserDataBinder.java
index 9592a3f..79bfd4d 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/UserDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/UserDataBinder.java
@@ -29,9 +29,7 @@ public interface UserDataBinder {
 
     UserTO getAuthenticatedUserTO();
 
-    UserTO getUserTO(String username);
-
-    UserTO getUserTO(Long key);
+    UserTO getUserTO(String key);
 
     UserTO getUserTO(User user, boolean details);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/JobNamer.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/JobNamer.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/JobNamer.java
index cc3cf00..59095f8 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/JobNamer.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/JobNamer.java
@@ -20,6 +20,7 @@ package org.apache.syncope.core.provisioning.api.job;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.core.persistence.api.entity.Report;
 import org.apache.syncope.core.persistence.api.entity.task.Task;
 import org.quartz.JobKey;
@@ -31,14 +32,14 @@ public final class JobNamer {
 
     private static final Logger LOG = LoggerFactory.getLogger(JobNamer.class);
 
-    private static Long getKeyFromJobName(final String name, final String pattern, final int prefixLength) {
-        Long result = null;
+    private static String getKeyFromJobName(final String name, final String pattern, final int prefixLength) {
+        String result = null;
 
         Matcher jobMatcher = Pattern.compile(pattern).matcher(name);
         if (jobMatcher.matches()) {
             try {
-                result = Long.valueOf(name.substring(prefixLength));
-            } catch (NumberFormatException e) {
+                result = name.substring(prefixLength);
+            } catch (IllegalArgumentException e) {
                 LOG.error("Unparsable id: {}", name.substring(prefixLength), e);
             }
         }
@@ -46,12 +47,12 @@ public final class JobNamer {
         return result;
     }
 
-    public static Long getTaskKeyFromJobName(final String name) {
-        return getKeyFromJobName(name, "taskJob[0-9]+", 7);
+    public static String getTaskKeyFromJobName(final String name) {
+        return getKeyFromJobName(name, "taskJob" + SyncopeConstants.UUID_REGEX, 7);
     }
 
-    public static Long getReportKeyFromJobName(final String name) {
-        return getKeyFromJobName(name, "reportJob[0-9]+", 9);
+    public static String getReportKeyFromJobName(final String name) {
+        return getKeyFromJobName(name, "reportJob" + SyncopeConstants.UUID_REGEX, 9);
     }
 
     public static JobKey getJobKey(final Task task) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/SchedTaskJobDelegate.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/SchedTaskJobDelegate.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/SchedTaskJobDelegate.java
index 74e9247..0217dda 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/SchedTaskJobDelegate.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/SchedTaskJobDelegate.java
@@ -22,5 +22,5 @@ import org.quartz.JobExecutionException;
 
 public interface SchedTaskJobDelegate {
 
-    void execute(Long taskKey, boolean dryRun) throws JobExecutionException;
+    void execute(String taskKey, boolean dryRun) throws JobExecutionException;
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/notification/NotificationManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/notification/NotificationManager.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/notification/NotificationManager.java
index ee120f5..2940611 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/notification/NotificationManager.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/notification/NotificationManager.java
@@ -33,11 +33,11 @@ public interface NotificationManager {
     /**
      * Count the number of task executions of a given task with a given status.
      *
-     * @param taskId task id
+     * @param taskKey task
      * @param status status
      * @return number of task executions
      */
-    long countExecutionsWithStatus(final Long taskId, final String status);
+    long countExecutionsWithStatus(final String taskKey, final String status);
 
     /**
      * Create notification tasks for each notification matching the given user id and (some of) tasks performed.
@@ -67,10 +67,10 @@ public interface NotificationManager {
     /**
      * Set execution state of NotificationTask with provided id.
      *
-     * @param taskId task to be updated
+     * @param taskKey task to be updated
      * @param executed execution state
      */
-    void setTaskExecuted(final Long taskId, final boolean executed);
+    void setTaskExecuted(final String taskKey, final boolean executed);
 
     /**
      * Store execution of a NotificationTask.

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
index dd87d19..71328f4 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
@@ -42,7 +42,7 @@ public interface PropagationManager {
      */
     List<PropagationTask> getCreateTasks(
             AnyTypeKind kind,
-            Long key,
+            String key,
             PropagationByResource propByRes,
             Collection<AttrTO> vAttrs,
             Collection<String> noPropResourceNames);
@@ -59,7 +59,7 @@ public interface PropagationManager {
      * @return list of propagation tasks
      */
     List<PropagationTask> getUserCreateTasks(
-            Long key,
+            String key,
             String password,
             Boolean enable,
             PropagationByResource propByRes,
@@ -80,7 +80,7 @@ public interface PropagationManager {
      */
     List<PropagationTask> getUpdateTasks(
             AnyTypeKind kind,
-            Long key,
+            String key,
             boolean changePwd,
             Boolean enable,
             PropagationByResource propByRes,
@@ -120,7 +120,7 @@ public interface PropagationManager {
      */
     List<PropagationTask> getDeleteTasks(
             AnyTypeKind kind,
-            Long key,
+            String key,
             PropagationByResource propByRes,
             Collection<String> noPropResourceNames);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/GroupPullResultHandler.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/GroupPullResultHandler.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/GroupPullResultHandler.java
index 247c583..3548a16 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/GroupPullResultHandler.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/GroupPullResultHandler.java
@@ -22,5 +22,5 @@ import java.util.Map;
 
 public interface GroupPullResultHandler extends SyncopePullResultHandler {
 
-    Map<Long, String> getGroupOwnerMap();
+    Map<String, String> getGroupOwnerMap();
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/ProvisioningReport.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/ProvisioningReport.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/ProvisioningReport.java
index 7fa0366..f1bd5bd 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/ProvisioningReport.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/ProvisioningReport.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.provisioning.api.pushpull;
 
 import java.util.Collection;
-
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
@@ -44,7 +43,7 @@ public class ProvisioningReport {
 
     private ResourceOperation operation;
 
-    private Long key;
+    private String key;
 
     private String name;
 
@@ -64,11 +63,11 @@ public class ProvisioningReport {
         this.name = name;
     }
 
-    public Long getKey() {
+    public String getKey() {
         return key;
     }
 
-    public void setKey(final Long key) {
+    public void setKey(final String key) {
         this.key = key;
     }
 
@@ -113,10 +112,10 @@ public class ProvisioningReport {
             return null;
         } else if (level == TraceLevel.FAILURES && status == Status.FAILURE) {
             // only report failures
-            return String.format("Failed %s (id/name): %d/%s with message: %s", operation, key, name, message);
+            return String.format("Failed %s (key/name): %d/%s with message: %s", operation, key, name, message);
         } else {
             // All
-            return String.format("%s %s (id/name): %d/%s %s", operation, status, key, name,
+            return String.format("%s %s (key/name): %s/%s %s", operation, status, key, name,
                     StringUtils.isBlank(message)
                     ? ""
                     : "with message: " + message);
@@ -130,7 +129,7 @@ public class ProvisioningReport {
      * @param level trace level
      * @return report as string
      */
-    public static String produceReport(final Collection<ProvisioningReport> results, final TraceLevel level) {
+    public static String generate(final Collection<ProvisioningReport> results, final TraceLevel level) {
         StringBuilder sb = new StringBuilder();
         for (ProvisioningReport result : results) {
             sb.append(result.getReportString(level)).append('\n');

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/SyncopePushResultHandler.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/SyncopePushResultHandler.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/SyncopePushResultHandler.java
index 8a32c53..748cb0a 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/SyncopePushResultHandler.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/SyncopePushResultHandler.java
@@ -22,5 +22,5 @@ import org.apache.syncope.core.persistence.api.entity.task.PushTask;
 
 public interface SyncopePushResultHandler extends SyncopeResultHandler<PushTask, PushActions> {
 
-    boolean handle(long anyKey);
+    boolean handle(String anyKey);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/EntityUtils.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/EntityUtils.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/EntityUtils.java
index a744372..264df5d 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/EntityUtils.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/EntityUtils.java
@@ -23,11 +23,11 @@ import org.apache.syncope.core.persistence.api.entity.Entity;
 
 public final class EntityUtils {
 
-    public static <KEY, E extends Entity<KEY>> Transformer<E, KEY> keyTransformer() {
-        return new Transformer<E, KEY>() {
+    public static <E extends Entity> Transformer<E, String> keyTransformer() {
+        return new Transformer<E, String>() {
 
             @Override
-            public KEY transform(final E input) {
+            public String transform(final E input) {
                 return input.getKey();
             }
         };

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/RealmUtils.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/RealmUtils.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/RealmUtils.java
index 47703b0..49810c7 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/RealmUtils.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/RealmUtils.java
@@ -24,7 +24,7 @@ import java.util.Set;
 
 public final class RealmUtils {
 
-    public static String getGroupOwnerRealm(final String realmPath, final Long groupKey) {
+    public static String getGroupOwnerRealm(final String realmPath, final String groupKey) {
         return realmPath + "@" + groupKey;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java
index de2fa29..f97a311 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java
@@ -61,7 +61,7 @@ public class ConnectorManager implements ConnectorRegistry, ConnectorFactory, Sy
     }
 
     private String getBeanName(final ExternalResource resource) {
-        return String.format("connInstance-%s-%d-%s",
+        return String.format("connInstance-%s-%S-%s",
                 AuthContextUtils.getDomain(), resource.getConnector().getKey(), resource.getKey());
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
index 0cc4100..2f4ec41 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
@@ -61,15 +61,17 @@ public class DefaultAnyObjectProvisioningManager implements AnyObjectProvisionin
     protected AnyObjectDAO anyObjectDAO;
 
     @Override
-    public Pair<Long, List<PropagationStatus>> create(final AnyObjectTO anyObjectTO, final boolean nullPriorityAsync) {
+    public Pair<String, List<PropagationStatus>> create(
+            final AnyObjectTO anyObjectTO, final boolean nullPriorityAsync) {
+
         return create(anyObjectTO, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> create(
+    public Pair<String, List<PropagationStatus>> create(
             final AnyObjectTO anyObjectTO, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
-        WorkflowResult<Long> created = awfAdapter.create(anyObjectTO);
+        WorkflowResult<String> created = awfAdapter.create(anyObjectTO);
 
         List<PropagationTask> tasks = propagationManager.getCreateTasks(
                 AnyTypeKind.ANY_OBJECT,
@@ -85,17 +87,17 @@ public class DefaultAnyObjectProvisioningManager implements AnyObjectProvisionin
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> update(
+    public Pair<String, List<PropagationStatus>> update(
             final AnyObjectPatch anyObjectPatch, final boolean nullPriorityAsync) {
 
         return update(anyObjectPatch, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> update(
+    public Pair<String, List<PropagationStatus>> update(
             final AnyObjectPatch anyObjectPatch, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
-        WorkflowResult<Long> updated = awfAdapter.update(anyObjectPatch);
+        WorkflowResult<String> updated = awfAdapter.update(anyObjectPatch);
 
         List<PropagationTask> tasks = propagationManager.getUpdateTasks(
                 AnyTypeKind.ANY_OBJECT,
@@ -113,13 +115,13 @@ public class DefaultAnyObjectProvisioningManager implements AnyObjectProvisionin
     }
 
     @Override
-    public List<PropagationStatus> delete(final Long key, final boolean nullPriorityAsync) {
+    public List<PropagationStatus> delete(final String key, final boolean nullPriorityAsync) {
         return delete(key, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
     public List<PropagationStatus> delete(
-            final Long key, final Set<String> excludedResources, final boolean nullPriorityAsync) {
+            final String key, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
         List<PropagationTask> tasks = propagationManager.getDeleteTasks(
                 AnyTypeKind.ANY_OBJECT,
@@ -136,18 +138,18 @@ public class DefaultAnyObjectProvisioningManager implements AnyObjectProvisionin
     }
 
     @Override
-    public Long unlink(final AnyObjectPatch anyObjectPatch) {
+    public String unlink(final AnyObjectPatch anyObjectPatch) {
         return awfAdapter.update(anyObjectPatch).getResult();
     }
 
     @Override
-    public Long link(final AnyObjectPatch anyObjectPatch) {
+    public String link(final AnyObjectPatch anyObjectPatch) {
         return awfAdapter.update(anyObjectPatch).getResult();
     }
 
     @Override
     public List<PropagationStatus> provision(
-            final Long key, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String key, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         PropagationByResource propByRes = new PropagationByResource();
         propByRes.addAll(ResourceOperation.UPDATE, resources);
@@ -169,7 +171,7 @@ public class DefaultAnyObjectProvisioningManager implements AnyObjectProvisionin
 
     @Override
     public List<PropagationStatus> deprovision(
-            final Long key, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String key, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         PropagationByResource propByRes = new PropagationByResource();
         propByRes.addAll(ResourceOperation.DELETE, resources);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
index 08c55a5..ba124dd 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
@@ -65,15 +65,15 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
     protected VirAttrHandler virtAttrHandler;
 
     @Override
-    public Pair<Long, List<PropagationStatus>> create(final GroupTO group, final boolean nullPriorityAsync) {
+    public Pair<String, List<PropagationStatus>> create(final GroupTO group, final boolean nullPriorityAsync) {
         return create(group, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> create(
+    public Pair<String, List<PropagationStatus>> create(
             final GroupTO groupTO, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
-        WorkflowResult<Long> created = gwfAdapter.create(groupTO);
+        WorkflowResult<String> created = gwfAdapter.create(groupTO);
 
         List<PropagationTask> tasks = propagationManager.getCreateTasks(
                 AnyTypeKind.GROUP,
@@ -89,13 +89,13 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> create(
+    public Pair<String, List<PropagationStatus>> create(
             final GroupTO groupTO,
-            final Map<Long, String> groupOwnerMap,
+            final Map<String, String> groupOwnerMap,
             final Set<String> excludedResources,
             final boolean nullPriorityAsync) {
 
-        WorkflowResult<Long> created = gwfAdapter.create(groupTO);
+        WorkflowResult<String> created = gwfAdapter.create(groupTO);
 
         // see ConnObjectUtils#getAnyTOFromConnObject for GroupOwnerSchema
         AttrTO groupOwner = groupTO.getPlainAttrMap().get(StringUtils.EMPTY);
@@ -117,15 +117,15 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> update(final GroupPatch groupPatch, final boolean nullPriorityAsync) {
+    public Pair<String, List<PropagationStatus>> update(final GroupPatch groupPatch, final boolean nullPriorityAsync) {
         return update(groupPatch, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> update(
+    public Pair<String, List<PropagationStatus>> update(
             final GroupPatch groupPatch, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
-        WorkflowResult<Long> updated = gwfAdapter.update(groupPatch);
+        WorkflowResult<String> updated = gwfAdapter.update(groupPatch);
 
         List<PropagationTask> tasks = propagationManager.getUpdateTasks(
                 AnyTypeKind.GROUP,
@@ -143,19 +143,19 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
     }
 
     @Override
-    public List<PropagationStatus> delete(final Long key, final boolean nullPriorityAsync) {
+    public List<PropagationStatus> delete(final String key, final boolean nullPriorityAsync) {
         return delete(key, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
     public List<PropagationStatus> delete(
-            final Long key, final Set<String> excludedResources, final boolean nullPriorityAsync) {
+            final String key, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
         List<PropagationTask> tasks = new ArrayList<>();
 
         // Generate propagation tasks for deleting users and any objects from group resources, 
         // if they are on those resources only because of the reason being deleted (see SYNCOPE-357)
-        for (Map.Entry<Long, PropagationByResource> entry
+        for (Map.Entry<String, PropagationByResource> entry
                 : groupDAO.findUsersWithTransitiveResources(key).entrySet()) {
 
             tasks.addAll(propagationManager.getDeleteTasks(
@@ -164,7 +164,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
                     entry.getValue(),
                     excludedResources));
         }
-        for (Map.Entry<Long, PropagationByResource> entry
+        for (Map.Entry<String, PropagationByResource> entry
                 : groupDAO.findAnyObjectsWithTransitiveResources(key).entrySet()) {
 
             tasks.addAll(propagationManager.getDeleteTasks(
@@ -191,14 +191,14 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
     }
 
     @Override
-    public Long unlink(final GroupPatch groupPatch) {
-        WorkflowResult<Long> updated = gwfAdapter.update(groupPatch);
+    public String unlink(final GroupPatch groupPatch) {
+        WorkflowResult<String> updated = gwfAdapter.update(groupPatch);
         return updated.getResult();
     }
 
     @Override
     public List<PropagationStatus> provision(
-            final Long key, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String key, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         PropagationByResource propByRes = new PropagationByResource();
         propByRes.addAll(ResourceOperation.UPDATE, resources);
@@ -220,7 +220,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
 
     @Override
     public List<PropagationStatus> deprovision(
-            final Long key, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String key, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         PropagationByResource propByRes = new PropagationByResource();
         propByRes.addAll(ResourceOperation.DELETE, resources);
@@ -238,7 +238,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
     }
 
     @Override
-    public Long link(final GroupPatch groupPatch) {
+    public String link(final GroupPatch groupPatch) {
         return gwfAdapter.update(groupPatch).getResult();
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
index 8abf123..66edbcc 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
@@ -75,26 +75,26 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
     protected UserDAO userDAO;
 
     @Override
-    public Pair<Long, List<PropagationStatus>> create(final UserTO userTO, final boolean nullPriorityAsync) {
+    public Pair<String, List<PropagationStatus>> create(final UserTO userTO, final boolean nullPriorityAsync) {
         return create(userTO, true, false, null, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> create(
+    public Pair<String, List<PropagationStatus>> create(
             final UserTO userTO, final boolean storePassword, final boolean nullPriorityAsync) {
 
         return create(userTO, storePassword, false, null, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> create(
+    public Pair<String, List<PropagationStatus>> create(
             final UserTO userTO, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
         return create(userTO, false, false, null, excludedResources, nullPriorityAsync);
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> create(
+    public Pair<String, List<PropagationStatus>> create(
             final UserTO userTO,
             final boolean storePassword,
             final boolean disablePwdPolicyCheck,
@@ -102,7 +102,7 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
             final Set<String> excludedResources,
             final boolean nullPriorityAsync) {
 
-        WorkflowResult<Pair<Long, Boolean>> created =
+        WorkflowResult<Pair<String, Boolean>> created =
                 uwfAdapter.create(userTO, disablePwdPolicyCheck, enabled, storePassword);
 
         List<PropagationTask> tasks = propagationManager.getUserCreateTasks(
@@ -120,7 +120,7 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> update(final UserPatch userPatch, final boolean nullPriorityAsync) {
+    public Pair<String, List<PropagationStatus>> update(final UserPatch userPatch, final boolean nullPriorityAsync) {
         WorkflowResult<Pair<UserPatch, Boolean>> updated = uwfAdapter.update(userPatch);
 
         List<PropagationTask> tasks = propagationManager.getUserUpdateTasks(updated);
@@ -132,14 +132,14 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> update(
+    public Pair<String, List<PropagationStatus>> update(
             final UserPatch userPatch, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
         return update(userPatch, new ProvisioningReport(), null, excludedResources, nullPriorityAsync);
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> update(
+    public Pair<String, List<PropagationStatus>> update(
             final UserPatch userPatch,
             final ProvisioningReport result,
             final Boolean enabled,
@@ -164,7 +164,7 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
         if (enabled != null) {
             User user = userDAO.find(userPatch.getKey());
 
-            WorkflowResult<Long> enableUpdate = null;
+            WorkflowResult<String> enableUpdate = null;
             if (user.isSuspended() == null) {
                 enableUpdate = uwfAdapter.activate(userPatch.getKey(), null);
             } else if (enabled && user.isSuspended()) {
@@ -192,13 +192,13 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
     }
 
     @Override
-    public List<PropagationStatus> delete(final Long key, final boolean nullPriorityAsync) {
+    public List<PropagationStatus> delete(final String key, final boolean nullPriorityAsync) {
         return delete(key, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
     public List<PropagationStatus> delete(
-            final Long key, final Set<String> excludedResources, final boolean nullPriorityAsync) {
+            final String key, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
         PropagationByResource propByRes = new PropagationByResource();
         propByRes.set(ResourceOperation.DELETE, userDAO.findAllResourceNames(userDAO.authFind(key)));
@@ -227,21 +227,21 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
     }
 
     @Override
-    public Long unlink(final UserPatch userPatch) {
+    public String unlink(final UserPatch userPatch) {
         WorkflowResult<Pair<UserPatch, Boolean>> updated = uwfAdapter.update(userPatch);
         return updated.getResult().getKey().getKey();
     }
 
     @Override
-    public Long link(final UserPatch userPatch) {
+    public String link(final UserPatch userPatch) {
         return uwfAdapter.update(userPatch).getResult().getKey().getKey();
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> activate(
+    public Pair<String, List<PropagationStatus>> activate(
             final StatusPatch statusPatch, final boolean nullPriorityAsync) {
 
-        WorkflowResult<Long> updated = statusPatch.isOnSyncope()
+        WorkflowResult<String> updated = statusPatch.isOnSyncope()
                 ? uwfAdapter.activate(statusPatch.getKey(), statusPatch.getToken())
                 : new WorkflowResult<>(statusPatch.getKey(), null, statusPatch.getType().name().toLowerCase());
 
@@ -249,10 +249,10 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> reactivate(
+    public Pair<String, List<PropagationStatus>> reactivate(
             final StatusPatch statusPatch, final boolean nullPriorityAsync) {
 
-        WorkflowResult<Long> updated = statusPatch.isOnSyncope()
+        WorkflowResult<String> updated = statusPatch.isOnSyncope()
                 ? uwfAdapter.reactivate(statusPatch.getKey())
                 : new WorkflowResult<>(statusPatch.getKey(), null, statusPatch.getType().name().toLowerCase());
 
@@ -260,10 +260,10 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> suspend(
+    public Pair<String, List<PropagationStatus>> suspend(
             final StatusPatch statusPatch, final boolean nullPriorityAsync) {
 
-        WorkflowResult<Long> updated = statusPatch.isOnSyncope()
+        WorkflowResult<String> updated = statusPatch.isOnSyncope()
                 ? uwfAdapter.suspend(statusPatch.getKey())
                 : new WorkflowResult<>(statusPatch.getKey(), null, statusPatch.getType().name().toLowerCase());
 
@@ -291,8 +291,8 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
     }
 
     @Override
-    public void internalSuspend(final Long key) {
-        Pair<WorkflowResult<Long>, Boolean> updated = uwfAdapter.internalSuspend(key);
+    public void internalSuspend(final String key) {
+        Pair<WorkflowResult<String>, Boolean> updated = uwfAdapter.internalSuspend(key);
 
         // propagate suspension if and only if it is required by policy
         if (updated != null && updated.getValue()) {
@@ -309,7 +309,7 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
 
     @Override
     public List<PropagationStatus> provision(
-            final Long key,
+            final String key,
             final boolean changePwd,
             final String password,
             final Collection<String> resources,
@@ -320,11 +320,11 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
         userPatch.getResources().addAll(CollectionUtils.collect(resources,
                 new Transformer<String, StringPatchItem>() {
 
-                    @Override
-                    public StringPatchItem transform(final String input) {
-                        return new StringPatchItem.Builder().operation(PatchOperation.ADD_REPLACE).value(input).build();
-                    }
-                }, new HashSet<StringPatchItem>()));
+            @Override
+            public StringPatchItem transform(final String input) {
+                return new StringPatchItem.Builder().operation(PatchOperation.ADD_REPLACE).value(input).build();
+            }
+        }, new HashSet<StringPatchItem>()));
 
         if (changePwd) {
             PasswordPatch passwordPatch = new PasswordPatch();
@@ -350,7 +350,7 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
 
     @Override
     public List<PropagationStatus> deprovision(
-            final Long key, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String key, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         PropagationByResource propByRes = new PropagationByResource();
         propByRes.set(ResourceOperation.DELETE, resources);
@@ -368,12 +368,12 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
     }
 
     @Override
-    public void requestPasswordReset(final Long key) {
+    public void requestPasswordReset(final String key) {
         uwfAdapter.requestPasswordReset(key);
     }
 
     @Override
-    public void confirmPasswordReset(final Long key, final String token, final String password) {
+    public void confirmPasswordReset(final String key, final String token, final String password) {
         WorkflowResult<Pair<UserPatch, Boolean>> updated = uwfAdapter.confirmPasswordReset(key, token, password);
 
         List<PropagationTask> tasks = propagationManager.getUserUpdateTasks(updated);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/DisabledVirAttrCache.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/DisabledVirAttrCache.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/DisabledVirAttrCache.java
index 8ec8e84..35f331b 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/DisabledVirAttrCache.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/DisabledVirAttrCache.java
@@ -31,12 +31,12 @@ public class DisabledVirAttrCache implements VirAttrCache {
     }
 
     @Override
-    public void expire(final String type, final Long id, final String schemaName) {
+    public void expire(final String type, final String key, final String schemaKey) {
         // nothing to do
     }
 
     @Override
-    public VirAttrCacheValue get(final String type, final Long id, final String schemaName) {
+    public VirAttrCacheValue get(final String type, final String key, final String schemaKey) {
         return null;
     }
 
@@ -46,7 +46,7 @@ public class DisabledVirAttrCache implements VirAttrCache {
     }
 
     @Override
-    public void put(final String type, final Long id, final String schemaName, final VirAttrCacheValue value) {
+    public void put(final String type, final String key, final String schemaName, final VirAttrCacheValue value) {
         // nothing to do
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/MemoryVirAttrCache.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/MemoryVirAttrCache.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/MemoryVirAttrCache.java
index 21d2236..127ad87 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/MemoryVirAttrCache.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/MemoryVirAttrCache.java
@@ -52,19 +52,11 @@ public class MemoryVirAttrCache implements VirAttrCache {
         this.maxCacheSize = maxCacheSize;
     }
 
-    /**
-     * Cache virtual attribute values.
-     *
-     * @param type any object type
-     * @param key any key
-     * @param schemaName virtual attribute name
-     * @param value virtual attribute values
-     */
     @Override
     public void put(
             final String type,
-            final Long key,
-            final String schemaName,
+            final String key,
+            final String schemaKey,
             final VirAttrCacheValue value) {
 
         synchronized (cache) {
@@ -73,33 +65,18 @@ public class MemoryVirAttrCache implements VirAttrCache {
                 free();
             }
 
-            cache.put(new VirAttrCacheKey(type, key, schemaName), value);
+            cache.put(new VirAttrCacheKey(type, key, schemaKey), value);
         }
     }
 
-    /**
-     * Retrieve cached value. Return null in case of virtual attribute not cached.
-     *
-     * @param type any object type
-     * @param key any key
-     * @param schemaName virtual attribute schema name.
-     * @return cached values or null if virtual attribute is not cached.
-     */
     @Override
-    public VirAttrCacheValue get(final String type, final Long key, final String schemaName) {
-        return cache.get(new VirAttrCacheKey(type, key, schemaName));
+    public VirAttrCacheValue get(final String type, final String key, final String schemaKey) {
+        return cache.get(new VirAttrCacheKey(type, key, schemaKey));
     }
 
-    /**
-     * Force entry expiring.
-     *
-     * @param type any object type
-     * @param key any key
-     * @param schemaName virtual attribute schema name
-     */
     @Override
-    public void expire(final String type, final Long key, final String schemaName) {
-        final VirAttrCacheValue value = cache.get(new VirAttrCacheKey(type, key, schemaName));
+    public void expire(final String type, final String key, final String schemaKey) {
+        final VirAttrCacheValue value = cache.get(new VirAttrCacheKey(type, key, schemaKey));
         if (isValidEntry(value)) {
             synchronized (cache) {
                 value.forceExpiring();

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
index 56e0d71..a144d67 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
@@ -160,7 +160,7 @@ abstract class AbstractAnyDataBinder {
 
     protected void setRealm(final Any<?> any, final AnyPatch anyPatch) {
         if (anyPatch.getRealm() != null && StringUtils.isNotBlank(anyPatch.getRealm().getValue())) {
-            Realm newRealm = realmDAO.find(anyPatch.getRealm().getValue());
+            Realm newRealm = realmDAO.findByFullPath(anyPatch.getRealm().getValue());
             if (newRealm == null) {
                 LOG.debug("Invalid realm specified: {}, ignoring", anyPatch.getRealm().getValue());
             } else {
@@ -317,15 +317,15 @@ abstract class AbstractAnyDataBinder {
                         plainAttrValueDAO.delete(attr.getUniqueValue().getKey(), anyUtils.plainAttrUniqueValueClass());
                     }
                 } else {
-                    Collection<Long> valuesToBeRemoved = CollectionUtils.collect(attr.getValues(),
-                            new Transformer<PlainAttrValue, Long>() {
+                    Collection<String> valuesToBeRemoved = CollectionUtils.collect(attr.getValues(),
+                            new Transformer<PlainAttrValue, String>() {
 
                         @Override
-                        public Long transform(final PlainAttrValue input) {
+                        public String transform(final PlainAttrValue input) {
                             return input.getKey();
                         }
                     });
-                    for (Long attrValueKey : valuesToBeRemoved) {
+                    for (String attrValueKey : valuesToBeRemoved) {
                         plainAttrValueDAO.delete(attrValueKey, anyUtils.plainAttrValueClass());
                     }
                 }
@@ -516,7 +516,7 @@ abstract class AbstractAnyDataBinder {
 
         anyTO.setRealm(realmFullPath);
 
-        CollectionUtils.collect(auxClasses, EntityUtils.<String, AnyTypeClass>keyTransformer(), anyTO.getAuxClasses());
+        CollectionUtils.collect(auxClasses, EntityUtils.<AnyTypeClass>keyTransformer(), anyTO.getAuxClasses());
 
         for (PlainAttr<?> plainAttr : plainAttrs) {
             AttrTO attrTO = new AttrTO();


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java
index c64a02d..a5ebee1 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java
@@ -48,7 +48,7 @@ public class ConnectorServiceImpl extends AbstractServiceImpl implements Connect
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         logic.delete(key);
     }
 
@@ -70,7 +70,7 @@ public class ConnectorServiceImpl extends AbstractServiceImpl implements Connect
     }
 
     @Override
-    public ConnInstanceTO read(final Long key, final String lang) {
+    public ConnInstanceTO read(final String key, final String lang) {
         return logic.read(key, lang);
     }
 
@@ -101,8 +101,7 @@ public class ConnectorServiceImpl extends AbstractServiceImpl implements Connect
         if (bulkAction.getType() == BulkAction.Type.DELETE) {
             for (String key : bulkAction.getTargets()) {
                 try {
-                    result.getResults().put(
-                            String.valueOf(logic.delete(Long.valueOf(key)).getKey()), BulkActionResult.Status.SUCCESS);
+                    result.getResults().put(logic.delete(key).getKey(), BulkActionResult.Status.SUCCESS);
                 } catch (Exception e) {
                     LOG.error("Error performing delete for connector {}", key, e);
                     result.getResults().put(key, BulkActionResult.Status.FAILURE);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/GroupServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/GroupServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/GroupServiceImpl.java
index cf65346..d32d87c 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/GroupServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/GroupServiceImpl.java
@@ -41,7 +41,7 @@ public class GroupServiceImpl extends AbstractAnyService<GroupTO, GroupPatch> im
     }
 
     @Override
-    protected GroupPatch newPatch(final Long key) {
+    protected GroupPatch newPatch(final String key) {
         GroupPatch patch = new GroupPatch();
         patch.setKey(key);
         return patch;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/NotificationServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/NotificationServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/NotificationServiceImpl.java
index 43e6b5b..6acdda0 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/NotificationServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/NotificationServiceImpl.java
@@ -46,7 +46,7 @@ public class NotificationServiceImpl extends AbstractServiceImpl implements Noti
     }
 
     @Override
-    public NotificationTO read(final Long key) {
+    public NotificationTO read(final String key) {
         return logic.read(key);
     }
 
@@ -61,7 +61,7 @@ public class NotificationServiceImpl extends AbstractServiceImpl implements Noti
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         logic.delete(key);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/PolicyServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/PolicyServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/PolicyServiceImpl.java
index 95fe255..5295a64 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/PolicyServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/PolicyServiceImpl.java
@@ -45,7 +45,7 @@ public class PolicyServiceImpl extends AbstractServiceImpl implements PolicyServ
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         logic.delete(key);
     }
 
@@ -55,7 +55,7 @@ public class PolicyServiceImpl extends AbstractServiceImpl implements PolicyServ
     }
 
     @Override
-    public <T extends AbstractPolicyTO> T read(final Long key) {
+    public <T extends AbstractPolicyTO> T read(final String key) {
         return logic.read(key);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReportServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReportServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReportServiceImpl.java
index 738f76c..b68b2a5 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReportServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReportServiceImpl.java
@@ -66,12 +66,12 @@ public class ReportServiceImpl extends AbstractServiceImpl implements ReportServ
     }
 
     @Override
-    public ReportTO read(final Long key) {
+    public ReportTO read(final String key) {
         return logic.read(key);
     }
 
     @Override
-    public Response exportExecutionResult(final Long executionKey, final ReportExecExportFormat fmt) {
+    public Response exportExecutionResult(final String executionKey, final ReportExecExportFormat fmt) {
         final ReportExecExportFormat format = (fmt == null) ? ReportExecExportFormat.XML : fmt;
         final ReportExec reportExec = logic.getReportExec(executionKey);
         StreamingOutput sout = new StreamingOutput() {
@@ -93,7 +93,7 @@ public class ReportServiceImpl extends AbstractServiceImpl implements ReportServ
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         logic.delete(key);
     }
 
@@ -103,7 +103,7 @@ public class ReportServiceImpl extends AbstractServiceImpl implements ReportServ
     }
 
     @Override
-    public void deleteExecution(final Long executionKey) {
+    public void deleteExecution(final String executionKey) {
         logic.deleteExecution(executionKey);
     }
 
@@ -123,7 +123,7 @@ public class ReportServiceImpl extends AbstractServiceImpl implements ReportServ
     }
 
     @Override
-    public void actionJob(final Long key, final JobAction action) {
+    public void actionJob(final String key, final JobAction action) {
         logic.actionJob(key, action);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
index a7e88d3..d8ee45f 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
@@ -93,7 +93,7 @@ public class ResourceServiceImpl extends AbstractServiceImpl implements Resource
     }
 
     @Override
-    public ConnObjectTO readConnObject(final String key, final String anyTypeKey, final Long anyKey) {
+    public ConnObjectTO readConnObject(final String key, final String anyTypeKey, final String anyKey) {
         return logic.readConnObject(key, anyTypeKey, anyKey);
     }
 
@@ -136,14 +136,14 @@ public class ResourceServiceImpl extends AbstractServiceImpl implements Resource
     public BulkActionResult bulkDeassociation(final ResourceDeassociationPatch patch) {
         AbstractResourceAssociator<? extends AnyTO> associator =
                 patch.getAnyTypeKey().equalsIgnoreCase(AnyTypeKind.USER.name())
-                        ? userLogic
-                        : patch.getAnyTypeKey().equalsIgnoreCase(AnyTypeKind.GROUP.name())
-                                ? groupLogic
-                                : anyObjectLogic;
+                ? userLogic
+                : patch.getAnyTypeKey().equalsIgnoreCase(AnyTypeKind.GROUP.name())
+                ? groupLogic
+                : anyObjectLogic;
 
         BulkActionResult result = new BulkActionResult();
 
-        for (Long anyKey : patch.getAnyKyes()) {
+        for (String anyKey : patch.getAnyKyes()) {
             Set<String> resources = Collections.singleton(patch.getKey());
             try {
                 switch (patch.getAction()) {
@@ -162,10 +162,10 @@ public class ResourceServiceImpl extends AbstractServiceImpl implements Resource
                     default:
                 }
 
-                result.getResults().put(String.valueOf(anyKey), BulkActionResult.Status.SUCCESS);
+                result.getResults().put(anyKey, BulkActionResult.Status.SUCCESS);
             } catch (Exception e) {
                 LOG.warn("While executing {} on {} {}", patch.getAction(), patch.getAnyTypeKey(), anyKey, e);
-                result.getResults().put(String.valueOf(anyKey), BulkActionResult.Status.FAILURE);
+                result.getResults().put(anyKey, BulkActionResult.Status.FAILURE);
             }
         }
 
@@ -177,12 +177,12 @@ public class ResourceServiceImpl extends AbstractServiceImpl implements Resource
         BulkActionResult result = new BulkActionResult();
 
         if (bulkAction.getType() == BulkAction.Type.DELETE) {
-            for (String name : bulkAction.getTargets()) {
+            for (String key : bulkAction.getTargets()) {
                 try {
-                    result.getResults().put(logic.delete(name).getKey(), BulkActionResult.Status.SUCCESS);
+                    result.getResults().put(logic.delete(key).getKey(), BulkActionResult.Status.SUCCESS);
                 } catch (Exception e) {
-                    LOG.error("Error performing delete for resource {}", name, e);
-                    result.getResults().put(name, BulkActionResult.Status.FAILURE);
+                    LOG.error("Error performing delete for resource {}", key, e);
+                    result.getResults().put(key, BulkActionResult.Status.FAILURE);
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/SecurityQuestionServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/SecurityQuestionServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/SecurityQuestionServiceImpl.java
index 37cc4552..3aa5382 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/SecurityQuestionServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/SecurityQuestionServiceImpl.java
@@ -40,7 +40,7 @@ public class SecurityQuestionServiceImpl extends AbstractServiceImpl implements
     }
 
     @Override
-    public SecurityQuestionTO read(final Long key) {
+    public SecurityQuestionTO read(final String key) {
         return logic.read(key);
     }
 
@@ -60,7 +60,7 @@ public class SecurityQuestionServiceImpl extends AbstractServiceImpl implements
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         logic.delete(key);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
index 083b49e..1bae984 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
@@ -64,7 +64,7 @@ public class TaskServiceImpl extends AbstractServiceImpl implements TaskService
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         logic.delete(key);
     }
 
@@ -98,7 +98,7 @@ public class TaskServiceImpl extends AbstractServiceImpl implements TaskService
     }
 
     @Override
-    public <T extends AbstractTaskTO> T read(final Long key, final boolean details) {
+    public <T extends AbstractTaskTO> T read(final String key, final boolean details) {
         return logic.read(key, details);
     }
 
@@ -130,7 +130,7 @@ public class TaskServiceImpl extends AbstractServiceImpl implements TaskService
     }
 
     @Override
-    public void deleteExecution(final Long executionKey) {
+    public void deleteExecution(final String executionKey) {
         logic.deleteExecution(executionKey);
     }
 
@@ -152,9 +152,7 @@ public class TaskServiceImpl extends AbstractServiceImpl implements TaskService
             case DELETE:
                 for (String key : bulkAction.getTargets()) {
                     try {
-                        result.getResults().put(
-                                String.valueOf(logic.delete(Long.valueOf(key)).getKey()),
-                                BulkActionResult.Status.SUCCESS);
+                        result.getResults().put(logic.delete(key).getKey(), BulkActionResult.Status.SUCCESS);
                     } catch (Exception e) {
                         LOG.error("Error performing delete for task {}", key, e);
                         result.getResults().put(key, BulkActionResult.Status.FAILURE);
@@ -165,7 +163,7 @@ public class TaskServiceImpl extends AbstractServiceImpl implements TaskService
             case DRYRUN:
                 for (String key : bulkAction.getTargets()) {
                     try {
-                        logic.execute(Long.valueOf(key), null, true);
+                        logic.execute(key, null, true);
                         result.getResults().put(key, BulkActionResult.Status.SUCCESS);
                     } catch (Exception e) {
                         LOG.error("Error performing dryrun for task {}", key, e);
@@ -177,7 +175,7 @@ public class TaskServiceImpl extends AbstractServiceImpl implements TaskService
             case EXECUTE:
                 for (String key : bulkAction.getTargets()) {
                     try {
-                        logic.execute(Long.valueOf(key), null, false);
+                        logic.execute(key, null, false);
                         result.getResults().put(key, BulkActionResult.Status.SUCCESS);
                     } catch (Exception e) {
                         LOG.error("Error performing execute for task {}", key, e);
@@ -198,7 +196,7 @@ public class TaskServiceImpl extends AbstractServiceImpl implements TaskService
     }
 
     @Override
-    public void actionJob(final Long key, final JobAction action) {
+    public void actionJob(final String key, final JobAction action) {
         logic.actionJob(key, action);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserServiceImpl.java
index 1b57c38..f395c59 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserServiceImpl.java
@@ -18,14 +18,12 @@
  */
 package org.apache.syncope.core.rest.cxf.service;
 
-import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.Response;
 import org.apache.syncope.common.lib.patch.StatusPatch;
 import org.apache.syncope.common.lib.patch.UserPatch;
 import org.apache.syncope.common.lib.to.PagedResult;
 import org.apache.syncope.common.lib.to.ProvisioningResult;
 import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.rest.api.RESTHeaders;
 import org.apache.syncope.common.rest.api.beans.AnyListQuery;
 import org.apache.syncope.common.rest.api.service.UserService;
 import org.apache.syncope.core.logic.AbstractAnyLogic;
@@ -45,27 +43,13 @@ public class UserServiceImpl extends AbstractAnyService<UserTO, UserPatch> imple
     }
 
     @Override
-    protected UserPatch newPatch(final Long key) {
+    protected UserPatch newPatch(final String key) {
         UserPatch patch = new UserPatch();
         patch.setKey(key);
         return patch;
     }
 
     @Override
-    public Response getUsername(final Long key) {
-        return Response.ok().header(HttpHeaders.ALLOW, OPTIONS_ALLOW).
-                header(RESTHeaders.USERNAME, logic.getUsername(key)).
-                build();
-    }
-
-    @Override
-    public Response getUserKey(final String username) {
-        return Response.ok().header(HttpHeaders.ALLOW, OPTIONS_ALLOW).
-                header(RESTHeaders.USER_KEY, logic.getKey(username)).
-                build();
-    }
-
-    @Override
     public PagedResult<UserTO> list(final AnyListQuery listQuery) {
         return super.list(listQuery);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserWorkflowServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserWorkflowServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserWorkflowServiceImpl.java
index b396e40..a3e6040 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserWorkflowServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserWorkflowServiceImpl.java
@@ -43,7 +43,7 @@ public class UserWorkflowServiceImpl implements UserWorkflowService {
     }
 
     @Override
-    public WorkflowFormTO getFormForUser(final Long userKey) {
+    public WorkflowFormTO getFormForUser(final String userKey) {
         return lofic.getFormForUser(userKey);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
----------------------------------------------------------------------
diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
index 146eea3..377b96e 100644
--- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
+++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
@@ -126,11 +126,11 @@ public class AuthDataAccessor {
      * @return {@code null} if no matching user was found, authentication result otherwise
      */
     @Transactional(noRollbackFor = DisabledException.class)
-    public Pair<Long, Boolean> authenticate(final Authentication authentication) {
-        Long key = null;
+    public Pair<String, Boolean> authenticate(final Authentication authentication) {
+        String key = null;
         Boolean authenticated = null;
 
-        User user = userDAO.find(authentication.getName());
+        User user = userDAO.findByUsername(authentication.getName());
         if (user != null) {
             key = user.getKey();
             authenticated = false;
@@ -254,7 +254,7 @@ public class AuthDataAccessor {
                 }
             }, authorities);
         } else {
-            User user = userDAO.find(username);
+            User user = userDAO.findByUsername(username);
             if (user == null) {
                 throw new UsernameNotFoundException("Could not find any user with id " + username);
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/spring/src/main/java/org/apache/syncope/core/spring/security/DelegatedAdministrationException.java
----------------------------------------------------------------------
diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/DelegatedAdministrationException.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/DelegatedAdministrationException.java
index d99c96c..be378a5 100644
--- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/DelegatedAdministrationException.java
+++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/DelegatedAdministrationException.java
@@ -24,7 +24,7 @@ public class DelegatedAdministrationException extends RuntimeException {
 
     private static final long serialVersionUID = 7540587364235915081L;
 
-    public DelegatedAdministrationException(final AnyTypeKind type, final Long key) {
+    public DelegatedAdministrationException(final AnyTypeKind type, final String key) {
         super("Missing entitlement or realm administration for "
                 + (key == null
                         ? "new " + type

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/spring/src/main/java/org/apache/syncope/core/spring/security/SyncopeAuthenticationProvider.java
----------------------------------------------------------------------
diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/SyncopeAuthenticationProvider.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/SyncopeAuthenticationProvider.java
index 078ebc4..b69c98b 100644
--- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/SyncopeAuthenticationProvider.java
+++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/SyncopeAuthenticationProvider.java
@@ -112,23 +112,23 @@ public class SyncopeAuthenticationProvider implements AuthenticationProvider {
                 authenticated = AuthContextUtils.execWithAuthContext(
                         SyncopeConstants.MASTER_DOMAIN, new Executable<Boolean>() {
 
-                            @Override
-                            public Boolean exec() {
-                                Domain domain = dataAccessor.findDomain(domainToFind);
-
-                                return encryptor.verify(
-                                        authentication.getCredentials().toString(),
-                                        domain.getAdminCipherAlgorithm(),
-                                        domain.getAdminPwd());
-                            }
-                        });
+                    @Override
+                    public Boolean exec() {
+                        Domain domain = dataAccessor.findDomain(domainToFind);
+
+                        return encryptor.verify(
+                                authentication.getCredentials().toString(),
+                                domain.getAdminCipherAlgorithm(),
+                                domain.getAdminPwd());
+                    }
+                });
             }
         } else {
-            final Pair<Long, Boolean> authResult =
-                    AuthContextUtils.execWithAuthContext(domainKey, new Executable<Pair<Long, Boolean>>() {
+            final Pair<String, Boolean> authResult =
+                    AuthContextUtils.execWithAuthContext(domainKey, new Executable<Pair<String, Boolean>>() {
 
                         @Override
-                        public Pair<Long, Boolean> exec() {
+                        public Pair<String, Boolean> exec() {
                             return dataAccessor.authenticate(authentication);
                         }
                     });
@@ -151,28 +151,28 @@ public class SyncopeAuthenticationProvider implements AuthenticationProvider {
             token = AuthContextUtils.execWithAuthContext(
                     domainKey, new Executable<UsernamePasswordAuthenticationToken>() {
 
-                        @Override
-                        public UsernamePasswordAuthenticationToken exec() {
-                            UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
-                                    authentication.getPrincipal(),
-                                    null,
-                                    userDetailsService.loadUserByUsername(authentication.getPrincipal().toString()).
-                                    getAuthorities());
-                            token.setDetails(authentication.getDetails());
-
-                            dataAccessor.audit(
-                                    AuditElements.EventCategoryType.REST,
-                                    AuditElements.AUTHENTICATION_CATEGORY,
-                                    null,
-                                    AuditElements.LOGIN_EVENT,
-                                    Result.SUCCESS,
-                                    null,
-                                    isAuthenticated,
-                                    authentication,
-                                    "Successfully authenticated, with entitlements: " + token.getAuthorities());
-                            return token;
-                        }
-                    });
+                @Override
+                public UsernamePasswordAuthenticationToken exec() {
+                    UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
+                            authentication.getPrincipal(),
+                            null,
+                            userDetailsService.loadUserByUsername(authentication.getPrincipal().toString()).
+                            getAuthorities());
+                    token.setDetails(authentication.getDetails());
+
+                    dataAccessor.audit(
+                            AuditElements.EventCategoryType.REST,
+                            AuditElements.AUTHENTICATION_CATEGORY,
+                            null,
+                            AuditElements.LOGIN_EVENT,
+                            Result.SUCCESS,
+                            null,
+                            isAuthenticated,
+                            authentication,
+                            "Successfully authenticated, with entitlements: " + token.getAuthorities());
+                    return token;
+                }
+            });
 
             LOG.debug("User {} successfully authenticated, with entitlements {}",
                     authentication.getPrincipal(), token.getAuthorities());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java
index a8a65b6..4eaa5e6 100644
--- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java
+++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java
@@ -213,19 +213,19 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
     }
 
     @Override
-    public WorkflowResult<Pair<Long, Boolean>> create(final UserTO userTO, final boolean disablePwdPolicyCheck,
+    public WorkflowResult<Pair<String, Boolean>> create(final UserTO userTO, final boolean disablePwdPolicyCheck,
             final boolean storePassword) {
 
         return create(userTO, disablePwdPolicyCheck, null, storePassword);
     }
 
     @Override
-    public WorkflowResult<Pair<Long, Boolean>> create(final UserTO userTO, final boolean storePassword) {
+    public WorkflowResult<Pair<String, Boolean>> create(final UserTO userTO, final boolean storePassword) {
         return create(userTO, false, storePassword);
     }
 
     @Override
-    public WorkflowResult<Pair<Long, Boolean>> create(final UserTO userTO, final boolean disablePwdPolicyCheck,
+    public WorkflowResult<Pair<String, Boolean>> create(final UserTO userTO, final boolean disablePwdPolicyCheck,
             final Boolean enabled, final boolean storePassword) {
 
         Map<String, Object> variables = new HashMap<>();
@@ -270,7 +270,7 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
 
         Set<String> tasks = getPerformedTasks(user);
 
-        return new WorkflowResult<Pair<Long, Boolean>>(
+        return new WorkflowResult<Pair<String, Boolean>>(
                 new ImmutablePair<>(user.getKey(), propagateEnable), propByRes, tasks);
     }
 
@@ -313,7 +313,7 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
     }
 
     @Override
-    protected WorkflowResult<Long> doActivate(final User user, final String token) {
+    protected WorkflowResult<String> doActivate(final User user, final String token) {
         Set<String> tasks = doExecuteTask(user, "activate", Collections.singletonMap(TOKEN, (Object) token));
 
         updateStatus(user);
@@ -345,7 +345,7 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
     }
 
     @Override
-    protected WorkflowResult<Long> doSuspend(final User user) {
+    protected WorkflowResult<String> doSuspend(final User user) {
         Set<String> performedTasks = doExecuteTask(user, "suspend", null);
         updateStatus(user);
         User updated = userDAO.save(user);
@@ -354,7 +354,7 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
     }
 
     @Override
-    protected WorkflowResult<Long> doReactivate(final User user) {
+    protected WorkflowResult<String> doReactivate(final User user) {
         Set<String> performedTasks = doExecuteTask(user, "reactivate", null);
         updateStatus(user);
 
@@ -424,7 +424,7 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
     }
 
     @Override
-    public WorkflowResult<Long> execute(final UserTO userTO, final String taskId) {
+    public WorkflowResult<String> execute(final UserTO userTO, final String taskId) {
         User user = userDAO.authFind(userTO.getKey());
 
         final Map<String, Object> variables = new HashMap<>();
@@ -678,18 +678,18 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
             forms.addAll(getForms(engine.getTaskService().createTaskQuery().
                     taskVariableValueEquals(TASK_IS_FORM, Boolean.TRUE)));
         } else {
-            User user = userDAO.find(authUser);
+            User user = userDAO.findByUsername(authUser);
             if (user == null) {
                 throw new NotFoundException("Syncope User " + authUser);
             }
 
             forms.addAll(getForms(engine.getTaskService().createTaskQuery().
                     taskVariableValueEquals(TASK_IS_FORM, Boolean.TRUE).
-                    taskCandidateOrAssigned(user.getKey().toString())));
+                    taskCandidateOrAssigned(user.getKey())));
 
             List<String> candidateGroups = new ArrayList<>();
-            for (Long groupId : userDAO.findAllGroupKeys(user)) {
-                candidateGroups.add(groupId.toString());
+            for (String groupKey : userDAO.findAllGroupKeys(user)) {
+                candidateGroups.add(groupKey);
             }
             if (!candidateGroups.isEmpty()) {
                 forms.addAll(getForms(engine.getTaskService().createTaskQuery().
@@ -766,7 +766,7 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
         }
 
         if (!adminUser.equals(authUser)) {
-            User user = userDAO.find(authUser);
+            User user = userDAO.findByUsername(authUser);
             if (user == null) {
                 throw new NotFoundException("Syncope User " + authUser);
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUtils.java
----------------------------------------------------------------------
diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUtils.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUtils.java
index a11dcfa..963a7d1 100644
--- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUtils.java
+++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUtils.java
@@ -27,7 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
 public class ActivitiUtils {
 
     @Transactional(readOnly = true)
-    public boolean isUserIngroup(final User user, final Long groupKey) {
+    public boolean isUserIngroup(final User user, final String groupKey) {
         return IterableUtils.matchesAny(user.getMemberships(), new Predicate<UMembership>() {
 
             @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupManager.java
----------------------------------------------------------------------
diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupManager.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupManager.java
index b1f1c8c..9293dae 100644
--- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupManager.java
+++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupManager.java
@@ -64,11 +64,11 @@ public class SyncopeGroupManager implements GroupIdentityManager, SyncopeSession
     @Override
     public List<Group> findGroupsByUser(final String userId) {
         List<Group> result = Collections.emptyList();
-        User user = userDAO.find(userId);
+        User user = userDAO.findByUsername(userId);
         if (user != null) {
             result = new ArrayList<>();
-            for (Long groupId : userDAO.findAllGroupKeys(user)) {
-                result.add(new GroupEntity(groupId.toString()));
+            for (String groupKey : userDAO.findAllGroupKeys(user)) {
+                result.add(new GroupEntity(groupKey));
             }
         }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupQueryImpl.java
----------------------------------------------------------------------
diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupQueryImpl.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupQueryImpl.java
index 4336cf6..46d82a3 100644
--- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupQueryImpl.java
+++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeGroupQueryImpl.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.workflow.activiti;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-
 import org.activiti.engine.ActivitiException;
 import org.activiti.engine.identity.Group;
 import org.activiti.engine.identity.GroupQuery;
@@ -34,7 +33,7 @@ public class SyncopeGroupQueryImpl implements GroupQuery {
 
     private final GroupDAO groupDAO;
 
-    private Long groupId;
+    private String groupId;
 
     private List<Group> result;
 
@@ -45,7 +44,7 @@ public class SyncopeGroupQueryImpl implements GroupQuery {
     @Override
     public GroupQuery groupId(final String groupId) {
         try {
-            this.groupId = Long.valueOf(groupId);
+            this.groupId = groupId;
         } catch (NumberFormatException e) {
             // ignore
         }
@@ -99,12 +98,12 @@ public class SyncopeGroupQueryImpl implements GroupQuery {
     }
 
     private Group fromSyncopeGroup(final org.apache.syncope.core.persistence.api.entity.group.Group group) {
-        return new GroupEntity(group.getKey().toString());
+        return new GroupEntity(group.getKey());
     }
 
     private void execute() {
         if (groupId != null) {
-            org.apache.syncope.core.persistence.api.entity.group.Group syncopeGroup = groupDAO.find(groupId);
+            org.apache.syncope.core.persistence.api.entity.group.Group syncopeGroup = groupDAO.findByName(groupId);
             if (syncopeGroup == null) {
                 result = Collections.emptyList();
             } else {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserManager.java
----------------------------------------------------------------------
diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserManager.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserManager.java
index 658795c..260639a 100644
--- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserManager.java
+++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserManager.java
@@ -75,7 +75,7 @@ public class SyncopeUserManager implements UserIdentityManager, SyncopeSession {
         org.apache.syncope.core.persistence.api.entity.user.User user = userDAO.find(userKey);
         if (user != null) {
             result = new ArrayList<>();
-            for (Long groupKey : userDAO.findAllGroupKeys(user)) {
+            for (String groupKey : userDAO.findAllGroupKeys(user)) {
                 result.add(new GroupEntity(groupKey.toString()));
             }
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserQueryImpl.java
----------------------------------------------------------------------
diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserQueryImpl.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserQueryImpl.java
index e213c6e..2950b1f 100644
--- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserQueryImpl.java
+++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserQueryImpl.java
@@ -40,7 +40,7 @@ public class SyncopeUserQueryImpl implements UserQuery {
 
     private String username;
 
-    private Long memberOf;
+    private String memberOf;
 
     private List<User> result;
 
@@ -92,11 +92,7 @@ public class SyncopeUserQueryImpl implements UserQuery {
 
     @Override
     public UserQuery memberOfGroup(final String groupId) {
-        try {
-            memberOf = Long.valueOf(groupId);
-        } catch (NumberFormatException e) {
-            // ignore
-        }
+        memberOf = groupId;
         return this;
     }
 
@@ -136,7 +132,7 @@ public class SyncopeUserQueryImpl implements UserQuery {
 
     private void execute() {
         if (username != null) {
-            org.apache.syncope.core.persistence.api.entity.user.User user = userDAO.find(username);
+            org.apache.syncope.core.persistence.api.entity.user.User user = userDAO.findByUsername(username);
             if (user == null) {
                 result = Collections.<User>emptyList();
             } else if (memberOf == null || userDAO.findAllGroupKeys(user).contains(memberOf)) {
@@ -144,7 +140,7 @@ public class SyncopeUserQueryImpl implements UserQuery {
             }
         }
         if (memberOf != null) {
-            Group group = groupDAO.find(memberOf);
+            Group group = groupDAO.findByName(memberOf);
             if (group == null) {
                 result = Collections.<User>emptyList();
             } else {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/AnyObjectWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/AnyObjectWorkflowAdapter.java b/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/AnyObjectWorkflowAdapter.java
index 2a05443..22dac48 100644
--- a/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/AnyObjectWorkflowAdapter.java
+++ b/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/AnyObjectWorkflowAdapter.java
@@ -33,7 +33,7 @@ public interface AnyObjectWorkflowAdapter extends WorkflowAdapter {
      * @param anyObjectTO anyObject to be created and whether to propagate it as active
      * @return anyObject just created
      */
-    WorkflowResult<Long> create(AnyObjectTO anyObjectTO);
+    WorkflowResult<String> create(AnyObjectTO anyObjectTO);
 
     /**
      * Execute a task on a anyObject.
@@ -42,7 +42,7 @@ public interface AnyObjectWorkflowAdapter extends WorkflowAdapter {
      * @param taskId to be executed
      * @return anyObject just updated
      */
-    WorkflowResult<Long> execute(AnyObjectTO anyObjectTO, String taskId);
+    WorkflowResult<String> execute(AnyObjectTO anyObjectTO, String taskId);
 
     /**
      * Update a anyObject.
@@ -50,12 +50,12 @@ public interface AnyObjectWorkflowAdapter extends WorkflowAdapter {
      * @param anyObjectPatch modification set to be performed
      * @return anyObject just updated and propagations to be performed
      */
-    WorkflowResult<Long> update(AnyObjectPatch anyObjectPatch);
+    WorkflowResult<String> update(AnyObjectPatch anyObjectPatch);
 
     /**
      * Delete a anyObject.
      *
      * @param anyObjectKey anyObject to be deleted
      */
-    void delete(Long anyObjectKey);
+    void delete(String anyObjectKey);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/GroupWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/GroupWorkflowAdapter.java b/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/GroupWorkflowAdapter.java
index 04f7f17..df0740b 100644
--- a/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/GroupWorkflowAdapter.java
+++ b/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/GroupWorkflowAdapter.java
@@ -33,7 +33,7 @@ public interface GroupWorkflowAdapter extends WorkflowAdapter {
      * @param groupTO group to be created and whether to propagate it as active
      * @return group just created
      */
-    WorkflowResult<Long> create(GroupTO groupTO);
+    WorkflowResult<String> create(GroupTO groupTO);
 
     /**
      * Execute a task on a group.
@@ -42,7 +42,7 @@ public interface GroupWorkflowAdapter extends WorkflowAdapter {
      * @param taskId to be executed
      * @return group just updated
      */
-    WorkflowResult<Long> execute(GroupTO groupTO, String taskId);
+    WorkflowResult<String> execute(GroupTO groupTO, String taskId);
 
     /**
      * Update a group.
@@ -50,12 +50,12 @@ public interface GroupWorkflowAdapter extends WorkflowAdapter {
      * @param groupPatch modification set to be performed
      * @return group just updated and propagations to be performed
      */
-    WorkflowResult<Long> update(GroupPatch groupPatch);
+    WorkflowResult<String> update(GroupPatch groupPatch);
 
     /**
      * Delete a group.
      *
      * @param groupKey group to be deleted
      */
-    void delete(Long groupKey);
+    void delete(String groupKey);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/UserWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/UserWorkflowAdapter.java b/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/UserWorkflowAdapter.java
index 91a83aa..91487ee 100644
--- a/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/UserWorkflowAdapter.java
+++ b/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/UserWorkflowAdapter.java
@@ -35,7 +35,7 @@ public interface UserWorkflowAdapter extends WorkflowAdapter {
      * @param storePassword whether password shall be stored into the internal storage
      * @return user just created
      */
-    WorkflowResult<Pair<Long, Boolean>> create(UserTO userTO, boolean storePassword);
+    WorkflowResult<Pair<String, Boolean>> create(UserTO userTO, boolean storePassword);
 
     /**
      * Create an user, optionally disabling password policy check.
@@ -45,7 +45,7 @@ public interface UserWorkflowAdapter extends WorkflowAdapter {
      * @param storePassword whether password shall be stored into the internal storage
      * @return user just created
      */
-    WorkflowResult<Pair<Long, Boolean>> create(
+    WorkflowResult<Pair<String, Boolean>> create(
             UserTO userTO, boolean disablePwdPolicyCheck, boolean storePassword);
 
     /**
@@ -57,7 +57,7 @@ public interface UserWorkflowAdapter extends WorkflowAdapter {
      * @param storePassword whether password shall be stored into the internal storage
      * @return user just created
      */
-    WorkflowResult<Pair<Long, Boolean>> create(
+    WorkflowResult<Pair<String, Boolean>> create(
             UserTO userTO, boolean disablePwdPolicyCheck, final Boolean enabled, boolean storePassword);
 
     /**
@@ -67,7 +67,7 @@ public interface UserWorkflowAdapter extends WorkflowAdapter {
      * @param taskId to be executed
      * @return user just updated
      */
-    WorkflowResult<Long> execute(UserTO userTO, String taskId);
+    WorkflowResult<String> execute(UserTO userTO, String taskId);
 
     /**
      * Activate an user.
@@ -76,7 +76,7 @@ public interface UserWorkflowAdapter extends WorkflowAdapter {
      * @param token to be verified for activation
      * @return user just updated
      */
-    WorkflowResult<Long> activate(Long userKey, String token);
+    WorkflowResult<String> activate(String userKey, String token);
 
     /**
      * Update an user.
@@ -92,7 +92,7 @@ public interface UserWorkflowAdapter extends WorkflowAdapter {
      * @param key to be suspended
      * @return user just suspended
      */
-    WorkflowResult<Long> suspend(Long key);
+    WorkflowResult<String> suspend(String key);
 
     /**
      * Suspend an user (used by internal authentication process)
@@ -100,7 +100,7 @@ public interface UserWorkflowAdapter extends WorkflowAdapter {
      * @param key to be suspended
      * @return user just suspended and information whether to propagate suspension
      */
-    Pair<WorkflowResult<Long>, Boolean> internalSuspend(Long key);
+    Pair<WorkflowResult<String>, Boolean> internalSuspend(String key);
 
     /**
      * Reactivate an user.
@@ -108,14 +108,14 @@ public interface UserWorkflowAdapter extends WorkflowAdapter {
      * @param userKey user to be reactivated
      * @return user just reactivated
      */
-    WorkflowResult<Long> reactivate(Long userKey);
+    WorkflowResult<String> reactivate(String userKey);
 
     /**
      * Request password reset for an user.
      *
      * @param userKey user requesting password reset
      */
-    void requestPasswordReset(Long userKey);
+    void requestPasswordReset(String userKey);
 
     /**
      * Confirm password reset for an user.
@@ -125,12 +125,12 @@ public interface UserWorkflowAdapter extends WorkflowAdapter {
      * @param password new password value
      * @return user just updated and propagations to be performed
      */
-    WorkflowResult<Pair<UserPatch, Boolean>> confirmPasswordReset(Long userKey, String token, String password);
+    WorkflowResult<Pair<UserPatch, Boolean>> confirmPasswordReset(String userKey, String token, String password);
 
     /**
      * Delete an user.
      *
      * @param userKey user to be deleted
      */
-    void delete(Long userKey);
+    void delete(String userKey);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractAnyObjectWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractAnyObjectWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractAnyObjectWorkflowAdapter.java
index d124051..34f1a0c 100644
--- a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractAnyObjectWorkflowAdapter.java
+++ b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractAnyObjectWorkflowAdapter.java
@@ -46,17 +46,17 @@ public abstract class AbstractAnyObjectWorkflowAdapter implements AnyObjectWorkf
         return null;
     }
 
-    protected abstract WorkflowResult<Long> doUpdate(AnyObject anyObject, AnyObjectPatch anyObjectPatch);
+    protected abstract WorkflowResult<String> doUpdate(AnyObject anyObject, AnyObjectPatch anyObjectPatch);
 
     @Override
-    public WorkflowResult<Long> update(final AnyObjectPatch anyObjectPatch) {
+    public WorkflowResult<String> update(final AnyObjectPatch anyObjectPatch) {
         return doUpdate(anyObjectDAO.authFind(anyObjectPatch.getKey()), anyObjectPatch);
     }
 
     protected abstract void doDelete(AnyObject anyObject);
 
     @Override
-    public void delete(final Long anyObjectKey) {
+    public void delete(final String anyObjectKey) {
         doDelete(anyObjectDAO.authFind(anyObjectKey));
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractGroupWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractGroupWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractGroupWorkflowAdapter.java
index 50e96fe..952edb2 100644
--- a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractGroupWorkflowAdapter.java
+++ b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractGroupWorkflowAdapter.java
@@ -46,17 +46,17 @@ public abstract class AbstractGroupWorkflowAdapter implements GroupWorkflowAdapt
         return null;
     }
 
-    protected abstract WorkflowResult<Long> doUpdate(Group group, GroupPatch groupPatch);
+    protected abstract WorkflowResult<String> doUpdate(Group group, GroupPatch groupPatch);
 
     @Override
-    public WorkflowResult<Long> update(final GroupPatch groupPatch) {
+    public WorkflowResult<String> update(final GroupPatch groupPatch) {
         return doUpdate(groupDAO.authFind(groupPatch.getKey()), groupPatch);
     }
 
     protected abstract void doDelete(Group group);
 
     @Override
-    public void delete(final Long groupKey) {
+    public void delete(final String groupKey) {
         doDelete(groupDAO.authFind(groupKey));
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractUserWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractUserWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractUserWorkflowAdapter.java
index 716090f..546d03b 100644
--- a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractUserWorkflowAdapter.java
+++ b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractUserWorkflowAdapter.java
@@ -64,10 +64,10 @@ public abstract class AbstractUserWorkflowAdapter implements UserWorkflowAdapter
         return null;
     }
 
-    protected abstract WorkflowResult<Long> doActivate(User user, String token);
+    protected abstract WorkflowResult<String> doActivate(User user, String token);
 
     @Override
-    public WorkflowResult<Long> activate(final Long key, final String token) {
+    public WorkflowResult<String> activate(final String key, final String token) {
         return doActivate(userDAO.authFind(key), token);
     }
 
@@ -78,10 +78,10 @@ public abstract class AbstractUserWorkflowAdapter implements UserWorkflowAdapter
         return doUpdate(userDAO.authFind(userPatch.getKey()), userPatch);
     }
 
-    protected abstract WorkflowResult<Long> doSuspend(User user);
+    protected abstract WorkflowResult<String> doSuspend(User user);
 
     @Override
-    public WorkflowResult<Long> suspend(final Long key) {
+    public WorkflowResult<String> suspend(final String key) {
         User user = userDAO.authFind(key);
 
         // set suspended flag
@@ -91,10 +91,10 @@ public abstract class AbstractUserWorkflowAdapter implements UserWorkflowAdapter
     }
 
     @Override
-    public Pair<WorkflowResult<Long>, Boolean> internalSuspend(final Long key) {
+    public Pair<WorkflowResult<String>, Boolean> internalSuspend(final String key) {
         User user = userDAO.authFind(key);
 
-        Pair<WorkflowResult<Long>, Boolean> result = null;
+        Pair<WorkflowResult<String>, Boolean> result = null;
 
         Pair<Boolean, Boolean> enforce = userDAO.enforcePolicies(user);
         if (enforce.getKey()) {
@@ -112,10 +112,10 @@ public abstract class AbstractUserWorkflowAdapter implements UserWorkflowAdapter
         return result;
     }
 
-    protected abstract WorkflowResult<Long> doReactivate(User user);
+    protected abstract WorkflowResult<String> doReactivate(User user);
 
     @Override
-    public WorkflowResult<Long> reactivate(final Long key) {
+    public WorkflowResult<String> reactivate(final String key) {
         User user = userDAO.authFind(key);
 
         // reset failed logins
@@ -130,7 +130,7 @@ public abstract class AbstractUserWorkflowAdapter implements UserWorkflowAdapter
     protected abstract void doRequestPasswordReset(User user);
 
     @Override
-    public void requestPasswordReset(final Long key) {
+    public void requestPasswordReset(final String key) {
         doRequestPasswordReset(userDAO.authFind(key));
     }
 
@@ -139,7 +139,7 @@ public abstract class AbstractUserWorkflowAdapter implements UserWorkflowAdapter
 
     @Override
     public WorkflowResult<Pair<UserPatch, Boolean>> confirmPasswordReset(
-            final Long key, final String token, final String password) {
+            final String key, final String token, final String password) {
 
         return doConfirmPasswordReset(userDAO.authFind(key), token, password);
     }
@@ -147,7 +147,7 @@ public abstract class AbstractUserWorkflowAdapter implements UserWorkflowAdapter
     protected abstract void doDelete(User user);
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         doDelete(userDAO.authFind(key));
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultAnyObjectWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultAnyObjectWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultAnyObjectWorkflowAdapter.java
index 5f4c198..630bd8b 100644
--- a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultAnyObjectWorkflowAdapter.java
+++ b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultAnyObjectWorkflowAdapter.java
@@ -39,7 +39,7 @@ import org.springframework.transaction.annotation.Transactional;
 public class DefaultAnyObjectWorkflowAdapter extends AbstractAnyObjectWorkflowAdapter {
 
     @Override
-    public WorkflowResult<Long> create(final AnyObjectTO anyObjectTO) {
+    public WorkflowResult<String> create(final AnyObjectTO anyObjectTO) {
         AnyObject anyObject = entityFactory.newEntity(AnyObject.class);
         dataBinder.create(anyObject, anyObjectTO);
         anyObject = anyObjectDAO.save(anyObject);
@@ -51,7 +51,7 @@ public class DefaultAnyObjectWorkflowAdapter extends AbstractAnyObjectWorkflowAd
     }
 
     @Override
-    protected WorkflowResult<Long> doUpdate(final AnyObject anyObject, final AnyObjectPatch anyObjectPatch) {
+    protected WorkflowResult<String> doUpdate(final AnyObject anyObject, final AnyObjectPatch anyObjectPatch) {
         PropagationByResource propByRes = dataBinder.update(anyObject, anyObjectPatch);
 
         AnyObject updated = anyObjectDAO.save(anyObject);
@@ -65,7 +65,7 @@ public class DefaultAnyObjectWorkflowAdapter extends AbstractAnyObjectWorkflowAd
     }
 
     @Override
-    public WorkflowResult<Long> execute(final AnyObjectTO anyObject, final String taskId) {
+    public WorkflowResult<String> execute(final AnyObjectTO anyObject, final String taskId) {
         throw new WorkflowException(new UnsupportedOperationException("Not supported."));
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultGroupWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultGroupWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultGroupWorkflowAdapter.java
index e14b9a1..b99b22b 100644
--- a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultGroupWorkflowAdapter.java
+++ b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultGroupWorkflowAdapter.java
@@ -39,7 +39,7 @@ import org.springframework.transaction.annotation.Transactional;
 public class DefaultGroupWorkflowAdapter extends AbstractGroupWorkflowAdapter {
 
     @Override
-    public WorkflowResult<Long> create(final GroupTO groupTO) {
+    public WorkflowResult<String> create(final GroupTO groupTO) {
         Group group = entityFactory.newEntity(Group.class);
         dataBinder.create(group, groupTO);
         group = groupDAO.save(group);
@@ -51,7 +51,7 @@ public class DefaultGroupWorkflowAdapter extends AbstractGroupWorkflowAdapter {
     }
 
     @Override
-    protected WorkflowResult<Long> doUpdate(final Group group, final GroupPatch groupPatch) {
+    protected WorkflowResult<String> doUpdate(final Group group, final GroupPatch groupPatch) {
         PropagationByResource propByRes = dataBinder.update(group, groupPatch);
 
         Group updated = groupDAO.save(group);
@@ -65,7 +65,7 @@ public class DefaultGroupWorkflowAdapter extends AbstractGroupWorkflowAdapter {
     }
 
     @Override
-    public WorkflowResult<Long> execute(final GroupTO group, final String taskId) {
+    public WorkflowResult<String> execute(final GroupTO group, final String taskId) {
         throw new WorkflowException(new UnsupportedOperationException("Not supported."));
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
index 6523474..6ede0ef 100644
--- a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
+++ b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
@@ -45,19 +45,19 @@ public class DefaultUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
     private ConfDAO confDAO;
 
     @Override
-    public WorkflowResult<Pair<Long, Boolean>> create(final UserTO userTO, final boolean storePassword) {
+    public WorkflowResult<Pair<String, Boolean>> create(final UserTO userTO, final boolean storePassword) {
         return create(userTO, false, true);
     }
 
     @Override
-    public WorkflowResult<Pair<Long, Boolean>> create(final UserTO userTO, final boolean disablePwdPolicyCheck,
+    public WorkflowResult<Pair<String, Boolean>> create(final UserTO userTO, final boolean disablePwdPolicyCheck,
             final boolean storePassword) {
 
         return create(userTO, disablePwdPolicyCheck, null, storePassword);
     }
 
     @Override
-    public WorkflowResult<Pair<Long, Boolean>> create(final UserTO userTO, final boolean disablePwdPolicyCheck,
+    public WorkflowResult<Pair<String, Boolean>> create(final UserTO userTO, final boolean disablePwdPolicyCheck,
             final Boolean enabled, final boolean storePassword) {
 
         User user = entityFactory.newEntity(User.class);
@@ -87,12 +87,12 @@ public class DefaultUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
         final PropagationByResource propByRes = new PropagationByResource();
         propByRes.set(ResourceOperation.CREATE, userDAO.findAllResourceNames(user));
 
-        return new WorkflowResult<Pair<Long, Boolean>>(
+        return new WorkflowResult<Pair<String, Boolean>>(
                 new ImmutablePair<>(user.getKey(), propagateEnable), propByRes, "create");
     }
 
     @Override
-    protected WorkflowResult<Long> doActivate(final User user, final String token) {
+    protected WorkflowResult<String> doActivate(final User user, final String token) {
         if (!user.checkToken(token)) {
             throw new WorkflowException(new IllegalArgumentException("Wrong token: " + token + " for " + user));
         }
@@ -115,7 +115,7 @@ public class DefaultUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
     }
 
     @Override
-    protected WorkflowResult<Long> doSuspend(final User user) {
+    protected WorkflowResult<String> doSuspend(final User user) {
         user.setStatus("suspended");
         User updated = userDAO.save(user);
 
@@ -123,7 +123,7 @@ public class DefaultUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
     }
 
     @Override
-    protected WorkflowResult<Long> doReactivate(final User user) {
+    protected WorkflowResult<String> doReactivate(final User user) {
         user.setStatus("active");
         User updated = userDAO.save(user);
 
@@ -162,7 +162,7 @@ public class DefaultUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
     }
 
     @Override
-    public WorkflowResult<Long> execute(final UserTO userTO, final String taskId) {
+    public WorkflowResult<String> execute(final UserTO userTO, final String taskId) {
         throw new WorkflowException(new UnsupportedOperationException("Not supported."));
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/CamelRouteLogic.java
----------------------------------------------------------------------
diff --git a/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/CamelRouteLogic.java b/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/CamelRouteLogic.java
index b30a010..b489f3b 100644
--- a/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/CamelRouteLogic.java
+++ b/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/CamelRouteLogic.java
@@ -106,8 +106,8 @@ public class CamelRouteLogic extends AbstractTransactionalLogic<CamelRouteTO> {
         } else {
             MetricRegistry registry = registryService.getMetricsRegistry();
             for (Map.Entry<String, Timer> entry : registry.getTimers().entrySet()) {
-                CamelMetrics.MeanRate meanRate = new CamelMetrics.MeanRate();
-                meanRate.setRouteId(StringUtils.substringBetween(entry.getKey(), ":", "."));
+                CamelMetrics.MeanRate meanRate = new CamelMetrics.MeanRate();                
+                meanRate.setRouteId(StringUtils.substringBetween(entry.getKey(), ".", "."));
                 meanRate.setValue(entry.getValue().getMeanRate());
                 metrics.getResponseMeanRates().add(meanRate);
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java
----------------------------------------------------------------------
diff --git a/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java b/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java
index 3c72ed2..9b5de4c 100644
--- a/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java
+++ b/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java
@@ -178,7 +178,7 @@ public class CamelRouteLoader implements SyncopeLoader {
                     String routeId = ((Element) routeElement).getAttribute("id");
 
                     jdbcTemplate.update(
-                            String.format("INSERT INTO %s(NAME, ANYTYPEKIND, CONTENT) VALUES (?, ?, ?)",
+                            String.format("INSERT INTO %s(KEY, ANYTYPEKIND, CONTENT) VALUES (?, ?, ?)",
                                     CamelRoute.class.getSimpleName()),
                             new Object[] { routeId, anyTypeKind.name(), routeContent });
                     LOG.info("[{}] Route successfully loaded: {}", domain, routeId);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/CamelRouteDAO.java
----------------------------------------------------------------------
diff --git a/ext/camel/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/CamelRouteDAO.java b/ext/camel/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/CamelRouteDAO.java
index 8162bde..d843ab8 100644
--- a/ext/camel/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/CamelRouteDAO.java
+++ b/ext/camel/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/CamelRouteDAO.java
@@ -22,7 +22,7 @@ import java.util.List;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.core.persistence.api.entity.CamelRoute;
 
-public interface CamelRouteDAO extends DAO<CamelRoute, String> {
+public interface CamelRouteDAO extends DAO<CamelRoute> {
 
     CamelRoute find(String key);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/CamelRoute.java
----------------------------------------------------------------------
diff --git a/ext/camel/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/CamelRoute.java b/ext/camel/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/CamelRoute.java
index 5e25c68..8e6676e 100644
--- a/ext/camel/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/CamelRoute.java
+++ b/ext/camel/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/CamelRoute.java
@@ -20,9 +20,7 @@ package org.apache.syncope.core.persistence.api.entity;
 
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 
-public interface CamelRoute extends Entity<String> {
-
-    void setKey(String name);
+public interface CamelRoute extends ProvidedKeyEntity {
 
     AnyTypeKind getAnyTypeKind();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/persistence-jpa/pom.xml
----------------------------------------------------------------------
diff --git a/ext/camel/persistence-jpa/pom.xml b/ext/camel/persistence-jpa/pom.xml
index 4dfece3..a51d018 100644
--- a/ext/camel/persistence-jpa/pom.xml
+++ b/ext/camel/persistence-jpa/pom.xml
@@ -64,7 +64,7 @@ under the License.
           </dependency>
         </dependencies>
         <configuration>
-          <persistenceXmlFile>${rootpom.basedir}/core/persistence-jpa/src/test/resources/META-INF/persistence-enhance.xml</persistenceXmlFile> 
+          <persistenceXmlFile>${rootpom.basedir}/core/persistence-jpa/src/main/resources/persistence-enhance.xml</persistenceXmlFile> 
           <includes>org/apache/syncope/core/persistence/jpa/entity/**/*.class</includes>
           <connectionDriverName>org.springframework.jdbc.datasource.DriverManagerDataSource</connectionDriverName>
           <connectionProperties>

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPACamelRouteDAO.java
----------------------------------------------------------------------
diff --git a/ext/camel/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPACamelRouteDAO.java b/ext/camel/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPACamelRouteDAO.java
index 8894992..7d941ab 100644
--- a/ext/camel/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPACamelRouteDAO.java
+++ b/ext/camel/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPACamelRouteDAO.java
@@ -28,7 +28,7 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPACamelRouteDAO extends AbstractDAO<CamelRoute, String> implements CamelRouteDAO {
+public class JPACamelRouteDAO extends AbstractDAO<CamelRoute> implements CamelRouteDAO {
 
     @Override
     public CamelRoute find(final String key) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPACamelRoute.java
----------------------------------------------------------------------
diff --git a/ext/camel/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPACamelRoute.java b/ext/camel/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPACamelRoute.java
index b4ab959..813cb9a 100644
--- a/ext/camel/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPACamelRoute.java
+++ b/ext/camel/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPACamelRoute.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.Lob;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
@@ -30,15 +29,12 @@ import org.apache.syncope.core.persistence.api.entity.CamelRoute;
 
 @Entity
 @Table(name = JPACamelRoute.TABLE)
-public class JPACamelRoute extends AbstractEntity<String> implements CamelRoute {
+public class JPACamelRoute extends AbstractProvidedKeyEntity implements CamelRoute {
 
     private static final long serialVersionUID = -2767606675667839161L;
 
     public static final String TABLE = "CamelRoute";
 
-    @Id
-    private String name;
-
     @NotNull
     @Enumerated(EnumType.STRING)
     private AnyTypeKind anyTypeKind;
@@ -47,16 +43,6 @@ public class JPACamelRoute extends AbstractEntity<String> implements CamelRoute
     private String content;
 
     @Override
-    public String getKey() {
-        return name;
-    }
-
-    @Override
-    public void setKey(final String name) {
-        this.name = name;
-    }
-
-    @Override
     public AnyTypeKind getAnyTypeKind() {
         return anyTypeKind;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelAnyObjectProvisioningManager.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelAnyObjectProvisioningManager.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelAnyObjectProvisioningManager.java
index 3e2f9f8..0a51ce9 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelAnyObjectProvisioningManager.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelAnyObjectProvisioningManager.java
@@ -36,13 +36,13 @@ public class CamelAnyObjectProvisioningManager
         extends AbstractCamelProvisioningManager implements AnyObjectProvisioningManager {
 
     @Override
-    public Pair<Long, List<PropagationStatus>> create(final AnyObjectTO any, final boolean nullPriorityAsync) {
+    public Pair<String, List<PropagationStatus>> create(final AnyObjectTO any, final boolean nullPriorityAsync) {
         return create(any, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
     @SuppressWarnings("unchecked")
-    public Pair<Long, List<PropagationStatus>> create(
+    public Pair<String, List<PropagationStatus>> create(
             final AnyObjectTO anyObjectTO, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = getConsumer("direct:createAnyObjectPort");
@@ -63,13 +63,15 @@ public class CamelAnyObjectProvisioningManager
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> update(final AnyObjectPatch anyPatch, final boolean nullPriorityAsync) {
+    public Pair<String, List<PropagationStatus>> update(
+            final AnyObjectPatch anyPatch, final boolean nullPriorityAsync) {
+
         return update(anyPatch, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
     @SuppressWarnings("unchecked")
-    public Pair<Long, List<PropagationStatus>> update(
+    public Pair<String, List<PropagationStatus>> update(
             final AnyObjectPatch anyPatch, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = getConsumer("direct:updateAnyObjectPort");
@@ -90,14 +92,14 @@ public class CamelAnyObjectProvisioningManager
     }
 
     @Override
-    public List<PropagationStatus> delete(final Long anyObjectObjectKey, final boolean nullPriorityAsync) {
+    public List<PropagationStatus> delete(final String anyObjectObjectKey, final boolean nullPriorityAsync) {
         return delete(anyObjectObjectKey, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
     @SuppressWarnings("unchecked")
     public List<PropagationStatus> delete(
-            final Long key, final Set<String> excludedResources, final boolean nullPriorityAsync) {
+            final String key, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = getConsumer("direct:deleteAnyObjectPort");
 
@@ -117,7 +119,7 @@ public class CamelAnyObjectProvisioningManager
     }
 
     @Override
-    public Long unlink(final AnyObjectPatch anyObjectPatch) {
+    public String unlink(final AnyObjectPatch anyObjectPatch) {
         PollingConsumer pollingConsumer = getConsumer("direct:unlinkAnyObjectPort");
 
         sendMessage("direct:unlinkAnyObject", anyObjectPatch);
@@ -128,11 +130,11 @@ public class CamelAnyObjectProvisioningManager
             throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT);
         }
 
-        return exchange.getIn().getBody(Long.class);
+        return exchange.getIn().getBody(String.class);
     }
 
     @Override
-    public Long link(final AnyObjectPatch anyObjectPatch) {
+    public String link(final AnyObjectPatch anyObjectPatch) {
         PollingConsumer pollingConsumer = getConsumer("direct:linkAnyObjectPort");
 
         sendMessage("direct:linkAnyObject", anyObjectPatch);
@@ -143,13 +145,13 @@ public class CamelAnyObjectProvisioningManager
             throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT);
         }
 
-        return exchange.getIn().getBody(Long.class);
+        return exchange.getIn().getBody(String.class);
     }
 
     @Override
     @SuppressWarnings("unchecked")
     public List<PropagationStatus> provision(
-            final Long key, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String key, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = getConsumer("direct:provisionAnyObjectPort");
 
@@ -171,7 +173,7 @@ public class CamelAnyObjectProvisioningManager
     @Override
     @SuppressWarnings("unchecked")
     public List<PropagationStatus> deprovision(
-            final Long key, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String key, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = getConsumer("direct:deprovisionAnyObjectPort");
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java
index 0217f17..d3745a1 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java
@@ -36,13 +36,13 @@ public class CamelGroupProvisioningManager
         extends AbstractCamelProvisioningManager implements GroupProvisioningManager {
 
     @Override
-    public Pair<Long, List<PropagationStatus>> create(final GroupTO any, final boolean nullPriorityAsync) {
+    public Pair<String, List<PropagationStatus>> create(final GroupTO any, final boolean nullPriorityAsync) {
         return create(any, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
     @SuppressWarnings("unchecked")
-    public Pair<Long, List<PropagationStatus>> create(
+    public Pair<String, List<PropagationStatus>> create(
             final GroupTO groupTO, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = getConsumer("direct:createGroupPort");
@@ -64,9 +64,9 @@ public class CamelGroupProvisioningManager
 
     @Override
     @SuppressWarnings("unchecked")
-    public Pair<Long, List<PropagationStatus>> create(
+    public Pair<String, List<PropagationStatus>> create(
             final GroupTO groupTO,
-            final Map<Long, String> groupOwnerMap,
+            final Map<String, String> groupOwnerMap,
             final Set<String> excludedResources,
             final boolean nullPriorityAsync) {
 
@@ -89,13 +89,13 @@ public class CamelGroupProvisioningManager
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> update(final GroupPatch anyPatch, final boolean nullPriorityAsync) {
+    public Pair<String, List<PropagationStatus>> update(final GroupPatch anyPatch, final boolean nullPriorityAsync) {
         return update(anyPatch, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
     @SuppressWarnings("unchecked")
-    public Pair<Long, List<PropagationStatus>> update(
+    public Pair<String, List<PropagationStatus>> update(
             final GroupPatch anyPatch, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = getConsumer("direct:updateGroupPort");
@@ -116,14 +116,14 @@ public class CamelGroupProvisioningManager
     }
 
     @Override
-    public List<PropagationStatus> delete(final Long key, final boolean nullPriorityAsync) {
+    public List<PropagationStatus> delete(final String key, final boolean nullPriorityAsync) {
         return delete(key, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
     @SuppressWarnings("unchecked")
     public List<PropagationStatus> delete(
-            final Long key, final Set<String> excludedResources, final boolean nullPriorityAsync) {
+            final String key, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = getConsumer("direct:deleteGroupPort");
 
@@ -143,7 +143,7 @@ public class CamelGroupProvisioningManager
     }
 
     @Override
-    public Long unlink(final GroupPatch groupPatch) {
+    public String unlink(final GroupPatch groupPatch) {
         PollingConsumer pollingConsumer = getConsumer("direct:unlinkGroupPort");
 
         sendMessage("direct:unlinkGroup", groupPatch);
@@ -154,11 +154,11 @@ public class CamelGroupProvisioningManager
             throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT);
         }
 
-        return exchange.getIn().getBody(Long.class);
+        return exchange.getIn().getBody(String.class);
     }
 
     @Override
-    public Long link(final GroupPatch groupPatch) {
+    public String link(final GroupPatch groupPatch) {
         PollingConsumer pollingConsumer = getConsumer("direct:linkGroupPort");
 
         sendMessage("direct:linkGroup", groupPatch);
@@ -169,13 +169,13 @@ public class CamelGroupProvisioningManager
             throw (RuntimeException) exchange.getProperty(Exchange.EXCEPTION_CAUGHT);
         }
 
-        return exchange.getIn().getBody(Long.class);
+        return exchange.getIn().getBody(String.class);
     }
 
     @Override
     @SuppressWarnings("unchecked")
     public List<PropagationStatus> provision(
-            final Long key, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String key, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = getConsumer("direct:provisionGroupPort");
 
@@ -197,7 +197,7 @@ public class CamelGroupProvisioningManager
     @Override
     @SuppressWarnings("unchecked")
     public List<PropagationStatus> deprovision(
-            final Long key, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String key, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = getConsumer("direct:deprovisionGroupPort");
 


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportTemplateDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportTemplateDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportTemplateDAO.java
index 08b434b..fbecc7e 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportTemplateDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportTemplateDAO.java
@@ -26,7 +26,7 @@ import org.apache.syncope.core.persistence.jpa.entity.JPAReportTemplate;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAReportTemplateDAO extends AbstractDAO<ReportTemplate, String> implements ReportTemplateDAO {
+public class JPAReportTemplateDAO extends AbstractDAO<ReportTemplate> implements ReportTemplateDAO {
 
     @Override
     public ReportTemplate find(final String key) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
index e8b4816..fc91712 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
@@ -35,7 +35,7 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPARoleDAO extends AbstractDAO<Role, String> implements RoleDAO {
+public class JPARoleDAO extends AbstractDAO<Role> implements RoleDAO {
 
     @Autowired
     private AnySearchDAO searchDAO;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPASecurityQuestionDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPASecurityQuestionDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPASecurityQuestionDAO.java
index 7028080..c9b18ec 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPASecurityQuestionDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPASecurityQuestionDAO.java
@@ -29,13 +29,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPASecurityQuestionDAO extends AbstractDAO<SecurityQuestion, Long> implements SecurityQuestionDAO {
+public class JPASecurityQuestionDAO extends AbstractDAO<SecurityQuestion> implements SecurityQuestionDAO {
 
     @Autowired
     private UserDAO userDAO;
 
     @Override
-    public SecurityQuestion find(final Long key) {
+    public SecurityQuestion find(final String key) {
         return entityManager().find(JPASecurityQuestion.class, key);
     }
 
@@ -52,7 +52,7 @@ public class JPASecurityQuestionDAO extends AbstractDAO<SecurityQuestion, Long>
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         SecurityQuestion securityQuestion = find(key);
         if (securityQuestion == null) {
             return;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
index 95c0c57..414a171 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
@@ -42,7 +42,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ReflectionUtils;
 
 @Repository
-public class JPATaskDAO extends AbstractDAO<Task, Long> implements TaskDAO {
+public class JPATaskDAO extends AbstractDAO<Task> implements TaskDAO {
 
     @Override
     public Class<? extends Task> getEntityReference(final TaskType type) {
@@ -78,7 +78,7 @@ public class JPATaskDAO extends AbstractDAO<Task, Long> implements TaskDAO {
     @Transactional(readOnly = true)
     @SuppressWarnings("unchecked")
     @Override
-    public <T extends Task> T find(final Long key) {
+    public <T extends Task> T find(final String key) {
         return (T) entityManager().find(AbstractTask.class, key);
     }
 
@@ -87,9 +87,9 @@ public class JPATaskDAO extends AbstractDAO<Task, Long> implements TaskDAO {
                 append(getEntityReference(type).getSimpleName()).
                 append(" t WHERE ");
         if (type == TaskType.SCHEDULED) {
-            builder.append("t.id NOT IN (SELECT t.id FROM ").append(JPAPushTask.class.getSimpleName()).append(" t) ").
+            builder.append("t.key NOT IN (SELECT t.key FROM ").append(JPAPushTask.class.getSimpleName()).append(" t) ").
                     append("AND ").
-                    append("t.id NOT IN (SELECT t.id FROM ").append(JPAPullTask.class.getSimpleName()).append(" t)");
+                    append("t.key NOT IN (SELECT t.key FROM ").append(JPAPullTask.class.getSimpleName()).append(" t)");
         } else {
             builder.append("1=1");
         }
@@ -107,7 +107,7 @@ public class JPATaskDAO extends AbstractDAO<Task, Long> implements TaskDAO {
         } else {
             queryString.append("t.executions IS EMPTY ");
         }
-        queryString.append("ORDER BY t.id DESC");
+        queryString.append("ORDER BY t.key DESC");
 
         Query query = entityManager().createQuery(queryString.toString());
         return query.getResultList();
@@ -124,7 +124,7 @@ public class JPATaskDAO extends AbstractDAO<Task, Long> implements TaskDAO {
             final ExternalResource resource,
             final Notification notification,
             final AnyTypeKind anyTypeKind,
-            final Long anyKey) {
+            final String anyKey) {
 
         if (resource != null
                 && type != TaskType.PROPAGATION && type != TaskType.PUSH && type != TaskType.PULL) {
@@ -136,6 +136,10 @@ public class JPATaskDAO extends AbstractDAO<Task, Long> implements TaskDAO {
             throw new IllegalArgumentException(type + " is not related to users, groups or any objects");
         }
 
+        if (notification != null && type != TaskType.NOTIFICATION) {
+            throw new IllegalArgumentException(type + " is not related to notifications");
+        }
+
         StringBuilder queryString = buildFindAllQuery(type);
 
         if (resource != null) {
@@ -164,7 +168,7 @@ public class JPATaskDAO extends AbstractDAO<Task, Long> implements TaskDAO {
         }
 
         if (statement.length() == 0) {
-            statement.append("ORDER BY t.id DESC");
+            statement.append("ORDER BY t.key DESC");
         } else {
             statement.insert(0, "ORDER BY ");
         }
@@ -178,7 +182,7 @@ public class JPATaskDAO extends AbstractDAO<Task, Long> implements TaskDAO {
             final ExternalResource resource,
             final Notification notification,
             final AnyTypeKind anyTypeKind,
-            final Long anyKey,
+            final String anyKey,
             final int page,
             final int itemsPerPage,
             final List<OrderByClause> orderByClauses) {
@@ -215,7 +219,7 @@ public class JPATaskDAO extends AbstractDAO<Task, Long> implements TaskDAO {
             final ExternalResource resource,
             final Notification notification,
             final AnyTypeKind anyTypeKind,
-            final Long anyKey) {
+            final String anyKey) {
 
         StringBuilder queryString = buildFindAllQuery(type, resource, notification, anyTypeKind, anyKey);
 
@@ -242,7 +246,7 @@ public class JPATaskDAO extends AbstractDAO<Task, Long> implements TaskDAO {
     }
 
     @Override
-    public void delete(final Long id) {
+    public void delete(final String id) {
         Task task = find(id);
         if (task == null) {
             return;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
index c0fcacb..e4c97a6 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
@@ -34,13 +34,13 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ReflectionUtils;
 
 @Repository
-public class JPATaskExecDAO extends AbstractDAO<TaskExec, Long> implements TaskExecDAO {
+public class JPATaskExecDAO extends AbstractDAO<TaskExec> implements TaskExecDAO {
 
     @Autowired
     private TaskDAO taskDAO;
 
     @Override
-    public TaskExec find(final Long key) {
+    public TaskExec find(final String key) {
         return entityManager().find(JPATaskExec.class, key);
     }
 
@@ -117,9 +117,9 @@ public class JPATaskExecDAO extends AbstractDAO<TaskExec, Long> implements TaskE
     }
 
     @Override
-    public int count(final Long taskKey) {
+    public int count(final String taskKey) {
         Query countQuery = entityManager().createNativeQuery(
-                "SELECT COUNT(e.id) FROM " + JPATaskExec.TABLE + " e WHERE e.task_id=?1");
+                "SELECT COUNT(e.key) FROM " + JPATaskExec.TABLE + " e WHERE e.task_key=?1");
         countQuery.setParameter(1, taskKey);
 
         return ((Number) countQuery.getSingleResult()).intValue();
@@ -136,7 +136,7 @@ public class JPATaskExecDAO extends AbstractDAO<TaskExec, Long> implements TaskE
         }
 
         if (statement.length() == 0) {
-            statement.append("ORDER BY e.id DESC");
+            statement.append("ORDER BY e.key DESC");
         } else {
             statement.insert(0, "ORDER BY ");
         }
@@ -171,15 +171,15 @@ public class JPATaskExecDAO extends AbstractDAO<TaskExec, Long> implements TaskE
 
     @Override
     @Transactional(rollbackFor = { Throwable.class })
-    public void saveAndAdd(final Long taskId, final TaskExec execution) {
-        Task task = taskDAO.find(taskId);
+    public void saveAndAdd(final String taskKey, final TaskExec execution) {
+        Task task = taskDAO.find(taskKey);
         task.add(execution);
         taskDAO.save(task);
     }
 
     @Override
-    public void delete(final Long id) {
-        TaskExec execution = find(id);
+    public void delete(final String key) {
+        TaskExec execution = find(key);
         if (execution == null) {
             return;
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
index 62d179f..5c3b241 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
@@ -69,6 +69,7 @@ import org.apache.syncope.core.persistence.jpa.entity.JPAAnyUtilsFactory;
 import org.apache.syncope.core.persistence.jpa.entity.user.JPADynRoleMembership;
 import org.apache.syncope.core.persistence.jpa.entity.user.JPAUDynGroupMembership;
 import org.apache.syncope.core.persistence.jpa.entity.user.JPAUser;
+import org.apache.syncope.core.provisioning.api.utils.EntityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.stereotype.Repository;
@@ -161,12 +162,12 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
 
     @Transactional(readOnly = true)
     @Override
-    public User authFind(final String username) {
+    public User authFindByUsername(final String username) {
         if (username == null) {
             throw new NotFoundException("Null username");
         }
 
-        User user = find(username);
+        User user = findByUsername(username);
         if (user == null) {
             throw new NotFoundException("User " + username);
         }
@@ -177,7 +178,7 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
     }
 
     @Override
-    public User find(final String username) {
+    public User findByUsername(final String username) {
         TypedQuery<User> query = entityManager().createQuery("SELECT e FROM " + JPAUser.class.getSimpleName()
                 + " e WHERE e.username = :username", User.class);
         query.setParameter("username", username);
@@ -458,14 +459,8 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
 
     @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
     @Override
-    public Collection<Long> findAllGroupKeys(final User user) {
-        return CollectionUtils.collect(findAllGroups(user), new Transformer<Group, Long>() {
-
-            @Override
-            public Long transform(final Group input) {
-                return input.getKey();
-            }
-        });
+    public Collection<String> findAllGroupKeys(final User user) {
+        return CollectionUtils.collect(findAllGroups(user), EntityUtils.<Group>keyTransformer());
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java
index b9ebeac..2643861 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java
@@ -35,7 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAVirSchemaDAO extends AbstractDAO<VirSchema, String> implements VirSchemaDAO {
+public class JPAVirSchemaDAO extends AbstractDAO<VirSchema> implements VirSchemaDAO {
 
     @Autowired
     private ExternalResourceDAO resourceDAO;
@@ -51,7 +51,7 @@ public class JPAVirSchemaDAO extends AbstractDAO<VirSchema, String> implements V
                 append(JPAVirSchema.class.getSimpleName()).
                 append(" e WHERE ");
         for (AnyTypeClass anyTypeClass : anyTypeClasses) {
-            queryString.append("e.anyTypeClass.name='").append(anyTypeClass.getKey()).append("' OR ");
+            queryString.append("e.anyTypeClass.key='").append(anyTypeClass.getKey()).append("' OR ");
         }
 
         TypedQuery<VirSchema> query = entityManager().createQuery(

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAnnotatedEntity.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAnnotatedEntity.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAnnotatedEntity.java
index ca29980..e9e71fa 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAnnotatedEntity.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAnnotatedEntity.java
@@ -28,12 +28,10 @@ import org.apache.syncope.core.persistence.api.entity.AnnotatedEntity;
 
 /**
  * Abstract wrapper for common system information.
- *
- * @param <KEY> the type of the key of this entity
  */
 @MappedSuperclass
 @EntityListeners(value = AnnotatedEntityListener.class)
-public abstract class AbstractAnnotatedEntity<KEY> extends AbstractEntity<KEY> implements AnnotatedEntity<KEY> {
+public abstract class AbstractAnnotatedEntity extends AbstractGeneratedKeyEntity implements AnnotatedEntity {
 
     private static final long serialVersionUID = -4801685541488201219L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAny.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAny.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAny.java
index ad38542..496e689 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAny.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAny.java
@@ -37,9 +37,7 @@ import org.apache.syncope.core.persistence.jpa.validation.entity.AnyCheck;
 
 @AnyCheck
 @MappedSuperclass
-public abstract class AbstractAny<P extends PlainAttr<?>>
-        extends AbstractAnnotatedEntity<Long>
-        implements Any<P> {
+public abstract class AbstractAny<P extends PlainAttr<?>> extends AbstractAnnotatedEntity implements Any<P> {
 
     private static final long serialVersionUID = -2666540708092702810L;
 
@@ -105,7 +103,7 @@ public abstract class AbstractAny<P extends PlainAttr<?>>
     @Override
     public List<String> getResourceNames() {
         return CollectionUtils.collect(
-                getResources(), EntityUtils.<String, ExternalResource>keyTransformer(), new ArrayList<String>());
+                getResources(), EntityUtils.<ExternalResource>keyTransformer(), new ArrayList<String>());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractDynMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractDynMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractDynMembership.java
index 0b77dac..f872339 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractDynMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractDynMembership.java
@@ -25,7 +25,7 @@ import org.apache.syncope.core.persistence.api.entity.DynMembership;
 
 @MappedSuperclass
 public abstract class AbstractDynMembership<A extends Any<?>>
-        extends AbstractEntity<Long> implements DynMembership<A> {
+        extends AbstractGeneratedKeyEntity implements DynMembership<A> {
 
     private static final long serialVersionUID = 921821654690948787L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractEntity.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractEntity.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractEntity.java
index d66e9d2..08c367d 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractEntity.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractEntity.java
@@ -29,7 +29,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 
-public abstract class AbstractEntity<KEY> implements Entity<KEY> {
+public abstract class AbstractEntity implements Entity {
 
     private static final long serialVersionUID = -9017214159540857901L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractExec.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractExec.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractExec.java
index c3c63ee..d27dba2 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractExec.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractExec.java
@@ -29,7 +29,7 @@ import javax.validation.constraints.NotNull;
 import org.apache.syncope.core.persistence.api.entity.Exec;
 
 @MappedSuperclass
-public abstract class AbstractExec extends AbstractEntity<Long> implements Exec {
+public abstract class AbstractExec extends AbstractGeneratedKeyEntity implements Exec {
 
     private static final long serialVersionUID = -812344822970166317L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractGeneratedKeyEntity.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractGeneratedKeyEntity.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractGeneratedKeyEntity.java
new file mode 100644
index 0000000..c3924c8
--- /dev/null
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractGeneratedKeyEntity.java
@@ -0,0 +1,42 @@
+/*
+ * 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.core.persistence.jpa.entity;
+
+import javax.persistence.Column;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+
+@MappedSuperclass
+public abstract class AbstractGeneratedKeyEntity extends AbstractEntity {
+
+    private static final long serialVersionUID = 4705587655441599524L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "uuid")
+    @Column(length = 36)
+    private String key;
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
index f892a8d..5c95118 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
@@ -38,13 +38,13 @@ import org.apache.syncope.core.persistence.jpa.validation.entity.PlainAttrCheck;
 
 @MappedSuperclass
 @PlainAttrCheck
-public abstract class AbstractPlainAttr<O extends Any<?>> extends AbstractEntity<Long> implements PlainAttr<O> {
+public abstract class AbstractPlainAttr<O extends Any<?>> extends AbstractGeneratedKeyEntity implements PlainAttr<O> {
 
     private static final long serialVersionUID = -9115431608821806124L;
 
     @NotNull
     @ManyToOne(fetch = FetchType.EAGER)
-    @Column(name = "schema_name")
+    @Column(name = "schema_key")
     protected JPAPlainSchema schema;
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttrValue.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttrValue.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttrValue.java
index 21f835b..bac48c6 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttrValue.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttrValue.java
@@ -33,7 +33,6 @@ import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import org.apache.syncope.common.lib.types.AttrSchemaType;
 import org.apache.syncope.core.provisioning.api.utils.FormatUtils;
-import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidPlainAttrValueException;
 import org.apache.syncope.core.persistence.api.attrvalue.validation.ParsingValidationException;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.PlainSchema;
@@ -42,7 +41,7 @@ import org.apache.syncope.core.spring.security.Encryptor;
 
 @MappedSuperclass
 @PlainAttrValueCheck
-public abstract class AbstractPlainAttrValue extends AbstractEntity<Long> implements PlainAttrValue {
+public abstract class AbstractPlainAttrValue extends AbstractGeneratedKeyEntity implements PlainAttrValue {
 
     private static final long serialVersionUID = -9141923816611244785L;
 
@@ -232,10 +231,7 @@ public abstract class AbstractPlainAttrValue extends AbstractEntity<Long> implem
 
     @Override
     public String getValueAsString(final AttrSchemaType type) {
-        Exception exception = null;
-
-        String result = null;
-
+        String result;
         switch (type) {
 
             case Boolean:
@@ -260,8 +256,8 @@ public abstract class AbstractPlainAttrValue extends AbstractEntity<Long> implem
                 result = getAttr() == null || getAttr().getSchema() == null
                         || getAttr().getSchema().getConversionPattern() == null
                                 ? FormatUtils.format(getDateValue())
-                                : FormatUtils.format(getDateValue(), false, getAttr().getSchema().
-                                        getConversionPattern());
+                                : FormatUtils.format(
+                                        getDateValue(), false, getAttr().getSchema().getConversionPattern());
                 break;
 
             case Binary:
@@ -276,11 +272,6 @@ public abstract class AbstractPlainAttrValue extends AbstractEntity<Long> implem
                 break;
         }
 
-        if (exception != null) {
-            throw new InvalidPlainAttrValueException(
-                    "While trying to format '" + getValue() + "' as " + type, exception);
-        }
-
         return result;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractProvidedKeyEntity.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractProvidedKeyEntity.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractProvidedKeyEntity.java
new file mode 100644
index 0000000..49b6713
--- /dev/null
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractProvidedKeyEntity.java
@@ -0,0 +1,43 @@
+/*
+ * 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.core.persistence.jpa.entity;
+
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+import org.apache.syncope.core.persistence.api.entity.ProvidedKeyEntity;
+
+@MappedSuperclass
+public abstract class AbstractProvidedKeyEntity extends AbstractEntity implements ProvidedKeyEntity {
+
+    private static final long serialVersionUID = 821537874069666593L;
+
+    @Id
+    private String key;
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public void setKey(final String key) {
+        this.key = key;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AnnotatedEntityListener.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AnnotatedEntityListener.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AnnotatedEntityListener.java
index 23a3815..155aa2b 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AnnotatedEntityListener.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AnnotatedEntityListener.java
@@ -32,7 +32,7 @@ public class AnnotatedEntityListener {
 
     @PrePersist
     @PreUpdate
-    public void setSysInfo(final AnnotatedEntity<?> entity) {
+    public void setSysInfo(final AnnotatedEntity entity) {
         String username = AuthContextUtils.getUsername();
         LOG.debug("Set system properties for '{}'", entity);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyAbout.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyAbout.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyAbout.java
index e142820..3839be5 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyAbout.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyAbout.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
@@ -30,16 +29,13 @@ import org.apache.syncope.core.persistence.api.entity.Notification;
 
 @Entity
 @Table(name = JPAAnyAbout.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "notification_id", "anyType_name" }))
-public class JPAAnyAbout extends AbstractEntity<Long> implements AnyAbout {
+        @UniqueConstraint(columnNames = { "notification_key", "anyType_key" }))
+public class JPAAnyAbout extends AbstractGeneratedKeyEntity implements AnyAbout {
 
     private static final long serialVersionUID = 3517381731849788407L;
 
     public static final String TABLE = "AnyAbout";
 
-    @Id
-    private Long id;
-
     @ManyToOne
     private JPANotification notification;
 
@@ -50,11 +46,6 @@ public class JPAAnyAbout extends AbstractEntity<Long> implements AnyAbout {
     private String filter;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public Notification getNotification() {
         return notification;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTemplateRealm.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTemplateRealm.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTemplateRealm.java
index cdb4b5e..911eeaf 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTemplateRealm.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTemplateRealm.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 import javax.persistence.UniqueConstraint;
@@ -29,25 +28,17 @@ import org.apache.syncope.core.persistence.jpa.entity.resource.AbstractAnyTempla
 
 @Entity
 @Table(name = JPAAnyTemplateRealm.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "realm_id", "anyType_name" }))
+        @UniqueConstraint(columnNames = { "realm_key", "anyType_key" }))
 public class JPAAnyTemplateRealm extends AbstractAnyTemplate implements AnyTemplateRealm {
 
     public static final String TABLE = "AnyTemplateRealm";
 
     private static final long serialVersionUID = 1863029633568957907L;
 
-    @Id
-    private Long id;
-
     @ManyToOne
     private JPARealm realm;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public Realm getRealm() {
         return realm;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyType.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyType.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyType.java
index 64cd644..272716c 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyType.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyType.java
@@ -25,7 +25,6 @@ import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.JoinTable;
 import javax.persistence.ManyToMany;
@@ -40,37 +39,24 @@ import org.apache.syncope.core.persistence.jpa.validation.entity.AnyTypeCheck;
 @Table(name = JPAAnyType.TABLE)
 @AnyTypeCheck
 @Cacheable
-public class JPAAnyType extends AbstractEntity<String> implements AnyType {
+public class JPAAnyType extends AbstractProvidedKeyEntity implements AnyType {
 
     private static final long serialVersionUID = 2668267884059219835L;
 
     public static final String TABLE = "AnyType";
 
-    @Id
-    private String name;
-
     @NotNull
     @Enumerated(EnumType.STRING)
     private AnyTypeKind kind;
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "anyType_name", referencedColumnName = "name"),
+            @JoinColumn(name = "anyType_key", referencedColumnName = "key"),
             inverseJoinColumns =
-            @JoinColumn(name = "anyTypeClass_name", referencedColumnName = "name"))
+            @JoinColumn(name = "anyTypeClass_key", referencedColumnName = "key"))
     private List<JPAAnyTypeClass> classes = new ArrayList<>();
 
     @Override
-    public String getKey() {
-        return name;
-    }
-
-    @Override
-    public void setKey(final String name) {
-        this.name = name;
-    }
-
-    @Override
     public AnyTypeKind getKind() {
         return kind;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTypeClass.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTypeClass.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTypeClass.java
index 58d5eb1..5fb64aa 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTypeClass.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTypeClass.java
@@ -23,7 +23,6 @@ import java.util.List;
 import javax.persistence.Cacheable;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.ManyToMany;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
@@ -35,15 +34,12 @@ import org.apache.syncope.core.persistence.api.entity.VirSchema;
 @Entity
 @Table(name = JPAAnyTypeClass.TABLE)
 @Cacheable
-public class JPAAnyTypeClass extends AbstractEntity<String> implements AnyTypeClass {
+public class JPAAnyTypeClass extends AbstractProvidedKeyEntity implements AnyTypeClass {
 
     private static final long serialVersionUID = -1750247153774475453L;
 
     public static final String TABLE = "AnyTypeClass";
 
-    @Id
-    private String name;
-
     @ManyToMany(fetch = FetchType.EAGER, mappedBy = "classes")
     private List<JPAAnyType> types = new ArrayList<>();
 
@@ -57,16 +53,6 @@ public class JPAAnyTypeClass extends AbstractEntity<String> implements AnyTypeCl
     private List<JPAVirSchema> virSchemas = new ArrayList<>();
 
     @Override
-    public String getKey() {
-        return name;
-    }
-
-    @Override
-    public void setKey(final String name) {
-        this.name = name;
-    }
-
-    @Override
     public boolean add(final PlainSchema schema) {
         checkType(schema, JPAPlainSchema.class);
         return this.plainSchemas.add((JPAPlainSchema) schema);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyUtils.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyUtils.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyUtils.java
index 22c632a..a4d6eea 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyUtils.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyUtils.java
@@ -99,7 +99,7 @@ public class JPAAnyUtils implements AnyUtils {
 
     @Override
     public <T extends PlainAttr<?>> Class<T> plainAttrClass() {
-        Class result = null;
+        Class result;
 
         switch (anyTypeKind) {
             case GROUP:

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java
index f018670..a059354 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java
@@ -30,7 +30,6 @@ import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.Lob;
 import javax.persistence.OneToMany;
@@ -50,7 +49,7 @@ import org.apache.syncope.core.persistence.jpa.entity.resource.JPAExternalResour
 @Entity
 @Table(name = JPAConnInstance.TABLE)
 @ConnInstanceCheck
-public class JPAConnInstance extends AbstractEntity<Long> implements ConnInstance {
+public class JPAConnInstance extends AbstractGeneratedKeyEntity implements ConnInstance {
 
     private static final long serialVersionUID = -2294708794497208872L;
 
@@ -58,9 +57,6 @@ public class JPAConnInstance extends AbstractEntity<Long> implements ConnInstanc
 
     private static final int DEFAULT_TIMEOUT = 10;
 
-    @Id
-    private Long id;
-
     /**
      * URI identifying the local / remote ConnId location where the related connector bundle is found.
      */
@@ -99,7 +95,7 @@ public class JPAConnInstance extends AbstractEntity<Long> implements ConnInstanc
     @Column(name = "capability")
     @CollectionTable(name = "ConnInstance_capabilities",
             joinColumns =
-            @JoinColumn(name = "connInstance_id", referencedColumnName = "id"))
+            @JoinColumn(name = "connInstance_key", referencedColumnName = "key"))
     private Set<ConnectorCapability> capabilities = new HashSet<>();
 
     /**
@@ -129,11 +125,6 @@ public class JPAConnInstance extends AbstractEntity<Long> implements ConnInstanc
     private JPAConnPoolConf poolConf;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public String getLocation() {
         return location;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPADerSchema.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPADerSchema.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPADerSchema.java
index 45eea22..7270093 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPADerSchema.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPADerSchema.java
@@ -21,28 +21,24 @@ package org.apache.syncope.core.persistence.jpa.entity;
 import javax.persistence.Cacheable;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
 import javax.validation.constraints.NotNull;
 import org.apache.syncope.common.lib.types.AttrSchemaType;
 import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
 import org.apache.syncope.core.persistence.api.entity.DerSchema;
-import org.apache.syncope.core.persistence.jpa.validation.entity.SchemaNameCheck;
+import org.apache.syncope.core.persistence.jpa.validation.entity.SchemaKeyCheck;
 
 @Entity
 @Table(name = JPADerSchema.TABLE)
 @Cacheable
-@SchemaNameCheck
-public class JPADerSchema extends AbstractEntity<String> implements DerSchema {
+@SchemaKeyCheck
+public class JPADerSchema extends AbstractProvidedKeyEntity implements DerSchema {
 
     private static final long serialVersionUID = -6173643493348674060L;
 
     public static final String TABLE = "DerSchema";
 
-    @Id
-    private String name;
-
     @OneToOne(fetch = FetchType.EAGER)
     private JPAAnyTypeClass anyTypeClass;
 
@@ -50,16 +46,6 @@ public class JPADerSchema extends AbstractEntity<String> implements DerSchema {
     private String expression;
 
     @Override
-    public String getKey() {
-        return name;
-    }
-
-    @Override
-    public void setKey(final String key) {
-        this.name = key;
-    }
-
-    @Override
     public AnyTypeClass getAnyTypeClass() {
         return anyTypeClass;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPADomain.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPADomain.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPADomain.java
index f9bb394..5e6a80f 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPADomain.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPADomain.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.persistence.jpa.entity;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
-import javax.persistence.Id;
 import javax.persistence.Table;
 import org.apache.syncope.common.lib.types.CipherAlgorithm;
 import org.apache.syncope.core.spring.security.Encryptor;
@@ -31,31 +30,18 @@ import org.apache.syncope.core.persistence.jpa.validation.entity.DomainCheck;
 @Entity
 @Table(name = JPADomain.TABLE)
 @DomainCheck
-public class JPADomain extends AbstractEntity<String> implements Domain {
+public class JPADomain extends AbstractProvidedKeyEntity implements Domain {
 
     private static final long serialVersionUID = -5891241943464285840L;
 
     public static final String TABLE = "SyncopeDomain";
 
-    @Id
-    private String name;
-
     private String adminPwd;
 
     @Enumerated(EnumType.STRING)
     private CipherAlgorithm adminCipherAlgorithm;
 
     @Override
-    public String getKey() {
-        return name;
-    }
-
-    @Override
-    public void setKey(final String name) {
-        this.name = name;
-    }
-
-    @Override
     public String getAdminPwd() {
         return adminPwd;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java
index 881f509..7f0a673 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java
@@ -127,127 +127,127 @@ public class JPAEntityFactory implements EntityFactory {
 
     @SuppressWarnings("unchecked")
     @Override
-    public <KEY, T extends Entity<KEY>> T newEntity(final Class<T> reference) {
-        T result;
+    public <E extends Entity> E newEntity(final Class<E> reference) {
+        E result;
 
         if (reference.equals(Domain.class)) {
-            result = (T) new JPADomain();
+            result = (E) new JPADomain();
         } else if (reference.equals(Realm.class)) {
-            result = (T) new JPARealm();
+            result = (E) new JPARealm();
         } else if (reference.equals(AnyTemplateRealm.class)) {
-            result = (T) new JPAAnyTemplateRealm();
+            result = (E) new JPAAnyTemplateRealm();
         } else if (reference.equals(AccountPolicy.class)) {
-            result = (T) new JPAAccountPolicy();
+            result = (E) new JPAAccountPolicy();
         } else if (reference.equals(PasswordPolicy.class)) {
-            result = (T) new JPAPasswordPolicy();
+            result = (E) new JPAPasswordPolicy();
         } else if (reference.equals(PushPolicy.class)) {
-            result = (T) new JPAPushPolicy();
+            result = (E) new JPAPushPolicy();
         } else if (reference.equals(PullPolicy.class)) {
-            result = (T) new JPAPullPolicy();
+            result = (E) new JPAPullPolicy();
         } else if (reference.equals(AnyTypeClass.class)) {
-            result = (T) new JPAAnyTypeClass();
+            result = (E) new JPAAnyTypeClass();
         } else if (reference.equals(AnyType.class)) {
-            result = (T) new JPAAnyType();
+            result = (E) new JPAAnyType();
         } else if (reference.equals(AnyObject.class)) {
-            result = (T) new JPAAnyObject();
+            result = (E) new JPAAnyObject();
         } else if (reference.equals(Role.class)) {
-            result = (T) new JPARole();
+            result = (E) new JPARole();
         } else if (reference.equals(User.class)) {
-            result = (T) new JPAUser();
+            result = (E) new JPAUser();
         } else if (reference.equals(Group.class)) {
-            result = (T) new JPAGroup();
+            result = (E) new JPAGroup();
         } else if (reference.equals(TypeExtension.class)) {
-            result = (T) new JPATypeExtension();
+            result = (E) new JPATypeExtension();
         } else if (reference.equals(RelationshipType.class)) {
-            result = (T) new JPARelationshipType();
+            result = (E) new JPARelationshipType();
         } else if (reference.equals(ARelationship.class)) {
-            result = (T) new JPAARelationship();
+            result = (E) new JPAARelationship();
         } else if (reference.equals(URelationship.class)) {
-            result = (T) new JPAURelationship();
+            result = (E) new JPAURelationship();
         } else if (reference.equals(AMembership.class)) {
-            result = (T) new JPAAMembership();
+            result = (E) new JPAAMembership();
         } else if (reference.equals(UMembership.class)) {
-            result = (T) new JPAUMembership();
+            result = (E) new JPAUMembership();
         } else if (reference.equals(Conf.class)) {
-            result = (T) new JPAConf();
+            result = (E) new JPAConf();
         } else if (reference.equals(AnyAbout.class)) {
-            result = (T) new JPAAnyAbout();
+            result = (E) new JPAAnyAbout();
         } else if (reference.equals(MailTemplate.class)) {
-            result = (T) new JPAMailTemplate();
+            result = (E) new JPAMailTemplate();
         } else if (reference.equals(Notification.class)) {
-            result = (T) new JPANotification();
+            result = (E) new JPANotification();
         } else if (reference.equals(ExternalResource.class)) {
-            result = (T) new JPAExternalResource();
+            result = (E) new JPAExternalResource();
         } else if (reference.equals(Provision.class)) {
-            result = (T) new JPAProvision();
+            result = (E) new JPAProvision();
         } else if (reference.equals(ConnInstance.class)) {
-            result = (T) new JPAConnInstance();
+            result = (E) new JPAConnInstance();
         } else if (reference.equals(PlainSchema.class)) {
-            result = (T) new JPAPlainSchema();
+            result = (E) new JPAPlainSchema();
         } else if (reference.equals(APlainAttr.class)) {
-            result = (T) new JPAAPlainAttr();
+            result = (E) new JPAAPlainAttr();
         } else if (reference.equals(APlainAttrValue.class)) {
-            result = (T) new JPAAPlainAttrValue();
+            result = (E) new JPAAPlainAttrValue();
         } else if (reference.equals(APlainAttrUniqueValue.class)) {
-            result = (T) new JPAAPlainAttrUniqueValue();
+            result = (E) new JPAAPlainAttrUniqueValue();
         } else if (reference.equals(UPlainAttr.class)) {
-            result = (T) new JPAUPlainAttr();
+            result = (E) new JPAUPlainAttr();
         } else if (reference.equals(UPlainAttrValue.class)) {
-            result = (T) new JPAUPlainAttrValue();
+            result = (E) new JPAUPlainAttrValue();
         } else if (reference.equals(UPlainAttrUniqueValue.class)) {
-            result = (T) new JPAUPlainAttrUniqueValue();
+            result = (E) new JPAUPlainAttrUniqueValue();
         } else if (reference.equals(DerSchema.class)) {
-            result = (T) new JPADerSchema();
+            result = (E) new JPADerSchema();
         } else if (reference.equals(VirSchema.class)) {
-            result = (T) new JPAVirSchema();
+            result = (E) new JPAVirSchema();
         } else if (reference.equals(Mapping.class)) {
-            result = (T) new JPAMapping();
+            result = (E) new JPAMapping();
         } else if (reference.equals(MappingItem.class)) {
-            result = (T) new JPAMappingItem();
+            result = (E) new JPAMappingItem();
         } else if (reference.equals(GPlainAttr.class)) {
-            result = (T) new JPAGPlainAttr();
+            result = (E) new JPAGPlainAttr();
         } else if (reference.equals(GPlainAttrValue.class)) {
-            result = (T) new JPAGPlainAttrValue();
+            result = (E) new JPAGPlainAttrValue();
         } else if (reference.equals(GPlainAttrUniqueValue.class)) {
-            result = (T) new JPAGPlainAttrUniqueValue();
+            result = (E) new JPAGPlainAttrUniqueValue();
         } else if (reference.equals(CPlainAttr.class)) {
-            result = (T) new JPACPlainAttr();
+            result = (E) new JPACPlainAttr();
         } else if (reference.equals(CPlainAttrValue.class)) {
-            result = (T) new JPACPlainAttrValue();
+            result = (E) new JPACPlainAttrValue();
         } else if (reference.equals(CPlainAttrUniqueValue.class)) {
-            result = (T) new JPACPlainAttrUniqueValue();
+            result = (E) new JPACPlainAttrUniqueValue();
         } else if (reference.equals(Report.class)) {
-            result = (T) new JPAReport();
+            result = (E) new JPAReport();
         } else if (reference.equals(ReportTemplate.class)) {
-            result = (T) new JPAReportTemplate();
+            result = (E) new JPAReportTemplate();
         } else if (reference.equals(ReportExec.class)) {
-            result = (T) new JPAReportExec();
+            result = (E) new JPAReportExec();
         } else if (reference.equals(NotificationTask.class)) {
-            result = (T) new JPANotificationTask();
+            result = (E) new JPANotificationTask();
         } else if (reference.equals(PropagationTask.class)) {
-            result = (T) new JPAPropagationTask();
+            result = (E) new JPAPropagationTask();
         } else if (reference.equals(PushTask.class)) {
-            result = (T) new JPAPushTask();
+            result = (E) new JPAPushTask();
         } else if (reference.equals(PullTask.class)) {
-            result = (T) new JPAPullTask();
+            result = (E) new JPAPullTask();
         } else if (reference.equals(SchedTask.class)) {
-            result = (T) new JPASchedTask();
+            result = (E) new JPASchedTask();
         } else if (reference.equals(TaskExec.class)) {
-            result = (T) new JPATaskExec();
+            result = (E) new JPATaskExec();
         } else if (reference.equals(PushTaskAnyFilter.class)) {
-            result = (T) new JPAPushTaskAnyFilter();
+            result = (E) new JPAPushTaskAnyFilter();
         } else if (reference.equals(AnyTemplatePullTask.class)) {
-            result = (T) new JPAAnyTemplatePullTask();
+            result = (E) new JPAAnyTemplatePullTask();
         } else if (reference.equals(SecurityQuestion.class)) {
-            result = (T) new JPASecurityQuestion();
+            result = (E) new JPASecurityQuestion();
         } else if (reference.equals(Logger.class)) {
-            result = (T) new JPALogger();
+            result = (E) new JPALogger();
         } else if (reference.equals(DynRoleMembership.class)) {
-            result = (T) new JPADynRoleMembership();
+            result = (E) new JPADynRoleMembership();
         } else if (reference.equals(ADynGroupMembership.class)) {
-            result = (T) new JPAADynGroupMembership();
+            result = (E) new JPAADynGroupMembership();
         } else if (reference.equals(UDynGroupMembership.class)) {
-            result = (T) new JPAUDynGroupMembership();
+            result = (E) new JPAUDynGroupMembership();
         } else {
             throw new IllegalArgumentException("Could not find a JPA implementation of " + reference.getName());
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPALogger.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPALogger.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPALogger.java
index 3704055..ce5e1ab 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPALogger.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPALogger.java
@@ -30,7 +30,7 @@ import org.apache.syncope.core.persistence.api.entity.Logger;
 
 @Entity
 @Table(name = JPALogger.TABLE)
-public class JPALogger extends AbstractEntity<String> implements Logger {
+public class JPALogger extends AbstractEntity implements Logger {
 
     private static final long serialVersionUID = 943012777014416027L;
 
@@ -38,7 +38,7 @@ public class JPALogger extends AbstractEntity<String> implements Logger {
 
     @Id
     @Column(name = "logName")
-    private String name;
+    private String key;
 
     @Column(name = "logLevel", nullable = false)
     @Enumerated(EnumType.STRING)
@@ -50,12 +50,12 @@ public class JPALogger extends AbstractEntity<String> implements Logger {
 
     @Override
     public String getKey() {
-        return name;
+        return key;
     }
 
     @Override
     public void setKey(final String name) {
-        this.name = name;
+        this.key = name;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAMailTemplate.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAMailTemplate.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAMailTemplate.java
index 2678df2..fee18fd 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAMailTemplate.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAMailTemplate.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.persistence.jpa.entity;
 
 import javax.persistence.Cacheable;
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.Lob;
 import javax.persistence.Table;
 import org.apache.syncope.core.persistence.api.entity.MailTemplate;
@@ -28,15 +27,12 @@ import org.apache.syncope.core.persistence.api.entity.MailTemplate;
 @Entity
 @Table(name = JPAMailTemplate.TABLE)
 @Cacheable
-public class JPAMailTemplate extends AbstractEntity<String> implements MailTemplate {
+public class JPAMailTemplate extends AbstractProvidedKeyEntity implements MailTemplate {
 
     private static final long serialVersionUID = 2668267884059219835L;
 
     public static final String TABLE = "MailTemplate";
 
-    @Id
-    private String name;
-
     @Lob
     private String textTemplate;
 
@@ -44,16 +40,6 @@ public class JPAMailTemplate extends AbstractEntity<String> implements MailTempl
     private String htmlTemplate;
 
     @Override
-    public String getKey() {
-        return name;
-    }
-
-    @Override
-    public void setKey(final String name) {
-        this.name = name;
-    }
-
-    @Override
     public String getTextTemplate() {
         return textTemplate;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPANotification.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPANotification.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPANotification.java
index 2202a12..73ce78f 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPANotification.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPANotification.java
@@ -29,7 +29,6 @@ import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
@@ -50,20 +49,17 @@ import org.apache.syncope.core.persistence.jpa.validation.entity.NotificationChe
 @Entity
 @Table(name = JPANotification.TABLE)
 @NotificationCheck
-public class JPANotification extends AbstractEntity<Long> implements Notification {
+public class JPANotification extends AbstractGeneratedKeyEntity implements Notification {
 
     private static final long serialVersionUID = 3112582296912757537L;
 
     public static final String TABLE = "Notification";
 
-    @Id
-    private Long id;
-
     @ElementCollection(fetch = FetchType.EAGER)
     @Column(name = "event")
     @CollectionTable(name = "Notification_events",
             joinColumns =
-            @JoinColumn(name = "notification_id", referencedColumnName = "id"))
+            @JoinColumn(name = "notification_key", referencedColumnName = "key"))
     private List<String> events;
 
     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER, mappedBy = "notification")
@@ -74,7 +70,7 @@ public class JPANotification extends AbstractEntity<Long> implements Notificatio
     @ElementCollection(fetch = FetchType.EAGER)
     @CollectionTable(name = "Notification_staticRecipients",
             joinColumns =
-            @JoinColumn(name = "notification_id", referencedColumnName = "id"))
+            @JoinColumn(name = "notification_key", referencedColumnName = "key"))
     @Column(name = "staticRecipients")
     private List<String> staticRecipients;
 
@@ -100,7 +96,7 @@ public class JPANotification extends AbstractEntity<Long> implements Notificatio
     private String subject;
 
     @ManyToOne(fetch = FetchType.EAGER, optional = false)
-    @JoinColumn(name = "template_name")
+    @JoinColumn(name = "template_key")
     private JPAMailTemplate template;
 
     @NotNull
@@ -123,11 +119,6 @@ public class JPANotification extends AbstractEntity<Long> implements Notificatio
     }
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public String getRecipientsFIQL() {
         return recipientsFIQL;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAPlainSchema.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAPlainSchema.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAPlainSchema.java
index 4ba6fa3..02b3ff7 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAPlainSchema.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAPlainSchema.java
@@ -25,7 +25,6 @@ import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.Lob;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
@@ -41,21 +40,18 @@ import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
 import org.apache.syncope.core.persistence.api.entity.PlainSchema;
 import org.apache.syncope.core.persistence.jpa.attrvalue.validation.BasicValidator;
 import org.apache.syncope.core.persistence.jpa.validation.entity.PlainSchemaCheck;
-import org.apache.syncope.core.persistence.jpa.validation.entity.SchemaNameCheck;
+import org.apache.syncope.core.persistence.jpa.validation.entity.SchemaKeyCheck;
 
 @Entity
 @Table(name = JPAPlainSchema.TABLE)
 @PlainSchemaCheck
-@SchemaNameCheck
-public class JPAPlainSchema extends AbstractEntity<String> implements PlainSchema {
+@SchemaKeyCheck
+public class JPAPlainSchema extends AbstractProvidedKeyEntity implements PlainSchema {
 
     private static final long serialVersionUID = -8621028596062054739L;
 
     public static final String TABLE = "PlainSchema";
 
-    @Id
-    private String name;
-
     @OneToOne(fetch = FetchType.EAGER)
     private JPAAnyTypeClass anyTypeClass;
 
@@ -119,16 +115,6 @@ public class JPAPlainSchema extends AbstractEntity<String> implements PlainSchem
     }
 
     @Override
-    public String getKey() {
-        return name;
-    }
-
-    @Override
-    public void setKey(final String name) {
-        this.name = name;
-    }
-
-    @Override
     public AnyTypeClass getAnyTypeClass() {
         return anyTypeClass;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java
index 5455168..719f9a8 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java
@@ -29,7 +29,6 @@ import javax.persistence.Column;
 import javax.persistence.ElementCollection;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
@@ -52,18 +51,15 @@ import org.apache.syncope.core.persistence.jpa.validation.entity.RealmCheck;
 
 @Entity
 @Table(name = JPARealm.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "name", "parent_id" }))
+        @UniqueConstraint(columnNames = { "key", "parent_key" }))
 @Cacheable
 @RealmCheck
-public class JPARealm extends AbstractEntity<Long> implements Realm {
+public class JPARealm extends AbstractGeneratedKeyEntity implements Realm {
 
     private static final long serialVersionUID = 5533247460239909964L;
 
     public static final String TABLE = "Realm";
 
-    @Id
-    private Long id;
-
     @Size(min = 1)
     private String name;
 
@@ -80,18 +76,13 @@ public class JPARealm extends AbstractEntity<Long> implements Realm {
     @Column(name = "actionClassName")
     @CollectionTable(name = "Realm_actionsClassNames",
             joinColumns =
-            @JoinColumn(name = "realm_id", referencedColumnName = "id"))
+            @JoinColumn(name = "realm_key", referencedColumnName = "key"))
     private Set<String> actionsClassNames = new HashSet<>();
 
     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER, mappedBy = "realm")
     private List<JPAAnyTemplateRealm> templates = new ArrayList<>();
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public String getName() {
         return name;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARelationshipType.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARelationshipType.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARelationshipType.java
index f3fc882..a1b58c7 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARelationshipType.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARelationshipType.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.persistence.jpa.entity;
 
 import javax.persistence.Cacheable;
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.Table;
 import org.apache.syncope.core.persistence.api.entity.RelationshipType;
 import org.apache.syncope.core.persistence.jpa.validation.entity.RelationshipTypeCheck;
@@ -29,28 +28,15 @@ import org.apache.syncope.core.persistence.jpa.validation.entity.RelationshipTyp
 @Table(name = JPARelationshipType.TABLE)
 @RelationshipTypeCheck
 @Cacheable
-public class JPARelationshipType extends AbstractEntity<String> implements RelationshipType {
+public class JPARelationshipType extends AbstractProvidedKeyEntity implements RelationshipType {
 
     private static final long serialVersionUID = -753673974614737065L;
 
     public static final String TABLE = "RelationshipType";
 
-    @Id
-    private String name;
-
     private String description;
 
     @Override
-    public String getKey() {
-        return name;
-    }
-
-    @Override
-    public void setKey(final String name) {
-        this.name = name;
-    }
-
-    @Override
     public String getDescription() {
         return description;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReport.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReport.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReport.java
index 2c40c51..cb9e029 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReport.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReport.java
@@ -25,7 +25,6 @@ import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
@@ -44,15 +43,12 @@ import org.apache.syncope.core.persistence.jpa.validation.entity.ReportCheck;
 @Entity
 @Table(name = JPAReport.TABLE)
 @ReportCheck
-public class JPAReport extends AbstractEntity<Long> implements Report {
+public class JPAReport extends AbstractGeneratedKeyEntity implements Report {
 
     private static final long serialVersionUID = -587652654964285834L;
 
     public static final String TABLE = "Report";
 
-    @Id
-    private Long id;
-
     @Column(unique = true, nullable = false)
     private String name;
 
@@ -71,15 +67,10 @@ public class JPAReport extends AbstractEntity<Long> implements Report {
     private Integer active;
 
     @ManyToOne(fetch = FetchType.EAGER, optional = false)
-    @JoinColumn(name = "template_name")
+    @JoinColumn(name = "template_key")
     private JPAReportTemplate template;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public String getName() {
         return name;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReportExec.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReportExec.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReportExec.java
index f5f0777..249e61b 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReportExec.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReportExec.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.persistence.jpa.entity;
 import javax.persistence.Basic;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
@@ -38,9 +37,6 @@ public class JPAReportExec extends AbstractExec implements ReportExec {
 
     public static final String TABLE = "ReportExec";
 
-    @Id
-    private Long id;
-
     /**
      * The referred report.
      */
@@ -55,11 +51,6 @@ public class JPAReportExec extends AbstractExec implements ReportExec {
     private Byte[] execResult;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public Report getReport() {
         return report;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReportTemplate.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReportTemplate.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReportTemplate.java
index 7551411..408c594 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReportTemplate.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReportTemplate.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.persistence.jpa.entity;
 
 import javax.persistence.Cacheable;
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.Lob;
 import javax.persistence.Table;
 import org.apache.syncope.core.persistence.api.entity.ReportTemplate;
@@ -28,15 +27,12 @@ import org.apache.syncope.core.persistence.api.entity.ReportTemplate;
 @Entity
 @Table(name = JPAReportTemplate.TABLE)
 @Cacheable
-public class JPAReportTemplate extends AbstractEntity<String> implements ReportTemplate {
+public class JPAReportTemplate extends AbstractProvidedKeyEntity implements ReportTemplate {
 
     private static final long serialVersionUID = 7755855927366231089L;
 
     public static final String TABLE = "ReportTemplate";
 
-    @Id
-    private String name;
-
     @Lob
     private String foTemplate;
 
@@ -47,16 +43,6 @@ public class JPAReportTemplate extends AbstractEntity<String> implements ReportT
     private String htmlTemplate;
 
     @Override
-    public String getKey() {
-        return name;
-    }
-
-    @Override
-    public void setKey(final String name) {
-        this.name = name;
-    }
-
-    @Override
     public String getFOTemplate() {
         return foTemplate;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReportletConfInstance.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReportletConfInstance.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReportletConfInstance.java
index d744976..1fe7c37 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReportletConfInstance.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReportletConfInstance.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
@@ -29,26 +28,18 @@ import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
 
 @Entity
 @Table(name = JPAReportletConfInstance.TABLE)
-public class JPAReportletConfInstance extends AbstractEntity<Long> {
+public class JPAReportletConfInstance extends AbstractGeneratedKeyEntity {
 
     private static final long serialVersionUID = -2436055132955674610L;
 
     public static final String TABLE = "ReportletConfInstance";
 
-    @Id
-    private Long id;
-
     @Lob
     private String serializedInstance;
 
     @ManyToOne
     private JPAReport report;
 
-    @Override
-    public Long getKey() {
-        return id;
-    }
-
     public Report getReport() {
         return report;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARole.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARole.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARole.java
index d2c6dc0..cc8aa68 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARole.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARole.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.jpa.entity;
 
-import org.apache.syncope.core.persistence.jpa.entity.user.JPADynRoleMembership;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -30,7 +29,6 @@ import javax.persistence.Column;
 import javax.persistence.ElementCollection;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.JoinTable;
 import javax.persistence.ManyToMany;
@@ -40,33 +38,31 @@ import javax.validation.Valid;
 import org.apache.syncope.core.persistence.api.entity.user.DynRoleMembership;
 import org.apache.syncope.core.persistence.api.entity.Realm;
 import org.apache.syncope.core.persistence.api.entity.Role;
+import org.apache.syncope.core.persistence.jpa.entity.user.JPADynRoleMembership;
 import org.apache.syncope.core.persistence.jpa.validation.entity.RoleCheck;
 
 @Entity
 @Table(name = JPARole.TABLE)
 @Cacheable
 @RoleCheck
-public class JPARole extends AbstractEntity<String> implements Role {
+public class JPARole extends AbstractProvidedKeyEntity implements Role {
 
     private static final long serialVersionUID = -7657701119422588832L;
 
     public static final String TABLE = "SyncopeRole";
 
-    @Id
-    private String name;
-
     @ElementCollection(fetch = FetchType.EAGER)
     @Column(name = "entitlement")
     @CollectionTable(name = "SyncopeRole_entitlements",
             joinColumns =
-            @JoinColumn(name = "role_name", referencedColumnName = "name"))
+            @JoinColumn(name = "role_key", referencedColumnName = "key"))
     private Set<String> entitlements = new HashSet<>();
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "role_name"),
+            @JoinColumn(name = "role_key"),
             inverseJoinColumns =
-            @JoinColumn(name = "realm_id"))
+            @JoinColumn(name = "realm_key"))
     @Valid
     private List<JPARealm> realms = new ArrayList<>();
 
@@ -75,16 +71,6 @@ public class JPARole extends AbstractEntity<String> implements Role {
     private JPADynRoleMembership dynMembership;
 
     @Override
-    public String getKey() {
-        return name;
-    }
-
-    @Override
-    public void setKey(final String name) {
-        this.name = name;
-    }
-
-    @Override
     public Set<String> getEntitlements() {
         return entitlements;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPASecurityQuestion.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPASecurityQuestion.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPASecurityQuestion.java
index 324095e..ab6e9d5 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPASecurityQuestion.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPASecurityQuestion.java
@@ -20,30 +20,21 @@ package org.apache.syncope.core.persistence.jpa.entity;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.Table;
 import org.apache.syncope.core.persistence.api.entity.user.SecurityQuestion;
 
 @Entity
 @Table(name = JPASecurityQuestion.TABLE)
-public class JPASecurityQuestion extends AbstractEntity<Long> implements SecurityQuestion {
+public class JPASecurityQuestion extends AbstractGeneratedKeyEntity implements SecurityQuestion {
 
     private static final long serialVersionUID = 7675321820453579744L;
 
     public static final String TABLE = "SecurityQuestion";
 
-    @Id
-    private Long id;
-
     @Column(unique = true)
     private String content;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public String getContent() {
         return content;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAVirSchema.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAVirSchema.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAVirSchema.java
index 0ee1606..8cf70ff 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAVirSchema.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAVirSchema.java
@@ -22,7 +22,6 @@ import javax.persistence.Basic;
 import javax.persistence.Cacheable;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
@@ -36,21 +35,18 @@ import org.apache.syncope.core.persistence.api.entity.VirSchema;
 import org.apache.syncope.core.persistence.api.entity.resource.MappingItem;
 import org.apache.syncope.core.persistence.api.entity.resource.Provision;
 import org.apache.syncope.core.persistence.jpa.entity.resource.JPAProvision;
-import org.apache.syncope.core.persistence.jpa.validation.entity.SchemaNameCheck;
+import org.apache.syncope.core.persistence.jpa.validation.entity.SchemaKeyCheck;
 
 @Entity
 @Table(name = JPAVirSchema.TABLE)
 @Cacheable
-@SchemaNameCheck
-public class JPAVirSchema extends AbstractEntity<String> implements VirSchema {
+@SchemaKeyCheck
+public class JPAVirSchema extends AbstractProvidedKeyEntity implements VirSchema {
 
     private static final long serialVersionUID = 3274006935328590141L;
 
     public static final String TABLE = "VirSchema";
 
-    @Id
-    private String name;
-
     @OneToOne(fetch = FetchType.EAGER)
     private JPAAnyTypeClass anyTypeClass;
 
@@ -73,16 +69,6 @@ public class JPAVirSchema extends AbstractEntity<String> implements VirSchema {
     }
 
     @Override
-    public String getKey() {
-        return name;
-    }
-
-    @Override
-    public void setKey(final String key) {
-        this.name = key;
-    }
-
-    @Override
     public AnyTypeClass getAnyTypeClass() {
         return anyTypeClass;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
index b6ad613..b0ca6ea 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.persistence.jpa.entity.anyobject;
 import java.util.ArrayList;
 import java.util.List;
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.JoinTable;
 import javax.persistence.ManyToMany;
@@ -44,9 +43,6 @@ public class JPAADynGroupMembership extends AbstractDynMembership<AnyObject> imp
 
     public static final String TABLE = "ADynGroupMembership";
 
-    @Id
-    private Long id;
-
     @OneToOne
     private JPAGroup group;
 
@@ -55,17 +51,12 @@ public class JPAADynGroupMembership extends AbstractDynMembership<AnyObject> imp
 
     @ManyToMany
     @JoinTable(joinColumns =
-            @JoinColumn(name = "aDynGroupMembership_id"),
+            @JoinColumn(name = "aDynGroupMembership_key"),
             inverseJoinColumns =
-            @JoinColumn(name = "anyObject_id"))
+            @JoinColumn(name = "anyObject_key"))
     private List<JPAAnyObject> anyObjects = new ArrayList<>();
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public Group getGroup() {
         return group;
     }


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConnectorITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConnectorITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConnectorITCase.java
index 1d30916..e5721a2 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConnectorITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConnectorITCase.java
@@ -37,6 +37,7 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
+import java.util.UUID;
 import javax.ws.rs.core.Response;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.Transformer;
@@ -120,7 +121,8 @@ public class ConnectorITCase extends AbstractITCase {
     @Test
     public void create() {
         ConnInstanceTO connectorTO = new ConnInstanceTO();
-        connectorTO.setLocation(connectorService.read(100L, Locale.ENGLISH.getLanguage()).getLocation());
+        connectorTO.setLocation(connectorService.read(
+                "88a7a819-dab5-46b4-9b90-0b9769eabdb8", Locale.ENGLISH.getLanguage()).getLocation());
         connectorTO.setVersion(connidSoapVersion);
         connectorTO.setConnectorName("net.tirasa.connid.bundles.soap.WebServiceConnector");
         connectorTO.setBundleName("net.tirasa.connid.bundles.soap");
@@ -220,8 +222,8 @@ public class ConnectorITCase extends AbstractITCase {
     public void update() {
         ConnInstanceTO connectorTO = new ConnInstanceTO();
 
-        // set connector instance id
-        connectorTO.setKey(103L);
+        // set connector instance key
+        connectorTO.setKey("fcf9f2b0-f7d6-42c9-84a6-61b28255a42b");
 
         // set connector version
         connectorTO.setVersion(connidSoapVersion);
@@ -272,7 +274,7 @@ public class ConnectorITCase extends AbstractITCase {
         assertEquals(Integer.valueOf(20), actual.getConnRequestTimeout());
     }
 
-    private List<ResourceTO> filter(final List<ResourceTO> input, final Long connectorKey) {
+    private List<ResourceTO> filter(final List<ResourceTO> input, final String connectorKey) {
         List<ResourceTO> result = new ArrayList<>();
 
         for (ResourceTO resource : input) {
@@ -290,11 +292,13 @@ public class ConnectorITCase extends AbstractITCase {
         // Copy resource and connector in order to create new objects.
         // ----------------------------------
         // Retrieve a connector instance template.
-        ConnInstanceTO connInstanceTO = connectorService.read(103L, Locale.ENGLISH.getLanguage());
+        ConnInstanceTO connInstanceTO = connectorService.read(
+                "fcf9f2b0-f7d6-42c9-84a6-61b28255a42b", Locale.ENGLISH.getLanguage());
         assertNotNull(connInstanceTO);
 
         // check for resource
-        List<ResourceTO> resources = filter(resourceService.list(), 103L);
+        List<ResourceTO> resources =
+                filter(resourceService.list(), "fcf9f2b0-f7d6-42c9-84a6-61b28255a42b");
         assertEquals(4, resources.size());
 
         // Retrieve a resource TO template.
@@ -304,7 +308,7 @@ public class ConnectorITCase extends AbstractITCase {
         resourceTO.setKey("newAbout103" + getUUIDString());
 
         // Make it new.
-        connInstanceTO.setKey(0L);
+        connInstanceTO.setKey(null);
         connInstanceTO.setDisplayName("newDisplayName" + getUUIDString());
         // ----------------------------------
 
@@ -320,10 +324,10 @@ public class ConnectorITCase extends AbstractITCase {
         assertNotNull(connInstanceTO);
         assertFalse(connInstanceTO.getCapabilities().contains(ConnectorCapability.AUTHENTICATE));
 
-        long connId = connInstanceTO.getKey();
+        String connKey = connInstanceTO.getKey();
 
         // Link resourceTO to the new connector instance.
-        resourceTO.setConnector(connId);
+        resourceTO.setConnector(connKey);
         // ----------------------------------
 
         // ----------------------------------
@@ -334,7 +338,7 @@ public class ConnectorITCase extends AbstractITCase {
 
         assertNotNull(resourceTO);
 
-        resources = filter(resourceService.list(), connId);
+        resources = filter(resourceService.list(), connKey);
         assertEquals(1, resources.size());
         // ----------------------------------
 
@@ -366,7 +370,7 @@ public class ConnectorITCase extends AbstractITCase {
     @Test
     public void deleteWithException() {
         try {
-            connectorService.delete(0L);
+            connectorService.delete(UUID.randomUUID().toString());
         } catch (SyncopeClientException e) {
             assertEquals(Response.Status.NOT_FOUND, e.getType().getResponseStatus());
         }
@@ -384,7 +388,8 @@ public class ConnectorITCase extends AbstractITCase {
 
     @Test
     public void read() {
-        ConnInstanceTO connectorInstanceTO = connectorService.read(100L, Locale.ENGLISH.getLanguage());
+        ConnInstanceTO connectorInstanceTO = connectorService.read(
+                "88a7a819-dab5-46b4-9b90-0b9769eabdb8", Locale.ENGLISH.getLanguage());
         assertNotNull(connectorInstanceTO);
     }
 
@@ -400,14 +405,16 @@ public class ConnectorITCase extends AbstractITCase {
 
     @Test
     public void getConnectorConfiguration() {
-        Set<ConnConfProperty> props = connectorService.read(104L, Locale.ENGLISH.getLanguage()).getConf();
+        Set<ConnConfProperty> props = connectorService.read(
+                "6c2acf1b-b052-46f0-8c56-7a8ad6905edf", Locale.ENGLISH.getLanguage()).getConf();
         assertNotNull(props);
         assertFalse(props.isEmpty());
     }
 
     @Test
     public void checkHiddenProperty() {
-        ConnInstanceTO connInstanceTO = connectorService.read(100L, Locale.ENGLISH.getLanguage());
+        ConnInstanceTO connInstanceTO = connectorService.read(
+                "88a7a819-dab5-46b4-9b90-0b9769eabdb8", Locale.ENGLISH.getLanguage());
 
         boolean check = false;
 
@@ -542,7 +549,8 @@ public class ConnectorITCase extends AbstractITCase {
 
     @Test
     public void buildObjectClassInfo() {
-        ConnInstanceTO ws = connectorService.read(102L, Locale.ENGLISH.getLanguage());
+        ConnInstanceTO ws = connectorService.read(
+                "5ffbb4ac-a8c3-4b44-b699-11b398a1ba08", Locale.ENGLISH.getLanguage());
         assertNotNull(ws);
 
         List<ConnIdObjectClassTO> objectClassInfo = connectorService.buildObjectClassInfo(ws, true);
@@ -551,7 +559,8 @@ public class ConnectorITCase extends AbstractITCase {
         assertEquals(ObjectClass.ACCOUNT_NAME, objectClassInfo.get(0).getType());
         assertTrue(objectClassInfo.get(0).getAttributes().contains("promoThirdPartyDisclaimer"));
 
-        ConnInstanceTO ldap = connectorService.read(105L, Locale.ENGLISH.getLanguage());
+        ConnInstanceTO ldap = connectorService.read(
+                "74141a3b-0762-4720-a4aa-fc3e374ef3ef", Locale.ENGLISH.getLanguage());
         assertNotNull(ldap);
 
         objectClassInfo = connectorService.buildObjectClassInfo(ldap, true);
@@ -561,12 +570,12 @@ public class ConnectorITCase extends AbstractITCase {
         Collection<String> objectClasses = CollectionUtils.collect(objectClassInfo,
                 new Transformer<ConnIdObjectClassTO, String>() {
 
-                    @Override
-                    public String transform(final ConnIdObjectClassTO info) {
-                        return info.getType();
-                    }
+            @Override
+            public String transform(final ConnIdObjectClassTO info) {
+                return info.getType();
+            }
 
-                });
+        });
         assertEquals(2, objectClasses.size());
         assertTrue(objectClasses.contains(ObjectClass.ACCOUNT_NAME));
         assertTrue(objectClasses.contains(ObjectClass.GROUP_NAME));
@@ -579,7 +588,8 @@ public class ConnectorITCase extends AbstractITCase {
         // ----------------------------------------
         ConnInstanceTO connectorTO = new ConnInstanceTO();
 
-        connectorTO.setLocation(connectorService.read(100L, Locale.ENGLISH.getLanguage()).getLocation());
+        connectorTO.setLocation(connectorService.read(
+                "88a7a819-dab5-46b4-9b90-0b9769eabdb8", Locale.ENGLISH.getLanguage()).getLocation());
 
         // set connector version
         connectorTO.setVersion(connidSoapVersion);
@@ -694,9 +704,10 @@ public class ConnectorITCase extends AbstractITCase {
         BulkAction bulkAction = new BulkAction();
         bulkAction.setType(BulkAction.Type.DELETE);
 
-        ConnInstanceTO conn = connectorService.read(101L, Locale.ENGLISH.getLanguage());
+        ConnInstanceTO conn = connectorService.read(
+                "5aa5b8be-7521-481a-9651-c557aea078c1", Locale.ENGLISH.getLanguage());
 
-        conn.setKey(0L);
+        conn.setKey(null);
         conn.setDisplayName("forBulk1");
 
         bulkAction.getTargets().add(String.valueOf(getObject(
@@ -707,24 +718,24 @@ public class ConnectorITCase extends AbstractITCase {
         bulkAction.getTargets().add(String.valueOf(getObject(
                 connectorService.create(conn).getLocation(), ConnectorService.class, ConnInstanceTO.class).getKey()));
 
-        Iterator<String> iter = bulkAction.getTargets().iterator();
+        Iterator<String> itor = bulkAction.getTargets().iterator();
 
-        assertNotNull(connectorService.read(Long.valueOf(iter.next()), Locale.ENGLISH.getLanguage()));
-        assertNotNull(connectorService.read(Long.valueOf(iter.next()), Locale.ENGLISH.getLanguage()));
+        assertNotNull(connectorService.read(itor.next(), Locale.ENGLISH.getLanguage()));
+        assertNotNull(connectorService.read(itor.next(), Locale.ENGLISH.getLanguage()));
 
         connectorService.bulk(bulkAction);
 
-        iter = bulkAction.getTargets().iterator();
+        itor = bulkAction.getTargets().iterator();
 
         try {
-            connectorService.read(Long.valueOf(iter.next()), Locale.ENGLISH.getLanguage());
+            connectorService.read(itor.next(), Locale.ENGLISH.getLanguage());
             fail();
         } catch (SyncopeClientException e) {
             assertNotNull(e);
         }
 
         try {
-            connectorService.read(Long.valueOf(iter.next()), Locale.ENGLISH.getLanguage());
+            connectorService.read(itor.next(), Locale.ENGLISH.getLanguage());
             fail();
         } catch (SyncopeClientException e) {
             assertNotNull(e);
@@ -733,7 +744,8 @@ public class ConnectorITCase extends AbstractITCase {
 
     @Test
     public void issueSYNCOPE605() {
-        ConnInstanceTO connectorInstanceTO = connectorService.read(103L, Locale.ENGLISH.getLanguage());
+        ConnInstanceTO connectorInstanceTO = connectorService.read(
+                "fcf9f2b0-f7d6-42c9-84a6-61b28255a42b", Locale.ENGLISH.getLanguage());
         assertTrue(connectorInstanceTO.getCapabilities().isEmpty());
 
         connectorInstanceTO.getCapabilities().add(ConnectorCapability.SEARCH);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
index 91077a4..e8d03d0 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
@@ -29,6 +29,7 @@ import java.security.AccessControlException;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
 import javax.naming.directory.DirContext;
@@ -47,7 +48,6 @@ import org.apache.syncope.common.lib.patch.AssociationPatch;
 import org.apache.syncope.common.lib.patch.AttrPatch;
 import org.apache.syncope.common.lib.patch.DeassociationPatch;
 import org.apache.syncope.common.lib.patch.GroupPatch;
-import org.apache.syncope.common.lib.patch.LongReplacePatchItem;
 import org.apache.syncope.common.lib.patch.StringReplacePatchItem;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.AnyTypeClassTO;
@@ -108,7 +108,7 @@ public class GroupITCase extends AbstractITCase {
     public void create() {
         GroupTO groupTO = getSampleTO("lastGroup");
         groupTO.getVirAttrs().add(attrTO("rvirtualdata", "rvirtualvalue"));
-        groupTO.setGroupOwner(8L);
+        groupTO.setGroupOwner("f779c0d4-633b-4be5-8f57-32eb478a3ca5");
 
         groupTO = createGroup(groupTO).getAny();
         assertNotNull(groupTO);
@@ -128,7 +128,7 @@ public class GroupITCase extends AbstractITCase {
         // SYNCOPE-515: remove ownership
         GroupPatch groupPatch = new GroupPatch();
         groupPatch.setKey(groupTO.getKey());
-        groupPatch.setGroupOwner(new LongReplacePatchItem());
+        groupPatch.setGroupOwner(new StringReplacePatchItem());
 
         assertNull(updateGroup(groupPatch).getAny().getGroupOwner());
     }
@@ -136,7 +136,7 @@ public class GroupITCase extends AbstractITCase {
     @Test
     public void delete() {
         try {
-            groupService.delete(0L);
+            groupService.delete(UUID.randomUUID().toString());
         } catch (SyncopeClientException e) {
             assertEquals(Response.Status.NOT_FOUND, e.getType().getResponseStatus());
         }
@@ -173,7 +173,7 @@ public class GroupITCase extends AbstractITCase {
 
     @Test
     public void read() {
-        GroupTO groupTO = groupService.read(1L);
+        GroupTO groupTO = groupService.read("37d15e4c-cdc1-460b-a591-8505c8133806");
 
         assertNotNull(groupTO);
         assertNotNull(groupTO.getPlainAttrs());
@@ -182,16 +182,16 @@ public class GroupITCase extends AbstractITCase {
 
     @Test
     public void selfRead() {
-        UserTO userTO = userService.read(1L);
+        UserTO userTO = userService.read("1417acbe-cbf6-4277-9372-e75e04f97000");
         assertNotNull(userTO);
 
-        assertTrue(userTO.getMembershipMap().containsKey(1L));
-        assertFalse(userTO.getMembershipMap().containsKey(3L));
+        assertTrue(userTO.getMembershipMap().containsKey("37d15e4c-cdc1-460b-a591-8505c8133806"));
+        assertFalse(userTO.getMembershipMap().containsKey("29f96485-729e-4d31-88a1-6fc60e4677f3"));
 
         GroupService groupService2 = clientFactory.create("rossini", ADMIN_PWD).getService(GroupService.class);
 
         try {
-            groupService2.read(3L);
+            groupService2.read("29f96485-729e-4d31-88a1-6fc60e4677f3");
             fail();
         } catch (SyncopeClientException e) {
             assertEquals(ClientExceptionType.DelegatedAdministration, e.getType());
@@ -203,7 +203,7 @@ public class GroupITCase extends AbstractITCase {
 
             @Override
             public boolean evaluate(final GroupTO group) {
-                return 1L == group.getKey();
+                return "37d15e4c-cdc1-460b-a591-8505c8133806".equals(group.getKey());
             }
         }));
     }
@@ -266,7 +266,7 @@ public class GroupITCase extends AbstractITCase {
     @Test
     public void updateAsGroupOwner() {
         // 1. read group as admin
-        GroupTO groupTO = groupService.read(6L);
+        GroupTO groupTO = groupService.read("ebf97068-aa4b-4a85-9f01-680e8c4cf227");
 
         // issue SYNCOPE-15
         assertNotNull(groupTO.getCreationDate());
@@ -582,21 +582,22 @@ public class GroupITCase extends AbstractITCase {
 
     @Test
     public void uDynMembership() {
-        assertTrue(userService.read(4L).getDynGroups().isEmpty());
+        assertTrue(userService.read("c9b2dec2-00a7-4855-97c0-d854842b4b24").getDynGroups().isEmpty());
 
         GroupTO group = getBasicSampleTO("uDynMembership");
         group.setUDynMembershipCond("cool==true");
         group = createGroup(group).getAny();
         assertNotNull(group);
 
-        assertTrue(userService.read(4L).getDynGroups().contains(group.getKey()));
+        assertTrue(userService.read(
+                "c9b2dec2-00a7-4855-97c0-d854842b4b24").getDynGroups().contains(group.getKey()));
 
         GroupPatch patch = new GroupPatch();
         patch.setKey(group.getKey());
         patch.setUDynMembershipCond("cool==false");
         groupService.update(patch);
 
-        assertTrue(userService.read(4L).getDynGroups().isEmpty());
+        assertTrue(userService.read("c9b2dec2-00a7-4855-97c0-d854842b4b24").getDynGroups().isEmpty());
     }
 
     @Test
@@ -617,8 +618,10 @@ public class GroupITCase extends AbstractITCase {
         newAny.getResources().clear();
         newAny = createAnyObject(newAny).getAny();
         assertNotNull(newAny.getPlainAttrMap().get("location"));
-        assertTrue(anyObjectService.read(1L).getDynGroups().contains(group.getKey()));
-        assertTrue(anyObjectService.read(2L).getDynGroups().contains(group.getKey()));
+        assertTrue(anyObjectService.read(
+                "fc6dbc3a-6c07-4965-8781-921e7401a4a5").getDynGroups().contains(group.getKey()));
+        assertTrue(anyObjectService.read(
+                "8559d14d-58c2-46eb-a2d4-a7d35161e8f8").getDynGroups().contains(group.getKey()));
         assertTrue(anyObjectService.read(newAny.getKey()).getDynGroups().contains(group.getKey()));
 
         // 2. update group and change aDynMembership condition
@@ -643,8 +646,10 @@ public class GroupITCase extends AbstractITCase {
                 build());
         newAny = updateAnyObject(anyPatch).getAny();
         assertNull(newAny.getPlainAttrMap().get("location"));
-        assertFalse(anyObjectService.read(1L).getDynGroups().contains(group.getKey()));
-        assertFalse(anyObjectService.read(2L).getDynGroups().contains(group.getKey()));
+        assertFalse(anyObjectService.read(
+                "fc6dbc3a-6c07-4965-8781-921e7401a4a5").getDynGroups().contains(group.getKey()));
+        assertFalse(anyObjectService.read(
+                "8559d14d-58c2-46eb-a2d4-a7d35161e8f8").getDynGroups().contains(group.getKey()));
         assertTrue(anyObjectService.read(newAny.getKey()).getDynGroups().contains(group.getKey()));
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
index 2a44c3d..7d6e0c9 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
@@ -135,7 +135,8 @@ public class MultitenancyITCase extends AbstractITCase {
     @Test
     public void createResourceAndPull() {
         // read connector
-        ConnInstanceTO conn = adminClient.getService(ConnectorService.class).read(100L, Locale.ENGLISH.getLanguage());
+        ConnInstanceTO conn = adminClient.getService(ConnectorService.class).
+                read("b7ea96c3-c633-488b-98a0-b52ac35850f7", Locale.ENGLISH.getLanguage());
         assertNotNull(conn);
         assertEquals("LDAP", conn.getDisplayName());
 
@@ -144,80 +145,84 @@ public class MultitenancyITCase extends AbstractITCase {
         resource.setKey("new-ldap-resource");
         resource.setConnector(conn.getKey());
 
-        ProvisionTO provisionTO = new ProvisionTO();
-        provisionTO.setAnyType(AnyTypeKind.USER.name());
-        provisionTO.setObjectClass(ObjectClass.ACCOUNT_NAME);
-        resource.getProvisions().add(provisionTO);
-
-        MappingTO mapping = new MappingTO();
-        mapping.setConnObjectLink("'uid=' + username + ',ou=people,o=isp'");
-        provisionTO.setMapping(mapping);
-
-        MappingItemTO item = new MappingItemTO();
-        item.setIntAttrName("username");
-        item.setIntMappingType(IntMappingType.Username);
-        item.setExtAttrName("cn");
-        item.setPurpose(MappingPurpose.BOTH);
-        mapping.setConnObjectKeyItem(item);
-
-        item = new MappingItemTO();
-        item.setPassword(true);
-        item.setIntMappingType(IntMappingType.Password);
-        item.setExtAttrName("userPassword");
-        item.setPurpose(MappingPurpose.BOTH);
-        item.setMandatoryCondition("true");
-        mapping.add(item);
-
-        item = new MappingItemTO();
-        item.setIntMappingType(IntMappingType.UserKey);
-        item.setPurpose(MappingPurpose.BOTH);
-        item.setExtAttrName("sn");
-        item.setMandatoryCondition("true");
-        mapping.add(item);
-
-        item = new MappingItemTO();
-        item.setIntAttrName("email");
-        item.setIntMappingType(IntMappingType.UserPlainSchema);
-        item.setPurpose(MappingPurpose.BOTH);
-        item.setExtAttrName("mail");
-        mapping.add(item);
-
-        // create resource
-        Response response = adminClient.getService(ResourceService.class).create(resource);
-        assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatus());
-        resource = adminClient.getService(ResourceService.class).read(resource.getKey());
-        assertNotNull(resource);
-
-        // create pull task
-        PullTaskTO task = new PullTaskTO();
-        task.setName("LDAP Pull Task");
-        task.setActive(true);
-        task.setDestinationRealm(SyncopeConstants.ROOT_REALM);
-        task.setResource(resource.getKey());
-        task.setPullMode(PullMode.FULL_RECONCILIATION);
-        task.setPerformCreate(true);
-
-        response = adminClient.getService(TaskService.class).create(task);
-        assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatus());
-        task = adminClient.getService(TaskService.class).read(
-                Long.valueOf(StringUtils.substringAfterLast(response.getLocation().toASCIIString(), "/")), true);
-        assertNotNull(resource);
-
-        // pull
-        ExecTO execution = AbstractTaskITCase.execProvisioningTask(
-                adminClient.getService(TaskService.class), task.getKey(), 50, false);
-
-        // verify execution status
-        String status = execution.getStatus();
-        assertNotNull(status);
-        assertEquals(PropagationTaskExecStatus.SUCCESS, PropagationTaskExecStatus.valueOf(status));
-
-        // verify that pulled user is found
-        PagedResult<UserTO> matchingUsers = adminClient.getService(UserService.class).search(
-                new AnySearchQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
-                fiql(SyncopeClient.getUserSearchConditionBuilder().is("username").equalTo("pullFromLDAP").query()).
-                build());
-        assertNotNull(matchingUsers);
-        assertEquals(1, matchingUsers.getResult().size());
+        try {
+            ProvisionTO provisionTO = new ProvisionTO();
+            provisionTO.setAnyType(AnyTypeKind.USER.name());
+            provisionTO.setObjectClass(ObjectClass.ACCOUNT_NAME);
+            resource.getProvisions().add(provisionTO);
+
+            MappingTO mapping = new MappingTO();
+            mapping.setConnObjectLink("'uid=' + username + ',ou=people,o=isp'");
+            provisionTO.setMapping(mapping);
+
+            MappingItemTO item = new MappingItemTO();
+            item.setIntAttrName("username");
+            item.setIntMappingType(IntMappingType.Username);
+            item.setExtAttrName("cn");
+            item.setPurpose(MappingPurpose.BOTH);
+            mapping.setConnObjectKeyItem(item);
+
+            item = new MappingItemTO();
+            item.setPassword(true);
+            item.setIntMappingType(IntMappingType.Password);
+            item.setExtAttrName("userPassword");
+            item.setPurpose(MappingPurpose.BOTH);
+            item.setMandatoryCondition("true");
+            mapping.add(item);
+
+            item = new MappingItemTO();
+            item.setIntMappingType(IntMappingType.UserKey);
+            item.setPurpose(MappingPurpose.BOTH);
+            item.setExtAttrName("sn");
+            item.setMandatoryCondition("true");
+            mapping.add(item);
+
+            item = new MappingItemTO();
+            item.setIntAttrName("email");
+            item.setIntMappingType(IntMappingType.UserPlainSchema);
+            item.setPurpose(MappingPurpose.BOTH);
+            item.setExtAttrName("mail");
+            mapping.add(item);
+
+            // create resource
+            Response response = adminClient.getService(ResourceService.class).create(resource);
+            assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatus());
+            resource = adminClient.getService(ResourceService.class).read(resource.getKey());
+            assertNotNull(resource);
+
+            // create pull task
+            PullTaskTO task = new PullTaskTO();
+            task.setName("LDAP Pull Task");
+            task.setActive(true);
+            task.setDestinationRealm(SyncopeConstants.ROOT_REALM);
+            task.setResource(resource.getKey());
+            task.setPullMode(PullMode.FULL_RECONCILIATION);
+            task.setPerformCreate(true);
+
+            response = adminClient.getService(TaskService.class).create(task);
+            assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatus());
+            task = adminClient.getService(TaskService.class).read(
+                    StringUtils.substringAfterLast(response.getLocation().toASCIIString(), "/"), true);
+            assertNotNull(resource);
+
+            // pull
+            ExecTO execution = AbstractTaskITCase.execProvisioningTask(
+                    adminClient.getService(TaskService.class), task.getKey(), 50, false);
+
+            // verify execution status
+            String status = execution.getStatus();
+            assertNotNull(status);
+            assertEquals(PropagationTaskExecStatus.SUCCESS, PropagationTaskExecStatus.valueOf(status));
+
+            // verify that pulled user is found
+            PagedResult<UserTO> matchingUsers = adminClient.getService(UserService.class).search(
+                    new AnySearchQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
+                    fiql(SyncopeClient.getUserSearchConditionBuilder().is("username").equalTo("pullFromLDAP").query()).
+                    build());
+            assertNotNull(matchingUsers);
+            assertEquals(1, matchingUsers.getResult().size());
+        } finally {
+            adminClient.getService(ResourceService.class).delete(resource.getKey());
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/NotificationITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/NotificationITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/NotificationITCase.java
index b1c125d..70d55ba 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/NotificationITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/NotificationITCase.java
@@ -61,7 +61,8 @@ public class NotificationITCase extends AbstractITCase {
 
     @Test
     public void read() {
-        NotificationTO notificationTO = notificationService.read(10L);
+        NotificationTO notificationTO = notificationService.read(
+                "9e2b911c-25de-4c77-bcea-b86ed9451050");
         assertNotNull(notificationTO);
     }
 
@@ -78,7 +79,8 @@ public class NotificationITCase extends AbstractITCase {
     @Test
     public void create() {
         NotificationTO notificationTO = buildNotificationTO();
-        notificationTO.setRecipientsFIQL(SyncopeClient.getUserSearchConditionBuilder().inGroups(7L).query());
+        notificationTO.setRecipientsFIQL(SyncopeClient.getUserSearchConditionBuilder().
+                inGroups("bf825fe1-7320-4a54-bd64-143b5c18ab97").query());
 
         Response response = notificationService.create(notificationTO);
         NotificationTO actual = getObject(response.getLocation(), NotificationService.class, NotificationTO.class);
@@ -91,8 +93,10 @@ public class NotificationITCase extends AbstractITCase {
 
     @Test
     public void update() {
-        NotificationTO notificationTO = notificationService.read(10L);
-        notificationTO.setRecipientsFIQL(SyncopeClient.getUserSearchConditionBuilder().inGroups(7L).query());
+        NotificationTO notificationTO = notificationService.read(
+                "9e2b911c-25de-4c77-bcea-b86ed9451050");
+        notificationTO.setRecipientsFIQL(SyncopeClient.getUserSearchConditionBuilder().inGroups(
+                "bf825fe1-7320-4a54-bd64-143b5c18ab97").query());
 
         notificationService.update(notificationTO);
         NotificationTO actual = notificationService.read(notificationTO.getKey());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/NotificationTaskITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/NotificationTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/NotificationTaskITCase.java
index 6519325..bff885c 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/NotificationTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/NotificationTaskITCase.java
@@ -318,7 +318,8 @@ public class NotificationTaskITCase extends AbstractTaskITCase {
         notification.getAbouts().put(AnyTypeKind.GROUP.name(),
                 SyncopeClient.getGroupSearchConditionBuilder().is("name").equalTo(groupName).query());
 
-        notification.setRecipientsFIQL(SyncopeClient.getUserSearchConditionBuilder().inGroups(8L).query());
+        notification.setRecipientsFIQL(SyncopeClient.getUserSearchConditionBuilder().
+                inGroups("f779c0d4-633b-4be5-8f57-32eb478a3ca5").query());
         notification.setSelfAsRecipient(false);
         notification.setRecipientAttrName("email");
         notification.setRecipientAttrType(IntMappingType.UserPlainSchema);
@@ -386,10 +387,12 @@ public class NotificationTaskITCase extends AbstractTaskITCase {
 
         if (includeAbout) {
             notification.getAbouts().put(AnyTypeKind.USER.name(),
-                    SyncopeClient.getUserSearchConditionBuilder().inGroups(7L).query());
+                    SyncopeClient.getUserSearchConditionBuilder().
+                    inGroups("bf825fe1-7320-4a54-bd64-143b5c18ab97").query());
         }
 
-        notification.setRecipientsFIQL(SyncopeClient.getUserSearchConditionBuilder().inGroups(8L).query());
+        notification.setRecipientsFIQL(SyncopeClient.getUserSearchConditionBuilder().
+                inGroups("f779c0d4-633b-4be5-8f57-32eb478a3ca5").query());
         notification.setSelfAsRecipient(true);
         notification.setRecipientAttrName("email");
         notification.setRecipientAttrType(IntMappingType.UserPlainSchema);
@@ -408,7 +411,8 @@ public class NotificationTaskITCase extends AbstractTaskITCase {
 
         // 2. create user
         UserTO userTO = UserITCase.getUniqueSampleTO(MAIL_ADDRESS);
-        userTO.getMemberships().add(new MembershipTO.Builder().group(7L).build());
+        userTO.getMemberships().add(
+                new MembershipTO.Builder().group("bf825fe1-7320-4a54-bd64-143b5c18ab97").build());
 
         userTO = createUser(userTO).getAny();
         assertNotNull(userTO);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PlainSchemaITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PlainSchemaITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PlainSchemaITCase.java
index 1109d62..3f9ac6d 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PlainSchemaITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PlainSchemaITCase.java
@@ -265,7 +265,8 @@ public class PlainSchemaITCase extends AbstractITCase {
         assertNotNull(userTO);
 
         UserTO newUserTO = SerializationUtils.clone(userTO);
-        newUserTO.getMemberships().add(new MembershipTO.Builder().group(2L).build());
+        newUserTO.getMemberships().add(
+                new MembershipTO.Builder().group("b1f7c12d-ec83-441f-a50e-1691daaedf3b").build());
 
         userTO = userService.update(newUserTO).readEntity(new GenericType<ProvisioningResult<UserTO>>() {
         }).getAny();

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PolicyITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PolicyITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PolicyITCase.java
index 6df4935..b00df7d 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PolicyITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PolicyITCase.java
@@ -69,7 +69,7 @@ public class PolicyITCase extends AbstractITCase {
 
     @Test
     public void getAccountPolicy() {
-        AccountPolicyTO policyTO = policyService.read(6L);
+        AccountPolicyTO policyTO = policyService.read("06e2ed52-6966-44aa-a177-a0ca7434201f");
 
         assertNotNull(policyTO);
         assertTrue(policyTO.getUsedByResources().isEmpty());
@@ -78,7 +78,7 @@ public class PolicyITCase extends AbstractITCase {
 
     @Test
     public void getPasswordPolicy() {
-        PasswordPolicyTO policyTO = policyService.read(4L);
+        PasswordPolicyTO policyTO = policyService.read("986d1236-3ac5-4a19-810c-5ab21d79cba1");
 
         assertNotNull(policyTO);
         assertTrue(policyTO.getUsedByResources().contains(RESOURCE_NAME_NOPROPAGATION));
@@ -87,7 +87,7 @@ public class PolicyITCase extends AbstractITCase {
 
     @Test
     public void getPullPolicy() {
-        PullPolicyTO policyTO = policyService.read(1L);
+        PullPolicyTO policyTO = policyService.read("66691e96-285f-4464-bc19-e68384ea4c85");
 
         assertNotNull(policyTO);
         assertTrue(policyTO.getUsedByRealms().isEmpty());
@@ -119,7 +119,7 @@ public class PolicyITCase extends AbstractITCase {
 
     @Test
     public void update() {
-        PasswordPolicyTO globalPolicy = policyService.read(2L);
+        PasswordPolicyTO globalPolicy = policyService.read("ce93fcda-dc3a-4369-a7b0-a6108c261c85");
 
         PasswordPolicyTO policy = SerializationUtils.clone(globalPolicy);
         policy.setDescription("A simple password policy");
@@ -127,7 +127,7 @@ public class PolicyITCase extends AbstractITCase {
         // create a new password policy using the former as a template
         policy = createPolicy(policy);
         assertNotNull(policy);
-        assertNotEquals(2L, policy.getKey());
+        assertNotEquals("ce93fcda-dc3a-4369-a7b0-a6108c261c85", policy.getKey());
 
         ((DefaultPasswordRuleConf) policy.getRuleConfs().get(0)).setMaxLength(22);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
index 6a19e94..e32eafb 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
@@ -31,6 +31,7 @@ import org.apache.syncope.common.lib.to.PagedResult;
 import org.apache.syncope.common.lib.to.PropagationTaskTO;
 import org.apache.syncope.common.lib.to.ExecTO;
 import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.syncope.common.rest.api.beans.ExecuteQuery;
 import org.apache.syncope.common.rest.api.beans.TaskExecQuery;
@@ -71,7 +72,7 @@ public class PropagationTaskITCase extends AbstractTaskITCase {
 
     @Test
     public void read() {
-        final PropagationTaskTO taskTO = taskService.read(3L, true);
+        PropagationTaskTO taskTO = taskService.read("316285cc-ae52-4ea2-a33b-7355e189ac3f", true);
         assertNotNull(taskTO);
         assertNotNull(taskTO.getExecutions());
         assertTrue(taskTO.getExecutions().isEmpty());
@@ -79,38 +80,36 @@ public class PropagationTaskITCase extends AbstractTaskITCase {
 
     @Test
     public void bulkAction() {
-        PagedResult<PropagationTaskTO> before = taskService.list(
-                new TaskQuery.Builder(TaskType.PROPAGATION).build());
-
         // create user with testdb resource
         UserTO userTO = UserITCase.getUniqueSampleTO("taskBulk@apache.org");
         userTO.getResources().add(RESOURCE_NAME_TESTDB);
-        createUser(userTO);
+        userTO = createUser(userTO).getAny();
 
-        List<PropagationTaskTO> after = new ArrayList<>(
-                taskService.<PropagationTaskTO>list(new TaskQuery.Builder(TaskType.PROPAGATION).build()).
+        List<PropagationTaskTO> tasks = new ArrayList<>(
+                taskService.<PropagationTaskTO>list(new TaskQuery.Builder(TaskType.PROPAGATION).
+                        anyTypeKind(AnyTypeKind.USER).anyTypeKey(userTO.getKey()).build()).
                 getResult());
-        after.removeAll(before.getResult());
-        assertFalse(after.isEmpty());
+        assertFalse(tasks.isEmpty());
 
         BulkAction bulkAction = new BulkAction();
         bulkAction.setType(BulkAction.Type.DELETE);
-
-        for (PropagationTaskTO taskTO : after) {
-            bulkAction.getTargets().add(String.valueOf(taskTO.getKey()));
+        for (PropagationTaskTO taskTO : tasks) {
+            bulkAction.getTargets().add(taskTO.getKey());
         }
 
         taskService.bulk(bulkAction);
 
-        assertFalse(taskService.list(new TaskQuery.Builder(TaskType.PROPAGATION).build()).getResult().
-                containsAll(after));
+        assertFalse(taskService.list(new TaskQuery.Builder(TaskType.PROPAGATION).page(1).size(100).build()).
+                getResult().containsAll(tasks));
     }
 
     @Test
     public void issueSYNCOPE741() {
         for (int i = 0; i < 3; i++) {
-            taskService.execute(new ExecuteQuery.Builder().key(1L).build());
-            taskService.execute(new ExecuteQuery.Builder().key(2L).build());
+            taskService.execute(new ExecuteQuery.Builder().
+                    key("1e697572-b896-484c-ae7f-0c8f63fcbc6c").build());
+            taskService.execute(new ExecuteQuery.Builder().
+                    key("316285cc-ae52-4ea2-a33b-7355e189ac3f").build());
         }
         try {
             Thread.sleep(3000);
@@ -132,19 +131,20 @@ public class PropagationTaskITCase extends AbstractTaskITCase {
         }
 
         // check read
-        PropagationTaskTO task = taskService.read(1L, false);
+        PropagationTaskTO task = taskService.read("1e697572-b896-484c-ae7f-0c8f63fcbc6c", false);
         assertNotNull(task);
-        assertEquals(1L, task.getKey(), 0);
+        assertEquals("1e697572-b896-484c-ae7f-0c8f63fcbc6c", task.getKey());
         assertTrue(task.getExecutions().isEmpty());
 
-        task = taskService.read(1L, true);
+        task = taskService.read("1e697572-b896-484c-ae7f-0c8f63fcbc6c", true);
         assertNotNull(task);
-        assertEquals(1L, task.getKey(), 0);
+        assertEquals("1e697572-b896-484c-ae7f-0c8f63fcbc6c", task.getKey());
         assertFalse(task.getExecutions().isEmpty());
 
         // check list executions
         PagedResult<ExecTO> execs = taskService.listExecutions(
-                new TaskExecQuery.Builder().key(1L).page(1).size(2).build());
+                new TaskExecQuery.Builder().key("1e697572-b896-484c-ae7f-0c8f63fcbc6c").
+                page(1).size(2).build());
         assertTrue(execs.getTotalCount() >= execs.getResult().size());
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
index e386c0d..ff0ccbb 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
@@ -29,6 +29,7 @@ import java.util.HashSet;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
+import java.util.UUID;
 import javax.ws.rs.core.Response;
 import org.apache.commons.collections4.IterableUtils;
 import org.apache.commons.collections4.Predicate;
@@ -88,7 +89,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
 
     @BeforeClass
     public static void testPullctionsSetup() {
-        PullTaskTO pullTask = taskService.read(PULL_TASK_ID, true);
+        PullTaskTO pullTask = taskService.read(PULL_TASK_KEY, true);
         pullTask.getActionsClassNames().add(TestPullActions.class.getName());
         taskService.update(pullTask);
     }
@@ -122,7 +123,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
         UserTO userTemplate = new UserTO();
         userTemplate.getResources().add(RESOURCE_NAME_WS2);
 
-        userTemplate.getMemberships().add(new MembershipTO.Builder().group(8L).build());
+        userTemplate.getMemberships().add(
+                new MembershipTO.Builder().group("f779c0d4-633b-4be5-8f57-32eb478a3ca5").build());
         task.getTemplates().put(AnyTypeKind.USER.name(), userTemplate);
 
         GroupTO groupTemplate = new GroupTO();
@@ -173,7 +175,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
                     page(1).size(1).build()).getTotalCount();
             assertNotNull(usersPre);
 
-            execProvisioningTask(taskService, PULL_TASK_ID, 50, false);
+            execProvisioningTask(taskService, PULL_TASK_KEY, 50, false);
 
             // after execution of the pull task the user data should have been pulled from CSV
             // and processed by user template
@@ -199,7 +201,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
             assertTrue(userTO.getResources().contains(RESOURCE_NAME_TESTDB));
             assertTrue(userTO.getResources().contains(RESOURCE_NAME_WS2));
             assertEquals(1, userTO.getMemberships().size());
-            assertEquals(8, userTO.getMemberships().get(0).getRightKey());
+            assertEquals("f779c0d4-633b-4be5-8f57-32eb478a3ca5", userTO.getMemberships().get(0).getRightKey());
 
             // Unmatching --> Assign (link) - SYNCOPE-658
             assertTrue(userTO.getResources().contains(RESOURCE_NAME_CSV));
@@ -241,9 +243,9 @@ public class PullTaskITCase extends AbstractTaskITCase {
             assertNotNull(userTO);
             assertEquals("active", userTO.getStatus());
 
-            Set<Long> otherPullTaskKeys = new HashSet<>();
-            otherPullTaskKeys.add(25L);
-            otherPullTaskKeys.add(26L);
+            Set<String> otherPullTaskKeys = new HashSet<>();
+            otherPullTaskKeys.add("feae4e57-15ca-40d9-b973-8b9015efca49");
+            otherPullTaskKeys.add("55d5e74b-497e-4bc0-9156-73abef4b9adc");
             execProvisioningTasks(taskService, otherPullTaskKeys, 50, false);
 
             // Matching --> UNLINK
@@ -256,7 +258,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
 
     @Test
     public void dryRun() {
-        ExecTO execution = execProvisioningTask(taskService, PULL_TASK_ID, 50, true);
+        ExecTO execution = execProvisioningTask(taskService, PULL_TASK_KEY, 50, true);
         assertEquals(
                 "Execution of " + execution.getRefDesc() + " failed with message " + execution.getMessage(),
                 "SUCCESS", execution.getStatus());
@@ -267,7 +269,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
         UserTO userTO = null;
         JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
         try {
-            ExecTO execution = execProvisioningTask(taskService, 7L, 50, false);
+            ExecTO execution = execProvisioningTask(
+                    taskService, "83f7e85d-9774-43fe-adba-ccd856312994", 50, false);
             assertNotNull(execution.getStatus());
             assertEquals(PropagationTaskExecStatus.SUCCESS, PropagationTaskExecStatus.valueOf(execution.getStatus()));
 
@@ -280,7 +283,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
             jdbcTemplate.execute("UPDATE TEST SET status=TRUE WHERE id='testuser1'");
 
             // re-execute the same PullTask: now user must be active
-            execution = execProvisioningTask(taskService, 7L, 50, false);
+            execution = execProvisioningTask(
+                    taskService, "83f7e85d-9774-43fe-adba-ccd856312994", 50, false);
             assertNotNull(execution.getStatus());
             assertEquals(PropagationTaskExecStatus.SUCCESS, PropagationTaskExecStatus.valueOf(execution.getStatus()));
 
@@ -335,7 +339,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
         ldapCleanup();
 
         // 0. pull
-        ExecTO execution = execProvisioningTask(taskService, 11L, 50, false);
+        ExecTO execution = execProvisioningTask(
+                taskService, "1e419ca4-ea81-4493-a14f-28b90113686d", 50, false);
 
         // 1. verify execution status
         assertEquals(PropagationTaskExecStatus.SUCCESS, PropagationTaskExecStatus.valueOf(execution.getStatus()));
@@ -368,11 +373,11 @@ public class PullTaskITCase extends AbstractTaskITCase {
         assertNotNull(groupTO);
         assertEquals("testLDAPGroup", groupTO.getName());
         assertEquals("true", groupTO.getPlainAttrMap().get("show").getValues().get(0));
-        assertEquals(matchingUsers.getResult().iterator().next().getKey(), groupTO.getUserOwner(), 0);
+        assertEquals(matchingUsers.getResult().iterator().next().getKey(), groupTO.getUserOwner());
         assertNull(groupTO.getGroupOwner());
 
         // SYNCOPE-317
-        execProvisioningTask(taskService, 11L, 50, false);
+        execProvisioningTask(taskService, "1e419ca4-ea81-4493-a14f-28b90113686d", 50, false);
     }
 
     @Test
@@ -433,7 +438,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
             }
 
             // 4. pull
-            execProvisioningTask(taskService, 28L, 50, false);
+            execProvisioningTask(taskService, "30cfd653-257b-495f-8665-281281dbcb3d", 50, false);
 
             // 5. verify that printer was re-created in Syncope (implies that location does not start with given prefix,
             // hence PrefixMappingItemTransformer was applied during pull)
@@ -453,16 +458,21 @@ public class PullTaskITCase extends AbstractTaskITCase {
 
     @Test
     public void filteredReconciliation() {
+        String user1OnTestPull = UUID.randomUUID().toString();
+        String user2OnTestPull = UUID.randomUUID().toString();
+
         JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
         PullTaskTO task = null;
         UserTO userTO = null;
         try {
             // 1. create 2 users on testpull
-            jdbcTemplate.execute("INSERT INTO testpull VALUES (1001, 'user1', 'Doe', 'mail1@apache.org')");
-            jdbcTemplate.execute("INSERT INTO testpull VALUES (1002, 'user2', 'Rossi', 'mail2@apache.org')");
+            jdbcTemplate.execute("INSERT INTO testpull VALUES ("
+                    + "'" + user1OnTestPull + "', 'user1', 'Doe', 'mail1@apache.org')");
+            jdbcTemplate.execute("INSERT INTO testpull VALUES ("
+                    + "'" + user2OnTestPull + "', 'user2', 'Rossi', 'mail2@apache.org')");
 
             // 2. create new pull task for test-db, with reconciliation filter (surname 'Rossi') 
-            task = taskService.read(10L, true);
+            task = taskService.read("7c2242f4-14af-4ab5-af31-cdae23783655", true);
             task.setPullMode(PullMode.FILTERED_RECONCILIATION);
             task.setReconciliationFilterBuilderClassName(TestReconciliationFilterBuilder.class.getName());
             Response response = taskService.create(task);
@@ -488,9 +498,9 @@ public class PullTaskITCase extends AbstractTaskITCase {
                 assertEquals(ClientExceptionType.NotFound, e.getType());
             }
         } finally {
-            jdbcTemplate.execute("DELETE FROM testpull WHERE id = 1001");
-            jdbcTemplate.execute("DELETE FROM testpull WHERE id = 1002");
-            if (task != null && task.getKey() != 7L) {
+            jdbcTemplate.execute("DELETE FROM testpull WHERE id = '" + user1OnTestPull + "'");
+            jdbcTemplate.execute("DELETE FROM testpull WHERE id = '" + user2OnTestPull + "'");
+            if (task != null && !"83f7e85d-9774-43fe-adba-ccd856312994".equals(task.getKey())) {
                 taskService.delete(task.getKey());
             }
             if (userTO != null) {
@@ -519,7 +529,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
         userTO.getResources().add(RESOURCE_NAME_NOPROPAGATION2);
         userTO.getResources().add(RESOURCE_NAME_NOPROPAGATION4);
 
-        userTO.getMemberships().add(new MembershipTO.Builder().group(7L).build());
+        userTO.getMemberships().add(
+                new MembershipTO.Builder().group("bf825fe1-7320-4a54-bd64-143b5c18ab97").build());
 
         userTO = createUser(userTO).getAny();
         assertNotNull(userTO);
@@ -534,13 +545,14 @@ public class PullTaskITCase extends AbstractTaskITCase {
             //-----------------------------
             UserTO template = new UserTO();
 
-            template.getMemberships().add(new MembershipTO.Builder().group(10L).build());
+            template.getMemberships().add(
+                    new MembershipTO.Builder().group("b8d38784-57e7-4595-859a-076222644b55").build());
 
             template.getResources().add(RESOURCE_NAME_NOPROPAGATION4);
             //-----------------------------
 
             // Update pull task
-            PullTaskTO task = taskService.read(9L, true);
+            PullTaskTO task = taskService.read("81d88f73-d474-4450-9031-605daa4e313f", true);
             assertNotNull(task);
 
             task.getTemplates().put(AnyTypeKind.USER.name(), template);
@@ -569,7 +581,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
     @Test
     public void issueSYNCOPE230() {
         // 1. read PullTask for resource-db-pull (table TESTPULL on external H2)
-        execProvisioningTask(taskService, 10L, 50, false);
+        execProvisioningTask(taskService, "7c2242f4-14af-4ab5-af31-cdae23783655", 50, false);
 
         // 3. read e-mail address for user created by the PullTask first execution
         UserTO userTO = readUser("issuesyncope230");
@@ -582,7 +594,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
         jdbcTemplate.execute("UPDATE TESTPULL SET email='updatedSYNCOPE230@syncope.apache.org'");
 
         // 5. re-execute the PullTask
-        execProvisioningTask(taskService, 10L, 50, false);
+        execProvisioningTask(taskService, "7c2242f4-14af-4ab5-af31-cdae23783655", 50, false);
 
         // 6. verify that the e-mail was updated
         userTO = readUser("issuesyncope230");
@@ -597,7 +609,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
         // -----------------------------
         // Add a custom correlation rule
         // -----------------------------
-        PullPolicyTO policyTO = policyService.read(9L);
+        PullPolicyTO policyTO = policyService.read("9454b0d7-2610-400a-be82-fc23cf553dd6");
         policyTO.getSpecification().getCorrelationRules().put(AnyTypeKind.USER.name(), TestPullRule.class.getName());
         policyService.update(policyTO);
         // -----------------------------
@@ -659,7 +671,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
             assertEquals(1, result.getPropagationStatuses().size());
             assertEquals(PropagationTaskExecStatus.SUCCESS, result.getPropagationStatuses().get(0).getStatus());
 
-            ExecTO taskExecTO = execProvisioningTask(taskService, 24L, 50, false);
+            ExecTO taskExecTO = execProvisioningTask(
+                    taskService, "986867e2-993b-430e-8feb-aa9abb4c1dcd", 50, false);
 
             assertNotNull(taskExecTO.getStatus());
             assertEquals(PropagationTaskExecStatus.SUCCESS, PropagationTaskExecStatus.valueOf(taskExecTO.getStatus()));
@@ -694,7 +707,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
         assertTrue(userTO.getVirAttrMap().isEmpty());
 
         // Update pull task
-        PullTaskTO task = taskService.read(12L, true);
+        PullTaskTO task = taskService.read("38abbf9e-a1a3-40a1-a15f-7d0ac02f47f1", true);
         assertNotNull(task);
 
         UserTO template = new UserTO();
@@ -783,70 +796,85 @@ public class PullTaskITCase extends AbstractTaskITCase {
         // First of all, clear any potential conflict with existing user / group
         ldapCleanup();
 
-        // 1. create user in LDAP
-        String oldCleanPassword = "security123";
-        UserTO user = UserITCase.getUniqueSampleTO("syncope313-ldap@syncope.apache.org");
-        user.setPassword(oldCleanPassword);
-        user.getResources().add(RESOURCE_NAME_LDAP);
-        user = createUser(user).getAny();
-        assertNotNull(user);
-        assertFalse(user.getResources().isEmpty());
-
-        // 2. request to change password only on Syncope and not on LDAP
-        String newCleanPassword = "new-security123";
-        UserPatch userPatch = new UserPatch();
-        userPatch.setKey(user.getKey());
-        userPatch.setPassword(new PasswordPatch.Builder().value(newCleanPassword).build());
-        user = updateUser(userPatch).getAny();
-
-        // 3. Check that the Syncope user now has the changed password
-        Pair<Map<String, Set<String>>, UserTO> self = clientFactory.create(user.getUsername(), newCleanPassword).self();
-        assertNotNull(self);
-
-        // 4. Check that the LDAP resource has the old password
-        ConnObjectTO connObject =
-                resourceService.readConnObject(RESOURCE_NAME_LDAP, AnyTypeKind.USER.name(), user.getKey());
-        assertNotNull(getLdapRemoteObject(
-                connObject.getPlainAttrMap().get(Name.NAME).getValues().get(0),
-                oldCleanPassword,
-                connObject.getPlainAttrMap().get(Name.NAME).getValues().get(0)));
-
-        // 5. Update the LDAP Connector to retrieve passwords
-        ResourceTO ldapResource = resourceService.read(RESOURCE_NAME_LDAP);
-        ConnInstanceTO resourceConnector = connectorService.read(
-                ldapResource.getConnector(), Locale.ENGLISH.getLanguage());
-        ConnConfProperty property = resourceConnector.getConfMap().get("retrievePasswordsWithSearch");
-        property.getValues().clear();
-        property.getValues().add(Boolean.TRUE);
-        connectorService.update(resourceConnector);
-
-        // 6. Pull the user from the resource
-        PullTaskTO pullTask = new PullTaskTO();
-        pullTask.setDestinationRealm(SyncopeConstants.ROOT_REALM);
-        pullTask.setName("LDAP Pull Task");
-        pullTask.setActive(true);
-        pullTask.setPerformCreate(true);
-        pullTask.setPerformUpdate(true);
-        pullTask.setPullMode(PullMode.FULL_RECONCILIATION);
-        pullTask.setResource(RESOURCE_NAME_LDAP);
-        pullTask.getActionsClassNames().add(LDAPPasswordPullActions.class.getName());
-        Response taskResponse = taskService.create(pullTask);
-
-        pullTask = getObject(taskResponse.getLocation(), TaskService.class, PullTaskTO.class);
-        assertNotNull(pullTask);
+        UserTO user = null;
+        PullTaskTO pullTask = null;
+        ConnInstanceTO resourceConnector = null;
+        ConnConfProperty property = null;
+        try {
+            // 1. create user in LDAP
+            String oldCleanPassword = "security123";
+            user = UserITCase.getUniqueSampleTO("syncope313-ldap@syncope.apache.org");
+            user.setPassword(oldCleanPassword);
+            user.getResources().add(RESOURCE_NAME_LDAP);
+            user = createUser(user).getAny();
+            assertNotNull(user);
+            assertFalse(user.getResources().isEmpty());
+
+            // 2. request to change password only on Syncope and not on LDAP
+            String newCleanPassword = "new-security123";
+            UserPatch userPatch = new UserPatch();
+            userPatch.setKey(user.getKey());
+            userPatch.setPassword(new PasswordPatch.Builder().value(newCleanPassword).build());
+            user = updateUser(userPatch).getAny();
+
+            // 3. Check that the Syncope user now has the changed password
+            Pair<Map<String, Set<String>>, UserTO> self =
+                    clientFactory.create(user.getUsername(), newCleanPassword).self();
+            assertNotNull(self);
+
+            // 4. Check that the LDAP resource has the old password
+            ConnObjectTO connObject =
+                    resourceService.readConnObject(RESOURCE_NAME_LDAP, AnyTypeKind.USER.name(), user.getKey());
+            assertNotNull(getLdapRemoteObject(
+                    connObject.getPlainAttrMap().get(Name.NAME).getValues().get(0),
+                    oldCleanPassword,
+                    connObject.getPlainAttrMap().get(Name.NAME).getValues().get(0)));
+
+            // 5. Update the LDAP Connector to retrieve passwords
+            ResourceTO ldapResource = resourceService.read(RESOURCE_NAME_LDAP);
+            resourceConnector = connectorService.read(
+                    ldapResource.getConnector(), Locale.ENGLISH.getLanguage());
+            property = resourceConnector.getConfMap().get("retrievePasswordsWithSearch");
+            property.getValues().clear();
+            property.getValues().add(Boolean.TRUE);
+            connectorService.update(resourceConnector);
+
+            // 6. Pull the user from the resource
+            pullTask = new PullTaskTO();
+            pullTask.setDestinationRealm(SyncopeConstants.ROOT_REALM);
+            pullTask.setName("LDAP Pull Task");
+            pullTask.setActive(true);
+            pullTask.setPerformCreate(true);
+            pullTask.setPerformUpdate(true);
+            pullTask.setPullMode(PullMode.FULL_RECONCILIATION);
+            pullTask.setResource(RESOURCE_NAME_LDAP);
+            pullTask.getActionsClassNames().add(LDAPPasswordPullActions.class.getName());
+            Response taskResponse = taskService.create(pullTask);
+
+            pullTask = getObject(taskResponse.getLocation(), TaskService.class, PullTaskTO.class);
+            assertNotNull(pullTask);
+
+            ExecTO execution = execProvisioningTask(taskService, pullTask.getKey(), 50, false);
+            assertEquals(PropagationTaskExecStatus.SUCCESS, PropagationTaskExecStatus.valueOf(execution.getStatus()));
 
-        ExecTO execution = execProvisioningTask(taskService, pullTask.getKey(), 50, false);
-        assertEquals(PropagationTaskExecStatus.SUCCESS, PropagationTaskExecStatus.valueOf(execution.getStatus()));
+            // 7. Test the pulled user
+            self = clientFactory.create(user.getUsername(), oldCleanPassword).self();
+            assertNotNull(self);
+        } finally {
+            // Delete PullTask + user + reset the connector
+            if (pullTask != null) {
+                taskService.delete(pullTask.getKey());
+            }
 
-        // 7. Test the pulled user
-        self = clientFactory.create(user.getUsername(), oldCleanPassword).self();
-        assertNotNull(self);
+            if (resourceConnector != null && property != null) {
+                property.getValues().clear();
+                property.getValues().add(Boolean.FALSE);
+                connectorService.update(resourceConnector);
+            }
 
-        // 8. Delete PullTask + user + reset the connector
-        taskService.delete(pullTask.getKey());
-        property.getValues().clear();
-        property.getValues().add(Boolean.FALSE);
-        connectorService.update(resourceConnector);
-        deleteUser(user.getKey());
+            if (user != null) {
+                deleteUser(user.getKey());
+            }
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
index 15a87f7..ed9b603 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
@@ -73,7 +73,8 @@ public class PushTaskITCase extends AbstractTaskITCase {
 
     @Test
     public void read() {
-        PushTaskTO pushTaskTO = taskService.<PushTaskTO>read(17L, true);
+        PushTaskTO pushTaskTO = taskService.<PushTaskTO>read(
+                "0bc11a19-6454-45c2-a4e3-ceef84e5d79b", true);
         assertEquals(UnmatchingRule.ASSIGN, pushTaskTO.getUnmatchingRule());
         assertEquals(MatchingRule.UPDATE, pushTaskTO.getMatchingRule());
     }
@@ -118,56 +119,68 @@ public class PushTaskITCase extends AbstractTaskITCase {
 
     @Test
     public void pushMatchingUnmatchingGroups() {
-        assertFalse(groupService.read(3L).getResources().contains(RESOURCE_NAME_LDAP));
+        assertFalse(groupService.read("29f96485-729e-4d31-88a1-6fc60e4677f3").
+                getResources().contains(RESOURCE_NAME_LDAP));
 
-        execProvisioningTask(taskService, 23L, 50, false);
+        execProvisioningTask(taskService, "fd905ba5-9d56-4f51-83e2-859096a67b75", 50, false);
 
-        assertNotNull(resourceService.readConnObject(RESOURCE_NAME_LDAP, AnyTypeKind.GROUP.name(), 3L));
-        assertTrue(groupService.read(3L).getResources().contains(RESOURCE_NAME_LDAP));
+        assertNotNull(resourceService.readConnObject(
+                RESOURCE_NAME_LDAP, AnyTypeKind.GROUP.name(), "29f96485-729e-4d31-88a1-6fc60e4677f3"));
+        assertTrue(groupService.read("29f96485-729e-4d31-88a1-6fc60e4677f3").
+                getResources().contains(RESOURCE_NAME_LDAP));
 
-        execProvisioningTask(taskService, 23L, 50, false);
+        execProvisioningTask(taskService, "fd905ba5-9d56-4f51-83e2-859096a67b75", 50, false);
 
-        assertNotNull(resourceService.readConnObject(RESOURCE_NAME_LDAP, AnyTypeKind.GROUP.name(), 3L));
-        assertFalse(groupService.read(3L).getResources().contains(RESOURCE_NAME_LDAP));
+        assertNotNull(resourceService.readConnObject(
+                RESOURCE_NAME_LDAP, AnyTypeKind.GROUP.name(), "29f96485-729e-4d31-88a1-6fc60e4677f3"));
+        assertFalse(groupService.read("29f96485-729e-4d31-88a1-6fc60e4677f3").
+                getResources().contains(RESOURCE_NAME_LDAP));
     }
 
     @Test
     public void pushUnmatchingUsers() throws Exception {
-        assertFalse(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
-        assertFalse(userService.read(3L).getResources().contains(RESOURCE_NAME_TESTDB2));
-        assertFalse(userService.read(4L).getResources().contains(RESOURCE_NAME_TESTDB2));
-        assertTrue(userService.read(5L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertFalse(userService.read("74cd8ece-715a-44a4-a736-e17b46c4e7e6").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertFalse(userService.read("b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertFalse(userService.read("c9b2dec2-00a7-4855-97c0-d854842b4b24").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertTrue(userService.read("823074dc-d280-436d-a7dd-07399fae48ec").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
 
-        final JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
         assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='puccini'").size());
 
         // ------------------------------------------
         // Unmatching --> Assign --> dryRuyn
         // ------------------------------------------
-        execProvisioningTask(taskService, 13L, 50, true);
+        execProvisioningTask(taskService, "af558be4-9d2f-4359-bf85-a554e6e90be1", 50, true);
         assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='vivaldi'").size());
-        assertFalse(userService.read(3L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertFalse(userService.read("b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
         // ------------------------------------------
 
-        Set<Long> pushTaskIds = new HashSet<>();
-        pushTaskIds.add(13L);
-        pushTaskIds.add(14L);
-        pushTaskIds.add(15L);
-        pushTaskIds.add(16L);
-        execProvisioningTasks(taskService, pushTaskIds, 50, false);
+        Set<String> pushTaskKeys = new HashSet<>();
+        pushTaskKeys.add("af558be4-9d2f-4359-bf85-a554e6e90be1");
+        pushTaskKeys.add("97f327b6-2eff-4d35-85e8-d581baaab855");
+        pushTaskKeys.add("03aa2a04-4881-4573-9117-753f81b04865");
+        pushTaskKeys.add("5e5f7c7e-9de7-4c6a-99f1-4df1af959807");
+        execProvisioningTasks(taskService, pushTaskKeys, 50, false);
 
         // ------------------------------------------
         // Unatching --> Ignore
         // ------------------------------------------
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
-        assertFalse(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertFalse(userService.read("74cd8ece-715a-44a4-a736-e17b46c4e7e6").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
         // ------------------------------------------
 
         // ------------------------------------------
         // Unmatching --> Assign
         // ------------------------------------------
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='vivaldi'").size());
-        assertTrue(userService.read(3L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertTrue(userService.read("b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
         jdbcTemplate.execute("DELETE FROM test2 WHERE ID='vivaldi'");
         // ------------------------------------------
 
@@ -175,7 +188,8 @@ public class PushTaskITCase extends AbstractTaskITCase {
         // Unmatching --> Provision
         // ------------------------------------------
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='bellini'").size());
-        assertFalse(userService.read(4L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertFalse(userService.read("c9b2dec2-00a7-4855-97c0-d854842b4b24").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
         jdbcTemplate.execute("DELETE FROM test2 WHERE ID='bellini'");
         // ------------------------------------------
 
@@ -183,14 +197,17 @@ public class PushTaskITCase extends AbstractTaskITCase {
         // Unmatching --> Unlink
         // ------------------------------------------
         assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='puccini'").size());
-        assertFalse(userService.read(5L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertFalse(userService.read("823074dc-d280-436d-a7dd-07399fae48ec").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
         // ------------------------------------------
     }
 
     @Test
     public void pushMatchingUser() throws Exception {
-        assertTrue(userService.read(1L).getResources().contains(RESOURCE_NAME_TESTDB2));
-        assertFalse(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertTrue(userService.read("1417acbe-cbf6-4277-9372-e75e04f97000").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertFalse(userService.read("74cd8ece-715a-44a4-a736-e17b46c4e7e6").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
 
         JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
@@ -199,22 +216,24 @@ public class PushTaskITCase extends AbstractTaskITCase {
         // ------------------------------------------
         // Matching --> Deprovision --> dryRuyn
         // ------------------------------------------
-        execProvisioningTask(taskService, 19L, 50, true);
-        assertTrue(userService.read(1L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        execProvisioningTask(taskService, "c46edc3a-a18b-4af2-b707-f4a415507496", 50, true);
+        assertTrue(userService.read("1417acbe-cbf6-4277-9372-e75e04f97000").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='rossini'").size());
         // ------------------------------------------
 
-        Set<Long> pushTaskKeys = new HashSet<>();
-        pushTaskKeys.add(18L);
-        pushTaskKeys.add(19L);
-        pushTaskKeys.add(16L);
+        Set<String> pushTaskKeys = new HashSet<>();
+        pushTaskKeys.add("ec674143-480a-4816-98ad-b61fa090821e");
+        pushTaskKeys.add("c46edc3a-a18b-4af2-b707-f4a415507496");
+        pushTaskKeys.add("5e5f7c7e-9de7-4c6a-99f1-4df1af959807");
 
         execProvisioningTasks(taskService, pushTaskKeys, 50, false);
 
         // ------------------------------------------
         // Matching --> Deprovision && Ignore
         // ------------------------------------------
-        assertFalse(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertFalse(userService.read("74cd8ece-715a-44a4-a736-e17b46c4e7e6").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
         // DELETE Capability not available ....
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
         // ------------------------------------------
@@ -222,7 +241,8 @@ public class PushTaskITCase extends AbstractTaskITCase {
         // ------------------------------------------
         // Matching --> Unassign
         // ------------------------------------------
-        assertFalse(userService.read(1L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertFalse(userService.read("1417acbe-cbf6-4277-9372-e75e04f97000").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
         // DELETE Capability not available ....
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='rossini'").size());
         // ------------------------------------------
@@ -230,21 +250,23 @@ public class PushTaskITCase extends AbstractTaskITCase {
         // ------------------------------------------
         // Matching --> Link
         // ------------------------------------------
-        execProvisioningTask(taskService, 20L, 50, false);
-        assertTrue(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        execProvisioningTask(taskService, "51318433-cce4-4f71-8f45-9534b6c9c819", 50, false);
+        assertTrue(userService.read("74cd8ece-715a-44a4-a736-e17b46c4e7e6").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
         // ------------------------------------------
 
         pushTaskKeys.clear();
-        pushTaskKeys.add(21L);
-        pushTaskKeys.add(22L);
+        pushTaskKeys.add("24b1be9c-7e3b-443a-86c9-798ebce5eaf2");
+        pushTaskKeys.add("375c7b7f-9e3a-4833-88c9-b7787b0a69f2");
 
         execProvisioningTasks(taskService, pushTaskKeys, 50, false);
 
         // ------------------------------------------
         // Matching --> Unlink && Update
         // ------------------------------------------
-        assertFalse(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertFalse(userService.read("74cd8ece-715a-44a4-a736-e17b46c4e7e6").
+                getResources().contains(RESOURCE_NAME_TESTDB2));
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
         // ------------------------------------------
     }
@@ -283,7 +305,7 @@ public class PushTaskITCase extends AbstractTaskITCase {
             // Create resource ad-hoc
             ResourceTO resourceTO = new ResourceTO();
             resourceTO.setKey(resourceName);
-            resourceTO.setConnector(105L);
+            resourceTO.setConnector("74141a3b-0762-4720-a4aa-fc3e374ef3ef");
 
             ProvisionTO provisionTO = new ProvisionTO();
             provisionTO.setAnyType(AnyTypeKind.GROUP.name());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
index 4d3360f..e02f614 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
@@ -85,13 +85,13 @@ public class RealmITCase extends AbstractITCase {
         assertNotNull(actual.getKey());
         assertEquals("last", actual.getName());
         assertEquals("/even/two/last", actual.getFullPath());
-        assertEquals(actual.getParent(), getRealm("/even/two").getKey(), 0);
+        assertEquals(actual.getParent(), getRealm("/even/two").getKey());
         assertNull(realm.getAccountPolicy());
         assertNull(realm.getPasswordPolicy());
 
         // 2. update setting policies
-        actual.setAccountPolicy(6L);
-        actual.setPasswordPolicy(4L);
+        actual.setAccountPolicy("06e2ed52-6966-44aa-a177-a0ca7434201f");
+        actual.setPasswordPolicy("986d1236-3ac5-4a19-810c-5ab21d79cba1");
         realmService.update(actual);
 
         actual = getRealm(actual.getFullPath());
@@ -127,7 +127,7 @@ public class RealmITCase extends AbstractITCase {
             realmService.create("/odd", realm);
             fail();
         } catch (SyncopeClientException e) {
-            assertEquals(ClientExceptionType.DataIntegrityViolation, e.getType());
+            assertEquals(ClientExceptionType.EntityExists, e.getType());
         }
     }
 
@@ -155,7 +155,7 @@ public class RealmITCase extends AbstractITCase {
         assertNotNull(actuals);
         assertTrue(actuals.length > 0);
         RealmTO actual = actuals[0];
-        assertEquals(policy.getKey(), actual.getAccountPolicy(), 0);
+        assertEquals(policy.getKey(), actual.getAccountPolicy());
 
         // 3. remove policy
         policyService.delete(policy.getKey());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
index ff32f2c..d9b299e 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
@@ -83,7 +83,7 @@ public class ReportITCase extends AbstractITCase {
 
     @Test
     public void read() {
-        ReportTO reportTO = reportService.read(1L);
+        ReportTO reportTO = reportService.read("0062ea9c-924d-4ecf-9961-4492a8cc6d1b");
 
         assertNotNull(reportTO);
         assertNotNull(reportTO.getExecutions());
@@ -148,7 +148,7 @@ public class ReportITCase extends AbstractITCase {
         }
     }
 
-    private Long execute(final Long reportKey) {
+    private String execute(final String reportKey) {
         ExecTO execution = reportService.execute(new ExecuteQuery.Builder().key(reportKey).build());
         assertNotNull(execution);
 
@@ -177,8 +177,8 @@ public class ReportITCase extends AbstractITCase {
         return reportTO.getExecutions().get(0).getKey();
     }
 
-    private void checkExport(final Long execId, final ReportExecExportFormat fmt) throws IOException {
-        Response response = reportService.exportExecutionResult(execId, fmt);
+    private void checkExport(final String execKey, final ReportExecExportFormat fmt) throws IOException {
+        Response response = reportService.exportExecutionResult(execKey, fmt);
         assertNotNull(response);
         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusInfo().getStatusCode());
         assertNotNull(response.getHeaderString(HttpHeaders.CONTENT_DISPOSITION));
@@ -192,8 +192,8 @@ public class ReportITCase extends AbstractITCase {
 
     @Test
     public void executeAndExport() throws IOException {
-        ReportTO reportTO = reportService.read(1L);
-        reportTO.setKey(0L);
+        ReportTO reportTO = reportService.read("0062ea9c-924d-4ecf-9961-4492a8cc6d1b");
+        reportTO.setKey(null);
         reportTO.setName("executeAndExport" + getUUIDString());
         reportTO.setActive(false);
         reportTO.getExecutions().clear();
@@ -211,7 +211,7 @@ public class ReportITCase extends AbstractITCase {
         reportTO.setActive(true);
         reportService.update(reportTO);
 
-        long execKey = execute(reportTO.getKey());
+        String execKey = execute(reportTO.getKey());
 
         checkExport(execKey, ReportExecExportFormat.XML);
         checkExport(execKey, ReportExecExportFormat.HTML);
@@ -228,15 +228,15 @@ public class ReportITCase extends AbstractITCase {
         } catch (InterruptedException e) {
         }
 
-        ReportTO reportTO = reportService.read(1L);
-        reportTO.setKey(0L);
+        ReportTO reportTO = reportService.read("0062ea9c-924d-4ecf-9961-4492a8cc6d1b");
+        reportTO.setKey(null);
         reportTO.setName("deleteExecutions" + getUUIDString());
         reportTO.getExecutions().clear();
         reportTO = createReport(reportTO);
         assertNotNull(reportTO);
 
-        Long execId = execute(reportTO.getKey());
-        assertNotNull(execId);
+        String execKey = execute(reportTO.getKey());
+        assertNotNull(execKey);
 
         try {
             Thread.sleep(1000);
@@ -249,7 +249,7 @@ public class ReportITCase extends AbstractITCase {
         assertNotNull(result);
 
         assertEquals(1, result.getResults().size());
-        assertEquals(execId.toString(), result.getResults().keySet().iterator().next());
+        assertEquals(execKey, result.getResults().keySet().iterator().next());
         assertEquals(BulkActionResult.Status.SUCCESS, result.getResults().entrySet().iterator().next().getValue());
     }
 
@@ -275,7 +275,7 @@ public class ReportITCase extends AbstractITCase {
             report.setTemplate("sample");
             report = createReport(report);
 
-            long execKey = execute(report.getKey());
+            String execKey = execute(report.getKey());
             checkExport(execKey, ReportExecExportFormat.XML);
 
             report = reportService.read(report.getKey());
@@ -315,8 +315,8 @@ public class ReportITCase extends AbstractITCase {
     @Test
     public void issueSYNCOPE102() throws IOException {
         // Create
-        ReportTO reportTO = reportService.read(1L);
-        reportTO.setKey(0L);
+        ReportTO reportTO = reportService.read("0062ea9c-924d-4ecf-9961-4492a8cc6d1b");
+        reportTO.setKey(null);
         reportTO.setName("issueSYNCOPE102" + getUUIDString());
         reportTO = createReport(reportTO);
         assertNotNull(reportTO);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ResourceITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ResourceITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ResourceITCase.java
index e9923ef..91f66ca 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ResourceITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ResourceITCase.java
@@ -66,7 +66,7 @@ public class ResourceITCase extends AbstractITCase {
         ResourceTO resourceTO = new ResourceTO();
 
         resourceTO.setKey(resourceName);
-        resourceTO.setConnector(102L);
+        resourceTO.setConnector("5ffbb4ac-a8c3-4b44-b699-11b398a1ba08");
 
         ProvisionTO provisionTO = new ProvisionTO();
         provisionTO.setAnyType(AnyTypeKind.USER.name());
@@ -159,7 +159,7 @@ public class ResourceITCase extends AbstractITCase {
         mapping.add(item);
 
         resourceTO.setKey(resourceName);
-        resourceTO.setConnector(102L);
+        resourceTO.setConnector("5ffbb4ac-a8c3-4b44-b699-11b398a1ba08");
 
         ConnConfProperty prop = new ConnConfProperty();
         ConnConfPropSchema schema = new ConnConfPropSchema();
@@ -186,7 +186,7 @@ public class ResourceITCase extends AbstractITCase {
         String resourceName = RESOURCE_NAME_CREATE_SINGLE;
         ResourceTO resourceTO = new ResourceTO();
         resourceTO.setKey(resourceName);
-        resourceTO.setConnector(102L);
+        resourceTO.setConnector("5ffbb4ac-a8c3-4b44-b699-11b398a1ba08");
 
         ProvisionTO provisionTO = new ProvisionTO();
         provisionTO.setAnyType(AnyTypeKind.USER.name());
@@ -236,7 +236,7 @@ public class ResourceITCase extends AbstractITCase {
         String resourceName = RESOURCE_NAME_CREATE_WRONG;
         ResourceTO resourceTO = new ResourceTO();
         resourceTO.setKey(resourceName);
-        resourceTO.setConnector(102L);
+        resourceTO.setConnector("5ffbb4ac-a8c3-4b44-b699-11b398a1ba08");
 
         ProvisionTO provisionTO = new ProvisionTO();
         provisionTO.setAnyType(AnyTypeKind.USER.name());
@@ -274,7 +274,7 @@ public class ResourceITCase extends AbstractITCase {
         String resourceName = RESOURCE_NAME_CREATE_WRONG;
         ResourceTO resourceTO = new ResourceTO();
         resourceTO.setKey(resourceName);
-        resourceTO.setConnector(102L);
+        resourceTO.setConnector("5ffbb4ac-a8c3-4b44-b699-11b398a1ba08");
 
         ProvisionTO provisionTO = new ProvisionTO();
         provisionTO.setAnyType(AnyTypeKind.USER.name());
@@ -304,8 +304,8 @@ public class ResourceITCase extends AbstractITCase {
         String resourceName = "res-with-password-policy";
         ResourceTO resourceTO = new ResourceTO();
         resourceTO.setKey(resourceName);
-        resourceTO.setConnector(102L);
-        resourceTO.setPasswordPolicy(4L);
+        resourceTO.setConnector("5ffbb4ac-a8c3-4b44-b699-11b398a1ba08");
+        resourceTO.setPasswordPolicy("986d1236-3ac5-4a19-810c-5ab21d79cba1");
 
         ProvisionTO provisionTO = new ProvisionTO();
         provisionTO.setAnyType(AnyTypeKind.USER.name());
@@ -331,7 +331,7 @@ public class ResourceITCase extends AbstractITCase {
         actual = resourceService.read(resourceName);
         assertNotNull(actual);
         assertNotNull(actual.getPasswordPolicy());
-        assertEquals(4L, (long) actual.getPasswordPolicy());
+        assertEquals("986d1236-3ac5-4a19-810c-5ab21d79cba1", actual.getPasswordPolicy());
     }
 
     @Test
@@ -352,7 +352,7 @@ public class ResourceITCase extends AbstractITCase {
         String resourceName = RESOURCE_NAME_UPDATE;
         ResourceTO resourceTO = new ResourceTO();
         resourceTO.setKey(resourceName);
-        resourceTO.setConnector(101L);
+        resourceTO.setConnector("5aa5b8be-7521-481a-9651-c557aea078c1");
 
         ProvisionTO provisionTO = new ProvisionTO();
         provisionTO.setAnyType(AnyTypeKind.USER.name());
@@ -364,7 +364,7 @@ public class ResourceITCase extends AbstractITCase {
 
         // Update with an existing and already assigned mapping
         MappingItemTO item = new MappingItemTO();
-        item.setKey(112L);
+        item.setKey("cc973ed6-d031-4790-adab-fc059ac0c818");
         item.setExtAttrName("test3");
         item.setIntAttrName("fullname");
         item.setIntMappingType(IntMappingType.UserPlainSchema);
@@ -533,7 +533,7 @@ public class ResourceITCase extends AbstractITCase {
 
     @Test
     public void listConnObjects() {
-        List<Long> groupKeys = new ArrayList<>();
+        List<String> groupKeys = new ArrayList<>();
         for (int i = 0; i < 10; i++) {
             GroupTO group = GroupITCase.getSampleTO("group");
             group.getResources().add(RESOURCE_NAME_LDAP);
@@ -581,7 +581,7 @@ public class ResourceITCase extends AbstractITCase {
             assertEquals(totalRead, read.size());
             assertTrue(totalRead >= 10);
         } finally {
-            for (Long key : groupKeys) {
+            for (String key : groupKeys) {
                 groupService.delete(key);
             }
         }
@@ -611,7 +611,7 @@ public class ResourceITCase extends AbstractITCase {
         ResourceTO resourceTO = new ResourceTO();
 
         resourceTO.setKey(name);
-        resourceTO.setConnector(105L);
+        resourceTO.setConnector("74141a3b-0762-4720-a4aa-fc3e374ef3ef");
 
         ProvisionTO provisionTO = new ProvisionTO();
         provisionTO.setAnyType(AnyTypeKind.GROUP.name());
@@ -656,7 +656,7 @@ public class ResourceITCase extends AbstractITCase {
         String resourceName = RESOURCE_NAME_CREATE_NONE;
         ResourceTO resourceTO = new ResourceTO();
         resourceTO.setKey(resourceName);
-        resourceTO.setConnector(102L);
+        resourceTO.setConnector("5ffbb4ac-a8c3-4b44-b699-11b398a1ba08");
 
         ProvisionTO provisionTO = new ProvisionTO();
         provisionTO.setAnyType(AnyTypeKind.USER.name());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RoleITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RoleITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RoleITCase.java
index 19adfd3..10b301c 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RoleITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RoleITCase.java
@@ -125,7 +125,7 @@ public class RoleITCase extends AbstractITCase {
 
     @Test
     public void dynMembership() {
-        assertTrue(userService.read(4L).getDynRoles().isEmpty());
+        assertTrue(userService.read("c9b2dec2-00a7-4855-97c0-d854842b4b24").getDynRoles().isEmpty());
 
         RoleTO role = getSampleRoleTO("dynMembership");
         role.setDynMembershipCond("cool==true");
@@ -133,11 +133,12 @@ public class RoleITCase extends AbstractITCase {
         role = getObject(response.getLocation(), RoleService.class, RoleTO.class);
         assertNotNull(role);
 
-        assertTrue(userService.read(4L).getDynRoles().contains(role.getKey()));
+        assertTrue(userService.read(
+                "c9b2dec2-00a7-4855-97c0-d854842b4b24").getDynRoles().contains(role.getKey()));
 
         role.setDynMembershipCond("cool==false");
         roleService.update(role);
 
-        assertTrue(userService.read(4L).getDynGroups().isEmpty());
+        assertTrue(userService.read("c9b2dec2-00a7-4855-97c0-d854842b4b24").getDynGroups().isEmpty());
     }
 }


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
index 8d94adb..d536d66 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
@@ -84,12 +84,12 @@ public class ResourceTest extends AbstractTest {
     public void createWithPasswordPolicy() {
         final String resourceName = "resourceWithPasswordPolicy";
 
-        PasswordPolicy policy = (PasswordPolicy) policyDAO.find(4L);
+        PasswordPolicy policy = policyDAO.find("986d1236-3ac5-4a19-810c-5ab21d79cba1");
         ExternalResource resource = entityFactory.newEntity(ExternalResource.class);
         resource.setKey(resourceName);
         resource.setPasswordPolicy(policy);
 
-        ConnInstance connector = connInstanceDAO.find(100L);
+        ConnInstance connector = connInstanceDAO.find("88a7a819-dab5-46b4-9b90-0b9769eabdb8");
         assertNotNull("connector not found", connector);
         resource.setConnector(connector);
 
@@ -103,7 +103,7 @@ public class ResourceTest extends AbstractTest {
         resourceDAO.delete(resourceName);
         assertNull(resourceDAO.find(resourceName));
 
-        assertNotNull(policyDAO.find(4L));
+        assertNotNull(policyDAO.find("986d1236-3ac5-4a19-810c-5ab21d79cba1"));
     }
 
     @Test
@@ -112,7 +112,7 @@ public class ResourceTest extends AbstractTest {
         resource.setKey("ws-target-resource-save");
 
         // specify the connector
-        ConnInstance connector = connInstanceDAO.find(100L);
+        ConnInstance connector = connInstanceDAO.find("88a7a819-dab5-46b4-9b90-0b9769eabdb8");
         assertNotNull("connector not found", connector);
 
         resource.setConnector(connector);
@@ -166,7 +166,7 @@ public class ResourceTest extends AbstractTest {
         connInstanceDAO.detach(connector);
 
         // assign the new resource to an user
-        User user = userDAO.find(1L);
+        User user = userDAO.findByUsername("rossini");
         assertNotNull("user not found", user);
 
         user.add(actual);
@@ -179,7 +179,7 @@ public class ResourceTest extends AbstractTest {
         resourceDAO.refresh(resource);
 
         // check connector
-        connector = connInstanceDAO.find(100L);
+        connector = connInstanceDAO.find("88a7a819-dab5-46b4-9b90-0b9769eabdb8");
         assertNotNull(connector);
         assertNotNull(connector.getResources());
 
@@ -192,7 +192,7 @@ public class ResourceTest extends AbstractTest {
         assertEquals(5, items.size());
 
         // check user
-        user = userDAO.find(1L);
+        user = userDAO.findByUsername("rossini");
         assertNotNull(user);
         assertNotNull(user.getResources());
         assertTrue(user.getResources().contains(actual));
@@ -216,9 +216,9 @@ public class ResourceTest extends AbstractTest {
         List<User> users = userDAO.findByResource(resource);
         assertNotNull(users);
 
-        Set<Long> userIds = new HashSet<>();
+        Set<String> userKeys = new HashSet<>();
         for (User user : users) {
-            userIds.add(user.getKey());
+            userKeys.add(user.getKey());
         }
         // -------------------------------------
 
@@ -238,8 +238,8 @@ public class ResourceTest extends AbstractTest {
         assertNull("delete did not work", actual);
 
         // resource must be not referenced any more from users
-        for (Long id : userIds) {
-            User actualUser = userDAO.find(id);
+        for (String key : userKeys) {
+            User actualUser = userDAO.find(key);
             assertNotNull(actualUser);
             for (ExternalResource res : userDAO.findAllResources(actualUser)) {
                 assertFalse(res.getKey().equalsIgnoreCase(resource.getKey()));
@@ -269,7 +269,7 @@ public class ResourceTest extends AbstractTest {
         List<? extends MappingItem> items = ldap.getProvision(anyTypeDAO.findGroup()).getMapping().getItems();
         assertNotNull(items);
         assertFalse(items.isEmpty());
-        List<Long> itemKeys = new ArrayList<>(items.size());
+        List<String> itemKeys = new ArrayList<>(items.size());
         for (MappingItem item : items) {
             itemKeys.add(item.getKey());
         }
@@ -286,7 +286,7 @@ public class ResourceTest extends AbstractTest {
         resourceDAO.save(ldap);
         resourceDAO.flush();
 
-        for (Long itemKey : itemKeys) {
+        for (String itemKey : itemKeys) {
             assertNull(entityManager().find(JPAMappingItem.class, itemKey));
         }
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
index 544a470..04d3e39 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
@@ -83,7 +83,7 @@ public class RoleTest extends AbstractTest {
         // 0. create user matching the condition below
         User user = entityFactory.newEntity(User.class);
         user.setUsername("username");
-        user.setRealm(realmDAO.find("/even/two"));
+        user.setRealm(realmDAO.findByFullPath("/even/two"));
         user.add(anyTypeClassDAO.find("other"));
 
         UPlainAttr attr = entityFactory.newEntity(UPlainAttr.class);
@@ -93,14 +93,14 @@ public class RoleTest extends AbstractTest {
         user.add(attr);
 
         user = userDAO.save(user);
-        Long newUserKey = user.getKey();
+        String newUserKey = user.getKey();
         assertNotNull(newUserKey);
 
         // 1. create role with dynamic membership
         Role role = entityFactory.newEntity(Role.class);
         role.setKey("new");
         role.add(realmDAO.getRoot());
-        role.add(realmDAO.find("/even/two"));
+        role.add(realmDAO.findByFullPath("/even/two"));
         role.getEntitlements().add(StandardEntitlement.LOG_LIST);
         role.getEntitlements().add(StandardEntitlement.LOG_SET_LEVEL);
 
@@ -124,12 +124,12 @@ public class RoleTest extends AbstractTest {
 
         // 3. verify that expected users have the created role dynamically assigned
         assertEquals(2, actual.getDynMembership().getMembers().size());
-        assertEquals(new HashSet<>(Arrays.asList(4L, newUserKey)),
+        assertEquals(new HashSet<>(Arrays.asList("c9b2dec2-00a7-4855-97c0-d854842b4b24", newUserKey)),
                 CollectionUtils.collect(actual.getDynMembership().getMembers(),
-                        EntityUtils.<Long, User>keyTransformer(),
-                        new HashSet<Long>()));
+                        EntityUtils.<User>keyTransformer(),
+                        new HashSet<String>()));
 
-        user = userDAO.find(4L);
+        user = userDAO.find("c9b2dec2-00a7-4855-97c0-d854842b4b24");
         assertNotNull(user);
         Collection<Role> dynRoleMemberships = findDynRoleMemberships(user);
         assertEquals(1, dynRoleMemberships.size());
@@ -142,10 +142,10 @@ public class RoleTest extends AbstractTest {
 
         actual = roleDAO.find(actual.getKey());
         assertEquals(1, actual.getDynMembership().getMembers().size());
-        assertEquals(4L, actual.getDynMembership().getMembers().get(0).getKey(), 0);
+        assertEquals("c9b2dec2-00a7-4855-97c0-d854842b4b24", actual.getDynMembership().getMembers().get(0).getKey());
 
         // 5. delete role and verify that dynamic membership was also removed
-        Long dynMembershipKey = actual.getDynMembership().getKey();
+        String dynMembershipKey = actual.getDynMembership().getKey();
 
         roleDAO.delete(actual);
 
@@ -163,7 +163,7 @@ public class RoleTest extends AbstractTest {
         Role role = entityFactory.newEntity(Role.class);
         role.setKey("new");
         role.add(realmDAO.getRoot());
-        role.add(realmDAO.find("/even/two"));
+        role.add(realmDAO.findByFullPath("/even/two"));
         role.getEntitlements().add(StandardEntitlement.LOG_LIST);
         role.getEntitlements().add(StandardEntitlement.LOG_SET_LEVEL);
 
@@ -173,7 +173,7 @@ public class RoleTest extends AbstractTest {
         // 1. create user and assign that role
         User user = entityFactory.newEntity(User.class);
         user.setUsername("username");
-        user.setRealm(realmDAO.find("/even/two"));
+        user.setRealm(realmDAO.findByFullPath("/even/two"));
         user.add(role);
 
         user = userDAO.save(user);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/SecurityQuestionTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/SecurityQuestionTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/SecurityQuestionTest.java
index 14c463c..84a8a31 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/SecurityQuestionTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/SecurityQuestionTest.java
@@ -39,21 +39,21 @@ public class SecurityQuestionTest extends AbstractTest {
 
     @Test
     public void test() {
-        User user = userDAO.find(4L);
+        User user = userDAO.findByUsername("bellini");
         assertNull(user.getSecurityQuestion());
         assertNull(user.getSecurityAnswer());
 
-        user.setSecurityQuestion(securityQuestionDAO.find(1L));
+        user.setSecurityQuestion(securityQuestionDAO.find("887028ea-66fc-41e7-b397-620d7ea6dfbb"));
         user.setSecurityAnswer("Rossi");
         userDAO.save(user);
 
         userDAO.flush();
 
-        securityQuestionDAO.delete(1L);
+        securityQuestionDAO.delete("887028ea-66fc-41e7-b397-620d7ea6dfbb");
 
         userDAO.flush();
 
-        user = userDAO.find(4L);
+        user = userDAO.findByUsername("bellini");
 
         assertNull(user.getSecurityQuestion());
         assertNull(user.getSecurityAnswer());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/TaskTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/TaskTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/TaskTest.java
index 715188d..fc47959 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/TaskTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/TaskTest.java
@@ -59,164 +59,164 @@ import org.apache.syncope.core.provisioning.api.pushpull.PullActions;
 
 @Transactional("Master")
 public class TaskTest extends AbstractTest {
-
+    
     @Autowired
     private TaskDAO taskDAO;
-
+    
     @Autowired
     private TaskExecDAO taskExecDAO;
-
+    
     @Autowired
     private ExternalResourceDAO resourceDAO;
-
+    
     @Autowired
     private UserDAO userDAO;
-
+    
     @Test
     public void read() {
-        PropagationTask task = taskDAO.find(1L);
+        PropagationTask task = taskDAO.find("1e697572-b896-484c-ae7f-0c8f63fcbc6c");
         assertNotNull(task);
-
+        
         assertNotNull(task.getExecs());
         assertFalse(task.getExecs().isEmpty());
         assertEquals(1, task.getExecs().size());
     }
-
+    
     @Test
     public void save() {
         ExternalResource resource = resourceDAO.find("ws-target-resource-1");
         assertNotNull(resource);
-
-        User user = userDAO.find(2L);
+        
+        User user = userDAO.findByUsername("verdi");
         assertNotNull(user);
-
+        
         PropagationTask task = entityFactory.newEntity(PropagationTask.class);
         task.setResource(resource);
         task.setAnyTypeKind(AnyTypeKind.USER);
         task.setAnyType(AnyTypeKind.USER.name());
         task.setOperation(ResourceOperation.CREATE);
         task.setConnObjectKey("one@two.com");
-
+        
         Set<Attribute> attributes = new HashSet<>();
         attributes.add(AttributeBuilder.build("testAttribute", "testValue1", "testValue2"));
         attributes.add(AttributeBuilder.buildPassword("password".toCharArray()));
         task.setAttributes(attributes);
-
+        
         task = taskDAO.save(task);
         assertNotNull(task);
-
+        
         PropagationTask actual = taskDAO.find(task.getKey());
         assertEquals(task, actual);
-
+        
         taskDAO.flush();
-
+        
         resource = resourceDAO.find("ws-target-resource-1");
         assertTrue(taskDAO.findAll(
                 TaskType.PROPAGATION, resource, null, null, null, -1, -1, Collections.<OrderByClause>emptyList()).
                 contains(task));
     }
-
+    
     @Test
     public void addPropagationTaskExecution() {
-        PropagationTask task = taskDAO.find(1L);
+        PropagationTask task = taskDAO.find("1e697572-b896-484c-ae7f-0c8f63fcbc6c");
         assertNotNull(task);
-
+        
         int executionNumber = task.getExecs().size();
-
+        
         TaskExec execution = entityFactory.newEntity(TaskExec.class);
         execution.setTask(task);
         execution.setStatus(PropagationTaskExecStatus.CREATED.name());
         execution.setStart(new Date());
         task.add(execution);
-
+        
         taskDAO.save(task);
         taskDAO.flush();
-
-        task = taskDAO.find(1L);
+        
+        task = taskDAO.find("1e697572-b896-484c-ae7f-0c8f63fcbc6c");
         assertNotNull(task);
-
+        
         assertEquals(executionNumber + 1, task.getExecs().size());
     }
-
+    
     @Test
     public void addPullTaskExecution() {
-        PullTask task = taskDAO.find(4L);
+        PullTask task = taskDAO.find("c41b9b71-9bfa-4f90-89f2-84787def4c5c");
         assertNotNull(task);
-
+        
         int executionNumber = task.getExecs().size();
-
+        
         TaskExec execution = entityFactory.newEntity(TaskExec.class);
         execution.setStatus("Text-free status");
         execution.setTask(task);
         execution.setStart(new Date());
         execution.setMessage("A message");
         task.add(execution);
-
+        
         taskDAO.save(task);
         taskDAO.flush();
-
-        task = taskDAO.find(4L);
+        
+        task = taskDAO.find("c41b9b71-9bfa-4f90-89f2-84787def4c5c");
         assertNotNull(task);
-
+        
         assertEquals(executionNumber + 1, task.getExecs().size());
     }
-
+    
     @Test
     public void addPushTaskExecution() {
-        PushTask task = taskDAO.find(13L);
+        PushTask task = taskDAO.find("af558be4-9d2f-4359-bf85-a554e6e90be1");
         assertNotNull(task);
-
+        
         int executionNumber = task.getExecs().size();
-
+        
         TaskExec execution = entityFactory.newEntity(TaskExec.class);
         execution.setStatus("Text-free status");
         execution.setTask(task);
         execution.setStart(new Date());
         execution.setMessage("A message");
         task.add(execution);
-
+        
         taskDAO.save(task);
         taskDAO.flush();
-
-        task = taskDAO.find(13L);
+        
+        task = taskDAO.find("af558be4-9d2f-4359-bf85-a554e6e90be1");
         assertNotNull(task);
-
+        
         assertEquals(executionNumber + 1, task.getExecs().size());
     }
-
+    
     @Test
     public void deleteTask() {
-        taskDAO.delete(1L);
-
+        taskDAO.delete("1e697572-b896-484c-ae7f-0c8f63fcbc6c");
+        
         taskDAO.flush();
-
-        assertNull(taskDAO.find(1L));
-        assertNull(taskExecDAO.find(1L));
+        
+        assertNull(taskDAO.find("1e697572-b896-484c-ae7f-0c8f63fcbc6c"));
+        assertNull(taskExecDAO.find("e58ca1c7-178a-4012-8a71-8aa14eaf0655"));
     }
-
+    
     @Test
     public void deleteTaskExecution() {
-        TaskExec execution = taskExecDAO.find(1L);
+        TaskExec execution = taskExecDAO.find("e58ca1c7-178a-4012-8a71-8aa14eaf0655");
         int executionNumber = execution.getTask().getExecs().size();
-
-        taskExecDAO.delete(1L);
-
+        
+        taskExecDAO.delete("e58ca1c7-178a-4012-8a71-8aa14eaf0655");
+        
         taskExecDAO.flush();
-
-        assertNull(taskExecDAO.find(1L));
-
-        PropagationTask task = taskDAO.find(1L);
+        
+        assertNull(taskExecDAO.find("e58ca1c7-178a-4012-8a71-8aa14eaf0655"));
+        
+        PropagationTask task = taskDAO.find("1e697572-b896-484c-ae7f-0c8f63fcbc6c");
         assertEquals(task.getExecs().size(), executionNumber - 1);
     }
-
+    
     @Test
     public void savePullTask() {
         ExternalResource resource = resourceDAO.find("ws-target-resource-1");
         assertNotNull(resource);
-
+        
         AnyTemplatePullTask template = entityFactory.newEntity(AnyTemplatePullTask.class);
         template.set(new UserTO());
-
+        
         PullTask task = entityFactory.newEntity(PullTask.class);
         task.setName("savePullTask");
         task.setDescription("PullTask description");
@@ -235,7 +235,7 @@ public class TaskTest extends AbstractTest {
             exception = e;
         }
         assertNotNull(exception);
-
+        
         task.setCronExpression(null);
         // this save() fails because a PullTask requires a target resource
         exception = null;
@@ -245,7 +245,7 @@ public class TaskTest extends AbstractTest {
             exception = e;
         }
         assertNotNull(exception);
-
+        
         task.setResource(resource);
         task.getActionsClassNames().add(getClass().getName());
 
@@ -258,24 +258,24 @@ public class TaskTest extends AbstractTest {
             exception = e;
         }
         assertNotNull(exception);
-
+        
         task.getActionsClassNames().clear();
         task.getActionsClassNames().add(PullActions.class.getName());
         // this save() finally works
         task = taskDAO.save(task);
         assertNotNull(task);
-
+        
         PullTask actual = taskDAO.find(task.getKey());
         assertEquals(task, actual);
     }
-
+    
     @Test
     public void issueSYNCOPE144() {
         ExternalResource resource = resourceDAO.find("ws-target-resource-1");
         assertNotNull(resource);
-
+        
         PullTask task = entityFactory.newEntity(PullTask.class);
-
+        
         task.setResource(resource);
         task.setName("issueSYNCOPE144");
         task.setDescription("issueSYNCOPE144 Description");
@@ -284,22 +284,22 @@ public class TaskTest extends AbstractTest {
         task.getActionsClassNames().add(PullActions.class.getName());
         task.setMatchingRule(MatchingRule.UPDATE);
         task.setUnmatchingRule(UnmatchingRule.PROVISION);
-
+        
         task = taskDAO.save(task);
         assertNotNull(task);
-
+        
         PullTask actual = taskDAO.find(task.getKey());
         assertEquals(task, actual);
         assertEquals("issueSYNCOPE144", actual.getName());
         assertEquals("issueSYNCOPE144 Description", actual.getDescription());
-
+        
         actual.setName("issueSYNCOPE144_2");
         actual.setDescription("issueSYNCOPE144 Description_2");
-
+        
         actual = taskDAO.save(actual);
         assertNotNull(actual);
         assertEquals("issueSYNCOPE144_2", actual.getName());
         assertEquals("issueSYNCOPE144 Description_2", actual.getDescription());
     }
-
+    
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java
index 695f406..1a5a62d 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.util.List;
+import java.util.UUID;
 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
 import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainAttrDAO;
@@ -73,65 +74,75 @@ public class UserTest extends AbstractTest {
 
     @Test
     public void delete() {
-        List<UMembership> memberships = groupDAO.findUMemberships(groupDAO.find(7L));
+        List<UMembership> memberships = groupDAO.findUMemberships(groupDAO.findByName("managingDirector"));
         assertFalse(memberships.isEmpty());
-        List<URelationship> relationships = anyObjectDAO.findURelationships(anyObjectDAO.find(1L));
+        List<URelationship> relationships = anyObjectDAO.findURelationships(
+                anyObjectDAO.find("fc6dbc3a-6c07-4965-8781-921e7401a4a5"));
         assertFalse(relationships.isEmpty());
 
-        userDAO.delete(4L);
+        userDAO.delete("c9b2dec2-00a7-4855-97c0-d854842b4b24");
 
         userDAO.flush();
 
-        assertNull(userDAO.find(4L));
-        assertNull(plainAttrDAO.find(550L, UPlainAttr.class));
-        assertNull(plainAttrValueDAO.find(22L, UPlainAttrValue.class));
+        assertNull(userDAO.findByUsername("bellini"));
+        assertNull(plainAttrDAO.find(UUID.randomUUID().toString(), UPlainAttr.class));
+        assertNull(plainAttrValueDAO.find(UUID.randomUUID().toString(), UPlainAttrValue.class));
         assertNotNull(plainSchemaDAO.find("loginDate"));
 
-        memberships = groupDAO.findUMemberships(groupDAO.find(7L));
+        memberships = groupDAO.findUMemberships(groupDAO.findByName("managingDirector"));
         assertTrue(memberships.isEmpty());
-        relationships = anyObjectDAO.findURelationships(anyObjectDAO.find(1L));
+        relationships = anyObjectDAO.findURelationships(
+                anyObjectDAO.find("fc6dbc3a-6c07-4965-8781-921e7401a4a5"));
         assertTrue(relationships.isEmpty());
     }
 
     @Test
     public void ships() {
-        User user = userDAO.find(4L);
+        User user = userDAO.findByUsername("bellini");
         assertNotNull(user);
         assertEquals(1, user.getMemberships().size());
-        assertEquals(7L, user.getMemberships().get(0).getRightEnd().getKey(), 0);
+        assertEquals(
+                "bf825fe1-7320-4a54-bd64-143b5c18ab97",
+                user.getMemberships().get(0).getRightEnd().getKey());
 
         user.getMemberships().remove(0);
 
         UMembership newM = entityFactory.newEntity(UMembership.class);
         newM.setLeftEnd(user);
-        newM.setRightEnd(groupDAO.find(13L));
+        newM.setRightEnd(groupDAO.find("ba9ed509-b1f5-48ab-a334-c8530a6422dc"));
         user.add(newM);
 
         userDAO.save(user);
 
         userDAO.flush();
 
-        user = userDAO.find(4L);
+        user = userDAO.findByUsername("bellini");
         assertEquals(1, user.getMemberships().size());
-        assertEquals(13L, user.getMemberships().get(0).getRightEnd().getKey(), 0);
+        assertEquals(
+                "ba9ed509-b1f5-48ab-a334-c8530a6422dc",
+                user.getMemberships().get(0).getRightEnd().getKey());
         assertEquals(1, user.getRelationships().size());
-        assertEquals(1L, user.getRelationships().get(0).getRightEnd().getKey(), 0);
+        assertEquals(
+                "fc6dbc3a-6c07-4965-8781-921e7401a4a5",
+                user.getRelationships().get(0).getRightEnd().getKey());
 
         user.getRelationships().remove(0);
 
         URelationship newR = entityFactory.newEntity(URelationship.class);
         newR.setType(relationshipTypeDAO.find("neighborhood"));
         newR.setLeftEnd(user);
-        newR.setRightEnd(anyObjectDAO.find(2L));
+        newR.setRightEnd(anyObjectDAO.find("8559d14d-58c2-46eb-a2d4-a7d35161e8f8"));
         user.add(newR);
 
         userDAO.save(user);
 
         userDAO.flush();
 
-        user = userDAO.find(4L);
+        user = userDAO.findByUsername("bellini");
         assertEquals(1, user.getRelationships().size());
-        assertEquals(2L, user.getRelationships().get(0).getRightEnd().getKey(), 0);
+        assertEquals(
+                "8559d14d-58c2-46eb-a2d4-a7d35161e8f8",
+                user.getRelationships().get(0).getRightEnd().getKey());
     }
 
     @Test // search by derived attribute
@@ -141,7 +152,7 @@ public class UserTest extends AbstractTest {
         prefix.setKey("kprefix");
         prefix.setExpression("'k' + firstname");
 
-        prefix = derSchemaDAO.save(prefix);
+        derSchemaDAO.save(prefix);
         derSchemaDAO.flush();
 
         // create derived attribute (literal as suffix)
@@ -149,11 +160,11 @@ public class UserTest extends AbstractTest {
         suffix.setKey("ksuffix");
         suffix.setExpression("firstname + 'k'");
 
-        suffix = derSchemaDAO.save(suffix);
+        derSchemaDAO.save(suffix);
         derSchemaDAO.flush();
 
         // add derived attributes to user
-        User owner = userDAO.find(3L);
+        User owner = userDAO.findByUsername("vivaldi");
         assertNotNull("did not get expected user", owner);
 
         String firstname = owner.getPlainAttr("firstname").getValuesAsStrings().iterator().next();

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java
index bd68313..334f4a8 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import java.util.UUID;
 import org.apache.syncope.common.lib.types.IntMappingType;
 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
 import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
@@ -45,7 +46,7 @@ public class VirSchemaTest extends AbstractTest {
 
     @Test
     public void deal() {
-        Provision provision = resourceDAO.findProvision(15L);
+        Provision provision = resourceDAO.findProvision("209ea85f-f964-49c7-a498-6c9c2baa3bd8");
         assertNotNull(provision);
         assertTrue(virSchemaDAO.findByProvision(provision).isEmpty());
 
@@ -63,7 +64,7 @@ public class VirSchemaTest extends AbstractTest {
         assertTrue(virSchema.isReadonly());
         assertEquals("EXT_ATTR", virSchema.getExtAttrName());
 
-        provision = resourceDAO.findProvision(15L);
+        provision = resourceDAO.findProvision("209ea85f-f964-49c7-a498-6c9c2baa3bd8");
         assertNotNull(provision);
         assertFalse(virSchemaDAO.findByProvision(provision).isEmpty());
         assertTrue(virSchemaDAO.findByProvision(provision).contains(virSchema));

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/resources/META-INF/persistence-enhance.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/META-INF/persistence-enhance.xml b/core/persistence-jpa/src/test/resources/META-INF/persistence-enhance.xml
deleted file mode 100644
index 6b72247..0000000
--- a/core/persistence-jpa/src/test/resources/META-INF/persistence-enhance.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
-                                 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
-             version="2.0">
-  
-  <persistence-unit name="Master">
-    <mapping-file>META-INF/spring-orm.xml</mapping-file>
-    <validation-mode>NONE</validation-mode>    
-  </persistence-unit>
-  
-</persistence>


[02/24] syncope git commit: Upgrading font awedome, jsplumn and angular ui bootstrap

Posted by il...@apache.org.
Upgrading font awedome, jsplumn and angular ui bootstrap


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

Branch: refs/heads/master
Commit: 36dcf657e491f5ebe689c1471ab1a9ad593a7d30
Parents: 0df25df
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Apr 18 16:50:16 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Apr 19 15:01:19 2016 +0200

----------------------------------------------------------------------
 pom.xml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/36dcf657/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index ab044ed..81f254a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -388,11 +388,11 @@ under the License.
     <bootstrap.version>3.3.6</bootstrap.version>
     <bootstrap-select.version>1.7.3</bootstrap-select.version>
     <bootbox.version>4.4.0</bootbox.version>
-    <font-awesome.version>4.5.0</font-awesome.version>
+    <font-awesome.version>4.6.1</font-awesome.version>
     <ionicons.version>2.0.1</ionicons.version>
     <highlightjs.version>9.2.0</highlightjs.version>
     <codemirror.version>5.13.2</codemirror.version>
-    <jsplumb.version>2.0.5</jsplumb.version>
+    <jsplumb.version>2.0.7</jsplumb.version>
     
     <wicket.version>7.2.0</wicket.version>
     <wicket-jqueryui.version>7.2.1</wicket-jqueryui.version>
@@ -401,7 +401,7 @@ under the License.
 
     <angular.version>1.5.3</angular.version>
     <angular-ui-router.version>0.2.18</angular-ui-router.version>
-    <angular-ui-bootstrap.version>1.2.5</angular-ui-bootstrap.version>
+    <angular-ui-bootstrap.version>1.3.1</angular-ui-bootstrap.version>
     <angular-ui-select.version>0.14.8</angular-ui-select.version>
     <angular-treasure-overlay-spinner.version>1.1.0</angular-treasure-overlay-spinner.version>
     <ng-password-strength.version>0.2.1</ng-password-strength.version>


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
index 7d12f6f..0e19eb7 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
@@ -73,7 +73,7 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
 
     @Transactional(readOnly = true)
     @Override
-    public AnyObjectTO getAnyObjectTO(final Long key) {
+    public AnyObjectTO getAnyObjectTO(final String key) {
         return getAnyObjectTO(anyObjectDAO.authFind(key), true);
     }
 
@@ -113,8 +113,7 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
 
             // dynamic memberships
             CollectionUtils.collect(anyObjectDAO.findDynGroupMemberships(anyObject),
-                    EntityUtils.<Long, Group>keyTransformer(),
-                    anyObjectTO.getDynGroups());
+                    EntityUtils.<Group>keyTransformer(), anyObjectTO.getDynGroups());
         }
 
         return anyObjectTO;
@@ -133,7 +132,7 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
         SyncopeClientCompositeException scce = SyncopeClientException.buildComposite();
 
         // realm
-        Realm realm = realmDAO.find(anyObjectTO.getRealm());
+        Realm realm = realmDAO.findByFullPath(anyObjectTO.getRealm());
         if (realm == null) {
             SyncopeClientException noRealm = SyncopeClientException.build(ClientExceptionType.InvalidRealm);
             noRealm.getElements().add("Invalid or null realm specified: " + anyObjectTO.getRealm());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
index 9129900..689df6b 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
@@ -99,10 +99,10 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder {
     }
 
     @Override
-    public ConnInstance update(final Long key, final ConnInstanceTO connInstanceTO) {
+    public ConnInstance update(final String key, final ConnInstanceTO connInstanceTO) {
         SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.RequiredValuesMissing);
 
-        if (key == 0) {
+        if (key == null) {
             sce.getElements().add("connector key");
         }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
index ba94507..0aba4b9 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
@@ -27,6 +27,7 @@ import org.apache.commons.collections4.Transformer;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.SyncopeClientCompositeException;
 import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.patch.GroupPatch;
 import org.apache.syncope.common.lib.to.GroupTO;
 import org.apache.syncope.common.lib.to.TypeExtensionTO;
@@ -101,7 +102,7 @@ public class GroupDataBinderImpl extends AbstractAnyDataBinder implements GroupD
         }
 
         // realm
-        Realm realm = realmDAO.find(groupTO.getRealm());
+        Realm realm = realmDAO.findByFullPath(groupTO.getRealm());
         if (realm == null) {
             SyncopeClientException noRealm = SyncopeClientException.build(ClientExceptionType.InvalidRealm);
             noRealm.getElements().add("Invalid or null realm specified: " + groupTO.getRealm());
@@ -355,7 +356,9 @@ public class GroupDataBinderImpl extends AbstractAnyDataBinder implements GroupD
 
     @Transactional(readOnly = true)
     @Override
-    public GroupTO getGroupTO(final Long key) {
-        return getGroupTO(groupDAO.authFind(key), true);
+    public GroupTO getGroupTO(final String key) {
+        return SyncopeConstants.UUID_PATTERN.matcher(key).matches()
+                ? getGroupTO(groupDAO.authFind(key), true)
+                : getGroupTO(groupDAO.authFindByName(key), true);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
index 70e7877..38d94fd 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
@@ -97,7 +97,7 @@ public class RealmDataBinderImpl implements RealmDataBinder {
         Realm realm = entityFactory.newEntity(Realm.class);
 
         realm.setName(realmTO.getName());
-        realm.setParent(realmDAO.find(parentPath));
+        realm.setParent(realmDAO.findByFullPath(parentPath));
 
         if (realmTO.getPasswordPolicy() != null) {
             Policy policy = policyDAO.find(realmTO.getPasswordPolicy());
@@ -132,7 +132,7 @@ public class RealmDataBinderImpl implements RealmDataBinder {
     @Override
     public void update(final Realm realm, final RealmTO realmTO) {
         realm.setName(realmTO.getName());
-        realm.setParent(realmTO.getParent() == 0 ? null : realmDAO.find(realmTO.getParent()));
+        realm.setParent(realmTO.getParent() == null ? null : realmDAO.find(realmTO.getParent()));
 
         if (realmTO.getAccountPolicy() == null) {
             realm.setAccountPolicy(null);
@@ -174,7 +174,7 @@ public class RealmDataBinderImpl implements RealmDataBinder {
 
         realmTO.setKey(realm.getKey());
         realmTO.setName(realm.getName());
-        realmTO.setParent(realm.getParent() == null ? 0 : realm.getParent().getKey());
+        realmTO.setParent(realm.getParent() == null ? null : realm.getParent().getKey());
         realmTO.setFullPath(realm.getFullPath());
         realmTO.setAccountPolicy(realm.getAccountPolicy() == null ? null : realm.getAccountPolicy().getKey());
         realmTO.setPasswordPolicy(realm.getPasswordPolicy() == null ? null : realm.getPasswordPolicy().getKey());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
index 51ebfa5..5cfe729 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
@@ -177,13 +177,13 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
                         AnyTypeClass anyTypeClass = itor.next();
                         allowedSchemas.getPlainSchemas().addAll(
                                 CollectionUtils.collect(anyTypeClass.getPlainSchemas(),
-                                        EntityUtils.<String, PlainSchema>keyTransformer()));
+                                        EntityUtils.<PlainSchema>keyTransformer()));
                         allowedSchemas.getDerSchemas().addAll(
                                 CollectionUtils.collect(anyTypeClass.getDerSchemas(),
-                                        EntityUtils.<String, DerSchema>keyTransformer()));
+                                        EntityUtils.<DerSchema>keyTransformer()));
                         allowedSchemas.getVirSchemas().addAll(
                                 CollectionUtils.collect(anyTypeClass.getVirSchemas(),
-                                        EntityUtils.<String, VirSchema>keyTransformer()));
+                                        EntityUtils.<VirSchema>keyTransformer()));
                     }
 
                     populateMapping(
@@ -357,12 +357,6 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
     public ResourceTO getResourceTO(final ExternalResource resource) {
         ResourceTO resourceTO = new ResourceTO();
 
-        // set sys info
-        resourceTO.setCreator(resource.getCreator());
-        resourceTO.setCreationDate(resource.getCreationDate());
-        resourceTO.setLastModifier(resource.getLastModifier());
-        resourceTO.setLastChangeDate(resource.getLastChangeDate());
-
         // set the resource name
         resourceTO.setKey(resource.getKey());
 
@@ -379,7 +373,7 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
             provisionTO.setAnyType(provision.getAnyType().getKey());
             provisionTO.setObjectClass(provision.getObjectClass().getObjectClassValue());
             provisionTO.getAuxClasses().addAll(CollectionUtils.collect(
-                    provision.getAuxClasses(), EntityUtils.<String, AnyTypeClass>keyTransformer()));
+                    provision.getAuxClasses(), EntityUtils.<AnyTypeClass>keyTransformer()));
             provisionTO.setSyncToken(provision.getSerializedSyncToken());
 
             if (provision.getMapping() != null) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
index a95b60d..7db064d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
@@ -82,7 +82,7 @@ public class RoleDataBinderImpl implements RoleDataBinder {
 
         role.getRealms().clear();
         for (String realmFullPath : roleTO.getRealms()) {
-            Realm realm = realmDAO.find(realmFullPath);
+            Realm realm = realmDAO.findByFullPath(realmFullPath);
             if (realm == null) {
                 LOG.debug("Invalid realm full path {}, ignoring", realmFullPath);
             } else {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
index ce1f0de..b105bd3 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
@@ -151,7 +151,7 @@ public class TaskDataBinderImpl implements TaskDataBinder {
             pullTask.setPullMode(pullTaskTO.getPullMode());
             pullTask.setReconciliationFilterBuilderClassName(pullTaskTO.getReconciliationFilterBuilderClassName());
 
-            pullTask.setDestinationRealm(realmDAO.find(pullTaskTO.getDestinationRealm()));
+            pullTask.setDestinationRealm(realmDAO.findByFullPath(pullTaskTO.getDestinationRealm()));
 
             pullTask.setJobDelegateClassName(PullJobDelegate.class.getName());
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
index 94686aa..0a7f0a8 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
@@ -33,6 +33,7 @@ import org.apache.commons.collections4.Transformer;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.SyncopeClientCompositeException;
 import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.patch.MembershipPatch;
 import org.apache.syncope.common.lib.patch.PasswordPatch;
 import org.apache.syncope.common.lib.patch.RelationshipPatch;
@@ -122,14 +123,14 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
         String authUsername = AuthContextUtils.getUsername();
         if (anonymousUser.equals(authUsername)) {
             authUserTO = new UserTO();
-            authUserTO.setKey(-2L);
+            authUserTO.setKey(null);
             authUserTO.setUsername(anonymousUser);
         } else if (adminUser.equals(authUsername)) {
             authUserTO = new UserTO();
-            authUserTO.setKey(-1L);
+            authUserTO.setKey(null);
             authUserTO.setUsername(adminUser);
         } else {
-            User authUser = userDAO.find(authUsername);
+            User authUser = userDAO.findByUsername(authUsername);
             authUserTO = getUserTO(authUser, true);
         }
 
@@ -139,7 +140,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
     @Transactional(readOnly = true)
     @Override
     public boolean verifyPassword(final String username, final String password) {
-        return verifyPassword(userDAO.authFind(username), password);
+        return verifyPassword(userDAO.authFindByUsername(username), password);
     }
 
     @Transactional(readOnly = true)
@@ -179,7 +180,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
         }
 
         // realm
-        Realm realm = realmDAO.find(userTO.getRealm());
+        Realm realm = realmDAO.findByFullPath(userTO.getRealm());
         if (realm == null) {
             SyncopeClientException noRealm = SyncopeClientException.build(ClientExceptionType.InvalidRealm);
             noRealm.getElements().add("Invalid or null realm specified: " + userTO.getRealm());
@@ -518,8 +519,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
         if (details) {
             // roles
             CollectionUtils.collect(user.getRoles(),
-                    EntityUtils.<String, Role>keyTransformer(),
-                    userTO.getRoles());
+                    EntityUtils.<Role>keyTransformer(), userTO.getRoles());
 
             // relationships
             CollectionUtils.collect(user.getRelationships(), new Transformer<URelationship, RelationshipTO>() {
@@ -542,11 +542,9 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
 
             // dynamic memberships
             CollectionUtils.collect(userDAO.findDynRoleMemberships(user),
-                    EntityUtils.<String, Role>keyTransformer(),
-                    userTO.getDynRoles());
+                    EntityUtils.<Role>keyTransformer(), userTO.getDynRoles());
             CollectionUtils.collect(userDAO.findDynGroupMemberships(user),
-                    EntityUtils.<Long, Group>keyTransformer(),
-                    userTO.getDynGroups());
+                    EntityUtils.<Group>keyTransformer(), userTO.getDynGroups());
         }
 
         return userTO;
@@ -554,14 +552,10 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
 
     @Transactional(readOnly = true)
     @Override
-    public UserTO getUserTO(final String username) {
-        return getUserTO(userDAO.authFind(username), true);
-    }
-
-    @Transactional(readOnly = true)
-    @Override
-    public UserTO getUserTO(final Long key) {
-        return getUserTO(userDAO.authFind(key), true);
+    public UserTO getUserTO(final String key) {
+        return SyncopeConstants.UUID_PATTERN.matcher(key).matches()
+                ? getUserTO(userDAO.authFind(key), true)
+                : getUserTO(userDAO.authFindByUsername(key), true);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AbstractSchedTaskJobDelegate.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AbstractSchedTaskJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AbstractSchedTaskJobDelegate.java
index 1aa0e3f..0d5884f 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AbstractSchedTaskJobDelegate.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AbstractSchedTaskJobDelegate.java
@@ -73,7 +73,7 @@ public abstract class AbstractSchedTaskJobDelegate implements SchedTaskJobDelega
 
     @Transactional
     @Override
-    public void execute(final Long taskKey, final boolean dryRun) throws JobExecutionException {
+    public void execute(final String taskKey, final boolean dryRun) throws JobExecutionException {
         task = taskDAO.find(taskKey);
         if (task == null) {
             throw new JobExecutionException("Task " + taskKey + " not found");
@@ -94,7 +94,7 @@ public abstract class AbstractSchedTaskJobDelegate implements SchedTaskJobDelega
             execution.setStatus(TaskJob.Status.SUCCESS.name());
             result = AuditElements.Result.SUCCESS;
         } catch (JobExecutionException e) {
-            LOG.error("While executing task {}" , taskKey, e);
+            LOG.error("While executing task {}", taskKey, e);
             result = AuditElements.Result.FAILURE;
 
             execution.setMessage(ExceptionUtils2.getFullStackTrace(e));

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/TaskJob.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/TaskJob.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/TaskJob.java
index 0fcc461..45c8632 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/TaskJob.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/TaskJob.java
@@ -50,14 +50,14 @@ public class TaskJob extends AbstractInterruptableJob {
     /**
      * Key, set by the caller, for identifying the task to be executed.
      */
-    private Long taskKey;
+    private String taskKey;
 
     /**
      * Task key setter.
      *
      * @param taskKey to be set
      */
-    public void setTaskKey(final Long taskKey) {
+    public void setTaskKey(final String taskKey) {
         this.taskKey = taskKey;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
index a16077e..af872c1 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
@@ -206,8 +206,8 @@ public class NotificationManagerImpl implements NotificationManager {
 
         if (notification.getRecipientsProviderClassName() != null) {
             try {
-                NotificationRecipientsProvider recipientsProvider
-                        = (NotificationRecipientsProvider) ApplicationContextProvider.getBeanFactory().
+                NotificationRecipientsProvider recipientsProvider =
+                        (NotificationRecipientsProvider) ApplicationContextProvider.getBeanFactory().
                         createBean(Class.forName(notification.getRecipientsProviderClassName()),
                                 AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
                 recipientEmails.addAll(recipientsProvider.provideRecipients(notification));
@@ -393,14 +393,14 @@ public class NotificationManagerImpl implements NotificationManager {
     }
 
     @Override
-    public void setTaskExecuted(final Long taskKey, final boolean executed) {
+    public void setTaskExecuted(final String taskKey, final boolean executed) {
         NotificationTask task = taskDAO.find(taskKey);
         task.setExecuted(executed);
         taskDAO.save(task);
     }
 
     @Override
-    public long countExecutionsWithStatus(final Long taskKey, final String status) {
+    public long countExecutionsWithStatus(final String taskKey, final String status) {
         NotificationTask task = taskDAO.find(taskKey);
         long count = 0;
         for (TaskExec taskExec : task.getExecs()) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
index 1aedfa4..96b37c7 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
@@ -114,7 +114,7 @@ public class PropagationManagerImpl implements PropagationManager {
     @Autowired
     protected AnyUtilsFactory anyUtilsFactory;
 
-    protected Any<?> find(final AnyTypeKind kind, final Long key) {
+    protected Any<?> find(final AnyTypeKind kind, final String key) {
         AnyDAO<? extends Any<?>> dao;
         switch (kind) {
             case ANY_OBJECT:
@@ -136,7 +136,7 @@ public class PropagationManagerImpl implements PropagationManager {
     @Override
     public List<PropagationTask> getCreateTasks(
             final AnyTypeKind kind,
-            final Long key,
+            final String key,
             final PropagationByResource propByRes,
             final Collection<AttrTO> vAttrs,
             final Collection<String> noPropResourceNames) {
@@ -146,7 +146,7 @@ public class PropagationManagerImpl implements PropagationManager {
 
     @Override
     public List<PropagationTask> getUserCreateTasks(
-            final Long key,
+            final String key,
             final String password,
             final Boolean enable,
             final PropagationByResource propByRes,
@@ -178,7 +178,7 @@ public class PropagationManagerImpl implements PropagationManager {
     @Override
     public List<PropagationTask> getUpdateTasks(
             final AnyTypeKind kind,
-            final Long key,
+            final String key,
             final boolean changePwd,
             final Boolean enable,
             final PropagationByResource propByRes,
@@ -279,7 +279,7 @@ public class PropagationManagerImpl implements PropagationManager {
     @Override
     public List<PropagationTask> getDeleteTasks(
             final AnyTypeKind kind,
-            final Long key,
+            final String key,
             final PropagationByResource propByRes,
             final Collection<String> noPropResourceNames) {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java
index d10d27f..12b5394 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java
@@ -293,76 +293,76 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
         if (traceLevel == TraceLevel.FAILURES || traceLevel == TraceLevel.ALL) {
             if (!uFailCreate.isEmpty()) {
                 report.append("\n\nUsers failed to create: ");
-                report.append(ProvisioningReport.produceReport(uFailCreate, traceLevel));
+                report.append(ProvisioningReport.generate(uFailCreate, traceLevel));
             }
             if (!uFailUpdate.isEmpty()) {
                 report.append("\nUsers failed to update: ");
-                report.append(ProvisioningReport.produceReport(uFailUpdate, traceLevel));
+                report.append(ProvisioningReport.generate(uFailUpdate, traceLevel));
             }
             if (!uFailDelete.isEmpty()) {
                 report.append("\nUsers failed to delete: ");
-                report.append(ProvisioningReport.produceReport(uFailDelete, traceLevel));
+                report.append(ProvisioningReport.generate(uFailDelete, traceLevel));
             }
 
             if (!gFailCreate.isEmpty()) {
                 report.append("\n\nGroups failed to create: ");
-                report.append(ProvisioningReport.produceReport(gFailCreate, traceLevel));
+                report.append(ProvisioningReport.generate(gFailCreate, traceLevel));
             }
             if (!gFailUpdate.isEmpty()) {
                 report.append("\nGroups failed to update: ");
-                report.append(ProvisioningReport.produceReport(gFailUpdate, traceLevel));
+                report.append(ProvisioningReport.generate(gFailUpdate, traceLevel));
             }
             if (!gFailDelete.isEmpty()) {
                 report.append("\nGroups failed to delete: ");
-                report.append(ProvisioningReport.produceReport(gFailDelete, traceLevel));
+                report.append(ProvisioningReport.generate(gFailDelete, traceLevel));
             }
 
             if (!aFailCreate.isEmpty()) {
                 report.append("\nAny objects failed to create: ");
-                report.append(ProvisioningReport.produceReport(aFailCreate, traceLevel));
+                report.append(ProvisioningReport.generate(aFailCreate, traceLevel));
             }
             if (!aFailUpdate.isEmpty()) {
                 report.append("\nAny objects failed to update: ");
-                report.append(ProvisioningReport.produceReport(aFailUpdate, traceLevel));
+                report.append(ProvisioningReport.generate(aFailUpdate, traceLevel));
             }
             if (!aFailDelete.isEmpty()) {
                 report.append("\nAny objects failed to delete: ");
-                report.append(ProvisioningReport.produceReport(aFailDelete, traceLevel));
+                report.append(ProvisioningReport.generate(aFailDelete, traceLevel));
             }
         }
 
         // Succeeded, only if on 'ALL' level
         if (traceLevel == TraceLevel.ALL) {
             report.append("\n\nUsers created:\n").
-                    append(ProvisioningReport.produceReport(uSuccCreate, traceLevel)).
+                    append(ProvisioningReport.generate(uSuccCreate, traceLevel)).
                     append("\nUsers updated:\n").
-                    append(ProvisioningReport.produceReport(uSuccUpdate, traceLevel)).
+                    append(ProvisioningReport.generate(uSuccUpdate, traceLevel)).
                     append("\nUsers deleted:\n").
-                    append(ProvisioningReport.produceReport(uSuccDelete, traceLevel)).
+                    append(ProvisioningReport.generate(uSuccDelete, traceLevel)).
                     append("\nUsers no operation:\n").
-                    append(ProvisioningReport.produceReport(uSuccNone, traceLevel)).
+                    append(ProvisioningReport.generate(uSuccNone, traceLevel)).
                     append("\nUsers ignored:\n").
-                    append(ProvisioningReport.produceReport(uIgnore, traceLevel));
+                    append(ProvisioningReport.generate(uIgnore, traceLevel));
             report.append("\n\nGroups created:\n").
-                    append(ProvisioningReport.produceReport(gSuccCreate, traceLevel)).
+                    append(ProvisioningReport.generate(gSuccCreate, traceLevel)).
                     append("\nGroups updated:\n").
-                    append(ProvisioningReport.produceReport(gSuccUpdate, traceLevel)).
+                    append(ProvisioningReport.generate(gSuccUpdate, traceLevel)).
                     append("\nGroups deleted:\n").
-                    append(ProvisioningReport.produceReport(gSuccDelete, traceLevel)).
+                    append(ProvisioningReport.generate(gSuccDelete, traceLevel)).
                     append("\nGroups no operation:\n").
-                    append(ProvisioningReport.produceReport(gSuccNone, traceLevel)).
+                    append(ProvisioningReport.generate(gSuccNone, traceLevel)).
                     append("\nGroups ignored:\n").
-                    append(ProvisioningReport.produceReport(gSuccNone, traceLevel));
+                    append(ProvisioningReport.generate(gSuccNone, traceLevel));
             report.append("\n\nAny objects created:\n").
-                    append(ProvisioningReport.produceReport(aSuccCreate, traceLevel)).
+                    append(ProvisioningReport.generate(aSuccCreate, traceLevel)).
                     append("\nAny objects updated:\n").
-                    append(ProvisioningReport.produceReport(aSuccUpdate, traceLevel)).
+                    append(ProvisioningReport.generate(aSuccUpdate, traceLevel)).
                     append("\nAny objects deleted:\n").
-                    append(ProvisioningReport.produceReport(aSuccDelete, traceLevel)).
+                    append(ProvisioningReport.generate(aSuccDelete, traceLevel)).
                     append("\nAny objects no operation:\n").
-                    append(ProvisioningReport.produceReport(aSuccNone, traceLevel)).
+                    append(ProvisioningReport.generate(aSuccNone, traceLevel)).
                     append("\nAny objects ignored:\n").
-                    append(ProvisioningReport.produceReport(aSuccNone, traceLevel));
+                    append(ProvisioningReport.generate(aSuccNone, traceLevel));
         }
 
         return report.toString();

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
index bde6ee7..b111710 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
@@ -86,7 +86,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
 
     protected abstract AnyTO doUpdate(AnyTO before, AnyPatch anyPatch, SyncDelta delta, ProvisioningReport result);
 
-    protected void doDeprovision(final AnyTypeKind kind, final Long key, final boolean unlink) {
+    protected void doDeprovision(final AnyTypeKind kind, final String key, final boolean unlink) {
         PropagationByResource propByRes = new PropagationByResource();
         propByRes.add(ResourceOperation.DELETE, profile.getTask().getResource().getKey());
         taskExecutor.execute(propagationManager.getDeleteTasks(
@@ -103,7 +103,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
         }
     }
 
-    protected void doDelete(final AnyTypeKind kind, final Long key) {
+    protected void doDelete(final AnyTypeKind kind, final String key) {
         PropagationByResource propByRes = new PropagationByResource();
         propByRes.add(ResourceOperation.DELETE, profile.getTask().getResource().getKey());
         try {
@@ -139,7 +139,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
             result.setAnyType(provision == null
                     ? getAnyUtils().getAnyTypeKind().name() : provision.getAnyType().getKey());
             result.setStatus(ProvisioningReport.Status.IGNORE);
-            result.setKey(0L);
+            result.setKey(null);
             result.setName(delta.getObject().getName().getNameValue());
             profile.getResults().add(result);
 
@@ -171,7 +171,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
         result.setName(getName(anyTO));
 
         if (profile.isDryRun()) {
-            result.setKey(0L);
+            result.setKey(null);
         } else {
             SyncDelta actionedDelta = delta;
             for (PullActions action : profile.getActions()) {
@@ -202,7 +202,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
         result.setName(getName(anyTO));
 
         if (profile.isDryRun()) {
-            result.setKey(0L);
+            result.setKey(null);
         } else {
             SyncDelta actionedDelta = delta;
             for (PullActions action : profile.getActions()) {
@@ -261,8 +261,8 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
         audit(operation, resultStatus, null, output, delta);
     }
 
-    protected List<ProvisioningReport> update(final SyncDelta delta, final List<Long> anys,
-            final Provision provision) throws JobExecutionException {
+    protected List<ProvisioningReport> update(
+            final SyncDelta delta, final List<String> anys, final Provision provision) throws JobExecutionException {
 
         if (!profile.getTask().isPerformUpdate()) {
             LOG.debug("PullTask not configured for update");
@@ -274,7 +274,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
         List<ProvisioningReport> results = new ArrayList<>();
 
         SyncDelta workingDelta = delta;
-        for (Long key : anys) {
+        for (String key : anys) {
             LOG.debug("About to update {}", key);
 
             ProvisioningReport result = new ProvisioningReport();
@@ -286,7 +286,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
             AnyTO before = getAnyTO(key);
             if (before == null) {
                 result.setStatus(ProvisioningReport.Status.FAILURE);
-                result.setMessage(String.format("Any '%s(%d)' not found", provision.getAnyType().getKey(), key));
+                result.setMessage(String.format("Any '%s(%s)' not found", provision.getAnyType().getKey(), key));
             } else {
                 result.setName(getName(before));
             }
@@ -356,7 +356,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
 
     protected List<ProvisioningReport> deprovision(
             final SyncDelta delta,
-            final List<Long> anys,
+            final List<String> anys,
             final Provision provision,
             final boolean unlink)
             throws JobExecutionException {
@@ -370,7 +370,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
 
         final List<ProvisioningReport> updResults = new ArrayList<>();
 
-        for (Long key : anys) {
+        for (String key : anys) {
             LOG.debug("About to unassign resource {}", key);
 
             Object output;
@@ -386,7 +386,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
 
             if (before == null) {
                 result.setStatus(ProvisioningReport.Status.FAILURE);
-                result.setMessage(String.format("Any '%s(%d)' not found", provision.getAnyType().getKey(), key));
+                result.setMessage(String.format("Any '%s(%s)' not found", provision.getAnyType().getKey(), key));
             }
 
             if (!profile.isDryRun()) {
@@ -454,7 +454,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
 
     protected List<ProvisioningReport> link(
             final SyncDelta delta,
-            final List<Long> anys,
+            final List<String> anys,
             final Provision provision,
             final boolean unlink)
             throws JobExecutionException {
@@ -468,7 +468,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
 
         final List<ProvisioningReport> updResults = new ArrayList<>();
 
-        for (Long key : anys) {
+        for (String key : anys) {
             LOG.debug("About to unassign resource {}", key);
 
             Object output;
@@ -484,7 +484,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
 
             if (before == null) {
                 result.setStatus(ProvisioningReport.Status.FAILURE);
-                result.setMessage(String.format("Any '%s(%d)' not found", provision.getAnyType().getKey(), key));
+                result.setMessage(String.format("Any '%s(%s)' not found", provision.getAnyType().getKey(), key));
             }
 
             if (!profile.isDryRun()) {
@@ -550,7 +550,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
 
     protected List<ProvisioningReport> delete(
             final SyncDelta delta,
-            final List<Long> anys,
+            final List<String> anys,
             final Provision provision)
             throws JobExecutionException {
 
@@ -564,7 +564,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
         List<ProvisioningReport> delResults = new ArrayList<>();
 
         SyncDelta workingDelta = delta;
-        for (Long key : anys) {
+        for (String key : anys) {
             Object output;
             Result resultStatus = Result.FAILURE;
 
@@ -666,7 +666,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
                 : delta.getPreviousUid().getUidValue();
 
         try {
-            List<Long> anyKeys = pullUtils.findExisting(uid, delta.getObject(), provision, anyUtils);
+            List<String> anyKeys = pullUtils.findExisting(uid, delta.getObject(), provision, anyUtils);
             LOG.debug("Match(es) found for {} as {}: {}",
                     delta.getUid().getUidValue(), delta.getObject().getObjectClass(), anyKeys);
 
@@ -710,7 +710,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
                     // update VirAttrCache
                     for (VirSchema virSchema : virSchemaDAO.findByProvision(provision)) {
                         Attribute attr = delta.getObject().getAttributeByName(virSchema.getExtAttrName());
-                        for (Long anyKey : anyKeys) {
+                        for (String anyKey : anyKeys) {
                             if (attr == null) {
                                 virAttrCache.expire(
                                         provision.getAnyType().getKey(),

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java
index e2570eb..41edc94 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java
@@ -147,7 +147,7 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
     @Override
-    public boolean handle(final long anyKey) {
+    public boolean handle(final String anyKey) {
         Any<?> any = null;
         try {
             any = getAny(anyKey);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractSyncopeResultHandler.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractSyncopeResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractSyncopeResultHandler.java
index 37f67ff..f41b912 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractSyncopeResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractSyncopeResultHandler.java
@@ -135,13 +135,13 @@ public abstract class AbstractSyncopeResultHandler<T extends ProvisioningTask, A
 
     protected abstract AnyUtils getAnyUtils();
 
-    protected abstract AnyTO getAnyTO(long key);
+    protected abstract AnyTO getAnyTO(String key);
 
-    protected abstract Any<?> getAny(long key);
+    protected abstract Any<?> getAny(String key);
 
-    protected abstract AnyPatch newPatch(final long key);
+    protected abstract AnyPatch newPatch(String key);
 
-    protected abstract WorkflowResult<Long> update(AnyPatch patch);
+    protected abstract WorkflowResult<String> update(AnyPatch patch);
 
     @Override
     public void setProfile(final ProvisioningProfile<T, A> profile) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AnyObjectPullResultHandlerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AnyObjectPullResultHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AnyObjectPullResultHandlerImpl.java
index 67c5731..888779d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AnyObjectPullResultHandlerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AnyObjectPullResultHandlerImpl.java
@@ -54,7 +54,7 @@ public class AnyObjectPullResultHandlerImpl extends AbstractPullResultHandler im
     }
 
     @Override
-    protected Any<?> getAny(final long key) {
+    protected Any<?> getAny(final String key) {
         try {
             return anyObjectDAO.authFind(key);
         } catch (Exception e) {
@@ -64,19 +64,19 @@ public class AnyObjectPullResultHandlerImpl extends AbstractPullResultHandler im
     }
 
     @Override
-    protected AnyTO getAnyTO(final long key) {
+    protected AnyTO getAnyTO(final String key) {
         return anyObjectDataBinder.getAnyObjectTO(key);
     }
 
     @Override
-    protected AnyPatch newPatch(final long key) {
+    protected AnyPatch newPatch(final String key) {
         AnyObjectPatch patch = new AnyObjectPatch();
         patch.setKey(key);
         return patch;
     }
 
     @Override
-    protected WorkflowResult<Long> update(final AnyPatch patch) {
+    protected WorkflowResult<String> update(final AnyPatch patch) {
         return awfAdapter.update((AnyObjectPatch) patch);
     }
 
@@ -84,7 +84,7 @@ public class AnyObjectPullResultHandlerImpl extends AbstractPullResultHandler im
     protected AnyTO doCreate(final AnyTO anyTO, final SyncDelta delta, final ProvisioningReport result) {
         AnyObjectTO anyObjectTO = AnyObjectTO.class.cast(anyTO);
 
-        Map.Entry<Long, List<PropagationStatus>> created = anyObjectProvisioningManager.create(
+        Map.Entry<String, List<PropagationStatus>> created = anyObjectProvisioningManager.create(
                 anyObjectTO, Collections.singleton(profile.getTask().getResource().getKey()), true);
 
         result.setKey(created.getKey());
@@ -102,7 +102,7 @@ public class AnyObjectPullResultHandlerImpl extends AbstractPullResultHandler im
 
         AnyObjectPatch anyObjectPatch = AnyObjectPatch.class.cast(anyPatch);
 
-        Map.Entry<Long, List<PropagationStatus>> updated =
+        Map.Entry<String, List<PropagationStatus>> updated =
                 anyObjectProvisioningManager.update(anyObjectPatch, true);
 
         AnyObjectTO after = anyObjectDataBinder.getAnyObjectTO(updated.getKey());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AnyObjectPushResultHandlerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AnyObjectPushResultHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AnyObjectPushResultHandlerImpl.java
index ce5aebb..b4c3c74 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AnyObjectPushResultHandlerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AnyObjectPushResultHandlerImpl.java
@@ -41,7 +41,7 @@ public class AnyObjectPushResultHandlerImpl extends AbstractPushResultHandler im
     }
 
     @Override
-    protected Any<?> getAny(final long key) {
+    protected Any<?> getAny(final String key) {
         try {
             return anyObjectDAO.authFind(key);
         } catch (Exception e) {
@@ -51,19 +51,19 @@ public class AnyObjectPushResultHandlerImpl extends AbstractPushResultHandler im
     }
 
     @Override
-    protected AnyTO getAnyTO(final long key) {
+    protected AnyTO getAnyTO(final String key) {
         return anyObjectDataBinder.getAnyObjectTO(key);
     }
 
     @Override
-    protected AnyPatch newPatch(final long key) {
+    protected AnyPatch newPatch(final String key) {
         AnyObjectPatch patch = new AnyObjectPatch();
         patch.setKey(key);
         return patch;
     }
 
     @Override
-    protected WorkflowResult<Long> update(final AnyPatch patch) {
+    protected WorkflowResult<String> update(final AnyPatch patch) {
         return awfAdapter.update((AnyObjectPatch) patch);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/GroupPullResultHandlerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/GroupPullResultHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/GroupPullResultHandlerImpl.java
index b880b57..83917e0 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/GroupPullResultHandlerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/GroupPullResultHandlerImpl.java
@@ -40,10 +40,10 @@ import org.apache.syncope.core.provisioning.api.pushpull.GroupPullResultHandler;
 
 public class GroupPullResultHandlerImpl extends AbstractPullResultHandler implements GroupPullResultHandler {
 
-    protected final Map<Long, String> groupOwnerMap = new HashMap<>();
+    protected final Map<String, String> groupOwnerMap = new HashMap<>();
 
     @Override
-    public Map<Long, String> getGroupOwnerMap() {
+    public Map<String, String> getGroupOwnerMap() {
         return this.groupOwnerMap;
     }
 
@@ -63,7 +63,7 @@ public class GroupPullResultHandlerImpl extends AbstractPullResultHandler implem
     }
 
     @Override
-    protected Any<?> getAny(final long key) {
+    protected Any<?> getAny(final String key) {
         try {
             return groupDAO.authFind(key);
         } catch (Exception e) {
@@ -73,19 +73,19 @@ public class GroupPullResultHandlerImpl extends AbstractPullResultHandler implem
     }
 
     @Override
-    protected AnyTO getAnyTO(final long key) {
+    protected AnyTO getAnyTO(final String key) {
         return groupDataBinder.getGroupTO(key);
     }
 
     @Override
-    protected AnyPatch newPatch(final long key) {
+    protected AnyPatch newPatch(final String key) {
         GroupPatch patch = new GroupPatch();
         patch.setKey(key);
         return patch;
     }
 
     @Override
-    protected WorkflowResult<Long> update(final AnyPatch patch) {
+    protected WorkflowResult<String> update(final AnyPatch patch) {
         return gwfAdapter.update((GroupPatch) patch);
     }
 
@@ -93,7 +93,7 @@ public class GroupPullResultHandlerImpl extends AbstractPullResultHandler implem
     protected AnyTO doCreate(final AnyTO anyTO, final SyncDelta delta, final ProvisioningReport result) {
         GroupTO groupTO = GroupTO.class.cast(anyTO);
 
-        Map.Entry<Long, List<PropagationStatus>> created = groupProvisioningManager.create(
+        Map.Entry<String, List<PropagationStatus>> created = groupProvisioningManager.create(
                 groupTO,
                 groupOwnerMap,
                 Collections.singleton(profile.getTask().getResource().getKey()),
@@ -114,7 +114,7 @@ public class GroupPullResultHandlerImpl extends AbstractPullResultHandler implem
 
         GroupPatch groupPatch = GroupPatch.class.cast(anyPatch);
 
-        Map.Entry<Long, List<PropagationStatus>> updated = groupProvisioningManager.update(groupPatch, true);
+        Map.Entry<String, List<PropagationStatus>> updated = groupProvisioningManager.update(groupPatch, true);
 
         String groupOwner = null;
         for (AttrPatch attrPatch : groupPatch.getPlainAttrs()) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/GroupPushResultHandlerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/GroupPushResultHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/GroupPushResultHandlerImpl.java
index c572177..74b40ad 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/GroupPushResultHandlerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/GroupPushResultHandlerImpl.java
@@ -41,7 +41,7 @@ public class GroupPushResultHandlerImpl extends AbstractPushResultHandler implem
     }
 
     @Override
-    protected Any<?> getAny(final long key) {
+    protected Any<?> getAny(final String key) {
         try {
             return groupDAO.authFind(key);
         } catch (Exception e) {
@@ -51,19 +51,19 @@ public class GroupPushResultHandlerImpl extends AbstractPushResultHandler implem
     }
 
     @Override
-    protected AnyTO getAnyTO(final long key) {
+    protected AnyTO getAnyTO(final String key) {
         return groupDataBinder.getGroupTO(key);
     }
 
     @Override
-    protected AnyPatch newPatch(final long key) {
+    protected AnyPatch newPatch(final String key) {
         GroupPatch patch = new GroupPatch();
         patch.setKey(key);
         return patch;
     }
 
     @Override
-    protected WorkflowResult<Long> update(final AnyPatch patch) {
+    protected WorkflowResult<String> update(final AnyPatch patch) {
         return gwfAdapter.update((GroupPatch) patch);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActions.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActions.java
index 7f7971c..2d7979c 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActions.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActions.java
@@ -101,7 +101,7 @@ public class LDAPMembershipPullActions extends DefaultPullActions {
     @Autowired
     private PullUtils pullUtils;
 
-    protected Map<Long, Long> membersBeforeGroupUpdate = Collections.<Long, Long>emptyMap();
+    protected Map<String, String> membersBeforeGroupUpdate = Collections.<String, String>emptyMap();
 
     /**
      * Allows easy subclassing for the ConnId AD connector bundle.
@@ -160,7 +160,7 @@ public class LDAPMembershipPullActions extends DefaultPullActions {
      * @param groupTO group for adding membership
      * @return UserPatch for user update
      */
-    protected UserPatch getUserPatch(final Long userKey, final GroupTO groupTO) {
+    protected UserPatch getUserPatch(final String userKey, final GroupTO groupTO) {
         UserPatch userPatch = new UserPatch();
         // no actual modification takes place when user has already the group assigned
         if (membersBeforeGroupUpdate.containsKey(userKey)) {
@@ -218,7 +218,7 @@ public class LDAPMembershipPullActions extends DefaultPullActions {
      * @param resourceName resource to be propagated for changes
      */
     protected void userUpdate(final UserPatch userPatch, final String resourceName) {
-        if (userPatch.getKey() == 0) {
+        if (userPatch.getKey() == null) {
             return;
         }
 
@@ -280,7 +280,7 @@ public class LDAPMembershipPullActions extends DefaultPullActions {
         Connector connector = profile.getConnector();
 
         for (Object membValue : getMembAttrValues(delta, connector)) {
-            Long userKey = pullUtils.findMatchingAnyKey(
+            String userKey = pullUtils.findMatchingAnyKey(
                     anyTypeDAO.findUser(),
                     membValue.toString(),
                     profile.getTask().getResource(),
@@ -292,7 +292,7 @@ public class LDAPMembershipPullActions extends DefaultPullActions {
         }
 
         // finally remove any residual membership that was present before group update but not any more
-        for (Map.Entry<Long, Long> member : membersBeforeGroupUpdate.entrySet()) {
+        for (Map.Entry<String, String> member : membersBeforeGroupUpdate.entrySet()) {
             UserPatch userPatch = new UserPatch();
             userPatch.setKey(member.getKey());
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPPasswordPullActions.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPPasswordPullActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPPasswordPullActions.java
index 2d61396..255a7fc 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPPasswordPullActions.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPPasswordPullActions.java
@@ -109,13 +109,13 @@ public class LDAPPasswordPullActions extends DefaultPullActions {
             final ProvisioningReport result) throws JobExecutionException {
 
         if (any instanceof UserTO && encodedPassword != null && cipher != null) {
-            User syncopeUser = userDAO.find(any.getKey());
-            if (syncopeUser != null) {
+            User user = userDAO.find(any.getKey());
+            if (user != null) {
                 byte[] encodedPasswordBytes = Base64.decode(encodedPassword.getBytes());
                 char[] encodedHex = Hex.encode(encodedPasswordBytes);
                 String encodedHexStr = new String(encodedHex).toUpperCase();
 
-                syncopeUser.setEncodedPassword(encodedHexStr, cipher);
+                user.setEncodedPassword(encodedHexStr, cipher);
             }
             encodedPassword = null;
             cipher = null;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
index ed1a702..6bfc55b 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
@@ -67,7 +67,7 @@ public class PullJobDelegate extends AbstractProvisioningJobDelegate<PullTask> {
     protected PullUtils pullUtils;
 
     protected void setGroupOwners(final GroupPullResultHandler ghandler) {
-        for (Map.Entry<Long, String> entry : ghandler.getGroupOwnerMap().entrySet()) {
+        for (Map.Entry<String, String> entry : ghandler.getGroupOwnerMap().entrySet()) {
             Group group = groupDAO.find(entry.getKey());
             if (group == null) {
                 throw new NotFoundException("Group " + entry.getKey());
@@ -77,14 +77,14 @@ public class PullJobDelegate extends AbstractProvisioningJobDelegate<PullTask> {
                 group.setGroupOwner(null);
                 group.setUserOwner(null);
             } else {
-                Long userKey = pullUtils.findMatchingAnyKey(
+                String userKey = pullUtils.findMatchingAnyKey(
                         anyTypeDAO.findUser(),
                         entry.getValue(),
                         ghandler.getProfile().getTask().getResource(),
                         ghandler.getProfile().getConnector());
 
                 if (userKey == null) {
-                    Long groupKey = pullUtils.findMatchingAnyKey(
+                    String groupKey = pullUtils.findMatchingAnyKey(
                             anyTypeDAO.findGroup(),
                             entry.getValue(),
                             ghandler.getProfile().getTask().getResource(),

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullUtils.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullUtils.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullUtils.java
index 142141b..59292b3 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullUtils.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullUtils.java
@@ -100,7 +100,7 @@ public class PullUtils {
     @Autowired
     private AnyUtilsFactory anyUtilsFactory;
 
-    public Long findMatchingAnyKey(
+    public String findMatchingAnyKey(
             final AnyType anyType,
             final String name,
             final ExternalResource resource,
@@ -111,7 +111,7 @@ public class PullUtils {
             return null;
         }
 
-        Long result = null;
+        String result = null;
 
         AnyUtils anyUtils = anyUtilsFactory.getInstance(anyType.getKind());
 
@@ -124,8 +124,7 @@ public class PullUtils {
             public boolean handle(final ConnectorObject obj) {
                 return found.add(obj);
             }
-        },
-                MappingManagerImpl.buildOperationOptions(MappingManagerImpl.getPullMappingItems(provision).iterator()));
+        }, MappingManagerImpl.buildOperationOptions(MappingManagerImpl.getPullMappingItems(provision).iterator()));
 
         if (found.isEmpty()) {
             LOG.debug("No {} found on {} with __NAME__ {}", provision.getObjectClass(), resource, name);
@@ -137,7 +136,7 @@ public class PullUtils {
 
             ConnectorObject connObj = found.iterator().next();
             try {
-                List<Long> anyKeys = findExisting(connObj.getUid().getUidValue(), connObj, provision, anyUtils);
+                List<String> anyKeys = findExisting(connObj.getUid().getUidValue(), connObj, provision, anyUtils);
                 if (anyKeys.isEmpty()) {
                     LOG.debug("No matching {} found for {}, aborting", anyUtils.getAnyTypeKind(), connObj);
                 } else {
@@ -163,10 +162,10 @@ public class PullUtils {
                         : groupDAO;
     }
 
-    private List<Long> findByConnObjectKeyItem(
+    private List<String> findByConnObjectKeyItem(
             final String uid, final Provision provision, final AnyUtils anyUtils) {
 
-        List<Long> result = new ArrayList<>();
+        List<String> result = new ArrayList<>();
 
         MappingItem connObjectKeyItem = MappingManagerImpl.getConnObjectKeyItem(provision);
 
@@ -215,21 +214,21 @@ public class PullUtils {
             case UserKey:
             case GroupKey:
             case AnyObjectKey:
-                Any<?> any = getAnyDAO(connObjectKeyItem).find(Long.parseLong(transfUid));
+                Any<?> any = getAnyDAO(connObjectKeyItem).find(transfUid);
                 if (any != null) {
                     result.add(any.getKey());
                 }
                 break;
 
             case Username:
-                User user = userDAO.find(transfUid);
+                User user = userDAO.findByUsername(transfUid);
                 if (user != null) {
                     result.add(user.getKey());
                 }
                 break;
 
             case GroupName:
-                Group group = groupDAO.find(transfUid);
+                Group group = groupDAO.findByName(transfUid);
                 if (group != null) {
                     result.add(group.getKey());
                 }
@@ -242,10 +241,10 @@ public class PullUtils {
         return result;
     }
 
-    private List<Long> findByCorrelationRule(
+    private List<String> findByCorrelationRule(
             final ConnectorObject connObj, final PullCorrelationRule rule, final AnyTypeKind type) {
 
-        List<Long> result = new ArrayList<>();
+        List<String> result = new ArrayList<>();
         for (Any<?> any : searchDAO.search(rule.getSearchCond(connObj), type)) {
             result.add(any.getKey());
         }
@@ -282,7 +281,7 @@ public class PullUtils {
      * @param anyUtils any util
      * @return list of matching users / groups
      */
-    public List<Long> findExisting(
+    public List<String> findExisting(
             final String uid,
             final ConnectorObject connObj,
             final Provision provision,
@@ -303,7 +302,7 @@ public class PullUtils {
                     ? findByConnObjectKeyItem(uid, provision, anyUtils)
                     : findByCorrelationRule(connObj, pullRule, anyUtils.getAnyTypeKind());
         } catch (RuntimeException e) {
-            return Collections.<Long>emptyList();
+            return Collections.<String>emptyList();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPullResultHandlerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPullResultHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPullResultHandlerImpl.java
index ddc01fb..72855bb 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPullResultHandlerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPullResultHandlerImpl.java
@@ -54,7 +54,7 @@ public class UserPullResultHandlerImpl extends AbstractPullResultHandler impleme
     }
 
     @Override
-    protected Any<?> getAny(final long key) {
+    protected Any<?> getAny(final String key) {
         try {
             return userDAO.authFind(key);
         } catch (Exception e) {
@@ -64,19 +64,19 @@ public class UserPullResultHandlerImpl extends AbstractPullResultHandler impleme
     }
 
     @Override
-    protected AnyTO getAnyTO(final long key) {
+    protected AnyTO getAnyTO(final String key) {
         return userDataBinder.getUserTO(key);
     }
 
     @Override
-    protected AnyPatch newPatch(final long key) {
+    protected AnyPatch newPatch(final String key) {
         UserPatch patch = new UserPatch();
         patch.setKey(key);
         return patch;
     }
 
     @Override
-    protected WorkflowResult<Long> update(final AnyPatch patch) {
+    protected WorkflowResult<String> update(final AnyPatch patch) {
         WorkflowResult<Pair<UserPatch, Boolean>> update = uwfAdapter.update((UserPatch) patch);
         return new WorkflowResult<>(
                 update.getResult().getLeft().getKey(), update.getPropByRes(), update.getPerformedTasks());
@@ -87,7 +87,7 @@ public class UserPullResultHandlerImpl extends AbstractPullResultHandler impleme
         UserTO userTO = UserTO.class.cast(anyTO);
 
         Boolean enabled = pullUtils.readEnabled(delta.getObject(), profile.getTask());
-        Map.Entry<Long, List<PropagationStatus>> created =
+        Map.Entry<String, List<PropagationStatus>> created =
                 userProvisioningManager.create(userTO, true, true, enabled,
                         Collections.singleton(profile.getTask().getResource().getKey()), true);
 
@@ -107,7 +107,7 @@ public class UserPullResultHandlerImpl extends AbstractPullResultHandler impleme
         UserPatch userPatch = UserPatch.class.cast(anyPatch);
         Boolean enabled = pullUtils.readEnabled(delta.getObject(), profile.getTask());
 
-        Map.Entry<Long, List<PropagationStatus>> updated = userProvisioningManager.update(
+        Map.Entry<String, List<PropagationStatus>> updated = userProvisioningManager.update(
                 userPatch,
                 result,
                 enabled,
@@ -118,7 +118,7 @@ public class UserPullResultHandlerImpl extends AbstractPullResultHandler impleme
     }
 
     @Override
-    protected void doDelete(final AnyTypeKind kind, final Long key) {
+    protected void doDelete(final AnyTypeKind kind, final String key) {
         try {
             userProvisioningManager.delete(
                     key, Collections.<String>singleton(profile.getTask().getResource().getKey()), true);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPushResultHandlerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPushResultHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPushResultHandlerImpl.java
index bc63845..5175215 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPushResultHandlerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPushResultHandlerImpl.java
@@ -65,7 +65,7 @@ public class UserPushResultHandlerImpl extends AbstractPushResultHandler impleme
     }
 
     @Override
-    protected Any<?> getAny(final long key) {
+    protected Any<?> getAny(final String key) {
         try {
             return userDAO.authFind(key);
         } catch (Exception e) {
@@ -75,19 +75,19 @@ public class UserPushResultHandlerImpl extends AbstractPushResultHandler impleme
     }
 
     @Override
-    protected AnyTO getAnyTO(final long key) {
+    protected AnyTO getAnyTO(final String key) {
         return userDataBinder.getUserTO(key);
     }
 
     @Override
-    protected AnyPatch newPatch(final long key) {
+    protected AnyPatch newPatch(final String key) {
         UserPatch patch = new UserPatch();
         patch.setKey(key);
         return patch;
     }
 
     @Override
-    protected WorkflowResult<Long> update(final AnyPatch patch) {
+    protected WorkflowResult<String> update(final AnyPatch patch) {
         WorkflowResult<Pair<UserPatch, Boolean>> update = uwfAdapter.update((UserPatch) patch);
         return new WorkflowResult<>(
                 update.getResult().getLeft().getKey(), update.getPropByRes(), update.getPerformedTasks());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/ConnObjectUtils.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/ConnObjectUtils.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/ConnObjectUtils.java
index e5ae650..124724f 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/ConnObjectUtils.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/ConnObjectUtils.java
@@ -138,7 +138,7 @@ public class ConnObjectUtils {
 
             List<PasswordRuleConf> ruleConfs = new ArrayList<>();
 
-            Realm realm = realmDAO.find(userTO.getRealm());
+            Realm realm = realmDAO.findByFullPath(userTO.getRealm());
             if (realm != null) {
                 for (Realm ancestor : realmDAO.findAncestors(realm)) {
                     if (ancestor.getPasswordPolicy() != null) {
@@ -182,7 +182,7 @@ public class ConnObjectUtils {
      */
     @SuppressWarnings("unchecked")
     @Transactional(readOnly = true)
-    public <T extends AnyPatch> T getAnyPatch(final Long key, final ConnectorObject obj,
+    public <T extends AnyPatch> T getAnyPatch(final String key, final ConnectorObject obj,
             final AnyTO original, final PullTask pullTask, final Provision provision, final AnyUtils anyUtils) {
 
         AnyTO updated = getAnyTOFromConnObject(obj, pullTask, provision, anyUtils);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java
index 31342ec..1c51d6d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java
@@ -105,7 +105,7 @@ public class TemplateUtils {
         anyTO.getAuxClasses().addAll(template.getAuxClasses());
     }
 
-    private void fillRelationships(final Map<Pair<String, Long>, RelationshipTO> anyRelMap,
+    private void fillRelationships(final Map<Pair<String, String>, RelationshipTO> anyRelMap,
             final List<RelationshipTO> anyRels, final List<RelationshipTO> templateRels) {
 
         for (RelationshipTO memb : templateRels) {
@@ -115,7 +115,7 @@ public class TemplateUtils {
         }
     }
 
-    private void fillMemberships(final Map<Long, MembershipTO> anyMembMap,
+    private void fillMemberships(final Map<String, MembershipTO> anyMembMap,
             final List<MembershipTO> anyMembs, final List<MembershipTO> templateMembs) {
 
         for (MembershipTO memb : templateMembs) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DerAttrTest.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DerAttrTest.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DerAttrTest.java
index 076d7bc..c796795 100644
--- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DerAttrTest.java
+++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DerAttrTest.java
@@ -49,7 +49,7 @@ public class DerAttrTest extends AbstractTest {
         DerSchema info = derSchemaDAO.find("info");
         assertEquals("username + ' - ' + creationDate + '[' + failedLogins + ']'", info.getExpression());
 
-        User user = userDAO.find(3L);
+        User user = userDAO.findByUsername("vivaldi");
         assertNotNull("did not get expected user", user);
 
         String value = derAttrHandler.getValue(user, info);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MailTemplateTest.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MailTemplateTest.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MailTemplateTest.java
index bf972c4..4784708 100644
--- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MailTemplateTest.java
+++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MailTemplateTest.java
@@ -100,7 +100,7 @@ public class MailTemplateTest extends AbstractTest {
         user.getPlainAttrs().add(new AttrTO.Builder().schema("firstname").value("John").build());
         user.getPlainAttrs().add(new AttrTO.Builder().schema("surname").value("Doe").build());
         user.getPlainAttrs().add(new AttrTO.Builder().schema("email").value("john.doe@syncope.apache.org").build());
-        user.getMemberships().add(new MembershipTO.Builder().group(23, "a group").build());
+        user.getMemberships().add(new MembershipTO.Builder().group(UUID.randomUUID().toString(), "a group").build());
         ctx.put("user", user);
 
         String token = "token " + UUID.randomUUID().toString();

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MappingTest.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MappingTest.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MappingTest.java
index 820b8d2..dd6792b 100644
--- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MappingTest.java
+++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MappingTest.java
@@ -54,7 +54,7 @@ public class MappingTest extends AbstractTest {
         assertNotNull(provision.getMapping());
         assertNotNull(provision.getMapping().getConnObjectLink());
 
-        User user = userDAO.find("rossini");
+        User user = userDAO.findByUsername("rossini");
         assertNotNull(user);
 
         Name name = MappingManagerImpl.evaluateNAME(user, provision, user.getUsername());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ResourceDataBinderTest.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ResourceDataBinderTest.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ResourceDataBinderTest.java
index 061b17a..26f35cc 100644
--- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ResourceDataBinderTest.java
+++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ResourceDataBinderTest.java
@@ -76,7 +76,7 @@ public class ResourceDataBinderTest extends AbstractTest {
 
         ResourceTO resourceTO = new ResourceTO();
         resourceTO.setKey("resource-issue42");
-        resourceTO.setConnector(100L);
+        resourceTO.setConnector("88a7a819-dab5-46b4-9b90-0b9769eabdb8");
         resourceTO.setEnforceMandatoryCondition(true);
 
         ProvisionTO provisionTO = new ProvisionTO();

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
index 98f9aae..ca00e69 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
@@ -58,10 +58,10 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
 
     protected abstract AbstractAnyLogic<TO, P> getAnyLogic();
 
-    protected abstract P newPatch(Long key);
+    protected abstract P newPatch(String key);
 
     @Override
-    public Set<AttrTO> read(final Long key, final SchemaType schemaType) {
+    public Set<AttrTO> read(final String key, final SchemaType schemaType) {
         TO any = read(key);
         Set<AttrTO> result;
         switch (schemaType) {
@@ -82,7 +82,7 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
     }
 
     @Override
-    public AttrTO read(final Long key, final SchemaType schemaType, final String schema) {
+    public AttrTO read(final String key, final SchemaType schemaType, final String schema) {
         TO any = read(key);
         AttrTO result;
         switch (schemaType) {
@@ -107,7 +107,7 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
     }
 
     @Override
-    public TO read(final Long key) {
+    public TO read(final String key) {
         return getAnyLogic().read(key);
     }
 
@@ -164,7 +164,7 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
     }
 
     private void addUpdateOrReplaceAttr(
-            final Long key, final SchemaType schemaType, final AttrTO attrTO, final PatchOperation operation) {
+            final String key, final SchemaType schemaType, final AttrTO attrTO, final PatchOperation operation) {
 
         if (attrTO.getSchema() == null) {
             throw new NotFoundException("Must specify schema");
@@ -189,7 +189,7 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
     }
 
     @Override
-    public Response update(final Long key, final SchemaType schemaType, final AttrTO attrTO) {
+    public Response update(final String key, final SchemaType schemaType, final AttrTO attrTO) {
         addUpdateOrReplaceAttr(key, schemaType, attrTO, PatchOperation.ADD_REPLACE);
         return modificationResponse(read(key, schemaType, attrTO.getSchema()));
     }
@@ -206,12 +206,12 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
     }
 
     @Override
-    public void delete(final Long key, final SchemaType schemaType, final String schema) {
+    public void delete(final String key, final SchemaType schemaType, final String schema) {
         addUpdateOrReplaceAttr(key, schemaType, new AttrTO.Builder().schema(schema).build(), PatchOperation.DELETE);
     }
 
     @Override
-    public Response delete(final Long key) {
+    public Response delete(final String key) {
         TO group = getAnyLogic().read(key);
 
         checkETag(group.getETagValue());
@@ -334,11 +334,11 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
                     for (String key : bulkAction.getTargets()) {
                         try {
                             final UserPatch userPatch = new UserPatch();
-                            userPatch.setKey(Long.valueOf(key));
+                            userPatch.setKey(key);
                             userPatch.setMustChangePassword(new BooleanReplacePatchItem.Builder().value(true).build());
 
                             result.getResults().put(
-                                    String.valueOf(((UserLogic) logic).update(userPatch, false).getAny().getKey()),
+                                    ((UserLogic) logic).update(userPatch, false).getAny().getKey(),
                                     BulkActionResult.Status.SUCCESS);
                         } catch (Exception e) {
                             LOG.error("Error performing delete for user {}", key, e);
@@ -354,8 +354,7 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
                 for (String key : bulkAction.getTargets()) {
                     try {
                         result.getResults().put(
-                                String.valueOf(logic.delete(Long.valueOf(key), isNullPriorityAsync()).
-                                        getAny().getKey()),
+                                logic.delete(key, isNullPriorityAsync()).getAny().getKey(),
                                 BulkActionResult.Status.SUCCESS);
                     } catch (Exception e) {
                         LOG.error("Error performing delete for user {}", key, e);
@@ -368,12 +367,12 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
                 if (logic instanceof UserLogic) {
                     for (String key : bulkAction.getTargets()) {
                         StatusPatch statusPatch = new StatusPatch();
-                        statusPatch.setKey(Long.valueOf(key));
+                        statusPatch.setKey(key);
                         statusPatch.setType(StatusPatchType.SUSPEND);
                         try {
                             result.getResults().put(
-                                    String.valueOf(((UserLogic) logic).
-                                            status(statusPatch, isNullPriorityAsync()).getAny().getKey()),
+                                    ((UserLogic) logic).
+                                    status(statusPatch, isNullPriorityAsync()).getAny().getKey(),
                                     BulkActionResult.Status.SUCCESS);
                         } catch (Exception e) {
                             LOG.error("Error performing suspend for user {}", key, e);
@@ -389,12 +388,12 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
                 if (logic instanceof UserLogic) {
                     for (String key : bulkAction.getTargets()) {
                         StatusPatch statusPatch = new StatusPatch();
-                        statusPatch.setKey(Long.valueOf(key));
+                        statusPatch.setKey(key);
                         statusPatch.setType(StatusPatchType.REACTIVATE);
                         try {
                             result.getResults().put(
-                                    String.valueOf(((UserLogic) logic).
-                                            status(statusPatch, isNullPriorityAsync()).getAny().getKey()),
+                                    ((UserLogic) logic).
+                                    status(statusPatch, isNullPriorityAsync()).getAny().getKey(),
                                     BulkActionResult.Status.SUCCESS);
                         } catch (Exception e) {
                             LOG.error("Error performing reactivate for user {}", key, e);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyObjectServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyObjectServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyObjectServiceImpl.java
index b5227e4..37ee9cd 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyObjectServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyObjectServiceImpl.java
@@ -44,7 +44,7 @@ public class AnyObjectServiceImpl extends AbstractAnyService<AnyObjectTO, AnyObj
     }
 
     @Override
-    protected AnyObjectPatch newPatch(final Long key) {
+    protected AnyObjectPatch newPatch(final String key) {
         AnyObjectPatch patch = new AnyObjectPatch();
         patch.setKey(key);
         return patch;


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
index b1ccd34..0a38825 100644
--- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
@@ -18,1079 +18,1097 @@ specific language governing permissions and limitations
 under the License.
 -->
 <dataset>
-  <SyncopeDomain name="Two" adminCipherAlgorithm="SHA" adminPwd="2AA60A8FF7FCD473D321E0146AFD9E26DF395147"/>  
+  <SyncopeDomain key="Two" adminCipherAlgorithm="SHA" adminPwd="2AA60A8FF7FCD473D321E0146AFD9E26DF395147"/>  
   
-  <SyncopeConf id="1" 
-               creator="admin" lastModifier="admin"
-               creationDate="2014-06-20 11:00:00" lastChangeDate="2014-06-20 11:00:00"/>
+  <SyncopeConf key="cd64d66f-6fff-4008-b966-a06b1cc1436d"/>
 
-  <PlainSchema name="password.cipher.algorithm" type="String"
+  <PlainSchema key="password.cipher.algorithm" type="String"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="1" owner_id="1" schema_name="password.cipher.algorithm"/>
-  <CPlainAttrValue id="1" attribute_id="1" stringValue="SHA1"/>
+  <CPlainAttr key="56db89b9-119e-4923-a16e-f42823b90c66" 
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="password.cipher.algorithm"/>
+  <CPlainAttrValue key="870323e8-8db6-4a64-b512-15f9fa094905" 
+                   attribute_key="56db89b9-119e-4923-a16e-f42823b90c66" stringValue="SHA1"/>
 
   <!-- notificationjob.cronExpression:
   + not existing: NotificationJob runs according to NotificationJob.DEFAULT_CRON_EXP
   + provided as empty string: NotificationJob disabled
   + provided as non-empty string: NotificationJob runs according to the given value -->
-  <PlainSchema name="notificationjob.cronExpression" type="String"
+  <PlainSchema key="notificationjob.cronExpression" type="String"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="2" owner_id="1" schema_name="notificationjob.cronExpression"/>
-  <CPlainAttrValue id="2" attribute_id="2" stringValue="0/20 * * * * ?"/>
+  <CPlainAttr key="abd5a2d2-25ee-48b7-b5ca-76813b54a6f2"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="notificationjob.cronExpression"/>
+  <CPlainAttrValue key="4828ea70-d151-4c16-b344-2d07b1956bee"
+                   attribute_key="abd5a2d2-25ee-48b7-b5ca-76813b54a6f2" stringValue="0/20 * * * * ?"/>
   
-  <PlainSchema name="notification.maxRetries" type="Long"
+  <PlainSchema key="notification.maxRetries" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="3" owner_id="1" schema_name="notification.maxRetries"/>
-  <CPlainAttrValue id="3" attribute_id="3" longValue="3"/>
+  <CPlainAttr key="0523d7e6-af13-4e1e-9edb-e35971aacee7"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="notification.maxRetries"/>
+  <CPlainAttrValue key="010e2bdc-0094-4918-bac3-d0d5ea17b54a"
+                   attribute_key="0523d7e6-af13-4e1e-9edb-e35971aacee7" longValue="3"/>
 
-  <PlainSchema name="token.length" type="Long"
+  <PlainSchema key="token.length" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="4" owner_id="1" schema_name="token.length"/>
-  <CPlainAttrValue id="4" attribute_id="4" longValue="256"/>
+  <CPlainAttr key="58977caa-dcf7-4ae3-8591-7e3d0a395200"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="token.length"/>
+  <CPlainAttrValue key="372e28e0-3af1-4774-b668-81aa84903b75"
+                   attribute_key="58977caa-dcf7-4ae3-8591-7e3d0a395200" longValue="256"/>
 
-  <PlainSchema name="token.expireTime" type="Long"
+  <PlainSchema key="token.expireTime" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="5" owner_id="1" schema_name="token.expireTime"/>
-  <CPlainAttrValue id="5" attribute_id="5" longValue="60"/>
+  <CPlainAttr key="01f69abd-df85-4e1b-bb88-ad570594e045"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="token.expireTime"/>
+  <CPlainAttrValue key="963970cf-4af6-46bb-875b-a1b758ac8d05"
+                   attribute_key="01f69abd-df85-4e1b-bb88-ad570594e045" longValue="60"/>
 
-  <PlainSchema name="selfRegistration.allowed" type="Boolean"
+  <PlainSchema key="selfRegistration.allowed" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="6" owner_id="1" schema_name="selfRegistration.allowed"/>
-  <CPlainAttrValue id="6" attribute_id="6" booleanValue="1"/>
+  <CPlainAttr key="7b19cefa-d606-477c-8431-c9464f53fe8b"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="selfRegistration.allowed"/>
+  <CPlainAttrValue key="c8b9a0f1-0168-4e2a-95b8-4819fc70e620"
+                   attribute_key="7b19cefa-d606-477c-8431-c9464f53fe8b" booleanValue="1"/>
 
-  <PlainSchema name="passwordReset.allowed" type="Boolean"
+  <PlainSchema key="passwordReset.allowed" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="7" owner_id="1" schema_name="passwordReset.allowed"/>
-  <CPlainAttrValue id="7" attribute_id="7" booleanValue="1"/>
+  <CPlainAttr key="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="passwordReset.allowed"/>
+  <CPlainAttrValue key="b1ecea41-ab7c-4dd3-9e3e-b6baf0f98046"
+                   attribute_key="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3" booleanValue="1"/>
 
-  <PlainSchema name="passwordReset.securityQuestion" type="Boolean"
+  <PlainSchema key="passwordReset.securityQuestion" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="8" owner_id="1" schema_name="passwordReset.securityQuestion"/>
-  <CPlainAttrValue id="8" attribute_id="8" booleanValue="1"/>
-
-  <PlainSchema name="authentication.statuses" type="String" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="9" owner_id="1" schema_name="authentication.statuses"/>
-  <CPlainAttrValue id="9" attribute_id="9" stringValue="created"/>
-  <CPlainAttrValue id="10" attribute_id="9" stringValue="active"/>
+  <CPlainAttr key="e5a712ad-53fd-4102-ba55-fb45caed5f7b"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="passwordReset.securityQuestion"/>
+  <CPlainAttrValue key="b5e8e79d-8039-4318-9698-fe5e181ebe98"
+                   attribute_key="e5a712ad-53fd-4102-ba55-fb45caed5f7b" booleanValue="1"/>
+
+  <PlainSchema key="authentication.statuses" type="String" multivalue="1" uniqueConstraint="0" readonly="0"/>
+  <CPlainAttr key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="authentication.statuses"/>
+  <CPlainAttrValue key="4b8e7d2b-f527-43a3-a2e2-5530dcab2f52"
+                   attribute_key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="created"/>
+  <CPlainAttrValue key="f0c89f2c-ea87-4c95-a1cf-142bf6e6f523"
+                   attribute_key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="active"/>
 
   <!-- Save user login date upon successful authentication -->
-  <PlainSchema name="log.lastlogindate" type="Boolean"
+  <PlainSchema key="log.lastlogindate" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="11" owner_id="1" schema_name="log.lastlogindate"/>
-  <CPlainAttrValue id="11" attribute_id="11" booleanValue="1"/>
+  <CPlainAttr key="9891c0a7-27ee-4215-9eea-ca32e580b4e4"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="log.lastlogindate"/>
+  <CPlainAttrValue key="162dd874-0417-4bb9-9724-db1ff2952dd1"
+                   attribute_key="9891c0a7-27ee-4215-9eea-ca32e580b4e4" booleanValue="1"/>
 
-  <PlainSchema name="tasks.interruptMaxRetries" type="Long"
+  <PlainSchema key="tasks.interruptMaxRetries" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="12" owner_id="1" schema_name="tasks.interruptMaxRetries"/>
-  <CPlainAttrValue id="12" attribute_id="12" longValue="20"/>
+  <CPlainAttr key="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="tasks.interruptMaxRetries"/>
+  <CPlainAttrValue key="5dc3f4e3-ff9f-4558-a9ac-15336b63a2ad"
+                   attribute_key="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db" longValue="20"/>
   
   <!-- Return hashed password values when reading users -->
-  <PlainSchema name="return.password.value" type="Boolean"
+  <PlainSchema key="return.password.value" type="Boolean"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="14" owner_id="1" schema_name="return.password.value"/>
-  <CPlainAttrValue id="14" attribute_id="14" booleanValue="0"/>
+  <CPlainAttr key="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="return.password.value"/>
+  <CPlainAttrValue key="e5fa94db-b524-4309-908d-8198d0b3f779"
+                   attribute_key="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a" booleanValue="0"/>
   
   <!-- For usage with admin console -->
-  <PlainSchema name="admin.user.layout" type="String"
+  <PlainSchema key="admin.user.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="self.user.layout" type="String"
+  <PlainSchema key="self.user.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="admin.group.layout" type="String"
+  <PlainSchema key="admin.group.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="self.group.layout" type="String"
+  <PlainSchema key="self.group.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="admin.membership.layout" type="String"
+  <PlainSchema key="admin.membership.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="self.membership.layout" type="String"
+  <PlainSchema key="self.membership.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
   
   <!-- sample policies -->
-  <PullPolicy id="1" description="a pull policy" specification='{"conflictResolutionAction":"IGNORE"}'/>
-  <PasswordPolicy id="2" description="a password policy" historyLength="1" allowNullPassword="1"/> 
-  <PasswordRuleConfInstance id="2" passwordPolicy_id="2"
+  <PullPolicy key="66691e96-285f-4464-bc19-e68384ea4c85" description="a pull policy"
+              specification='{"conflictResolutionAction":"IGNORE"}'/>
+  <PasswordPolicy key="ce93fcda-dc3a-4369-a7b0-a6108c261c85" description="a password policy"
+                  historyLength="1" allowNullPassword="1"/> 
+  <PasswordRuleConfInstance key="2e3fb762-d37a-46c6-a2e5-662b527dead3"
+                            passwordPolicy_key="ce93fcda-dc3a-4369-a7b0-a6108c261c85"
                             serializedInstance='{"@class":"org.apache.syncope.common.lib.policy.DefaultPasswordRuleConf","maxLength":0,"minLength":8,"nonAlphanumericRequired":false,"alphanumericRequired":false,"digitRequired":false,"lowercaseRequired":false,"uppercaseRequired":false,"mustStartWithDigit":false,"mustntStartWithDigit":false,"mustEndWithDigit":false,"mustntEndWithDigit":false,"mustStartWithNonAlpha":false,"mustStartWithAlpha":false,"mustntStartWithNonAlpha":false,"mustntStartWithAlpha":false,"mustEndWithNonAlpha":false,"mustEndWithAlpha":false,"mustntEndWithNonAlpha":false,"mustntEndWithAlpha":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[]}'/>
-  <PullPolicy id="3" description="pull policy 2"
+  <PullPolicy key="880f8553-069b-4aed-9930-2cd53873f544" description="another pull policy"
               specification='{"conflictResolutionAction":"ALL","correlationRules":{"USER":"[\"username\",\"firstname\"]"}}'/>
-  <PasswordPolicy id="4" description="sample password policy" historyLength="0"  allowNullPassword="1"/> 
-  <PasswordRuleConfInstance id="4" passwordPolicy_id="4"
+  <PasswordPolicy key="986d1236-3ac5-4a19-810c-5ab21d79cba1"
+                  description="sample password policy" historyLength="0" allowNullPassword="1"/> 
+  <PasswordRuleConfInstance key="62fe25b4-9124-4f01-9bc4-0013399da893"
+                            passwordPolicy_key="986d1236-3ac5-4a19-810c-5ab21d79cba1"
                             serializedInstance='{"@class":"org.apache.syncope.common.lib.policy.DefaultPasswordRuleConf","maxLength":0,"minLength":10,"nonAlphanumericRequired":false,"alphanumericRequired":false,"digitRequired":true,"lowercaseRequired":false,"uppercaseRequired":false,"mustStartWithDigit":false,"mustntStartWithDigit":false,"mustEndWithDigit":false,"mustntEndWithDigit":false,"mustStartWithNonAlpha":false,"mustStartWithAlpha":false,"mustntStartWithNonAlpha":false,"mustntStartWithAlpha":false,"mustEndWithNonAlpha":false,"mustEndWithAlpha":false,"mustntEndWithNonAlpha":false,"mustntEndWithAlpha":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[]}'/>
-  <AccountPolicy id="5" description="an account policy"
+  <AccountPolicy key="20ab5a8c-4b0c-432c-b957-f7fb9784d9f7" description="an account policy"
                  propagateSuspension="0" maxAuthenticationAttempts="0"/>
-  <AccountRuleConfInstance id="5" accountPolicy_id="5"
+  <AccountRuleConfInstance key="5" accountPolicy_key="20ab5a8c-4b0c-432c-b957-f7fb9784d9f7"
                            serializedInstance='{"@class":"org.apache.syncope.common.lib.policy.DefaultAccountRuleConf","maxLength":0,"minLength":0,"pattern":null,"allUpperCase":false,"allLowerCase":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":[],"suffixesNotPermitted":[]}'/>
-  <AccountPolicy id="6" description="sample account policy"
+  <AccountPolicy key="06e2ed52-6966-44aa-a177-a0ca7434201f" description="sample account policy"
                  propagateSuspension="0" maxAuthenticationAttempts="3"/>
-  <AccountRuleConfInstance id="6" accountPolicy_id="6"
+  <AccountRuleConfInstance key="6" accountPolicy_key="06e2ed52-6966-44aa-a177-a0ca7434201f"
                            serializedInstance='{"@class":"org.apache.syncope.common.lib.policy.DefaultAccountRuleConf","maxLength":0,"minLength":4,"pattern":null,"allUpperCase":false,"allLowerCase":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[]}'/>
-  <PullPolicy id="7" description="pull policy 1" specification='{"conflictResolutionAction":"IGNORE"}'/>
-  <PasswordPolicy id="8" description="sample password policy" historyLength="0" allowNullPassword="0"/> 
-  <PasswordRuleConfInstance id="8" passwordPolicy_id="8"
+  <PullPolicy key="4ad10d94-e002-4b3f-b771-16089cc71da9" description="pull policy 1" specification='{"conflictResolutionAction":"IGNORE"}'/>
+  <PasswordPolicy key="55e5de0b-c79c-4e66-adda-251b6fb8579a" description="sample password policy" historyLength="0" allowNullPassword="0"/> 
+  <PasswordRuleConfInstance key="69b9d9fb-b37b-48f0-adba-5080f4768a8f"
+                            passwordPolicy_key="55e5de0b-c79c-4e66-adda-251b6fb8579a"
                             serializedInstance='{"@class":"org.apache.syncope.common.lib.policy.DefaultPasswordRuleConf","maxLength":0,"minLength":10,"nonAlphanumericRequired":true,"alphanumericRequired":false,"digitRequired":true,"lowercaseRequired":true,"uppercaseRequired":true,"mustStartWithDigit":true,"mustntStartWithDigit":false,"mustEndWithDigit":true,"mustntEndWithDigit":false,"mustStartWithNonAlpha":false,"mustStartWithAlpha":false,"mustntStartWithNonAlpha":false,"mustntStartWithAlpha":false,"mustEndWithNonAlpha":false,"mustEndWithAlpha":false,"mustntEndWithNonAlpha":false,"mustntEndWithAlpha":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[]}'/>
-  <PullPolicy id="9" description="pull policy for java rule" specification='{"conflictResolutionAction":"IGNORE"}'/>
+  <PullPolicy key="9454b0d7-2610-400a-be82-fc23cf553dd6" description="pull policy for java rule"
+              specification='{"conflictResolutionAction":"IGNORE"}'/>
 
-  <RelationshipType name="inclusion" description="Models the act that an object is included in another"/>
-  <RelationshipType name="neighborhood"/>
+  <RelationshipType key="inclusion" description="Models the act that an object is included in another"/>
+  <RelationshipType key="neighborhood"/>
   
-  <AnyTypeClass name="generic membership"/>
+  <AnyTypeClass key="generic membership"/>
 
-  <AnyType name="USER" kind="USER"/>
-  <AnyTypeClass name="minimal user"/>
-  <AnyType_AnyTypeClass anyType_name="USER" anyTypeClass_name="minimal user"/>
-  <AnyTypeClass name="other"/>
-  <AnyType_AnyTypeClass anyType_name="USER" anyTypeClass_name="other"/>
+  <AnyType key="USER" kind="USER"/>
+  <AnyTypeClass key="minimal user"/>
+  <AnyType_AnyTypeClass anyType_key="USER" anyTypeClass_key="minimal user"/>
+  <AnyTypeClass key="other"/>
+  <AnyType_AnyTypeClass anyType_key="USER" anyTypeClass_key="other"/>
 
-  <AnyType name="GROUP" kind="GROUP"/>
-  <AnyTypeClass name="minimal group"/>
-  <AnyType_AnyTypeClass anyType_name="GROUP" anyTypeClass_name="minimal group"/>
+  <AnyType key="GROUP" kind="GROUP"/>
+  <AnyTypeClass key="minimal group"/>
+  <AnyType_AnyTypeClass anyType_key="GROUP" anyTypeClass_key="minimal group"/>
   
-  <AnyType name="PRINTER" kind="ANY_OBJECT"/>
-  <AnyTypeClass name="minimal printer"/>
-  <AnyType_AnyTypeClass anyType_name="PRINTER" anyTypeClass_name="minimal printer"/>
+  <AnyType key="PRINTER" kind="ANY_OBJECT"/>
+  <AnyTypeClass key="minimal printer"/>
+  <AnyType_AnyTypeClass anyType_key="PRINTER" anyTypeClass_key="minimal printer"/>
       
-  <AnyTypeClass name="csv"/>
-
-  <Realm id="1" name="/" passwordPolicy_id="4"/>
-  <Realm id="2" name="odd" parent_id="1" accountPolicy_id="6"/>
-  <Realm id="3" name="even" parent_id="1"/>
-  <Realm id="4" name="two" parent_id="3" accountPolicy_id="5" passwordPolicy_id="2"/>
+  <AnyTypeClass key="csv"/>
+
+  <Realm key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" name="/" passwordPolicy_key="986d1236-3ac5-4a19-810c-5ab21d79cba1"/>
+  <Realm key="722f3d84-9c2b-4525-8f6e-e4b82c55a36c" name="odd" 
+         parent_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" accountPolicy_key="06e2ed52-6966-44aa-a177-a0ca7434201f"/>
+  <Realm key="c5b75db1-fce7-470f-b780-3b9934d82a9d" name="even" 
+         parent_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"/>
+  <Realm key="0679e069-7355-4b20-bd11-a5a0a5453c7c" name="two" 
+         parent_key="c5b75db1-fce7-470f-b780-3b9934d82a9d"
+         accountPolicy_key="20ab5a8c-4b0c-432c-b957-f7fb9784d9f7"
+         passwordPolicy_key="ce93fcda-dc3a-4369-a7b0-a6108c261c85"/>
   
-  <AnyObject id="1" realm_id="1" type_name="PRINTER"
+  <AnyObject key="fc6dbc3a-6c07-4965-8781-921e7401a4a5"
+             realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" type_key="PRINTER"
              creator="admin" lastModifier="admin" 
              creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <AnyObject id="2" realm_id="1" type_name="PRINTER"
+  <AnyObject key="8559d14d-58c2-46eb-a2d4-a7d35161e8f8"
+             realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" type_key="PRINTER"
              creator="admin" lastModifier="admin" 
              creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <AnyObject id="3" realm_id="4" type_name="PRINTER"
+  <AnyObject key="9e1d130c-d6a3-48b1-98b3-182477ed0688"
+             realm_key="0679e069-7355-4b20-bd11-a5a0a5453c7c" type_key="PRINTER"
              creator="admin" lastModifier="admin" 
              creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
   
-  <ARelationship id="1" left_anyObject_id="1" right_anyObject_id="2" type_name="neighborhood"/>
+  <ARelationship key="11a0ec66-b59b-428a-af3d-f856950ff1c5" type_key="neighborhood"
+                 left_anyObject_key="fc6dbc3a-6c07-4965-8781-921e7401a4a5"
+                 right_anyObject_key="8559d14d-58c2-46eb-a2d4-a7d35161e8f8"/>
   
-  <SyncopeRole name="User reviewer"/>
-  <SyncopeRole_entitlements entitlement="USER_READ" role_name="User reviewer"/>
-  <SyncopeRole_entitlements entitlement="USER_LIST" role_name="User reviewer"/>
-  <SyncopeRole_entitlements entitlement="USER_SEARCH" role_name="User reviewer"/>
-  <SyncopeRole_Realm role_name="User reviewer" realm_id="2"/>
-  <SyncopeRole_Realm role_name="User reviewer" realm_id="3"/>
+  <SyncopeRole key="User reviewer"/>
+  <SyncopeRole_entitlements entitlement="USER_READ" role_key="User reviewer"/>
+  <SyncopeRole_entitlements entitlement="USER_LIST" role_key="User reviewer"/>
+  <SyncopeRole_entitlements entitlement="USER_SEARCH" role_key="User reviewer"/>
+  <SyncopeRole_Realm role_key="User reviewer" realm_key="722f3d84-9c2b-4525-8f6e-e4b82c55a36c"/>
+  <SyncopeRole_Realm role_key="User reviewer" realm_key="c5b75db1-fce7-470f-b780-3b9934d82a9d"/>
   
-  <SyncopeRole name="User manager"/>
-  <SyncopeRole_entitlements entitlement="USER_READ" role_name="User manager"/>
-  <SyncopeRole_entitlements entitlement="USER_LIST" role_name="User manager"/>
-  <SyncopeRole_entitlements entitlement="USER_SEARCH" role_name="User manager"/>
-  <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_CLAIM" role_name="User manager"/>
-  <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_SUBMIT" role_name="User manager"/>
-  <SyncopeRole_Realm role_name="User manager" realm_id="1"/>
-
-  <SyncopeRole name="Other"/>
-  <SyncopeRole_entitlements entitlement="SCHEMA_READ" role_name="Other"/>
-  <SyncopeRole_entitlements entitlement="GROUP_READ" role_name="Other"/>
-  <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_CLAIM" role_name="Other"/>
-  <SyncopeRole_Realm role_name="Other" realm_id="2"/>
+  <SyncopeRole key="User manager"/>
+  <SyncopeRole_entitlements entitlement="USER_READ" role_key="User manager"/>
+  <SyncopeRole_entitlements entitlement="USER_LIST" role_key="User manager"/>
+  <SyncopeRole_entitlements entitlement="USER_SEARCH" role_key="User manager"/>
+  <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_CLAIM" role_key="User manager"/>
+  <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_SUBMIT" role_key="User manager"/>
+  <SyncopeRole_Realm role_key="User manager" realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"/>
+
+  <SyncopeRole key="Other"/>
+  <SyncopeRole_entitlements entitlement="SCHEMA_READ" role_key="Other"/>
+  <SyncopeRole_entitlements entitlement="GROUP_READ" role_key="Other"/>
+  <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_CLAIM" role_key="Other"/>
+  <SyncopeRole_Realm role_key="Other" realm_key="722f3d84-9c2b-4525-8f6e-e4b82c55a36c"/>
   
-  <SyncopeRole name="Search for realm evenTwo"/>
-  <SyncopeRole_entitlements entitlement="USER_READ" role_name="Search for realm evenTwo"/>
-  <SyncopeRole_entitlements entitlement="USER_SEARCH" role_name="Search for realm evenTwo"/>
-  <SyncopeRole_Realm role_name="Search for realm evenTwo" realm_id="4"/>
-
-  <SyncopeUser id="1" workflowId="4" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
-               realm_id="3"
+  <SyncopeRole key="Search for realm evenTwo"/>
+  <SyncopeRole_entitlements entitlement="USER_READ" role_key="Search for realm evenTwo"/>
+  <SyncopeRole_entitlements entitlement="USER_SEARCH" role_key="Search for realm evenTwo"/>
+  <SyncopeRole_Realm role_key="Search for realm evenTwo" realm_key="0679e069-7355-4b20-bd11-a5a0a5453c7c"/>
+
+  <SyncopeUser key="1417acbe-cbf6-4277-9372-e75e04f97000" workflowId="4" status="active"
+               password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
+               realm_key="c5b75db1-fce7-470f-b780-3b9934d82a9d"
                username="rossini" creator="admin" lastModifier="admin"
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/>
-  <SyncopeUser_SyncopeRole user_id="1" role_name="Other"/>
-  <SyncopeUser id="2" workflowId="6" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
-               realm_id="1"
+  <SyncopeUser_SyncopeRole user_key="1417acbe-cbf6-4277-9372-e75e04f97000" role_key="Other"/>
+  <SyncopeUser key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" workflowId="6" status="active"
+               password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
+               realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                username="verdi" creator="admin" lastModifier="admin"
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/>
-  <SyncopeUser id="3" workflowId="8" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
-               realm_id="1"
+  <SyncopeUser key="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" workflowId="8" status="active"
+               password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
+               realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                username="vivaldi" creator="admin" lastModifier="admin"
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/>
-  <SyncopeUser id="4" workflowId="10" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
-               realm_id="1"
+  <SyncopeUser key="c9b2dec2-00a7-4855-97c0-d854842b4b24" workflowId="10" status="active"
+               password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
+               realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                username="bellini" creator="admin" lastModifier="admin"
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/>
-  <SyncopeUser_SyncopeRole user_id="4" role_name="User reviewer"/>
-  <SyncopeUser_SyncopeRole user_id="4" role_name="User manager"/>
-  <SyncopeUser id="5" workflowId="12" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
-               realm_id="1"
+  <SyncopeUser_SyncopeRole user_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" role_key="User reviewer"/>
+  <SyncopeUser_SyncopeRole user_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" role_key="User manager"/>
+  <SyncopeUser key="823074dc-d280-436d-a7dd-07399fae48ec" workflowId="12" status="active"
+               password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
+               realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                username="puccini" creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/>
-  <SyncopeUser_SyncopeRole user_id="5" role_name="Search for realm evenTwo"/>
+  <SyncopeUser_SyncopeRole user_key="823074dc-d280-436d-a7dd-07399fae48ec" role_key="Search for realm evenTwo"/>
   
-  <SyncopeGroup id="1" name="root"
-                realm_id="1"
+  <SyncopeGroup key="37d15e4c-cdc1-460b-a591-8505c8133806" name="root"
+                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup id="2" name="child"
-                realm_id="1"
+  <SyncopeGroup key="b1f7c12d-ec83-441f-a50e-1691daaedf3b" name="child"
+                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup id="3" name="citizen"
-                realm_id="1"
+  <SyncopeGroup key="29f96485-729e-4d31-88a1-6fc60e4677f3" name="citizen"
+                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup id="4" name="employee"
-                realm_id="1"
+  <SyncopeGroup key="8fb2d51e-c605-4e80-a72b-13ffecf1aa9a" name="employee"
+                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup id="5" name="secretary"
-                realm_id="1"
+  <SyncopeGroup key="a3c1a693-a6be-483f-a2b3-5cfec146f4bf" name="secretary"
+                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup id="6" name="director" userOwner_id="5"
-                realm_id="1"
+  <SyncopeGroup key="ebf97068-aa4b-4a85-9f01-680e8c4cf227" name="director"
+                userOwner_key="823074dc-d280-436d-a7dd-07399fae48ec"
+                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup id="7" name="managingDirector"
-                realm_id="1"
+  <SyncopeGroup key="bf825fe1-7320-4a54-bd64-143b5c18ab97" name="managingDirector"
+                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup id="8" name="otherchild"
-                realm_id="1"
+  <SyncopeGroup key="f779c0d4-633b-4be5-8f57-32eb478a3ca5" name="otherchild"
+                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup id="9" name="groupForWorkflowApproval"
-                realm_id="1"
+  <SyncopeGroup key="0cbcabd2-4410-4b6b-8f05-a052b451d18f" name="groupForWorkflowApproval"
+                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup id="10" name="managingConsultant"
-                realm_id="1"
+  <SyncopeGroup key="b8d38784-57e7-4595-859a-076222644b55" name="managingConsultant"
+                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup id="11" name="groupForWorkflowOptIn"
-                realm_id="1"
+  <SyncopeGroup key="268fed79-f440-4390-9435-b273768eb5d6" name="groupForWorkflowOptIn"
+                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup id="12" name="aGroupForPropagation"
-                realm_id="1"
+  <SyncopeGroup key="0626100b-a4ba-4e00-9971-86fad52a6216" name="aGroupForPropagation"
+                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup_AnyTypeClass group_id="12" anyTypeClass_name="csv"/>  
-  <SyncopeGroup id="13" name="bGroupForPropagation"
-                realm_id="1"
+  <SyncopeGroup_AnyTypeClass group_key="0626100b-a4ba-4e00-9971-86fad52a6216" anyTypeClass_key="csv"/>  
+  <SyncopeGroup key="ba9ed509-b1f5-48ab-a334-c8530a6422dc" name="bGroupForPropagation"
+                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup_AnyTypeClass group_id="13" anyTypeClass_name="csv"/>  
-  <SyncopeGroup id="14" name="artDirector"
-                realm_id="1"
+  <SyncopeGroup_AnyTypeClass group_key="ba9ed509-b1f5-48ab-a334-c8530a6422dc" anyTypeClass_key="csv"/>  
+  <SyncopeGroup key="ece66293-8f31-4a84-8e8d-23da36e70846" name="artDirector"
+                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>  
-  <SyncopeGroup id="15" name="additional"
-                realm_id="3"
+  <SyncopeGroup key="034740a9-fa10-453b-af37-dc7897e98fb1" name="additional"
+                realm_key="c5b75db1-fce7-470f-b780-3b9934d82a9d"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <TypeExtension id="1" group_id="15" anyType_name="USER"/>
-  <TypeExtension_AnyTypeClass typeExtension_id="1" anyTypeClass_name="csv"/>
-  <TypeExtension_AnyTypeClass typeExtension_id="1" anyTypeClass_name="other"/>
-  <SyncopeGroup id="16" name="fake"
-                realm_id="2"
+  <TypeExtension key="84c1490c-a1d9-4b91-859c-fafbb0113a85"
+                 group_key="034740a9-fa10-453b-af37-dc7897e98fb1" anyType_key="USER"/>
+  <TypeExtension_AnyTypeClass typeExtension_key="84c1490c-a1d9-4b91-859c-fafbb0113a85" anyTypeClass_key="csv"/>
+  <TypeExtension_AnyTypeClass typeExtension_key="84c1490c-a1d9-4b91-859c-fafbb0113a85" anyTypeClass_key="other"/>
+  <SyncopeGroup key="e7ff94e8-19c9-4f0a-b8b7-28327edbf6ed" name="fake"
+                realm_key="722f3d84-9c2b-4525-8f6e-e4b82c55a36c"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
   
-  <URelationship id="1" user_id="4" anyObject_id="1" type_name="neighborhood"/>
-
-  <UMembership id="1" user_id="1" group_id="1"/>
-  <UMembership id="2" user_id="2" group_id="1"/>
-  <UMembership id="3" user_id="2" group_id="2"/>
-  <UMembership id="4" user_id="4" group_id="7"/>
-  <UMembership id="5" user_id="1" group_id="8"/>
-  <UMembership id="6" user_id="2" group_id="3"/>
-  <UMembership id="7" user_id="5" group_id="14"/>
-
-  <PlainSchema name="fullname" type="String" anyTypeClass_name="minimal user"
+  <URelationship key="ca20ffca-1305-442f-be9a-3723a0cd88ca"
+                 user_key="c9b2dec2-00a7-4855-97c0-d854842b4b24"
+                 anyObject_key="fc6dbc3a-6c07-4965-8781-921e7401a4a5" type_key="neighborhood"/>
+
+  <UMembership key="3d5e91f6-305e-45f9-ad30-4897d3d43bd9"
+               user_key="1417acbe-cbf6-4277-9372-e75e04f97000" group_key="37d15e4c-cdc1-460b-a591-8505c8133806"/>
+  <UMembership key="d53f7657-2b22-4e10-a2cd-c3379a4d1a31"
+               user_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" group_key="37d15e4c-cdc1-460b-a591-8505c8133806"/>
+  <UMembership key="8e42a132-55ae-4860-bebd-2ca00ba5e959"
+               user_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" group_key="b1f7c12d-ec83-441f-a50e-1691daaedf3b"/>
+  <UMembership key="40e409a4-d870-4792-b820-30668f1269b9"
+               user_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" group_key="bf825fe1-7320-4a54-bd64-143b5c18ab97"/>
+  <UMembership key="6d8a7dc0-d4bc-4b7e-b058-abcd3df28f28"
+               user_key="1417acbe-cbf6-4277-9372-e75e04f97000" group_key="f779c0d4-633b-4be5-8f57-32eb478a3ca5"/>
+  <UMembership key="34f2d776-58b1-4640-8e64-e979b4242a18"
+               user_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" group_key="29f96485-729e-4d31-88a1-6fc60e4677f3"/>
+  <UMembership key="8cfb78fc-d0e7-4f08-a0ae-d7abf3223b6f"
+               user_key="823074dc-d280-436d-a7dd-07399fae48ec" group_key="ece66293-8f31-4a84-8e8d-23da36e70846"/>
+
+  <PlainSchema key="fullname" type="String" anyTypeClass_key="minimal user"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="1" readonly="0"/>
-  <PlainSchema name="userId" type="String" anyTypeClass_name="minimal user"
+  <PlainSchema key="userId" type="String" anyTypeClass_key="minimal user"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="1" readonly="0"
                validatorClass="org.apache.syncope.core.persistence.jpa.attrvalue.validation.EmailAddressValidator"/>
-  <PlainSchema name="loginDate" type="Date" anyTypeClass_name="other"
+  <PlainSchema key="loginDate" type="Date" anyTypeClass_key="other"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"
                conversionPattern="yyyy-MM-dd"/>
-  <PlainSchema name="firstname" type="String" anyTypeClass_name="minimal user"
+  <PlainSchema key="firstname" type="String" anyTypeClass_key="minimal user"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="surname" type="String" anyTypeClass_name="minimal user"
+  <PlainSchema key="surname" type="String" anyTypeClass_key="minimal user"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="ctype" type="String" anyTypeClass_name="other"
+  <PlainSchema key="ctype" type="String" anyTypeClass_key="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="email" type="String" anyTypeClass_name="minimal user"
+  <PlainSchema key="email" type="String" anyTypeClass_key="minimal user"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                validatorClass="org.apache.syncope.core.persistence.jpa.attrvalue.validation.EmailAddressValidator"/>
-  <PlainSchema name="activationDate" type="Date" anyTypeClass_name="other"
+  <PlainSchema key="activationDate" type="Date" anyTypeClass_key="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                conversionPattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ"/>
-  <PlainSchema name="uselessReadonly" type="String" anyTypeClass_name="other"
+  <PlainSchema key="uselessReadonly" type="String" anyTypeClass_key="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="1"/>
-  <PlainSchema name="cool" type="Boolean" anyTypeClass_name="other" 
+  <PlainSchema key="cool" type="Boolean" anyTypeClass_key="other" 
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="gender" type="Enum" anyTypeClass_name="other"
+  <PlainSchema key="gender" type="Enum" anyTypeClass_key="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                enumerationValues="M;F"/>
-  <PlainSchema name="aLong" type="Long" anyTypeClass_name="other"
+  <PlainSchema key="aLong" type="Long" anyTypeClass_key="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="makeItDouble" type="Long" anyTypeClass_name="other"
+  <PlainSchema key="makeItDouble" type="Long" anyTypeClass_key="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="obscure" type="Encrypted" anyTypeClass_name="other"
+  <PlainSchema key="obscure" type="Encrypted" anyTypeClass_key="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                secretKey="7abcdefghilmnopqrstuvz9#" cipherAlgorithm="SHA"/>
-  <PlainSchema name="photo" type="Binary" anyTypeClass_name="other"
+  <PlainSchema key="photo" type="Binary" anyTypeClass_key="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                mimeType="image/jpeg"/>
 
-  <DerSchema name="csvuserid" expression="firstname + ',' + surname" anyTypeClass_name="csv"/>
-  <DerSchema name="cn" expression="surname + ', ' + firstname" anyTypeClass_name="minimal user"/>
-  <DerSchema name="noschema" expression="surname + ', ' + notfound" anyTypeClass_name="other"/>
-  <DerSchema name="info" expression="username + ' - ' + creationDate + '[' + failedLogins + ']'" anyTypeClass_name="minimal user"/>
+  <DerSchema key="csvuserid" expression="firstname + ',' + surname" anyTypeClass_key="csv"/>
+  <DerSchema key="cn" expression="surname + ', ' + firstname" anyTypeClass_key="minimal user"/>
+  <DerSchema key="noschema" expression="surname + ', ' + notfound" anyTypeClass_key="other"/>
+  <DerSchema key="info" expression="username + ' - ' + creationDate + '[' + failedLogins + ']'" anyTypeClass_key="minimal user"/>
 
-  <PlainSchema name="icon" type="String" anyTypeClass_name="minimal group"
+  <PlainSchema key="icon" type="String" anyTypeClass_key="minimal group"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>                
-  <PlainSchema name="show" type="Boolean" anyTypeClass_name="minimal group"
+  <PlainSchema key="show" type="Boolean" anyTypeClass_key="minimal group"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="rderived_sx" type="String" anyTypeClass_name="minimal group"
+  <PlainSchema key="rderived_sx" type="String" anyTypeClass_key="minimal group"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="rderived_dx" type="String" anyTypeClass_name="minimal group"
+  <PlainSchema key="rderived_dx" type="String" anyTypeClass_key="minimal group"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>           
-  <PlainSchema name="title" type="String" anyTypeClass_name="minimal group"
+  <PlainSchema key="title" type="String" anyTypeClass_key="minimal group"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
 
-  <DerSchema name="rderiveddata" expression="rderived_sx + '-' + rderived_dx"
-             anyTypeClass_name="minimal group"/>
-  <DerSchema name="displayProperty" expression="icon + ': ' + show"
-             anyTypeClass_name="minimal group"/>
-  <DerSchema name="rderToBePropagated" expression="rderived_sx + '-' + rderived_dx"
-             anyTypeClass_name="minimal group"/>
+  <DerSchema key="rderiveddata" expression="rderived_sx + '-' + rderived_dx"
+             anyTypeClass_key="minimal group"/>
+  <DerSchema key="displayProperty" expression="icon + ': ' + show"
+             anyTypeClass_key="minimal group"/>
+  <DerSchema key="rderToBePropagated" expression="rderived_sx + '-' + rderived_dx"
+             anyTypeClass_key="minimal group"/>
 
-  <DerSchema name="rderivedschema" expression="rderived_sx + '-' + rderived_dx"  anyTypeClass_name="minimal group"/>
+  <DerSchema key="rderivedschema" expression="rderived_sx + '-' + rderived_dx"  anyTypeClass_key="minimal group"/>
 
-  <PlainSchema name="subscriptionDate" type="Date" anyTypeClass_name="generic membership"
+  <PlainSchema key="subscriptionDate" type="Date" anyTypeClass_key="generic membership"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                conversionPattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ"/>
-  <PlainSchema name="mderived_sx" type="String" anyTypeClass_name="generic membership"
+  <PlainSchema key="mderived_sx" type="String" anyTypeClass_key="generic membership"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="mderived_dx" type="String" anyTypeClass_name="generic membership"
+  <PlainSchema key="mderived_dx" type="String" anyTypeClass_key="generic membership"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>          
-  <PlainSchema name="postalAddress" type="String" anyTypeClass_name="generic membership"
+  <PlainSchema key="postalAddress" type="String" anyTypeClass_key="generic membership"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
 
-  <DerSchema name="mderiveddata" expression="mderived_sx + '-' + mderived_dx"/>
-  <DerSchema name="mderToBePropagated" expression="mderived_sx + '-' + mderived_dx" 
-             anyTypeClass_name="generic membership"/>
+  <DerSchema key="mderiveddata" expression="mderived_sx + '-' + mderived_dx"/>
+  <DerSchema key="mderToBePropagated" expression="mderived_sx + '-' + mderived_dx" 
+             anyTypeClass_key="generic membership"/>
         
-  <PlainSchema name="model" type="String" anyTypeClass_name="minimal printer"
+  <PlainSchema key="model" type="String" anyTypeClass_key="minimal printer"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="location" type="String" anyTypeClass_name="minimal printer"
+  <PlainSchema key="location" type="String" anyTypeClass_key="minimal printer"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
     
-  <APlainAttr id="1" owner_id="1" schema_name="model"/>
-  <APlainAttrValue id="1" attribute_id="1" stringValue="Canon MFC8030"/>
-  <APlainAttr id="2" owner_id="1" schema_name="location"/>
-  <APlainAttrValue id="2" attribute_id="2" stringValue="1st floor"/>
+  <APlainAttr key="956a8440-1df7-4ed6-b156-04173ca47528" owner_key="fc6dbc3a-6c07-4965-8781-921e7401a4a5" schema_key="model"/>
+  <APlainAttrValue key="15f64e99-20cc-42ec-a77a-3396dea4248f" attribute_key="956a8440-1df7-4ed6-b156-04173ca47528" stringValue="Canon MFC8030"/>
+  <APlainAttr key="1fa796fd-c7e2-414e-8ad3-ac86b729d62c" owner_key="fc6dbc3a-6c07-4965-8781-921e7401a4a5" schema_key="location"/>
+  <APlainAttrValue key="ad0452c9-93b9-4248-b2ca-48ef8a1cf5b5" attribute_key="1fa796fd-c7e2-414e-8ad3-ac86b729d62c" stringValue="1st floor"/>
     
-  <APlainAttr id="3" owner_id="2" schema_name="model"/>
-  <APlainAttrValue id="3" attribute_id="3" stringValue="HP Laserjet 1300n"/>
-  <APlainAttr id="4" owner_id="2" schema_name="location"/>
-  <APlainAttrValue id="4" attribute_id="4" stringValue="2nd floor"/>
-
-  <UPlainAttr id="99" owner_id="1" schema_name="ctype"/>
-  <UPlainAttrValue id="9" attribute_id="99" stringValue="G"/>
-  <UPlainAttr id="100" owner_id="1" schema_name="fullname"/>
-  <UPlainAttrUniqueValue id="10" attribute_id="100" schema_name="fullname" stringValue="Gioacchino Rossini"/>
-  <UPlainAttr id="101" owner_id="1" schema_name="firstname"/>
-  <UPlainAttrValue id="11" attribute_id="101" stringValue="Gioacchino"/>
-  <UPlainAttr id="102" owner_id="1" schema_name="surname"/>
-  <UPlainAttrValue id="12" attribute_id="102" stringValue="Rossini"/>
-  <UPlainAttr id="103" owner_id="1" schema_name="userId"/>
-  <UPlainAttrUniqueValue id="13" attribute_id="103" schema_name="userId" stringValue="rossini@apache.org"/>
-  <UPlainAttr id="104" owner_id="1" schema_name="loginDate"/>
-  <UPlainAttrValue id="14" attribute_id="104" dateValue="2009-05-26"/>
-  <UPlainAttrValue id="15" attribute_id="104" dateValue="2010-05-26 15:40:04"/>
-
-  <UPlainAttr id="105" owner_id="2" schema_name="fullname"/>
-  <UPlainAttrUniqueValue id="16" attribute_id="105" schema_name="fullname" stringValue="Giuseppe Verdi"/>
-  <UPlainAttr id="106" owner_id="2" schema_name="firstname"/>
-  <UPlainAttrValue id="17" attribute_id="106" stringValue="Giuseppe"/>
-  <UPlainAttr id="107" owner_id="2" schema_name="surname"/>
-  <UPlainAttrValue id="18" attribute_id="107" stringValue="Verdi"/>
-  <UPlainAttr id="108" owner_id="2" schema_name="userId"/>
-  <UPlainAttrUniqueValue id="19" attribute_id="108" schema_name="userId" stringValue="verdi@apache.org"/>
-
-  <UPlainAttr id="109" owner_id="3" schema_name="firstname"/>
-  <UPlainAttrValue id="20" attribute_id="109" stringValue="Antonio"/>
-  <UPlainAttr id="110" owner_id="3" schema_name="surname"/>
-  <UPlainAttrValue id="21" attribute_id="110" stringValue="Vivaldi"/>
-  <UPlainAttr id="111" owner_id="3" schema_name="fullname"/>
-  <UPlainAttrUniqueValue id="22" attribute_id="111" schema_name="fullname" stringValue="Antonio Vivaldi"/>
-  <UPlainAttr id="112" owner_id="3" schema_name="userId"/>
-  <UPlainAttrUniqueValue id="23" attribute_id="112" schema_name="userId" stringValue="vivaldi@apache.org"/>
-
-  <UPlainAttr id="113" owner_id="4" schema_name="firstname"/>
-  <UPlainAttrValue id="24" attribute_id="113" stringValue="Vincenzo"/>
-  <UPlainAttr id="114" owner_id="4" schema_name="surname"/>
-  <UPlainAttrValue id="25" attribute_id="114" stringValue="Bellini"/>
-  <UPlainAttr id="115" owner_id="4" schema_name="fullname"/>
-  <UPlainAttrUniqueValue id="26" attribute_id="115" schema_name="fullname" stringValue="Vincenzo Bellini"/>
-  <UPlainAttr id="116" owner_id="4" schema_name="userId"/>
-  <UPlainAttrUniqueValue id="27" attribute_id="116" schema_name="userId" stringValue="bellini@apache.org"/>
-  <UPlainAttr id="117" owner_id="4" schema_name="loginDate"/>
-  <UPlainAttrValue id="28" attribute_id="117" dateValue="2009-06-24"/>
-  <UPlainAttr id="118" owner_id="4" schema_name="cool"/>
-  <UPlainAttrValue id="29" attribute_id="118" booleanValue="1"/>
-  <UPlainAttr id="119" owner_id="4" schema_name="gender"/>
-  <UPlainAttrValue id="30" attribute_id="119" stringValue="M"/>
+  <APlainAttr key="b8342732-81bd-440b-91ac-b8cdad288ed5" owner_key="8559d14d-58c2-46eb-a2d4-a7d35161e8f8" schema_key="model"/>
+  <APlainAttrValue key="50e852ac-68ba-4b12-85ca-e366987fd855" attribute_key="b8342732-81bd-440b-91ac-b8cdad288ed5" stringValue="HP Laserjet 1300n"/>
+  <APlainAttr key="c4cb0684-a033-425c-8b1b-d283597f999b" owner_key="8559d14d-58c2-46eb-a2d4-a7d35161e8f8" schema_key="location"/>
+  <APlainAttrValue key="7b954dee-8a14-4fa1-a433-cff0d1f888f8" attribute_key="c4cb0684-a033-425c-8b1b-d283597f999b" stringValue="2nd floor"/>
+
+  <UPlainAttr key="57eed138-a94f-475c-b2de-fdb4ae8cb0fb" owner_key="1417acbe-cbf6-4277-9372-e75e04f97000" schema_key="ctype"/>
+  <UPlainAttrValue key="56189459-5ea3-4051-8f88-39c5c07d3e44" attribute_key="57eed138-a94f-475c-b2de-fdb4ae8cb0fb" stringValue="G"/>
+  <UPlainAttr key="01f22fbd-b672-40af-b528-686d9b27ebc4" owner_key="1417acbe-cbf6-4277-9372-e75e04f97000" schema_key="fullname"/>
+  <UPlainAttrUniqueValue key="5e06f081-4859-422c-bbac-e44f2e09a7fc" attribute_key="01f22fbd-b672-40af-b528-686d9b27ebc4" schema_key="fullname" stringValue="Gioacchino Rossini"/>
+  <UPlainAttr key="9d137d0c-1b04-4e9c-81f6-6203ae8baab4" owner_key="1417acbe-cbf6-4277-9372-e75e04f97000" schema_key="firstname"/>
+  <UPlainAttrValue key="c56d9faa-4192-4e6c-92c5-345189352d2e" attribute_key="9d137d0c-1b04-4e9c-81f6-6203ae8baab4" stringValue="Gioacchino"/>
+  <UPlainAttr key="65f4ef2c-f249-424b-9390-7faacebf1725" owner_key="1417acbe-cbf6-4277-9372-e75e04f97000" schema_key="surname"/>
+  <UPlainAttrValue key="c8d941b5-b64b-44ed-8f5d-a87520f773cb" attribute_key="65f4ef2c-f249-424b-9390-7faacebf1725" stringValue="Rossini"/>
+  <UPlainAttr key="1861e249-fc54-4aea-b8b8-3eed7a4d14c8" owner_key="1417acbe-cbf6-4277-9372-e75e04f97000" schema_key="userId"/>
+  <UPlainAttrUniqueValue key="25b0bdc7-ef0d-4aca-8cb6-fcaff45a1041" attribute_key="1861e249-fc54-4aea-b8b8-3eed7a4d14c8" schema_key="userId" stringValue="rossini@apache.org"/>
+  <UPlainAttr key="9d0d9e40-1b18-488e-9482-37dab82163c9" owner_key="1417acbe-cbf6-4277-9372-e75e04f97000" schema_key="loginDate"/>
+  <UPlainAttrValue key="7034de3b-3687-4db5-8454-363468f1a9de" attribute_key="9d0d9e40-1b18-488e-9482-37dab82163c9" dateValue="2009-05-26"/>
+  <UPlainAttrValue key="bd8278a7-adcd-4627-9fba-3b621c26b64d" attribute_key="9d0d9e40-1b18-488e-9482-37dab82163c9" dateValue="2010-05-26 15:40:04"/>
+
+  <UPlainAttr key="b8cde98a-16e7-446c-9bf3-db0fac6bc5cf" owner_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" schema_key="fullname"/>
+  <UPlainAttrUniqueValue key="1fbda591-9421-4511-ae8e-35b59b68487c" attribute_key="b8cde98a-16e7-446c-9bf3-db0fac6bc5cf" schema_key="fullname" stringValue="Giuseppe Verdi"/>
+  <UPlainAttr key="f67e6ade-5d5e-467a-869a-b29653ec8c89" owner_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" schema_key="firstname"/>
+  <UPlainAttrValue key="f80b0c29-99db-47a7-a5aa-b4e054d25741" attribute_key="f67e6ade-5d5e-467a-869a-b29653ec8c89" stringValue="Giuseppe"/>
+  <UPlainAttr key="24348fd6-d6a6-4cb7-a97e-f184b91395bc" owner_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" schema_key="surname"/>
+  <UPlainAttrValue key="4d19a121-511d-414e-b082-c72581700961" attribute_key="24348fd6-d6a6-4cb7-a97e-f184b91395bc" stringValue="Verdi"/>
+  <UPlainAttr key="bf296d5f-10df-421d-a2c0-bc489371b48c" owner_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" schema_key="userId"/>
+  <UPlainAttrUniqueValue key="5812647b-86b3-4cd9-85db-2639dd19af3d" attribute_key="bf296d5f-10df-421d-a2c0-bc489371b48c" schema_key="userId" stringValue="verdi@apache.org"/>
+
+  <UPlainAttr key="ef97c9bd-f899-4d23-b43f-2fb27064fee5" owner_key="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_key="firstname"/>
+  <UPlainAttrValue key="39ee0a93-0cb9-4921-b033-2715b2b72131" attribute_key="ef97c9bd-f899-4d23-b43f-2fb27064fee5" stringValue="Antonio"/>
+  <UPlainAttr key="d610b2e3-81d9-4a9a-8a1e-26a96e7eeb6e" owner_key="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_key="surname"/>
+  <UPlainAttrValue key="8531b8d3-0214-412f-b115-f6cc81124576" attribute_key="d610b2e3-81d9-4a9a-8a1e-26a96e7eeb6e" stringValue="Vivaldi"/>
+  <UPlainAttr key="75c2e13f-8d17-4232-ae70-6ac8d6b6b95e" owner_key="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_key="fullname"/>
+  <UPlainAttrUniqueValue key="fbbdc4cb-c7da-42dd-9fc2-1516ac2a8672" attribute_key="75c2e13f-8d17-4232-ae70-6ac8d6b6b95e" schema_key="fullname" stringValue="Antonio Vivaldi"/>
+  <UPlainAttr key="d4fe3920-903a-4168-b151-d53dc0297284" owner_key="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_key="userId"/>
+  <UPlainAttrUniqueValue key="aa8a6cbf-5afb-43a6-862b-f2da32c71d09" attribute_key="d4fe3920-903a-4168-b151-d53dc0297284" schema_key="userId" stringValue="vivaldi@apache.org"/>
+
+  <UPlainAttr key="c2511535-dfc1-4141-8ffd-9bbbca4b0f6b" owner_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_key="firstname"/>
+  <UPlainAttrValue key="24" attribute_key="c2511535-dfc1-4141-8ffd-9bbbca4b0f6b" stringValue="Vincenzo"/>
+  <UPlainAttr key="05b10553-343b-4703-977f-21b2e16c64ab" owner_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_key="surname"/>
+  <UPlainAttrValue key="e88156c6-73eb-47a5-985c-878b8d18cca4" attribute_key="05b10553-343b-4703-977f-21b2e16c64ab" stringValue="Bellini"/>
+  <UPlainAttr key="33cefe5c-c708-46f5-9588-d9bd862e9b51" owner_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_key="fullname"/>
+  <UPlainAttrUniqueValue key="14da5ad6-8204-45c6-81e5-332a1260837e" attribute_key="33cefe5c-c708-46f5-9588-d9bd862e9b51" schema_key="fullname" stringValue="Vincenzo Bellini"/>
+  <UPlainAttr key="0f71c875-82dd-40d6-b352-ced78e041be5" owner_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_key="userId"/>
+  <UPlainAttrUniqueValue key="c052271f-84ac-4cc4-9156-2159544e5ae2" attribute_key="0f71c875-82dd-40d6-b352-ced78e041be5" schema_key="userId" stringValue="bellini@apache.org"/>
+  <UPlainAttr key="35f407a2-d254-4890-9e45-5a7dd8c8df7d" owner_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_key="loginDate"/>
+  <UPlainAttrValue key="0c67225a-030a-4c56-b337-17cf7a311f0f" attribute_key="35f407a2-d254-4890-9e45-5a7dd8c8df7d" dateValue="2009-06-24"/>
+  <UPlainAttr key="a38423c2-4c29-4eeb-aa14-d984f78c083d" owner_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_key="cool"/>
+  <UPlainAttrValue key="16dd73d3-4f89-4ebc-a446-41a06848bdb3" attribute_key="a38423c2-4c29-4eeb-aa14-d984f78c083d" booleanValue="1"/>
+  <UPlainAttr key="3e86f9fa-a19b-4f7b-b19a-f28e1b052a68" owner_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_key="gender"/>
+  <UPlainAttrValue key="55efeccf-c124-4115-99e1-50e04dfc18e1" attribute_key="3e86f9fa-a19b-4f7b-b19a-f28e1b052a68" stringValue="M"/>
   
-  <UPlainAttr id="120" owner_id="5" schema_name="firstname"/>
-  <UPlainAttrValue id="31" attribute_id="120" stringValue="Giacomo"/>
-  <UPlainAttr id="121" owner_id="5" schema_name="surname"/>
-  <UPlainAttrValue id="32" attribute_id="121" stringValue="Puccini"/>
-  <UPlainAttr id="122" owner_id="5" schema_name="fullname"/>
-  <UPlainAttrUniqueValue id="33" attribute_id="122" schema_name="fullname" stringValue="Giacomo Puccini"/>
-  <UPlainAttr id="123" owner_id="5" schema_name="userId"/>
-  <UPlainAttrUniqueValue id="34" attribute_id="123" schema_name="userId" stringValue="puccini@apache.org"/>
+  <UPlainAttr key="185ce8e4-fc28-4b0b-9f41-595b6ca53e6f" owner_key="823074dc-d280-436d-a7dd-07399fae48ec" schema_key="firstname"/>
+  <UPlainAttrValue key="1e76b9b8-2fa3-4a96-8098-f96b6bfe3284" attribute_key="185ce8e4-fc28-4b0b-9f41-595b6ca53e6f" stringValue="Giacomo"/>
+  <UPlainAttr key="28023d9c-18bc-431c-80e2-412741d235e6" owner_key="823074dc-d280-436d-a7dd-07399fae48ec" schema_key="surname"/>
+  <UPlainAttrValue key="506d5503-d963-4005-aae9-22c16a20e81d" attribute_key="28023d9c-18bc-431c-80e2-412741d235e6" stringValue="Puccini"/>
+  <UPlainAttr key="17141999-5e09-4364-9cd2-dc05632e0a63" owner_key="823074dc-d280-436d-a7dd-07399fae48ec" schema_key="fullname"/>
+  <UPlainAttrUniqueValue key="c9afa8f6-9a8a-4c8e-b4d1-a46f50996a38" attribute_key="17141999-5e09-4364-9cd2-dc05632e0a63" schema_key="fullname" stringValue="Giacomo Puccini"/>
+  <UPlainAttr key="15704022-315d-4740-8f79-7d60dd6165d4" owner_key="823074dc-d280-436d-a7dd-07399fae48ec" schema_key="userId"/>
+  <UPlainAttrUniqueValue key="1e565925-30e3-4ed0-8894-2b70d2ebaa6a" attribute_key="15704022-315d-4740-8f79-7d60dd6165d4" schema_key="userId" stringValue="puccini@apache.org"/>
   
-  <UPlainAttr id="124" owner_id="2" schema_name="email"/>
-  <UPlainAttrValue id="35" attribute_id="124" stringValue="verdi@syncope.org"/>
-  <UPlainAttr id="125" owner_id="3" schema_name="email"/>
-  <UPlainAttrValue id="36" attribute_id="125" stringValue="vivaldi@syncope.org"/>
-  <UPlainAttr id="126" owner_id="3" schema_name="ctype"/>
-  <UPlainAttrValue id="37" attribute_id="126" stringValue="F"/>
+  <UPlainAttr key="cf2eb45f-0877-49f3-9eb7-844fea0e1a64" owner_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" schema_key="email"/>
+  <UPlainAttrValue key="e5cfa8e0-6089-415a-bf5d-54a123c2cb6b" attribute_key="cf2eb45f-0877-49f3-9eb7-844fea0e1a64" stringValue="verdi@syncope.org"/>
+  <UPlainAttr key="514f586e-fd38-45a8-a2af-730d297f1022" owner_key="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_key="email"/>
+  <UPlainAttrValue key="272b5971-15b5-4435-b816-34ca3b8184f3" attribute_key="514f586e-fd38-45a8-a2af-730d297f1022" stringValue="vivaldi@syncope.org"/>
+  <UPlainAttr key="4192de6e-11dd-4435-80a8-4340d3586af1" owner_key="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_key="ctype"/>
+  <UPlainAttrValue key="e171e555-b47e-45b9-b291-d027a5bf9596" attribute_key="4192de6e-11dd-4435-80a8-4340d3586af1" stringValue="F"/>
    
-  <GPlainAttr id="600" owner_id="1" schema_name="icon"/>
-  <GPlainAttrValue attribute_id="600" id="40" stringValue="niceIcon"/>
+  <GPlainAttr key="86eeb796-e419-4409-b5e2-7c2adb342ca4" owner_key="37d15e4c-cdc1-460b-a591-8505c8133806" schema_key="icon"/>
+  <GPlainAttrValue attribute_key="86eeb796-e419-4409-b5e2-7c2adb342ca4" key="4a6a769e-a9c8-40f1-9746-b23d5af5a50a" stringValue="niceIcon"/>
 
-  <GPlainAttr id="700" owner_id="2" schema_name="icon"/>
-  <GPlainAttrValue attribute_id="700" id="41" stringValue="badIcon"/>
+  <GPlainAttr key="f82fc61f-8e74-4a4b-9f9e-b8a41f38aad9" owner_key="b1f7c12d-ec83-441f-a50e-1691daaedf3b" schema_key="icon"/>
+  <GPlainAttrValue attribute_key="f82fc61f-8e74-4a4b-9f9e-b8a41f38aad9" key="49f35879-2510-4f11-a901-24152f753538" stringValue="badIcon"/>
 
-  <GPlainAttr id="800" owner_id="1"  schema_name="show"/>
-  <GPlainAttrValue attribute_id="800" id="42" booleanValue="1"/>
+  <GPlainAttr key="8a9eb141-a946-4f50-9dfa-7a59b5e54e47" owner_key="37d15e4c-cdc1-460b-a591-8505c8133806"  schema_key="show"/>
+  <GPlainAttrValue attribute_key="8a9eb141-a946-4f50-9dfa-7a59b5e54e47" key="06dc6390-ca18-4d13-86e3-06aaae247c1b" booleanValue="1"/>
 
-  <GPlainAttr id="900" owner_id="6" schema_name="icon"/>
-  <GPlainAttrValue attribute_id="900" id="43" stringValue="icon6"/>
+  <GPlainAttr key="03f91f9f-95ce-44f9-a3e2-681fba8a0bc9" owner_key="ebf97068-aa4b-4a85-9f01-680e8c4cf227" schema_key="icon"/>
+  <GPlainAttrValue attribute_key="03f91f9f-95ce-44f9-a3e2-681fba8a0bc9" key="88c44e8f-c3c6-40f6-a564-5872d1b14299" stringValue="icon6"/>
 
-  <GPlainAttr id="950" owner_id="4" schema_name="icon"/>
-  <GPlainAttrValue attribute_id="950" id="44" stringValue="icon4"/>
+  <GPlainAttr key="cd3d4567-aeca-4f73-98c1-545136080abd" owner_key="8fb2d51e-c605-4e80-a72b-13ffecf1aa9a" schema_key="icon"/>
+  <GPlainAttrValue attribute_key="cd3d4567-aeca-4f73-98c1-545136080abd" key="5d59450a-2f50-4249-8548-64e529b75e21" stringValue="icon4"/>
 
-  <GPlainAttr id="992" owner_id="1" schema_name="rderived_sx"/>
-  <GPlainAttrValue attribute_id="992" id="92" stringValue="sx"/>
+  <GPlainAttr key="ddfda04c-62ad-4a6f-bc15-f25f848a575e" owner_key="37d15e4c-cdc1-460b-a591-8505c8133806" schema_key="rderived_sx"/>
+  <GPlainAttrValue key="caf45fb5-f91d-4bdb-b9c5-c3fe75890f24" attribute_key="ddfda04c-62ad-4a6f-bc15-f25f848a575e" stringValue="sx"/>
 
-  <GPlainAttr id="993" owner_id="1" schema_name="rderived_dx"/>
-  <GPlainAttrValue attribute_id="993" id="93" stringValue="dx"/>
+  <GPlainAttr key="4fcba413-8097-4cd3-8629-21a56ebb95ba" owner_key="37d15e4c-cdc1-460b-a591-8505c8133806" schema_key="rderived_dx"/>
+  <GPlainAttrValue attribute_key="4fcba413-8097-4cd3-8629-21a56ebb95ba" key="04b7b7ca-c2e9-44a4-8e86-000d9b982bf8" stringValue="dx"/>
 
-  <GPlainAttr id="994" owner_id="12" schema_name="title"/>
-  <GPlainAttrValue attribute_id="994" id="94" stringValue="r12"/>
+  <GPlainAttr key="1be7cf7e-b05c-4089-8ecb-fcafe0a162b9" owner_key="0626100b-a4ba-4e00-9971-86fad52a6216" schema_key="title"/>
+  <GPlainAttrValue attribute_key="1be7cf7e-b05c-4089-8ecb-fcafe0a162b9" key="0f5255af-34f5-4372-93a3-ede2778303d8" stringValue="r12"/>
   
-  <GPlainAttr id="995" owner_id="13" schema_name="title"/>
-  <GPlainAttrValue attribute_id="995" id="95" stringValue="r13"/>
+  <GPlainAttr key="22690472-ed3f-4972-8979-4c9251fab044" owner_key="ba9ed509-b1f5-48ab-a334-c8530a6422dc" schema_key="title"/>
+  <GPlainAttrValue attribute_key="22690472-ed3f-4972-8979-4c9251fab044" key="e16765e6-f806-469e-ae34-1ddf56f2102a" stringValue="r13"/>
 
-  <ConnInstance id="100" displayName="ConnInstance100"
+  <ConnInstance key="88a7a819-dab5-46b4-9b90-0b9769eabdb8" displayName="ConnInstance100"
                 location="${connid.location}"
                 bundleName="net.tirasa.connid.bundles.soap"
                 connectorName="net.tirasa.connid.bundles.soap.WebServiceConnector"
                 version="${connid.soap.version}"
                 jsonConf='[{"schema":{"name":"endpoint","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["http://localhost:${cargo.servlet.port}/wssample/services/provisioning"]},{"schema":{"name":"servicename","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["net.tirasa.connid.bundles.soap.provisioning.interfaces.Provisioning"]}]'/>
-  <ConnInstance_capabilities ConnInstance_id="100" capability="CREATE"/>
-  <ConnInstance_capabilities ConnInstance_id="100" capability="UPDATE"/>
-  <ConnInstance_capabilities ConnInstance_id="100" capability="DELETE"/>
-  <ConnInstance_capabilities ConnInstance_id="100" capability="SEARCH"/>
+  <ConnInstance_capabilities connInstance_key="88a7a819-dab5-46b4-9b90-0b9769eabdb8" capability="CREATE"/>
+  <ConnInstance_capabilities connInstance_key="88a7a819-dab5-46b4-9b90-0b9769eabdb8" capability="UPDATE"/>
+  <ConnInstance_capabilities connInstance_key="88a7a819-dab5-46b4-9b90-0b9769eabdb8" capability="DELETE"/>
+  <ConnInstance_capabilities connInstance_key="88a7a819-dab5-46b4-9b90-0b9769eabdb8" capability="SEARCH"/>
 
-  <ConnInstance id="101" displayName="H2"
+  <ConnInstance key="5aa5b8be-7521-481a-9651-c557aea078c1" displayName="H2"
                 location="connid://${testconnectorserver.key}@localhost:${testconnectorserver.port}"
                 bundleName="net.tirasa.connid.bundles.db.table"
                 connectorName="net.tirasa.connid.bundles.db.table.DatabaseTableConnector"
                 version="${connid.database.version}"
                 jsonConf='[{"schema":{"name":"disabledStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"user","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["sa"]},{"schema":{"name":"keyColumn","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["id"]},{"schema":{"name":"retrievePassword","displayName":null,"helpMessage":null,"type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"cipherAlgorithm","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValu
 es":null},"overridable":false,"values":["SHA1"]},{"schema":{"name":"enabledStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"passwordColumn","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["password"]},{"schema":{"name":"jdbcDriver","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["org.h2.Driver"]},{"schema":{"name":"defaultStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"table","displayName":null,"helpMessage":null,"type":"java.lang.String","required
 ":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["test"]},{"schema":{"name":"password","displayName":null,"helpMessage":null,"type":"org.identityconnectors.common.security.GuardedString","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["sa"]},{"schema":{"name":"statusColumn","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["status"]},{"schema":{"name":"jdbcUrlTemplate","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["${testdb.url}"]}]'/>
-  <ConnInstance_capabilities ConnInstance_id="101" capability="AUTHENTICATE"/>
-  <ConnInstance_capabilities ConnInstance_id="101" capability="CREATE"/>
-  <ConnInstance_capabilities ConnInstance_id="101" capability="UPDATE"/>
-  <ConnInstance_capabilities ConnInstance_id="101" capability="DELETE"/>
-  <ConnInstance_capabilities ConnInstance_id="101" capability="SEARCH"/>
-  <ConnInstance_capabilities ConnInstance_id="101" capability="SYNC"/>
-
-  <ConnInstance id="102" displayName="ConnInstance102"
+  <ConnInstance_capabilities connInstance_key="5aa5b8be-7521-481a-9651-c557aea078c1" capability="AUTHENTICATE"/>
+  <ConnInstance_capabilities connInstance_key="5aa5b8be-7521-481a-9651-c557aea078c1" capability="CREATE"/>
+  <ConnInstance_capabilities connInstance_key="5aa5b8be-7521-481a-9651-c557aea078c1" capability="UPDATE"/>
+  <ConnInstance_capabilities connInstance_key="5aa5b8be-7521-481a-9651-c557aea078c1" capability="DELETE"/>
+  <ConnInstance_capabilities connInstance_key="5aa5b8be-7521-481a-9651-c557aea078c1" capability="SEARCH"/>
+  <ConnInstance_capabilities connInstance_key="5aa5b8be-7521-481a-9651-c557aea078c1" capability="SYNC"/>
+
+  <ConnInstance key="5ffbb4ac-a8c3-4b44-b699-11b398a1ba08" displayName="ConnInstance102"
                 location="${connid.location}"
                 bundleName="net.tirasa.connid.bundles.soap"
                 connectorName="net.tirasa.connid.bundles.soap.WebServiceConnector"
                 version="${connid.soap.version}"
                 connRequestTimeout="10"
                 jsonConf='[{"schema":{"name":"servicename","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["net.tirasa.connid.bundles.soap.provisioning.interfaces.Provisioning"]},{"schema":{"name":"endpoint","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":true,"values":["http://localhost:${cargo.servlet.port}/wssample/services/provisioning"]}]'/>
-  <ConnInstance_capabilities ConnInstance_id="102" capability="CREATE"/>
-  <ConnInstance_capabilities ConnInstance_id="102" capability="UPDATE"/>
-  <ConnInstance_capabilities ConnInstance_id="102" capability="DELETE"/>
-  <ConnInstance_capabilities ConnInstance_id="102" capability="SEARCH"/>
+  <ConnInstance_capabilities connInstance_key="5ffbb4ac-a8c3-4b44-b699-11b398a1ba08" capability="CREATE"/>
+  <ConnInstance_capabilities connInstance_key="5ffbb4ac-a8c3-4b44-b699-11b398a1ba08" capability="UPDATE"/>
+  <ConnInstance_capabilities connInstance_key="5ffbb4ac-a8c3-4b44-b699-11b398a1ba08" capability="DELETE"/>
+  <ConnInstance_capabilities connInstance_key="5ffbb4ac-a8c3-4b44-b699-11b398a1ba08" capability="SEARCH"/>
 
-  <ConnInstance id="103" displayName="ConnInstance103"
+  <ConnInstance key="fcf9f2b0-f7d6-42c9-84a6-61b28255a42b" displayName="ConnInstance103"
                 location="${connid.location}"
                 bundleName="net.tirasa.connid.bundles.soap"
                 connectorName="net.tirasa.connid.bundles.soap.WebServiceConnector"
                 version="${connid.soap.version}"
                 jsonConf='[{"schema":{"name":"endpoint","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["http://localhost:${cargo.servlet.port}/wssample/services/provisioning"]},{"schema":{"name":"servicename","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["net.tirasa.connid.bundles.soap.provisioning.interfaces.Provisioning"]}]'/>
 
-  <ConnInstance id="104" displayName="CSVDir"
+  <ConnInstance key="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" displayName="CSVDir"
                 location="${connid.location}"
                 bundleName="net.tirasa.connid.bundles.csvdir"
                 connectorName="net.tirasa.connid.bundles.csvdir.CSVDirConnector"
                 version="${connid.csvdir.version}"
                 jsonConf='[{"schema":{"name":"fields","displayName":"fields","helpMessage":"Column names separated by comma","type":"[Ljava.lang.String;","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["id","name","surname","email","password","theirgroup","membership","status","deleted"]},{"schema":{"name":"keyColumnNames","displayName":"Key column name","helpMessage":"Name of the column used to identify user uniquely","type":"[Ljava.lang.String;","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["name","surname"]},{"schema":{"name":"deleteColumnName","displayName":"Delete column name","helpMessage":"Name of the column used to specify users to be deleted","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["deleted"]},{"schema":{"name":"passwordColumnName","displayName":"Password column name","helpMessage":"Name
  of the column used to specify user password","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["password"]},{"schema":{"name":"keyseparator","displayName":"Key separator","helpMessage":"Character used to separate keys in a multi-key scenario","type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[","]},{"schema":{"name":"ignoreHeader","displayName":"Ignore header","helpMessage":"Specify it first line file must be ignored","type":"java.lang.Boolean","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[false]},{"schema":{"name":"fieldDelimiter","displayName":"fieldDelimiter","helpMessage":"fieldDelimiter","type":"char","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[","]},{"schema":{"name":"quotationRequired","displayName":"Value quotation requi
 red","helpMessage":"Specify if value quotation is required","type":"java.lang.Boolean","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[false]},{"schema":{"name":"statusColumn","displayName":"statusColumn","helpMessage":"Status column","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["status"]},{"schema":{"name":"sourcePath","displayName":"Source path","helpMessage":"Absolute path of a directory where are located CSV files to be processed","type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["${test.csvdir.path}"]},{"schema":{"name":"fileMask","displayName":"File mask","helpMessage":"Regular expression describing files to be processed","type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["test.csv"]}]'/>
-  <ConnInstance_capabilities ConnInstance_id="104" capability="CREATE"/>
-  <ConnInstance_capabilities ConnInstance_id="104" capability="UPDATE"/>
-  <ConnInstance_capabilities ConnInstance_id="104" capability="DELETE"/>
-  <ConnInstance_capabilities ConnInstance_id="104" capability="SEARCH"/>
-  <ConnInstance_capabilities ConnInstance_id="104" capability="SYNC"/>
+  <ConnInstance_capabilities connInstance_key="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" capability="CREATE"/>
+  <ConnInstance_capabilities connInstance_key="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" capability="UPDATE"/>
+  <ConnInstance_capabilities connInstance_key="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" capability="DELETE"/>
+  <ConnInstance_capabilities connInstance_key="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" capability="SEARCH"/>
+  <ConnInstance_capabilities connInstance_key="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" capability="SYNC"/>
     
-  <ConnInstance id="105" bundleName="net.tirasa.connid.bundles.ldap" displayName="ApacheDS"
+  <ConnInstance key="74141a3b-0762-4720-a4aa-fc3e374ef3ef" bundleName="net.tirasa.connid.bundles.ldap" displayName="ApacheDS"
                 location="${connid.location}"
                 connectorName="net.tirasa.connid.bundles.ldap.LdapConnector"
                 version="${connid.ldap.version}" 
                 jsonConf='[{"schema":{"name":"synchronizePasswords","displayName":"Enable Password Synchronization","helpMessage":"If true, the connector will synchronize passwords. The Password Capture Plugin needs to be installed for password synchronization to work.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"maintainLdapGroupMembership","displayName":"Maintain LDAP Group Membership","helpMessage":"When enabled and a user is renamed or deleted, update any LDAP groups to which the user belongs to reflect the new name. Otherwise, the LDAP resource must maintain referential integrity with respect to group membership.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"host","displayName":"Host","helpMessage":"The name or IP address of the host where the LDAP server is running.","type":"jav
 a.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["localhost"]},{"schema":{"name":"passwordHashAlgorithm","displayName":"Password Hash Algorithm","helpMessage":"Indicates the algorithm that the Identity system should use to hash the password. Currently supported values are SSHA, SHA, SSHA1, and SHA1. A blank value indicates that the system will not hash passwords. This will cause cleartext passwords to be stored in LDAP unless the LDAP server performs the hash (Netscape Directory Server and iPlanet Directory Server do).","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["SHA"]},{"schema":{"name":"port","displayName":"TCP Port","helpMessage":"TCP/IP port number used to communicate with the LDAP server.","type":"int","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[1389]},{"schema":{"name":"vlvSo
 rtAttribute","displayName":"VLV Sort Attribute","helpMessage":"Specify the sort attribute to use for VLV indexes on the resource.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"statusManagementClass","displayName":"Status management class ","helpMessage":"Class to be used to manage enabled/disabled status. If no class is specified then identity status management wont be possible.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["net.tirasa.connid.bundles.ldap.commons.AttributeStatusManagement"]},{"schema":{"name":"accountObjectClasses","displayName":"Account Object Classes","helpMessage":"The object class or classes that will be used when creating new user objects in the LDAP tree. When entering more than one object class, each entry should be on its own line; do not use commas or semi-colons to separate m
 ultiple object classes. Some object classes may require that you specify all object classes in the class hierarchy.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["inetOrgPerson"]},{"schema":{"name":"accountUserNameAttributes","displayName":"Account User Name Attributes","helpMessage":"Attribute or attributes which holds the account user name. They will be used when authenticating to find the LDAP entry for the user name to authenticate.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["uid"]},{"schema":{"name":"baseContextsToSynchronize","displayName":"Base Contexts to Synchronize","helpMessage":"One or more starting points in the LDAP tree that will be used to determine if a change should be synchronized. The base contexts attribute will be used to synchronize a change if this property is not set.","type":"[Ljava.lang.S
 tring;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["ou=people,o=isp","ou=groups,o=isp"]},{"schema":{"name":"accountSynchronizationFilter","displayName":"LDAP Filter for Accounts to Synchronize","helpMessage":"An optional LDAP filter for the objects to synchronize. Because the change log is for all objects, this filter updates only objects that match the specified filter. If you specify a filter, an object will be synchronized only if it matches the filter and includes a synchronized object class.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"removeLogEntryObjectClassFromFilter","displayName":"Remove Log Entry Object Class from Filter","helpMessage":"If this property is set (the default), the filter used to fetch change log entries does not contain the \"changeLogEntry\" object class, expecting that there are no entries of oth
 er object types in the change log.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"passwordDecryptionKey","displayName":"Password Decryption Key","helpMessage":"The key to decrypt passwords with when performing password synchronization.","type":"org.identityconnectors.common.security.GuardedByteArray","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"readSchema","displayName":"Read Schema","helpMessage":"If true, the connector will read the schema from the server. If false, the connector will provide a default schema based on the object classes in the configuration. This property must be true in order to use extended object classes.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"ssl","displayName":"SSL","helpMessage"
 :"Select the check box to connect to the LDAP server using SSL.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"passwordAttributeToSynchronize","displayName":"Password Attribute to Synchronize","helpMessage":"The name of the password attribute to synchronize when performing password synchronization.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"accountSearchFilter","displayName":"LDAP Filter for Retrieving Accounts","helpMessage":"An optional LDAP filter to control which accounts are returned from the LDAP resource. If no filter is specified, only accounts that include all specified object classes are returned.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["uid=*"]},{"schema":{"name":"passwordDecryptionIn
 itializationVector","displayName":"Password Decryption Initialization Vector","helpMessage":"The initialization vector to decrypt passwords with when performing password synchronization.","type":"org.identityconnectors.common.security.GuardedByteArray","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"groupMemberAttribute","displayName":"Group Member Attribute","helpMessage":"The name of the group attribute that will be updated with the distinguished name of the user when the user is added to the group.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"failover","displayName":"Failover Servers","helpMessage":"List all servers that should be used for failover in case the preferred server fails. If the preferred server fails, JNDI will connect to the next available server in the list. List all servers in the form of 
 \"ldap://ldap.example.com:389/\", which follows the standard LDAP v3 URLs described in RFC 2255. Only the host and port parts of the URL are relevant in this setting.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"modifiersNamesToFilterOut","displayName":"Filter Out Changes By","helpMessage":"The names (DNs) of directory administrators to filter from the changes. Changes with the attribute \"modifiersName\" that match entries in this list will be filtered out. The standard value is the administrator name used by this adapter, to prevent loops. Entries should be of the format \"cn=Directory Manager\".","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"groupNameAttributes","displayName":"Group Name Attributes","helpMessage":"Attribute or attributes which holds the group name.","type
 ":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["cn"]},{"schema":{"name":"uidAttribute","displayName":"Uid Attribute","helpMessage":"The name of the LDAP attribute which is mapped to the Uid attribute.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["cn"]},{"schema":{"name":"respectResourcePasswordPolicyChangeAfterReset","displayName":"Respect Resource Password Policy Change-After-Reset","helpMessage":"When this resource is specified in a Login Module (i.e., this resource is a pass-through authentication target) and the resource password policy is configured for change-after-reset, a user whose resource account password has been administratively reset will be required to change that password after successfully authenticating.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":fals
 e,"values":["false"]},{"schema":{"name":"filterWithOrInsteadOfAnd","displayName":"Filter with Or Instead of And","helpMessage":"Normally the the filter used to fetch change log entries is an and-based filter retrieving an interval of change entries. If this property is set, the filter will or together the required change numbers instead.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"principal","displayName":"Principal","helpMessage":"The distinguished name with which to authenticate to the LDAP server.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["uid=admin,ou=system"]},{"schema":{"name":"changeLogBlockSize","displayName":"Change Log Block Size","helpMessage":"The number of change log entries to fetch per query.","type":"int","required":true,"order":0,"confidential":false,"defaultValues":null},"overrida
 ble":false,"values":[100]},{"schema":{"name":"baseContexts","displayName":"Base Contexts","helpMessage":"One or more starting points in the LDAP tree that will be used when searching the tree. Searches are performed when discovering users from the LDAP server or when looking for the groups of which a user is a member.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["ou=people,o=isp","ou=groups,o=isp"]},{"schema":{"name":"passwordAttribute","displayName":"Password Attribute","helpMessage":"The name of the LDAP attribute which holds the password. When changing an user password, the new password is set to this attribute.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["userpassword"]},{"schema":{"name":"changeNumberAttribute","displayName":"Change Number Attribute","helpMessage":"The name of the change number attribute in the c
 hange log entry.","type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["changeNumber"]},{"schema":{"name":"objectClassesToSynchronize","displayName":"Object Classes to Synchronize","helpMessage":"The object classes to synchronize. The change log is for all objects; this filters updates to just the listed object classes. You should not list the superclasses of an object class unless you intend to synchronize objects with any of the superclass values. For example, if only \"inetOrgPerson\" objects sho

<TRUNCATED>

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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/conf/Conf.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/conf/Conf.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/conf/Conf.java
index 64c60d0..f17a1c2 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/conf/Conf.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/conf/Conf.java
@@ -20,10 +20,9 @@ package org.apache.syncope.core.persistence.api.entity.conf;
 
 import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.Any;
+import org.apache.syncope.core.persistence.api.entity.ProvidedKeyEntity;
 
-public interface Conf extends Any<CPlainAttr> {
-
-    void setKey(Long key);
+public interface Conf extends Any<CPlainAttr>, ProvidedKeyEntity {
 
     @Override
     boolean add(CPlainAttr attr);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/group/TypeExtension.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/group/TypeExtension.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/group/TypeExtension.java
index 450112f..effc2f5 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/group/TypeExtension.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/group/TypeExtension.java
@@ -23,7 +23,7 @@ import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 
-public interface TypeExtension extends Entity<Long> {
+public interface TypeExtension extends Entity {
 
     Group getGroup();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
index 7b5147e..cb16679 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
@@ -24,16 +24,14 @@ import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.syncope.common.lib.types.ConnectorCapability;
 import org.apache.syncope.common.lib.types.TraceLevel;
 import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy;
-import org.apache.syncope.core.persistence.api.entity.AnnotatedEntity;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.ConnInstance;
+import org.apache.syncope.core.persistence.api.entity.ProvidedKeyEntity;
 import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
 import org.apache.syncope.core.persistence.api.entity.policy.PullPolicy;
 import org.identityconnectors.framework.common.objects.ObjectClass;
 
-public interface ExternalResource extends AnnotatedEntity<String> {
-
-    void setKey(String key);
+public interface ExternalResource extends ProvidedKeyEntity {
 
     ConnInstance getConnector();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Mapping.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Mapping.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Mapping.java
index 02ac485..5c14f18 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Mapping.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Mapping.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.entity.resource;
 import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 
-public interface Mapping extends Entity<Long> {
+public interface Mapping extends Entity {
 
     Provision getProvision();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/MappingItem.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/MappingItem.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/MappingItem.java
index 9f515ed..abbf69c 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/MappingItem.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/MappingItem.java
@@ -23,7 +23,7 @@ import org.apache.syncope.common.lib.types.IntMappingType;
 import org.apache.syncope.common.lib.types.MappingPurpose;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 
-public interface MappingItem extends Entity<Long> {
+public interface MappingItem extends Entity {
 
     Mapping getMapping();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Provision.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Provision.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Provision.java
index 30cd970..0a89878 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Provision.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Provision.java
@@ -25,7 +25,7 @@ import org.apache.syncope.core.persistence.api.entity.Entity;
 import org.identityconnectors.framework.common.objects.ObjectClass;
 import org.identityconnectors.framework.common.objects.SyncToken;
 
-public interface Provision extends Entity<Long> {
+public interface Provision extends Entity {
 
     ExternalResource getResource();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/NotificationTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/NotificationTask.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/NotificationTask.java
index 92fb6d2..f7d83d1 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/NotificationTask.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/NotificationTask.java
@@ -29,9 +29,9 @@ public interface NotificationTask extends Task {
 
     void setNotification(Notification notification);
 
-    Long getAnyKey();
+    String getAnyKey();
 
-    void setAnyKey(Long anyKey);
+    void setAnyKey(String anyKey);
 
     AnyTypeKind getAnyTypeKind();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PropagationTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PropagationTask.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PropagationTask.java
index 842cf86..4014fce 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PropagationTask.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PropagationTask.java
@@ -48,9 +48,9 @@ public interface PropagationTask extends Task {
 
     void setOperation(ResourceOperation operation);
 
-    Long getAnyKey();
+    String getAnyKey();
 
-    void setAnyKey(Long anyKey);
+    void setAnyKey(String anyKey);
 
     AnyTypeKind getAnyTypeKind();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTaskAnyFilter.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTaskAnyFilter.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTaskAnyFilter.java
index 76d54c2..8a00d57 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTaskAnyFilter.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTaskAnyFilter.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.entity.task;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 
-public interface PushTaskAnyFilter extends Entity<Long> {
+public interface PushTaskAnyFilter extends Entity {
 
     PushTask getPushTask();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/Task.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/Task.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/Task.java
index 630daa9..708c2c8 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/Task.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/Task.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.entity.task;
 import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 
-public interface Task extends Entity<Long> {
+public interface Task extends Entity {
 
     boolean add(TaskExec exec);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/SecurityQuestion.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/SecurityQuestion.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/SecurityQuestion.java
index 4b49e76..c0a1f9e 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/SecurityQuestion.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/SecurityQuestion.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.persistence.api.entity.user;
 
 import org.apache.syncope.core.persistence.api.entity.Entity;
 
-public interface SecurityQuestion extends Entity<Long> {
+public interface SecurityQuestion extends Entity {
 
     String getContent();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/User.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/User.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/User.java
index d1b94e7..b7e14bf 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/User.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/User.java
@@ -107,9 +107,9 @@ public interface User extends Any<UPlainAttr> {
 
     boolean add(URelationship relationship);
 
-    URelationship getRelationship(RelationshipType relationshipType, Long anyObjectKey);
+    URelationship getRelationship(RelationshipType relationshipType, String anyObjectKey);
 
-    Collection<? extends URelationship> getRelationships(Long anyObjectKey);
+    Collection<? extends URelationship> getRelationships(String anyObjectKey);
 
     Collection<? extends URelationship> getRelationships(RelationshipType relationshipType);
 
@@ -117,7 +117,7 @@ public interface User extends Any<UPlainAttr> {
 
     boolean add(UMembership membership);
 
-    UMembership getMembership(Long groupKey);
+    UMembership getMembership(String groupKey);
 
     List<? extends UMembership> getMemberships();
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
index 79fe904..d5c7bcc 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
@@ -93,25 +93,25 @@ public class SearchCondVisitor extends AbstractSearchConditionVisitor<SearchBean
                     switch (specialAttrName) {
                         case TYPE:
                             AnyTypeCond typeCond = new AnyTypeCond();
-                            typeCond.setAnyTypeName(value);
+                            typeCond.setAnyTypeKey(value);
                             leaf = SearchCond.getLeafCond(typeCond);
                             break;
 
                         case RESOURCES:
                             ResourceCond resourceCond = new ResourceCond();
-                            resourceCond.setResourceName(value);
+                            resourceCond.setResourceKey(value);
                             leaf = SearchCond.getLeafCond(resourceCond);
                             break;
 
                         case GROUPS:
                             MembershipCond groupCond = new MembershipCond();
-                            groupCond.setGroupKey(Long.valueOf(value));
+                            groupCond.setGroupKey(value);
                             leaf = SearchCond.getLeafCond(groupCond);
                             break;
 
                         case RELATIONSHIPS:
                             RelationshipCond relationshipCond = new RelationshipCond();
-                            relationshipCond.setAnyObjectKey(Long.valueOf(value));
+                            relationshipCond.setAnyObjectKey(value);
                             leaf = SearchCond.getLeafCond(relationshipCond);
                             break;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/test/java/org/apache/syncope/core/persistence/api/search/SearchCondConverterTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/test/java/org/apache/syncope/core/persistence/api/search/SearchCondConverterTest.java b/core/persistence-api/src/test/java/org/apache/syncope/core/persistence/api/search/SearchCondConverterTest.java
index 05a8cdc..07c2d29 100644
--- a/core/persistence-api/src/test/java/org/apache/syncope/core/persistence/api/search/SearchCondConverterTest.java
+++ b/core/persistence-api/src/test/java/org/apache/syncope/core/persistence/api/search/SearchCondConverterTest.java
@@ -90,11 +90,12 @@ public class SearchCondConverterTest {
 
     @Test
     public void relationships() {
-        String fiqlExpression = new UserFiqlSearchConditionBuilder().inRelationships(1L).query();
-        assertEquals(SpecialAttr.RELATIONSHIPS + "==1", fiqlExpression);
+        String fiqlExpression = new UserFiqlSearchConditionBuilder().
+                inRelationships("ca20ffca-1305-442f-be9a-3723a0cd88ca").query();
+        assertEquals(SpecialAttr.RELATIONSHIPS + "==ca20ffca-1305-442f-be9a-3723a0cd88ca", fiqlExpression);
 
         RelationshipCond relationshipCond = new RelationshipCond();
-        relationshipCond.setAnyObjectKey(1L);
+        relationshipCond.setAnyObjectKey("ca20ffca-1305-442f-be9a-3723a0cd88ca");
         SearchCond simpleCond = SearchCond.getLeafCond(relationshipCond);
 
         assertEquals(simpleCond, SearchCondConverter.convert(fiqlExpression));
@@ -119,11 +120,12 @@ public class SearchCondConverterTest {
 
     @Test
     public void groups() {
-        String fiqlExpression = new UserFiqlSearchConditionBuilder().inGroups(1L).query();
-        assertEquals(SpecialAttr.GROUPS + "==1", fiqlExpression);
+        String fiqlExpression = new UserFiqlSearchConditionBuilder().
+                inGroups("e7ff94e8-19c9-4f0a-b8b7-28327edbf6ed").query();
+        assertEquals(SpecialAttr.GROUPS + "==e7ff94e8-19c9-4f0a-b8b7-28327edbf6ed", fiqlExpression);
 
         MembershipCond groupCond = new MembershipCond();
-        groupCond.setGroupKey(1L);
+        groupCond.setGroupKey("e7ff94e8-19c9-4f0a-b8b7-28327edbf6ed");
         SearchCond simpleCond = SearchCond.getLeafCond(groupCond);
 
         assertEquals(simpleCond, SearchCondConverter.convert(fiqlExpression));
@@ -147,7 +149,7 @@ public class SearchCondConverterTest {
         assertEquals(SpecialAttr.RESOURCES + "==resource-ldap", fiqlExpression);
 
         ResourceCond resCond = new ResourceCond();
-        resCond.setResourceName("resource-ldap");
+        resCond.setResourceKey("resource-ldap");
         SearchCond simpleCond = SearchCond.getLeafCond(resCond);
 
         assertEquals(simpleCond, SearchCondConverter.convert(fiqlExpression));
@@ -171,7 +173,7 @@ public class SearchCondConverterTest {
         assertEquals(SpecialAttr.TYPE + "==PRINTER", fiqlExpression);
 
         AnyTypeCond acond = new AnyTypeCond();
-        acond.setAnyTypeName("PRINTER");
+        acond.setAnyTypeKey("PRINTER");
         SearchCond simpleCond = SearchCond.getLeafCond(acond);
 
         assertEquals(simpleCond, SearchCondConverter.convert(fiqlExpression));

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/pom.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/pom.xml b/core/persistence-jpa/pom.xml
index 412be1c..a902aa7 100644
--- a/core/persistence-jpa/pom.xml
+++ b/core/persistence-jpa/pom.xml
@@ -55,6 +55,10 @@ under the License.
       <groupId>org.apache.openjpa</groupId>
       <artifactId>openjpa-persistence-jdbc</artifactId>
     </dependency>
+    <dependency>
+      <groupId>com.fasterxml.uuid</groupId>
+      <artifactId>java-uuid-generator</artifactId>
+    </dependency>
     
     <dependency>
       <groupId>org.apache.commons</groupId>
@@ -157,7 +161,7 @@ under the License.
           </dependency>
         </dependencies>
         <configuration>
-          <persistenceXmlFile>${project.basedir}/src/test/resources/META-INF/persistence-enhance.xml</persistenceXmlFile> 
+          <persistenceXmlFile>${project.basedir}/src/main/resources/persistence-enhance.xml</persistenceXmlFile> 
           <includes>org/apache/syncope/core/persistence/jpa/entity/**/*.class</includes>
           <connectionDriverName>org.springframework.jdbc.datasource.DriverManagerDataSource</connectionDriverName>
           <connectionProperties>

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
index 6f64a88..d09b765 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
@@ -63,7 +63,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
-public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Long> implements AnyDAO<A> {
+public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> implements AnyDAO<A> {
 
     @Autowired
     protected PlainSchemaDAO plainSchemaDAO;
@@ -91,7 +91,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
 
     @Transactional(readOnly = true)
     @Override
-    public A authFind(final Long key) {
+    public A authFind(final String key) {
         if (key == null) {
             throw new NotFoundException("Null key");
         }
@@ -110,7 +110,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
     @Transactional(readOnly = true)
     @Override
     @SuppressWarnings("unchecked")
-    public A find(final Long key) {
+    public A find(final String key) {
         return (A) entityManager().find(getAnyUtils().anyClass(), key);
     }
 
@@ -133,7 +133,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
 
     private Query findByAttrValueQuery(final String entityName) {
         return entityManager().createQuery("SELECT e FROM " + entityName + " e"
-                + " WHERE e.attribute.schema.name = :schemaName AND (e.stringValue IS NOT NULL"
+                + " WHERE e.attribute.schema.key = :schemaKey AND (e.stringValue IS NOT NULL"
                 + " AND e.stringValue = :stringValue)"
                 + " OR (e.booleanValue IS NOT NULL AND e.booleanValue = :booleanValue)"
                 + " OR (e.dateValue IS NOT NULL AND e.dateValue = :dateValue)"
@@ -143,10 +143,10 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
 
     @Override
     @SuppressWarnings("unchecked")
-    public List<A> findByAttrValue(final String schemaName, final PlainAttrValue attrValue) {
-        PlainSchema schema = plainSchemaDAO.find(schemaName);
+    public List<A> findByAttrValue(final String schemaKey, final PlainAttrValue attrValue) {
+        PlainSchema schema = plainSchemaDAO.find(schemaKey);
         if (schema == null) {
-            LOG.error("Invalid schema name '{}'", schemaName);
+            LOG.error("Invalid schema name '{}'", schemaKey);
             return Collections.<A>emptyList();
         }
 
@@ -154,7 +154,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
                 ? getAnyUtils().plainAttrUniqueValueClass().getName()
                 : getAnyUtils().plainAttrValueClass().getName();
         Query query = findByAttrValueQuery(entityName);
-        query.setParameter("schemaName", schemaName);
+        query.setParameter("schemaKey", schemaKey);
         query.setParameter("stringValue", attrValue.getStringValue());
         query.setParameter("booleanValue", attrValue.getBooleanValue() == null
                 ? null
@@ -179,18 +179,18 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
     }
 
     @Override
-    public A findByAttrUniqueValue(final String schemaName, final PlainAttrValue attrUniqueValue) {
-        PlainSchema schema = plainSchemaDAO.find(schemaName);
+    public A findByAttrUniqueValue(final String schemaKey, final PlainAttrValue attrUniqueValue) {
+        PlainSchema schema = plainSchemaDAO.find(schemaKey);
         if (schema == null) {
-            LOG.error("Invalid schema name '{}'", schemaName);
+            LOG.error("Invalid schema name '{}'", schemaKey);
             return null;
         }
         if (!schema.isUniqueConstraint()) {
-            LOG.error("This schema has not unique constraint: '{}'", schemaName);
+            LOG.error("This schema has not unique constraint: '{}'", schemaKey);
             return null;
         }
 
-        List<A> result = findByAttrValue(schemaName, attrUniqueValue);
+        List<A> result = findByAttrValue(schemaKey, attrUniqueValue);
         return result.isEmpty()
                 ? null
                 : result.iterator().next();
@@ -294,8 +294,8 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
                 // verify schema existence and get schema type
                 PlainSchema schema = plainSchemaDAO.find(identifiers.get(i));
                 if (schema == null) {
-                    LOG.error("Invalid schema name '{}'", identifiers.get(i));
-                    throw new IllegalArgumentException("Invalid schema name " + identifiers.get(i));
+                    LOG.error("Invalid schema key '{}'", identifiers.get(i));
+                    throw new IllegalArgumentException("Invalid schema key " + identifiers.get(i));
                 }
 
                 // clear builder
@@ -304,13 +304,13 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
                 bld.append("(");
 
                 // set schema name
-                bld.append("s.name = '").append(identifiers.get(i)).append("'");
+                bld.append("s.key = '").append(identifiers.get(i)).append("'");
 
                 bld.append(" AND ");
 
-                bld.append("s.name = a.schema_name").append(" AND ");
+                bld.append("s.key = a.schema_key").append(" AND ");
 
-                bld.append("a.id = v.attribute_id");
+                bld.append("a.key = v.attribute_key");
 
                 bld.append(" AND ");
 
@@ -346,10 +346,10 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
     }
 
     @Override
-    public List<A> findByDerAttrValue(final String schemaName, final String value) {
-        DerSchema schema = derSchemaDAO.find(schemaName);
+    public List<A> findByDerAttrValue(final String schemaKey, final String value) {
+        DerSchema schema = derSchemaDAO.find(schemaKey);
         if (schema == null) {
-            LOG.error("Invalid schema name '{}'", schemaName);
+            LOG.error("Invalid schema name '{}'", schemaKey);
             return Collections.<A>emptyList();
         }
 
@@ -360,10 +360,10 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
         for (String clause : getWhereClause(schema.getExpression(), value)) {
             if (querystring.length() > 0) {
                 subquery = true;
-                querystring.append(" AND a.owner_id IN ( ");
+                querystring.append(" AND a.owner_key IN ( ");
             }
 
-            querystring.append("SELECT a.owner_id ").
+            querystring.append("SELECT a.owner_key ").
                     append("FROM ").append(getAnyUtils().plainAttrClass().getSimpleName().substring(3)).append(" a, ").
                     append(getAnyUtils().plainAttrValueClass().getSimpleName().substring(3)).append(" v, ").
                     append(PlainSchema.class.getSimpleName()).append(" s ").
@@ -378,7 +378,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
 
         List<A> result = new ArrayList<>();
         for (Object anyKey : query.getResultList()) {
-            A any = find(Long.parseLong(anyKey.toString()));
+            A any = find(anyKey.toString());
             if (!result.contains(any)) {
                 result.add(any);
             }
@@ -405,7 +405,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
 
     private SearchCond getAllMatchingCond() {
         AnyCond idCond = new AnyCond(AttributeCond.Type.ISNOTNULL);
-        idCond.setSchema("id");
+        idCond.setSchema("key");
         return SearchCond.getLeafCond(idCond);
     }
 
@@ -464,7 +464,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         A any = find(key);
         if (any == null) {
             return;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractDAO.java
index acbde6e..5b16737 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractDAO.java
@@ -29,7 +29,7 @@ import org.springframework.beans.factory.annotation.Configurable;
 import org.springframework.orm.jpa.EntityManagerFactoryUtils;
 
 @Configurable
-public abstract class AbstractDAO<E extends Entity<KEY>, KEY> implements DAO<E, KEY> {
+public abstract class AbstractDAO<E extends Entity> implements DAO<E> {
 
     protected static final Logger LOG = LoggerFactory.getLogger(DAO.class);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
index a000511..37dcccf 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
@@ -184,8 +184,8 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
 
     @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
     @Override
-    public Collection<Long> findAllGroupKeys(final AnyObject anyObject) {
-        return CollectionUtils.collect(findAllGroups(anyObject), EntityUtils.<Long, Group>keyTransformer());
+    public Collection<String> findAllGroupKeys(final AnyObject anyObject) {
+        return CollectionUtils.collect(findAllGroups(anyObject), EntityUtils.<Group>keyTransformer());
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
@@ -204,7 +204,7 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
     @Override
     public Collection<String> findAllResourceNames(final AnyObject anyObject) {
         return CollectionUtils.collect(
-                findAllResources(anyObject), EntityUtils.<String, ExternalResource>keyTransformer());
+                findAllResources(anyObject), EntityUtils.<ExternalResource>keyTransformer());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
index 88c6cbf..9504360 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
@@ -72,9 +72,9 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ReflectionUtils;
 
 @Repository
-public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySearchDAO {
+public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO {
 
-    private static final String EMPTY_QUERY = "SELECT any_id FROM user_search_attr WHERE 1=2";
+    private static final String EMPTY_QUERY = "SELECT any_key FROM user_search_attr WHERE 1=2";
 
     @Autowired
     private RealmDAO realmDAO;
@@ -94,31 +94,35 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     @Autowired
     private AnyUtilsFactory anyUtilsFactory;
 
-    private String getAdminRealmsFilter(final Set<String> adminRealms, final SearchSupport svs) {
-        Set<Long> realmKeys = new HashSet<>();
+    private String getAdminRealmsFilter(
+            final Set<String> adminRealms,
+            final SearchSupport svs,
+            final List<Object> parameters) {
+
+        Set<String> realmKeys = new HashSet<>();
         for (String realmPath : RealmUtils.normalize(adminRealms)) {
-            Realm realm = realmDAO.find(realmPath);
+            Realm realm = realmDAO.findByFullPath(realmPath);
             if (realm == null) {
                 LOG.warn("Ignoring invalid realm {}", realmPath);
             } else {
                 CollectionUtils.collect(
-                        realmDAO.findDescendants(realm), EntityUtils.<Long, Realm>keyTransformer(), realmKeys);
+                        realmDAO.findDescendants(realm), EntityUtils.<Realm>keyTransformer(), realmKeys);
             }
         }
 
         StringBuilder adminRealmFilter = new StringBuilder().
-                append("SELECT any_id FROM ").append(svs.field().name).
-                append(" WHERE realm_id IN (SELECT id AS realm_id FROM Realm");
+                append("SELECT any_key FROM ").append(svs.field().name).
+                append(" WHERE realm_key IN (SELECT key AS realm_key FROM Realm");
 
         boolean firstRealm = true;
-        for (Long realmKey : realmKeys) {
+        for (String realmKey : realmKeys) {
             if (firstRealm) {
                 adminRealmFilter.append(" WHERE");
                 firstRealm = false;
             } else {
                 adminRealmFilter.append(" OR");
             }
-            adminRealmFilter.append(" id = ").append(realmKey);
+            adminRealmFilter.append(" key=?").append(setParameter(parameters, realmKey));
         }
 
         adminRealmFilter.append(')');
@@ -135,13 +139,13 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
         StringBuilder queryString = getQuery(searchCondition, parameters, svs);
 
         // 2. take into account administrative realms
-        queryString.insert(0, "SELECT u.any_id FROM (");
-        queryString.append(") u WHERE any_id IN (");
-        queryString.append(getAdminRealmsFilter(adminRealms, svs)).append(')');
+        queryString.insert(0, "SELECT u.any_key FROM (");
+        queryString.append(") u WHERE any_key IN (");
+        queryString.append(getAdminRealmsFilter(adminRealms, svs, parameters)).append(')');
 
         // 3. prepare the COUNT query
-        queryString.insert(0, "SELECT COUNT(any_id) FROM (");
-        queryString.append(") count_any_id");
+        queryString.insert(0, "SELECT COUNT(any_key) FROM (");
+        queryString.append(") count_any_key");
 
         Query countQuery = entityManager().createNativeQuery(queryString.toString());
         fillWithParameters(countQuery, parameters);
@@ -209,8 +213,8 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
             matches = false;
         } else {
             // 2. take into account the passed user
-            queryString.insert(0, "SELECT u.any_id FROM (");
-            queryString.append(") u WHERE any_id=?").append(setParameter(parameters, any.getKey()));
+            queryString.insert(0, "SELECT u.any_key FROM (");
+            queryString.append(") u WHERE any_key=?").append(setParameter(parameters, any.getKey()));
 
             // 3. prepare the search query
             Query query = entityManager().createNativeQuery(queryString.toString());
@@ -250,7 +254,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     }
 
     private StringBuilder buildSelect(final OrderBySupport orderBySupport) {
-        final StringBuilder select = new StringBuilder("SELECT u.any_id");
+        final StringBuilder select = new StringBuilder("SELECT u.any_key");
 
         for (OrderBySupport.Item obs : orderBySupport.items) {
             select.append(',').append(obs.select);
@@ -275,7 +279,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
         }
         where.append(" WHERE ");
         for (SearchSupport.SearchView searchView : orderBySupport.views) {
-            where.append("u.any_id=").append(searchView.alias).append(".any_id AND ");
+            where.append("u.any_key=").append(searchView.alias).append(".any_key AND ");
         }
 
         for (OrderBySupport.Item obs : orderBySupport.items) {
@@ -283,7 +287,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
                 where.append(obs.where).append(" AND ");
             }
         }
-        where.append("u.any_id IN (");
+        where.append("u.any_key IN (");
 
         return where;
     }
@@ -312,8 +316,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
         for (OrderByClause clause : orderByClauses) {
             OrderBySupport.Item obs = new OrderBySupport.Item();
 
-            // Manage difference among external key attribute and internal JPA @Id
-            String fieldName = "key".equals(clause.getField()) ? "id" : clause.getField();
+            String fieldName = clause.getField();
 
             Field anyField = ReflectionUtils.findField(attrUtils.anyClass(), fieldName);
             if (anyField == null) {
@@ -327,7 +330,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
                                 append(" AS ").append(fieldName).toString();
                         obs.where = new StringBuilder().
                                 append(svs.uniqueAttr().alias).
-                                append(".schema_name='").append(fieldName).append("'").toString();
+                                append(".schema_key='").append(fieldName).append("'").toString();
                         obs.orderBy = fieldName + " " + clause.getDirection().name();
                     } else {
                         orderBySupport.views.add(svs.attr());
@@ -337,7 +340,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
                                 append(" AS ").append(fieldName).toString();
                         obs.where = new StringBuilder().
                                 append(svs.attr().alias).
-                                append(".schema_name='").append(fieldName).append("'").toString();
+                                append(".schema_key='").append(fieldName).append("'").toString();
                         obs.orderBy = fieldName + " " + clause.getDirection().name();
                     }
                 }
@@ -380,7 +383,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
             queryString.append(')').append(buildWhere(orderBySupport, typeKind));
         }
         queryString.
-                append(getAdminRealmsFilter(adminRealms, svs)).append(')').
+                append(getAdminRealmsFilter(adminRealms, svs, parameters)).append(')').
                 append(buildOrderBy(orderBySupport));
 
         // 3. prepare the search query
@@ -400,9 +403,9 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
         List<T> result = new ArrayList<>();
 
         for (Object anyKey : query.getResultList()) {
-            long actualKey = anyKey instanceof Object[]
-                    ? ((Number) ((Object[]) anyKey)[0]).longValue()
-                    : ((Number) anyKey).longValue();
+            String actualKey = anyKey instanceof Object[]
+                    ? (String) ((Object[]) anyKey)[0]
+                    : ((String) anyKey);
 
             T any = typeKind == AnyTypeKind.USER
                     ? (T) userDAO.find(actualKey)
@@ -410,7 +413,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
                             ? (T) groupDAO.find(actualKey)
                             : (T) anyObjectDAO.find(actualKey);
             if (any == null) {
-                LOG.error("Could not find {} with id {}, even though returned by the native query",
+                LOG.error("Could not find {} with key {}, even though returned by the native query",
                         typeKind, actualKey);
             } else if (!result.contains(any)) {
                 result.add(any);
@@ -464,14 +467,14 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
 
             case AND:
                 query.append(getQuery(nodeCond.getLeftNodeCond(), parameters, svs)).
-                        append(" AND any_id IN ( ").
+                        append(" AND any_key IN ( ").
                         append(getQuery(nodeCond.getRightNodeCond(), parameters, svs)).
                         append(")");
                 break;
 
             case OR:
                 query.append(getQuery(nodeCond.getLeftNodeCond(), parameters, svs)).
-                        append(" OR any_id IN ( ").
+                        append(" OR any_key IN ( ").
                         append(getQuery(nodeCond.getRightNodeCond(), parameters, svs)).
                         append(")");
                 break;
@@ -485,8 +488,8 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     private String getQuery(final AnyTypeCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
-                append(svs.field().name).append(" WHERE type_name");
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
+                append(svs.field().name).append(" WHERE type_key");
 
         if (not) {
             query.append("<>");
@@ -494,7 +497,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
             query.append('=');
         }
 
-        query.append('?').append(setParameter(parameters, cond.getAnyTypeName()));
+        query.append('?').append(setParameter(parameters, cond.getAnyTypeKey()));
 
         return query.toString();
     }
@@ -502,19 +505,19 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     private String getQuery(final RelationshipTypeCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         if (not) {
-            query.append("any_id NOT IN (");
+            query.append("any_key NOT IN (");
         } else {
-            query.append("any_id IN (");
+            query.append("any_key IN (");
         }
 
-        query.append("SELECT any_id ").append("FROM ").
+        query.append("SELECT any_key ").append("FROM ").
                 append(svs.relationship().name).
                 append(" WHERE type=?").append(setParameter(parameters, cond.getRelationshipTypeKey())).
-                append(" UNION SELECT right_any_id AS any_id FROM ").
+                append(" UNION SELECT right_any_key AS any_key FROM ").
                 append(svs.relationship().name).
                 append(" WHERE type=?").append(setParameter(parameters, cond.getRelationshipTypeKey())).
                 append(')');
@@ -525,18 +528,18 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     private String getQuery(final RelationshipCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         if (not) {
-            query.append("any_id NOT IN (");
+            query.append("any_key NOT IN (");
         } else {
-            query.append("any_id IN (");
+            query.append("any_key IN (");
         }
 
-        query.append("SELECT DISTINCT any_id ").append("FROM ").
+        query.append("SELECT DISTINCT any_key ").append("FROM ").
                 append(svs.relationship().name).append(" WHERE ").
-                append("right_any_id=?").append(setParameter(parameters, cond.getAnyObjectKey())).
+                append("right_any_key=?").append(setParameter(parameters, cond.getAnyObjectKey())).
                 append(')');
 
         return query.toString();
@@ -545,29 +548,29 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     private String getQuery(final MembershipCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         if (not) {
-            query.append("any_id NOT IN (");
+            query.append("any_key NOT IN (");
         } else {
-            query.append("any_id IN (");
+            query.append("any_key IN (");
         }
 
-        query.append("SELECT DISTINCT any_id ").append("FROM ").
+        query.append("SELECT DISTINCT any_key ").append("FROM ").
                 append(svs.membership().name).append(" WHERE ").
-                append("group_id=?").append(setParameter(parameters, cond.getGroupKey())).
+                append("group_key=?").append(setParameter(parameters, cond.getGroupKey())).
                 append(')');
 
         if (not) {
-            query.append("AND any_id NOT IN (");
+            query.append("AND any_key NOT IN (");
         } else {
-            query.append("OR any_id IN (");
+            query.append("OR any_key IN (");
         }
 
-        query.append("SELECT DISTINCT any_id ").append("FROM ").
+        query.append("SELECT DISTINCT any_key ").append("FROM ").
                 append(svs.dyngroupmembership().name).append(" WHERE ").
-                append("group_id=?").append(setParameter(parameters, cond.getGroupKey())).
+                append("group_key=?").append(setParameter(parameters, cond.getGroupKey())).
                 append(')');
 
         return query.toString();
@@ -576,29 +579,29 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     private String getQuery(final RoleCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         if (not) {
-            query.append("any_id NOT IN (");
+            query.append("any_key NOT IN (");
         } else {
-            query.append("any_id IN (");
+            query.append("any_key IN (");
         }
 
-        query.append("SELECT DISTINCT any_id ").append("FROM ").
+        query.append("SELECT DISTINCT any_key ").append("FROM ").
                 append(svs.role().name).append(" WHERE ").
-                append("role_name=?").append(setParameter(parameters, cond.getRoleKey())).
+                append("role_key=?").append(setParameter(parameters, cond.getRoleKey())).
                 append(')');
 
         if (not) {
-            query.append("AND any_id NOT IN (");
+            query.append("AND any_key NOT IN (");
         } else {
-            query.append("OR any_id IN (");
+            query.append("OR any_key IN (");
         }
 
-        query.append("SELECT DISTINCT any_id ").append("FROM ").
+        query.append("SELECT DISTINCT any_key ").append("FROM ").
                 append(svs.dynrolemembership().name).append(" WHERE ").
-                append("role_name=?").append(setParameter(parameters, cond.getRoleKey())).
+                append("role_key=?").append(setParameter(parameters, cond.getRoleKey())).
                 append(')');
 
         return query.toString();
@@ -607,25 +610,25 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     private String getQuery(final ResourceCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         if (not) {
-            query.append("any_id NOT IN (");
+            query.append("any_key NOT IN (");
         } else {
-            query.append("any_id IN (");
+            query.append("any_key IN (");
         }
 
-        query.append("SELECT DISTINCT any_id FROM ").
+        query.append("SELECT DISTINCT any_key FROM ").
                 append(svs.resource().name).
-                append(" WHERE resource_name=?").
-                append(setParameter(parameters, cond.getResourceName()));
+                append(" WHERE resource_key=?").
+                append(setParameter(parameters, cond.getResourceKey()));
 
         if (svs.anyTypeKind() == AnyTypeKind.USER) {
-            query.append(" UNION SELECT DISTINCT any_id FROM ").
+            query.append(" UNION SELECT DISTINCT any_key FROM ").
                     append(svs.groupResource().name).
-                    append(" WHERE resource_name=?").
-                    append(setParameter(parameters, cond.getResourceName()));
+                    append(" WHERE resource_key=?").
+                    append(setParameter(parameters, cond.getResourceKey()));
         }
 
         query.append(')');
@@ -634,21 +637,21 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     }
 
     private String getQuery(final AssignableCond cond, final List<Object> parameters, final SearchSupport svs) {
-        Realm realm = realmDAO.find(cond.getRealmFullPath());
+        Realm realm = realmDAO.findByFullPath(cond.getRealmFullPath());
         if (realm == null) {
             return EMPTY_QUERY;
         }
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
                 append(svs.field().name).append(" WHERE (");
         if (cond.isFromGroup()) {
             for (Realm current = realm; current.getParent() != null; current = current.getParent()) {
-                query.append("realm_id=?").append(setParameter(parameters, current.getKey())).append(" OR ");
+                query.append("realm_key=?").append(setParameter(parameters, current.getKey())).append(" OR ");
             }
-            query.append("realm_id=?").append(setParameter(parameters, realmDAO.getRoot().getKey()));
+            query.append("realm_key=?").append(setParameter(parameters, realmDAO.getRoot().getKey()));
         } else {
             for (Realm current : realmDAO.findDescendants(realm)) {
-                query.append("realm_id=?").append(setParameter(parameters, current.getKey())).append(" OR ");
+                query.append("realm_key=?").append(setParameter(parameters, current.getKey())).append(" OR ");
             }
             query.setLength(query.length() - 4);
         }
@@ -772,18 +775,18 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
             return EMPTY_QUERY;
         }
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ");
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ");
         switch (cond.getType()) {
             case ISNOTNULL:
                 query.append(svs.field().name).
-                        append(" WHERE any_id NOT IN (SELECT any_id FROM ").
+                        append(" WHERE any_key NOT IN (SELECT any_key FROM ").
                         append(svs.nullAttr().name).
-                        append(" WHERE schema_name='").append(schema.getKey()).append("')");
+                        append(" WHERE schema_key='").append(schema.getKey()).append("')");
                 break;
 
             case ISNULL:
                 query.append(svs.nullAttr().name).
-                        append(" WHERE schema_name='").append(schema.getKey()).append("'");
+                        append(" WHERE schema_key='").append(schema.getKey()).append("'");
                 break;
 
             default:
@@ -792,7 +795,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
                 } else {
                     query.append(svs.attr().name);
                 }
-                query.append(" WHERE schema_name='").append(schema.getKey());
+                query.append(" WHERE schema_key='").append(schema.getKey());
                 fillAttributeQuery(query, attrValue, schema, cond, not, parameters, svs);
         }
 
@@ -805,11 +808,6 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
 
         AnyUtils attrUtils = anyUtilsFactory.getInstance(svs.anyTypeKind());
 
-        // Keeps track of difference between entity's getKey() and JPA @Id fields
-        if ("key".equals(cond.getSchema())) {
-            cond.setSchema("id");
-        }
-
         Field anyField = ReflectionUtils.findField(attrUtils.anyClass(), cond.getSchema());
         if (anyField == null) {
             LOG.warn("Ignoring invalid schema '{}'", cond.getSchema());
@@ -851,11 +849,11 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
 
             if (relMethod != null) {
                 if (Long.class.isAssignableFrom(relMethod.getReturnType())) {
-                    cond.setSchema(cond.getSchema() + "_id");
+                    cond.setSchema(cond.getSchema() + "_key");
                     schema.setType(AttrSchemaType.Long);
                 }
                 if (String.class.isAssignableFrom(relMethod.getReturnType())) {
-                    cond.setSchema(cond.getSchema() + "_name");
+                    cond.setSchema(cond.getSchema() + "_key");
                     schema.setType(AttrSchemaType.String);
                 }
             }
@@ -874,7 +872,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
             }
         }
 
-        final StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
+        final StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         fillAttributeQuery(query, attrValue, schema, cond, not, parameters, svs);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
index ee301f5..695dfa7 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
@@ -40,7 +40,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAAnyTypeClassDAO extends AbstractDAO<AnyTypeClass, String> implements AnyTypeClassDAO {
+public class JPAAnyTypeClassDAO extends AbstractDAO<AnyTypeClass> implements AnyTypeClassDAO {
 
     @Autowired
     private AnyTypeDAO anyTypeDAO;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeDAO.java
index a980209..477b655 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeDAO.java
@@ -29,7 +29,7 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPAAnyTypeDAO extends AbstractDAO<AnyType, String> implements AnyTypeDAO {
+public class JPAAnyTypeDAO extends AbstractDAO<AnyType> implements AnyTypeDAO {
 
     @Transactional(readOnly = true)
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
index 95db1bf..07e18e2 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
@@ -33,7 +33,9 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPAConfDAO extends AbstractDAO<Conf, Long> implements ConfDAO {
+public class JPAConfDAO extends AbstractDAO<Conf> implements ConfDAO {
+
+    private static final String KEY = "cd64d66f-6fff-4008-b966-a06b1cc1436d";
 
     @Autowired
     private PlainSchemaDAO schemaDAO;
@@ -43,10 +45,10 @@ public class JPAConfDAO extends AbstractDAO<Conf, Long> implements ConfDAO {
 
     @Override
     public Conf get() {
-        Conf instance = entityManager().find(JPAConf.class, 1L);
+        Conf instance = entityManager().find(JPAConf.class, KEY);
         if (instance == null) {
             instance = new JPAConf();
-            instance.setKey(1L);
+            instance.setKey(KEY);
 
             instance = entityManager().merge(instance);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java
index de2be18..91cf1dd 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java
@@ -34,7 +34,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAConnInstanceDAO extends AbstractDAO<ConnInstance, Long> implements ConnInstanceDAO {
+public class JPAConnInstanceDAO extends AbstractDAO<ConnInstance> implements ConnInstanceDAO {
 
     @Autowired
     private ExternalResourceDAO resourceDAO;
@@ -43,7 +43,7 @@ public class JPAConnInstanceDAO extends AbstractDAO<ConnInstance, Long> implemen
     private ConnectorRegistry connRegistry;
 
     @Override
-    public ConnInstance find(final Long key) {
+    public ConnInstance find(final String key) {
         return entityManager().find(JPAConnInstance.class, key);
     }
 
@@ -70,7 +70,7 @@ public class JPAConnInstanceDAO extends AbstractDAO<ConnInstance, Long> implemen
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         ConnInstance connInstance = find(key);
         if (connInstance == null) {
             return;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java
index a0e5479..f8add11 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java
@@ -33,7 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPADerSchemaDAO extends AbstractDAO<DerSchema, String> implements DerSchemaDAO {
+public class JPADerSchemaDAO extends AbstractDAO<DerSchema> implements DerSchemaDAO {
 
     @Autowired
     private ExternalResourceDAO resourceDAO;
@@ -49,7 +49,7 @@ public class JPADerSchemaDAO extends AbstractDAO<DerSchema, String> implements D
                 append(JPADerSchema.class.getSimpleName()).
                 append(" e WHERE ");
         for (AnyTypeClass anyTypeClass : anyTypeClasses) {
-            queryString.append("e.anyTypeClass.name='").append(anyTypeClass.getKey()).append("' OR ");
+            queryString.append("e.anyTypeClass.key='").append(anyTypeClass.getKey()).append("' OR ");
         }
 
         TypedQuery<DerSchema> query = entityManager().createQuery(

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADomainDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADomainDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADomainDAO.java
index eeee97c..ec026ff 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADomainDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADomainDAO.java
@@ -27,7 +27,7 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPADomainDAO extends AbstractDAO<Domain, String> implements DomainDAO {
+public class JPADomainDAO extends AbstractDAO<Domain> implements DomainDAO {
 
     @Transactional(readOnly = true)
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
index 1f08938..1c56720 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
@@ -55,7 +55,7 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource, String> implements ExternalResourceDAO {
+public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource> implements ExternalResourceDAO {
 
     @Autowired
     private TaskDAO taskDAO;
@@ -91,7 +91,7 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource, String
     }
 
     @Override
-    public Provision findProvision(final Long key) {
+    public Provision findProvision(final String key) {
         return entityManager().find(JPAProvision.class, key);
     }
 
@@ -176,11 +176,11 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource, String
         query.setParameter("intAttrName", intAttrName);
         query.setParameter("intMappingType", intMappingType);
 
-        Set<Long> itemKeys = new HashSet<>();
+        Set<String> itemKeys = new HashSet<>();
         for (MappingItem item : query.getResultList()) {
             itemKeys.add(item.getKey());
         }
-        for (Long itemKey : itemKeys) {
+        for (String itemKey : itemKeys) {
             MappingItem item = entityManager().find(JPAMappingItem.class, itemKey);
             if (item != null) {
                 item.getMapping().getItems().remove(item);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
index 990962a..3ec6d5a 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
@@ -43,6 +43,7 @@ import org.apache.syncope.core.persistence.api.search.SearchCondConverter;
 import org.apache.syncope.core.spring.security.AuthContextUtils;
 import org.apache.syncope.core.spring.security.DelegatedAdministrationException;
 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
+import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.search.AssignableCond;
 import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
 import org.apache.syncope.core.persistence.api.entity.Any;
@@ -115,7 +116,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
     }
 
     @Override
-    public Group find(final String name) {
+    public Group findByName(final String name) {
         TypedQuery<Group> query = entityManager().createQuery(
                 "SELECT e FROM " + JPAGroup.class.getSimpleName() + " e WHERE e.name = :name", Group.class);
         query.setParameter("name", name);
@@ -130,9 +131,25 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
         return result;
     }
 
+    @Override
+    public Group authFindByName(final String name) {
+        if (name == null) {
+            throw new NotFoundException("Null name");
+        }
+
+        Group group = findByName(name);
+        if (group == null) {
+            throw new NotFoundException("Group " + name);
+        }
+
+        securityChecks(group);
+
+        return group;
+    }
+
     @Transactional(readOnly = true)
     @Override
-    public List<Group> findOwnedByUser(final Long userKey) {
+    public List<Group> findOwnedByUser(final String userKey) {
         User owner = userDAO.find(userKey);
         if (owner == null) {
             return Collections.<Group>emptyList();
@@ -140,8 +157,8 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
 
         StringBuilder queryString = new StringBuilder("SELECT e FROM ").append(JPAGroup.class.getSimpleName()).
                 append(" e WHERE e.userOwner=:owner ");
-        for (Long groupKey : userDAO.findAllGroupKeys(owner)) {
-            queryString.append("OR e.groupOwner.id=").append(groupKey).append(' ');
+        for (String groupKey : userDAO.findAllGroupKeys(owner)) {
+            queryString.append("OR e.groupOwner.key='").append(groupKey).append("' ");
         }
 
         TypedQuery<Group> query = entityManager().createQuery(queryString.toString(), Group.class);
@@ -152,8 +169,8 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
 
     @Transactional(readOnly = true)
     @Override
-    public List<Group> findOwnedByGroup(final Long groupId) {
-        Group owner = find(groupId);
+    public List<Group> findOwnedByGroup(final String groupKey) {
+        Group owner = find(groupKey);
         if (owner == null) {
             return Collections.<Group>emptyList();
         }
@@ -241,7 +258,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
     }
 
     private void populateTransitiveResources(
-            final Group group, final Any<?> any, final Map<Long, PropagationByResource> result) {
+            final Group group, final Any<?> any, final Map<String, PropagationByResource> result) {
 
         PropagationByResource propByRes = new PropagationByResource();
         for (ExternalResource resource : group.getResources()) {
@@ -257,10 +274,10 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
 
     @Transactional(readOnly = true)
     @Override
-    public Map<Long, PropagationByResource> findAnyObjectsWithTransitiveResources(final Long groupKey) {
+    public Map<String, PropagationByResource> findAnyObjectsWithTransitiveResources(final String groupKey) {
         Group group = authFind(groupKey);
 
-        Map<Long, PropagationByResource> result = new HashMap<>();
+        Map<String, PropagationByResource> result = new HashMap<>();
 
         for (AMembership membership : findAMemberships(group)) {
             populateTransitiveResources(group, membership.getLeftEnd(), result);
@@ -271,10 +288,10 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
 
     @Transactional(readOnly = true)
     @Override
-    public Map<Long, PropagationByResource> findUsersWithTransitiveResources(final Long groupKey) {
+    public Map<String, PropagationByResource> findUsersWithTransitiveResources(final String groupKey) {
         Group group = authFind(groupKey);
 
-        Map<Long, PropagationByResource> result = new HashMap<>();
+        Map<String, PropagationByResource> result = new HashMap<>();
 
         for (UMembership membership : findUMemberships(group)) {
             populateTransitiveResources(group, membership.getLeftEnd(), result);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPALoggerDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPALoggerDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPALoggerDAO.java
index 9189e2a..6e4f414 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPALoggerDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPALoggerDAO.java
@@ -28,7 +28,7 @@ import org.apache.syncope.core.persistence.jpa.entity.JPALogger;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPALoggerDAO extends AbstractDAO<Logger, String> implements LoggerDAO {
+public class JPALoggerDAO extends AbstractDAO<Logger> implements LoggerDAO {
 
     @Override
     public Logger find(final String key) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAMailTemplateDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAMailTemplateDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAMailTemplateDAO.java
index 8b31fcf..428e4e8 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAMailTemplateDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAMailTemplateDAO.java
@@ -26,7 +26,7 @@ import org.apache.syncope.core.persistence.jpa.entity.JPAMailTemplate;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAMailTemplateDAO extends AbstractDAO<MailTemplate, String> implements MailTemplateDAO {
+public class JPAMailTemplateDAO extends AbstractDAO<MailTemplate> implements MailTemplateDAO {
 
     @Override
     public MailTemplate find(final String key) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPANotificationDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPANotificationDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPANotificationDAO.java
index fa4567e..f9cf72e 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPANotificationDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPANotificationDAO.java
@@ -36,14 +36,14 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPANotificationDAO extends AbstractDAO<Notification, Long> implements NotificationDAO {
+public class JPANotificationDAO extends AbstractDAO<Notification> implements NotificationDAO {
 
     @Autowired
     private TaskDAO taskDAO;
 
     @Transactional(readOnly = true)
     @Override
-    public Notification find(final Long key) {
+    public Notification find(final String key) {
         return entityManager().find(JPANotification.class, key);
     }
 
@@ -71,7 +71,7 @@ public class JPANotificationDAO extends AbstractDAO<Notification, Long> implemen
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         Notification notification = find(key);
         if (notification == null) {
             return;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrDAO.java
index 0d17176..3e8a38c 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrDAO.java
@@ -33,7 +33,7 @@ import org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttr;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAPlainAttrDAO extends AbstractDAO<PlainAttr<?>, Long> implements PlainAttrDAO {
+public class JPAPlainAttrDAO extends AbstractDAO<PlainAttr<?>> implements PlainAttrDAO {
 
     public <T extends PlainAttr<?>> Class<? extends AbstractPlainAttr<?>> getEntityReference(
             final Class<T> reference) {
@@ -50,12 +50,12 @@ public class JPAPlainAttrDAO extends AbstractDAO<PlainAttr<?>, Long> implements
     }
 
     @Override
-    public <T extends PlainAttr<?>> T find(final Long key, final Class<T> reference) {
+    public <T extends PlainAttr<?>> T find(final String key, final Class<T> reference) {
         return reference.cast(entityManager().find(getEntityReference(reference), key));
     }
 
     @Override
-    public <T extends PlainAttr<?>> void delete(final Long key, final Class<T> reference) {
+    public <T extends PlainAttr<?>> void delete(final String key, final Class<T> reference) {
         T attribute = find(key, reference);
         if (attribute == null) {
             return;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrValueDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrValueDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrValueDAO.java
index 62a25de..8e10858 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrValueDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrValueDAO.java
@@ -43,7 +43,7 @@ import org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttrValue;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAPlainAttrValueDAO extends AbstractDAO<PlainAttrValue, Long> implements PlainAttrValueDAO {
+public class JPAPlainAttrValueDAO extends AbstractDAO<PlainAttrValue> implements PlainAttrValueDAO {
 
     @SuppressWarnings("unchecked")
     private <T extends PlainAttrValue> Class<? extends AbstractPlainAttrValue> getEntityReference(
@@ -71,7 +71,7 @@ public class JPAPlainAttrValueDAO extends AbstractDAO<PlainAttrValue, Long> impl
     }
 
     @Override
-    public <T extends PlainAttrValue> T find(final Long key, final Class<T> reference) {
+    public <T extends PlainAttrValue> T find(final String key, final Class<T> reference) {
         return reference.cast(entityManager().find(getEntityReference(reference), key));
     }
 
@@ -88,8 +88,8 @@ public class JPAPlainAttrValueDAO extends AbstractDAO<PlainAttrValue, Long> impl
     }
 
     @Override
-    public <T extends PlainAttrValue> void delete(final Long id, final Class<T> reference) {
-        T attributeValue = find(id, reference);
+    public <T extends PlainAttrValue> void delete(final String key, final Class<T> reference) {
+        T attributeValue = find(key, reference);
         if (attributeValue == null) {
             return;
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java
index 8e9edcc..5b79d53 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java
@@ -36,7 +36,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAPlainSchemaDAO extends AbstractDAO<PlainSchema, String> implements PlainSchemaDAO {
+public class JPAPlainSchemaDAO extends AbstractDAO<PlainSchema> implements PlainSchemaDAO {
 
     @Autowired
     private PlainAttrDAO plainAttrDAO;
@@ -55,7 +55,7 @@ public class JPAPlainSchemaDAO extends AbstractDAO<PlainSchema, String> implemen
                 append(JPAPlainSchema.class.getSimpleName()).
                 append(" e WHERE ");
         for (AnyTypeClass anyTypeClass : anyTypeClasses) {
-            queryString.append("e.anyTypeClass.name='").append(anyTypeClass.getKey()).append("' OR ");
+            queryString.append("e.anyTypeClass.key='").append(anyTypeClass.getKey()).append("' OR ");
         }
 
         TypedQuery<PlainSchema> query = entityManager().createQuery(

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java
index db216be..4c76f44 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java
@@ -38,7 +38,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAPolicyDAO extends AbstractDAO<Policy, Long> implements PolicyDAO {
+public class JPAPolicyDAO extends AbstractDAO<Policy> implements PolicyDAO {
 
     @Autowired
     private RealmDAO realmDAO;
@@ -57,7 +57,7 @@ public class JPAPolicyDAO extends AbstractDAO<Policy, Long> implements PolicyDAO
 
     @SuppressWarnings("unchecked")
     @Override
-    public <T extends Policy> T find(final Long key) {
+    public <T extends Policy> T find(final String key) {
         return (T) entityManager().find(AbstractPolicy.class, key);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
index d0a4782..b2cd657 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
@@ -42,7 +42,7 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPARealmDAO extends AbstractDAO<Realm, Long> implements RealmDAO {
+public class JPARealmDAO extends AbstractDAO<Realm> implements RealmDAO {
 
     @Autowired
     private RoleDAO roleDAO;
@@ -63,13 +63,13 @@ public class JPARealmDAO extends AbstractDAO<Realm, Long> implements RealmDAO {
     }
 
     @Override
-    public Realm find(final Long key) {
+    public Realm find(final String key) {
         return entityManager().find(JPARealm.class, key);
     }
 
     @Transactional(readOnly = true)
     @Override
-    public Realm find(final String fullPath) {
+    public Realm findByFullPath(final String fullPath) {
         if (SyncopeConstants.ROOT_REALM.equals(fullPath)) {
             return getRoot();
         }
@@ -202,7 +202,7 @@ public class JPARealmDAO extends AbstractDAO<Realm, Long> implements RealmDAO {
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         Realm realm = find(key);
         if (realm == null) {
             return;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARelationshipTypeDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARelationshipTypeDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARelationshipTypeDAO.java
index d662cd0..4af6c98 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARelationshipTypeDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARelationshipTypeDAO.java
@@ -35,7 +35,7 @@ import org.apache.syncope.core.persistence.jpa.entity.user.JPAURelationship;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPARelationshipTypeDAO extends AbstractDAO<RelationshipType, String> implements RelationshipTypeDAO {
+public class JPARelationshipTypeDAO extends AbstractDAO<RelationshipType> implements RelationshipTypeDAO {
 
     @Override
     public RelationshipType find(final String key) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportDAO.java
index 5f39e20..959eac2 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportDAO.java
@@ -28,11 +28,11 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPAReportDAO extends AbstractDAO<Report, Long> implements ReportDAO {
+public class JPAReportDAO extends AbstractDAO<Report> implements ReportDAO {
 
     @Transactional(readOnly = true)
     @Override
-    public Report find(final Long key) {
+    public Report find(final String key) {
         return entityManager().find(JPAReport.class, key);
     }
 
@@ -62,7 +62,7 @@ public class JPAReportDAO extends AbstractDAO<Report, Long> implements ReportDAO
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         Report report = find(key);
         if (report == null) {
             return;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java
index 1e0af21..d5b801e 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java
@@ -29,10 +29,10 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPAReportExecDAO extends AbstractDAO<ReportExec, Long> implements ReportExecDAO {
+public class JPAReportExecDAO extends AbstractDAO<ReportExec> implements ReportExecDAO {
 
     @Override
-    public ReportExec find(final Long key) {
+    public ReportExec find(final String key) {
         return entityManager().find(JPAReportExec.class, key);
     }
 
@@ -115,7 +115,7 @@ public class JPAReportExecDAO extends AbstractDAO<ReportExec, Long> implements R
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         ReportExec execution = find(key);
         if (execution == null) {
             return;


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/EntityValidationListener.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/EntityValidationListener.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/EntityValidationListener.java
index 9d86b88..387e368 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/EntityValidationListener.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/EntityValidationListener.java
@@ -30,6 +30,7 @@ import org.apache.syncope.core.persistence.api.entity.AnnotatedEntity;
 import org.apache.syncope.core.persistence.api.entity.Any;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 import org.apache.syncope.core.persistence.api.entity.Policy;
+import org.apache.syncope.core.persistence.api.entity.ProvidedKeyEntity;
 import org.apache.syncope.core.persistence.api.entity.Schema;
 import org.apache.syncope.core.persistence.api.entity.task.Task;
 import org.slf4j.Logger;
@@ -57,6 +58,7 @@ public class EntityValidationListener {
             for (Class<?> interf : ClassUtils.getAllInterfaces(object.getClass())) {
                 if (!Entity.class.equals(interf)
                         && !AnnotatedEntity.class.equals(interf)
+                        && !ProvidedKeyEntity.class.equals(interf)
                         && !Schema.class.equals(interf)
                         && !Task.class.equals(interf)
                         && !Policy.class.equals(interf)

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaKeyCheck.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaKeyCheck.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaKeyCheck.java
new file mode 100644
index 0000000..1629114
--- /dev/null
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaKeyCheck.java
@@ -0,0 +1,41 @@
+/*
+ * 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.core.persistence.jpa.validation.entity;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+@Constraint(validatedBy = SchemaKeyValidator.class)
+@Documented
+public @interface SchemaKeyCheck {
+
+    String message() default "{org.apache.syncope.core.persistence.validation.schema}";
+
+    Class<?>[] groups() default {};
+
+    Class<? extends Payload>[] payload() default {};
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaKeyValidator.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaKeyValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaKeyValidator.java
new file mode 100644
index 0000000..b4d00d5
--- /dev/null
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaKeyValidator.java
@@ -0,0 +1,98 @@
+/*
+ * 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.core.persistence.jpa.validation.entity;
+
+import java.lang.reflect.Field;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.validation.ConstraintValidatorContext;
+import org.apache.commons.lang3.ClassUtils;
+import org.apache.syncope.common.lib.types.EntityViolationType;
+import org.apache.syncope.core.persistence.api.entity.DerSchema;
+import org.apache.syncope.core.persistence.api.entity.PlainSchema;
+import org.apache.syncope.core.persistence.api.entity.VirSchema;
+import org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAnyObject;
+import org.apache.syncope.core.persistence.jpa.entity.conf.JPAConf;
+import org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup;
+import org.apache.syncope.core.persistence.jpa.entity.user.JPAUser;
+
+public class SchemaKeyValidator extends AbstractValidator<SchemaKeyCheck, Object> {
+
+    private static final Set<String> UNALLOWED_SCHEMA_KEYS = new HashSet<>();
+
+    static {
+        initUnallowedSchemaKeys(JPAAnyObject.class, UNALLOWED_SCHEMA_KEYS);
+        initUnallowedSchemaKeys(JPAGroup.class, UNALLOWED_SCHEMA_KEYS);
+        initUnallowedSchemaKeys(JPAUser.class, UNALLOWED_SCHEMA_KEYS);
+        initUnallowedSchemaKeys(JPAConf.class, UNALLOWED_SCHEMA_KEYS);
+    }
+
+    private static void initUnallowedSchemaKeys(final Class<?> entityClass, final Set<String> keys) {
+        List<Class<?>> classes = ClassUtils.getAllSuperclasses(entityClass);
+        if (!classes.contains(JPAUser.class)) {
+            classes.add(JPAUser.class);
+        }
+        for (Class<?> clazz : classes) {
+            for (Field field : clazz.getDeclaredFields()) {
+                if (!Collection.class.isAssignableFrom(field.getType())
+                        && !Map.class.isAssignableFrom(field.getType())) {
+
+                    keys.add(field.getName());
+                }
+            }
+        }
+    }
+
+    @Override
+    public boolean isValid(final Object object, final ConstraintValidatorContext context) {
+        String schemaName;
+        Set<String> unallowedNames = UNALLOWED_SCHEMA_KEYS;
+        if (object instanceof PlainSchema) {
+            schemaName = ((PlainSchema) object).getKey();
+        } else if (object instanceof DerSchema) {
+            schemaName = ((DerSchema) object).getKey();
+        } else if (object instanceof VirSchema) {
+            schemaName = ((VirSchema) object).getKey();
+        } else {
+            schemaName = null;
+            unallowedNames = Collections.emptySet();
+        }
+
+        boolean isValid = NAME_PATTERN.matcher(schemaName).matches();
+        if (!isValid) {
+            context.disableDefaultConstraintViolation();
+            context.buildConstraintViolationWithTemplate(
+                    getTemplate(EntityViolationType.InvalidName, "Invalid Schema name")).
+                    addPropertyNode("name").addConstraintViolation();
+        } else if (unallowedNames.contains(schemaName)) {
+            context.disableDefaultConstraintViolation();
+            context.buildConstraintViolationWithTemplate(
+                    getTemplate(EntityViolationType.InvalidName, "Schema name not allowed: " + schemaName)).
+                    addPropertyNode("name").addConstraintViolation();
+
+            return false;
+        }
+
+        return isValid;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaNameCheck.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaNameCheck.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaNameCheck.java
deleted file mode 100644
index 3217f1e..0000000
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaNameCheck.java
+++ /dev/null
@@ -1,41 +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.core.persistence.jpa.validation.entity;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import javax.validation.Constraint;
-import javax.validation.Payload;
-
-@Target({ ElementType.TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-@Constraint(validatedBy = SchemaNameValidator.class)
-@Documented
-public @interface SchemaNameCheck {
-
-    String message() default "{org.apache.syncope.core.persistence.validation.schema}";
-
-    Class<?>[] groups() default {};
-
-    Class<? extends Payload>[] payload() default {};
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaNameValidator.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaNameValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaNameValidator.java
deleted file mode 100644
index a9b622e..0000000
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaNameValidator.java
+++ /dev/null
@@ -1,98 +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.core.persistence.jpa.validation.entity;
-
-import java.lang.reflect.Field;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.validation.ConstraintValidatorContext;
-import org.apache.commons.lang3.ClassUtils;
-import org.apache.syncope.common.lib.types.EntityViolationType;
-import org.apache.syncope.core.persistence.api.entity.DerSchema;
-import org.apache.syncope.core.persistence.api.entity.PlainSchema;
-import org.apache.syncope.core.persistence.api.entity.VirSchema;
-import org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAnyObject;
-import org.apache.syncope.core.persistence.jpa.entity.conf.JPAConf;
-import org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup;
-import org.apache.syncope.core.persistence.jpa.entity.user.JPAUser;
-
-public class SchemaNameValidator extends AbstractValidator<SchemaNameCheck, Object> {
-
-    private static final Set<String> UNALLOWED_SCHEMA_NAMES = new HashSet<>();
-
-    static {
-        initUnallowedSchemaNames(JPAAnyObject.class, UNALLOWED_SCHEMA_NAMES);
-        initUnallowedSchemaNames(JPAGroup.class, UNALLOWED_SCHEMA_NAMES);
-        initUnallowedSchemaNames(JPAUser.class, UNALLOWED_SCHEMA_NAMES);
-        initUnallowedSchemaNames(JPAConf.class, UNALLOWED_SCHEMA_NAMES);
-    }
-
-    private static void initUnallowedSchemaNames(final Class<?> entityClass, final Set<String> names) {
-        List<Class<?>> classes = ClassUtils.getAllSuperclasses(entityClass);
-        if (!classes.contains(JPAUser.class)) {
-            classes.add(JPAUser.class);
-        }
-        for (Class<?> clazz : classes) {
-            for (Field field : clazz.getDeclaredFields()) {
-                if (!Collection.class.isAssignableFrom(field.getType())
-                        && !Map.class.isAssignableFrom(field.getType())) {
-
-                    names.add(field.getName());
-                }
-            }
-        }
-    }
-
-    @Override
-    public boolean isValid(final Object object, final ConstraintValidatorContext context) {
-        String schemaName;
-        Set<String> unallowedNames = UNALLOWED_SCHEMA_NAMES;
-        if (object instanceof PlainSchema) {
-            schemaName = ((PlainSchema) object).getKey();
-        } else if (object instanceof DerSchema) {
-            schemaName = ((DerSchema) object).getKey();
-        } else if (object instanceof VirSchema) {
-            schemaName = ((VirSchema) object).getKey();
-        } else {
-            schemaName = null;
-            unallowedNames = Collections.emptySet();
-        }
-
-        boolean isValid = NAME_PATTERN.matcher(schemaName).matches();
-        if (!isValid) {
-            context.disableDefaultConstraintViolation();
-            context.buildConstraintViolationWithTemplate(
-                    getTemplate(EntityViolationType.InvalidName, "Invalid Schema name")).
-                    addPropertyNode("name").addConstraintViolation();
-        } else if (unallowedNames.contains(schemaName)) {
-            context.disableDefaultConstraintViolation();
-            context.buildConstraintViolationWithTemplate(
-                    getTemplate(EntityViolationType.InvalidName, "Schema name not allowed: " + schemaName)).
-                    addPropertyNode("name").addConstraintViolation();
-
-            return false;
-        }
-
-        return isValid;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/resources/META-INF/spring-orm-oracle.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/META-INF/spring-orm-oracle.xml b/core/persistence-jpa/src/main/resources/META-INF/spring-orm-oracle.xml
index 42cb116..78a8098 100644
--- a/core/persistence-jpa/src/main/resources/META-INF/spring-orm-oracle.xml
+++ b/core/persistence-jpa/src/main/resources/META-INF/spring-orm-oracle.xml
@@ -34,193 +34,8 @@ under the License.
     </persistence-unit-defaults>
   </persistence-unit-metadata>
   
-  <table-generator name="SEQ_UPlainAttrValue" pk-column-value="SEQ_UPlainAttrValue" initial-value="100"/>
-  <table-generator name="SEQ_GPlainAttrValue" pk-column-value="SEQ_GPlainAttrValue" initial-value="100"/>
-  <table-generator name="SEQ_APlainAttrValue" pk-column-value="SEQ_APlainAttrValue" initial-value="100"/>
-  <table-generator name="SEQ_CPlainAttrValue" pk-column-value="SEQ_CPlainAttrValue" initial-value="100"/>
+  <sequence-generator name="uuid" sequence-name="org.apache.syncope.core.persistence.jpa.openjpa.UUIDGenerator()"/>
 
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPARealm">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Realm" strategy="TABLE"/>
-        <table-generator name="SEQ_Realm" pk-column-value="SEQ_Realm" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAnyObject">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AnyObject" strategy="TABLE"/>
-        <table-generator name="SEQ_AnyObject" pk-column-value="SEQ_AnyObject" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAARelationship">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_ARelationship" strategy="TABLE"/>
-        <table-generator name="SEQ_ARelationship" pk-column-value="SEQ_ARelationship" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAMembership">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AMembership" strategy="TABLE"/>
-        <table-generator name="SEQ_AMembership" pk-column-value="SEQ_AMembership" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPADynRoleMembership">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_DynRoleMembership" strategy="TABLE"/>
-        <table-generator name="SEQ_DynRoleMembership" pk-column-value="SEQ_DynRoleMembership" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUser">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_User" strategy="TABLE"/>
-        <table-generator name="SEQ_User" pk-column-value="SEQ_User" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAURelationship">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_URelationship" strategy="TABLE"/>
-        <table-generator name="SEQ_URelationship" pk-column-value="SEQ_URelationship" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUMembership">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_UMembership" strategy="TABLE"/>
-        <table-generator name="SEQ_UMembership" pk-column-value="SEQ_UMembership" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Group" strategy="TABLE"/>
-        <table-generator name="SEQ_Group" pk-column-value="SEQ_Group" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPATypeExtension">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_TypeExtension" strategy="TABLE"/>
-        <table-generator name="SEQ_TypeExtension" pk-column-value="SEQ_TypeExtension" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAADynGroupMembership">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_ADynGroupMembership" strategy="TABLE"/>
-        <table-generator name="SEQ_ADynGroupMembership" pk-column-value="SEQ_ADynGroupMembership" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUDynGroupMembership">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_UDynGroupMembership" strategy="TABLE"/>
-        <table-generator name="SEQ_UDynGroupMembership" pk-column-value="SEQ_UDynGroupMembership" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.resource.JPAProvision">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Provision" strategy="TABLE"/>
-        <table-generator name="SEQ_Provision" pk-column-value="SEQ_Provision" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.resource.JPAMapping">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Mapping" strategy="TABLE"/>
-        <table-generator name="SEQ_Mapping" pk-column-value="SEQ_Mapping" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.resource.JPAMappingItem">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_MappingItem" strategy="TABLE"/>
-        <table-generator name="SEQ_MappingItem" pk-column-value="SEQ_MappingItem" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAConnInstance">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_ConnInstance" strategy="TABLE"/>
-        <table-generator name="SEQ_ConnInstance" pk-column-value="SEQ_ConnInstance" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAPlainAttr">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_APlainAttr" strategy="TABLE"/>
-        <table-generator name="SEQ_APlainAttr" pk-column-value="SEQ_APlainAttr" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttr">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_UPlainAttr" strategy="TABLE"/>
-        <table-generator name="SEQ_UPlainAttr" pk-column-value="SEQ_UPlainAttr" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGPlainAttr">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_GPlainAttr" strategy="TABLE"/>
-        <table-generator name="SEQ_GPlainAttr" pk-column-value="SEQ_GPlainAttr" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttr">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_CAttrPlain" strategy="TABLE"/>
-        <table-generator name="SEQ_CAttrPlain" pk-column-value="SEQ_CAttrPlain" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAPlainAttrValue">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_APlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
-  </entity>
   <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAPlainAttrUniqueValue">
     <table>
       <unique-constraint>
@@ -229,22 +44,10 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
     </table>
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_APlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
   </entity>    
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttrValue">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_UPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
-  </entity>
   <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttrUniqueValue">
     <table>
       <unique-constraint>
@@ -253,21 +56,9 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
     </table>
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_UPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGPlainAttrValue">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_GPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
   </entity>
   <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGPlainAttrUniqueValue">
     <table>
@@ -277,21 +68,9 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
     </table>
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_GPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttrValue">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_CPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
   </entity>
   <entity class="org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttrUniqueValue">
     <table>
@@ -301,133 +80,8 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
     </table>
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_CPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAAnyTemplateRealm">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AnyTemplateRealm" strategy="TABLE"/>
-        <table-generator name="SEQ_AnyTemplateRealm" pk-column-value="SEQ_AnyTemplateRealm" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.task.JPAAnyTemplatePullTask">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AnyTemplatePullTask" strategy="TABLE"/>
-        <table-generator name="SEQ_AnyTemplatePullTask" pk-column-value="SEQ_AnyTemplatePullTask" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.task.JPAPushTaskAnyFilter">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_PushTaskAnyFilter" strategy="TABLE"/>
-        <table-generator name="SEQ_PushTaskAnyFilter" pk-column-value="SEQ_PushTaskAnyFilter" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.task.AbstractTask">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Task" strategy="TABLE"/>
-        <table-generator name="SEQ_Task" pk-column-value="SEQ_Task" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.task.JPATaskExec">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_TaskExec" strategy="TABLE"/>
-        <table-generator name="SEQ_TaskExec" pk-column-value="SEQ_TaskExec" initial-value="10"/>
-      </id>
-    </attributes>
-  </entity>
-    
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.policy.AbstractPolicy">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Policy" strategy="TABLE"/>
-        <table-generator name="SEQ_Policy" pk-column-value="SEQ_Policy" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.policy.JPAAccountRuleConfInstance">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AccountRuleConfInstance" strategy="TABLE"/>
-        <table-generator name="SEQ_AccountRuleConfInstance" pk-column-value="SEQ_AccountRuleConfInstance" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.policy.JPAPasswordRuleConfInstance">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_PasswordRuleConfInstance" strategy="TABLE"/>
-        <table-generator name="SEQ_PasswordRuleConfInstance" pk-column-value="SEQ_PasswordRuleConfInstance" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAReport">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Report" strategy="TABLE"/>
-        <table-generator name="SEQ_Report" pk-column-value="SEQ_Report" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAReportExec">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_ReportExec" strategy="TABLE"/>
-        <table-generator name="SEQ_ReportExec" pk-column-value="SEQ_ReportExec" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAReportletConfInstance">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_ReportletConfInstance" strategy="TABLE"/>
-        <table-generator name="SEQ_ReportletConfInstance" pk-column-value="SEQ_ReportletConfInstance" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAAnyAbout">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AnyAbout" strategy="TABLE"/>
-        <table-generator name="SEQ_AnyAbout" pk-column-value="SEQ_AnyAbout" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPANotification">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Notification" strategy="TABLE"/>
-        <table-generator name="SEQ_Notification" pk-column-value="SEQ_Notification" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPASecurityQuestion">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_SecurityQuestion" strategy="TABLE"/>
-        <table-generator name="SEQ_SecurityQuestion" pk-column-value="SEQ_SecurityQuestion" initial-value="100"/>
-      </id>
-    </attributes>
   </entity>
 </entity-mappings>

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/resources/META-INF/spring-orm-sqlserver.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/META-INF/spring-orm-sqlserver.xml b/core/persistence-jpa/src/main/resources/META-INF/spring-orm-sqlserver.xml
index 42cb116..f27990a 100644
--- a/core/persistence-jpa/src/main/resources/META-INF/spring-orm-sqlserver.xml
+++ b/core/persistence-jpa/src/main/resources/META-INF/spring-orm-sqlserver.xml
@@ -22,7 +22,7 @@ under the License.
                  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm 
                                      http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
                  version="2.0">
-  
+
   <persistence-unit-metadata>
     <persistence-unit-defaults>
       <entity-listeners>
@@ -33,194 +33,9 @@ under the License.
       </entity-listeners>
     </persistence-unit-defaults>
   </persistence-unit-metadata>
-  
-  <table-generator name="SEQ_UPlainAttrValue" pk-column-value="SEQ_UPlainAttrValue" initial-value="100"/>
-  <table-generator name="SEQ_GPlainAttrValue" pk-column-value="SEQ_GPlainAttrValue" initial-value="100"/>
-  <table-generator name="SEQ_APlainAttrValue" pk-column-value="SEQ_APlainAttrValue" initial-value="100"/>
-  <table-generator name="SEQ_CPlainAttrValue" pk-column-value="SEQ_CPlainAttrValue" initial-value="100"/>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPARealm">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Realm" strategy="TABLE"/>
-        <table-generator name="SEQ_Realm" pk-column-value="SEQ_Realm" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAnyObject">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AnyObject" strategy="TABLE"/>
-        <table-generator name="SEQ_AnyObject" pk-column-value="SEQ_AnyObject" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAARelationship">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_ARelationship" strategy="TABLE"/>
-        <table-generator name="SEQ_ARelationship" pk-column-value="SEQ_ARelationship" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAMembership">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AMembership" strategy="TABLE"/>
-        <table-generator name="SEQ_AMembership" pk-column-value="SEQ_AMembership" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPADynRoleMembership">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_DynRoleMembership" strategy="TABLE"/>
-        <table-generator name="SEQ_DynRoleMembership" pk-column-value="SEQ_DynRoleMembership" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
 
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUser">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_User" strategy="TABLE"/>
-        <table-generator name="SEQ_User" pk-column-value="SEQ_User" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAURelationship">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_URelationship" strategy="TABLE"/>
-        <table-generator name="SEQ_URelationship" pk-column-value="SEQ_URelationship" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
+  <sequence-generator name="uuid" sequence-name="org.apache.syncope.core.persistence.jpa.openjpa.UUIDGenerator()"/>
   
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUMembership">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_UMembership" strategy="TABLE"/>
-        <table-generator name="SEQ_UMembership" pk-column-value="SEQ_UMembership" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Group" strategy="TABLE"/>
-        <table-generator name="SEQ_Group" pk-column-value="SEQ_Group" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPATypeExtension">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_TypeExtension" strategy="TABLE"/>
-        <table-generator name="SEQ_TypeExtension" pk-column-value="SEQ_TypeExtension" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAADynGroupMembership">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_ADynGroupMembership" strategy="TABLE"/>
-        <table-generator name="SEQ_ADynGroupMembership" pk-column-value="SEQ_ADynGroupMembership" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUDynGroupMembership">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_UDynGroupMembership" strategy="TABLE"/>
-        <table-generator name="SEQ_UDynGroupMembership" pk-column-value="SEQ_UDynGroupMembership" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.resource.JPAProvision">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Provision" strategy="TABLE"/>
-        <table-generator name="SEQ_Provision" pk-column-value="SEQ_Provision" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.resource.JPAMapping">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Mapping" strategy="TABLE"/>
-        <table-generator name="SEQ_Mapping" pk-column-value="SEQ_Mapping" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.resource.JPAMappingItem">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_MappingItem" strategy="TABLE"/>
-        <table-generator name="SEQ_MappingItem" pk-column-value="SEQ_MappingItem" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAConnInstance">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_ConnInstance" strategy="TABLE"/>
-        <table-generator name="SEQ_ConnInstance" pk-column-value="SEQ_ConnInstance" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAPlainAttr">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_APlainAttr" strategy="TABLE"/>
-        <table-generator name="SEQ_APlainAttr" pk-column-value="SEQ_APlainAttr" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttr">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_UPlainAttr" strategy="TABLE"/>
-        <table-generator name="SEQ_UPlainAttr" pk-column-value="SEQ_UPlainAttr" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGPlainAttr">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_GPlainAttr" strategy="TABLE"/>
-        <table-generator name="SEQ_GPlainAttr" pk-column-value="SEQ_GPlainAttr" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttr">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_CAttrPlain" strategy="TABLE"/>
-        <table-generator name="SEQ_CAttrPlain" pk-column-value="SEQ_CAttrPlain" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAPlainAttrValue">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_APlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
-  </entity>
   <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAPlainAttrUniqueValue">
     <table>
       <unique-constraint>
@@ -229,22 +44,10 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
     </table>
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_APlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
   </entity>    
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttrValue">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_UPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
-  </entity>
   <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttrUniqueValue">
     <table>
       <unique-constraint>
@@ -253,21 +56,9 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
     </table>
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_UPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGPlainAttrValue">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_GPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
   </entity>
   <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGPlainAttrUniqueValue">
     <table>
@@ -277,21 +68,9 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
     </table>
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_GPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttrValue">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_CPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
   </entity>
   <entity class="org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttrUniqueValue">
     <table>
@@ -301,133 +80,8 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
     </table>
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_CPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAAnyTemplateRealm">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AnyTemplateRealm" strategy="TABLE"/>
-        <table-generator name="SEQ_AnyTemplateRealm" pk-column-value="SEQ_AnyTemplateRealm" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.task.JPAAnyTemplatePullTask">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AnyTemplatePullTask" strategy="TABLE"/>
-        <table-generator name="SEQ_AnyTemplatePullTask" pk-column-value="SEQ_AnyTemplatePullTask" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.task.JPAPushTaskAnyFilter">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_PushTaskAnyFilter" strategy="TABLE"/>
-        <table-generator name="SEQ_PushTaskAnyFilter" pk-column-value="SEQ_PushTaskAnyFilter" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.task.AbstractTask">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Task" strategy="TABLE"/>
-        <table-generator name="SEQ_Task" pk-column-value="SEQ_Task" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.task.JPATaskExec">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_TaskExec" strategy="TABLE"/>
-        <table-generator name="SEQ_TaskExec" pk-column-value="SEQ_TaskExec" initial-value="10"/>
-      </id>
-    </attributes>
-  </entity>
-    
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.policy.AbstractPolicy">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Policy" strategy="TABLE"/>
-        <table-generator name="SEQ_Policy" pk-column-value="SEQ_Policy" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.policy.JPAAccountRuleConfInstance">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AccountRuleConfInstance" strategy="TABLE"/>
-        <table-generator name="SEQ_AccountRuleConfInstance" pk-column-value="SEQ_AccountRuleConfInstance" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.policy.JPAPasswordRuleConfInstance">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_PasswordRuleConfInstance" strategy="TABLE"/>
-        <table-generator name="SEQ_PasswordRuleConfInstance" pk-column-value="SEQ_PasswordRuleConfInstance" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAReport">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Report" strategy="TABLE"/>
-        <table-generator name="SEQ_Report" pk-column-value="SEQ_Report" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAReportExec">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_ReportExec" strategy="TABLE"/>
-        <table-generator name="SEQ_ReportExec" pk-column-value="SEQ_ReportExec" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAReportletConfInstance">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_ReportletConfInstance" strategy="TABLE"/>
-        <table-generator name="SEQ_ReportletConfInstance" pk-column-value="SEQ_ReportletConfInstance" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAAnyAbout">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AnyAbout" strategy="TABLE"/>
-        <table-generator name="SEQ_AnyAbout" pk-column-value="SEQ_AnyAbout" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPANotification">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Notification" strategy="TABLE"/>
-        <table-generator name="SEQ_Notification" pk-column-value="SEQ_Notification" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPASecurityQuestion">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_SecurityQuestion" strategy="TABLE"/>
-        <table-generator name="SEQ_SecurityQuestion" pk-column-value="SEQ_SecurityQuestion" initial-value="100"/>
-      </id>
-    </attributes>
   </entity>
 </entity-mappings>

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/resources/META-INF/spring-orm.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/META-INF/spring-orm.xml b/core/persistence-jpa/src/main/resources/META-INF/spring-orm.xml
index 721916c..1d67501 100644
--- a/core/persistence-jpa/src/main/resources/META-INF/spring-orm.xml
+++ b/core/persistence-jpa/src/main/resources/META-INF/spring-orm.xml
@@ -33,449 +33,103 @@ under the License.
       </entity-listeners>
     </persistence-unit-defaults>
   </persistence-unit-metadata>
-  
-  <table-generator name="SEQ_UPlainAttrValue" pk-column-value="SEQ_UPlainAttrValue" initial-value="100"/>
-  <table-generator name="SEQ_GPlainAttrValue" pk-column-value="SEQ_GPlainAttrValue" initial-value="100"/>
-  <table-generator name="SEQ_APlainAttrValue" pk-column-value="SEQ_APlainAttrValue" initial-value="100"/>
-  <table-generator name="SEQ_CPlainAttrValue" pk-column-value="SEQ_CPlainAttrValue" initial-value="100"/>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPARealm">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Realm" strategy="TABLE"/>
-        <table-generator name="SEQ_Realm" pk-column-value="SEQ_Realm" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAnyObject">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AnyObject" strategy="TABLE"/>
-        <table-generator name="SEQ_AnyObject" pk-column-value="SEQ_AnyObject" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAARelationship">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_ARelationship" strategy="TABLE"/>
-        <table-generator name="SEQ_ARelationship" pk-column-value="SEQ_ARelationship" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAMembership">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AMembership" strategy="TABLE"/>
-        <table-generator name="SEQ_AMembership" pk-column-value="SEQ_AMembership" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPADynRoleMembership">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_DynRoleMembership" strategy="TABLE"/>
-        <table-generator name="SEQ_DynRoleMembership" pk-column-value="SEQ_DynRoleMembership" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUser">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_User" strategy="TABLE"/>
-        <table-generator name="SEQ_User" pk-column-value="SEQ_User" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAURelationship">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_URelationship" strategy="TABLE"/>
-        <table-generator name="SEQ_URelationship" pk-column-value="SEQ_URelationship" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUMembership">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_UMembership" strategy="TABLE"/>
-        <table-generator name="SEQ_UMembership" pk-column-value="SEQ_UMembership" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Group" strategy="TABLE"/>
-        <table-generator name="SEQ_Group" pk-column-value="SEQ_Group" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPATypeExtension">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_TypeExtension" strategy="TABLE"/>
-        <table-generator name="SEQ_TypeExtension" pk-column-value="SEQ_TypeExtension" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
 
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAADynGroupMembership">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_ADynGroupMembership" strategy="TABLE"/>
-        <table-generator name="SEQ_ADynGroupMembership" pk-column-value="SEQ_ADynGroupMembership" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
+  <sequence-generator name="uuid" sequence-name="org.apache.syncope.core.persistence.jpa.openjpa.UUIDGenerator()"/>
   
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUDynGroupMembership">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_UDynGroupMembership" strategy="TABLE"/>
-        <table-generator name="SEQ_UDynGroupMembership" pk-column-value="SEQ_UDynGroupMembership" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.resource.JPAProvision">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Provision" strategy="TABLE"/>
-        <table-generator name="SEQ_Provision" pk-column-value="SEQ_Provision" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.resource.JPAMapping">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Mapping" strategy="TABLE"/>
-        <table-generator name="SEQ_Mapping" pk-column-value="SEQ_Mapping" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.resource.JPAMappingItem">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_MappingItem" strategy="TABLE"/>
-        <table-generator name="SEQ_MappingItem" pk-column-value="SEQ_MappingItem" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAConnInstance">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_ConnInstance" strategy="TABLE"/>
-        <table-generator name="SEQ_ConnInstance" pk-column-value="SEQ_ConnInstance" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAPlainAttr">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_APlainAttr" strategy="TABLE"/>
-        <table-generator name="SEQ_APlainAttr" pk-column-value="SEQ_APlainAttr" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttr">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_UPlainAttr" strategy="TABLE"/>
-        <table-generator name="SEQ_UPlainAttr" pk-column-value="SEQ_UPlainAttr" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGPlainAttr">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_GPlainAttr" strategy="TABLE"/>
-        <table-generator name="SEQ_GPlainAttr" pk-column-value="SEQ_GPlainAttr" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttr">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_CAttrPlain" strategy="TABLE"/>
-        <table-generator name="SEQ_CAttrPlain" pk-column-value="SEQ_CAttrPlain" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAPlainAttrValue">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_APlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
-  </entity>
   <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAPlainAttrUniqueValue">
     <table>
       <unique-constraint>
         <column-name>booleanValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>dateValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>stringValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>doubleValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>longValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
     </table>
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_APlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
   </entity>    
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttrValue">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_UPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
-  </entity>
   <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttrUniqueValue">
     <table>
       <unique-constraint>
         <column-name>booleanValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>dateValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>stringValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>doubleValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>longValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
     </table>
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_UPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGPlainAttrValue">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_GPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
   </entity>
   <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGPlainAttrUniqueValue">
     <table>
       <unique-constraint>
         <column-name>booleanValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>dateValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>stringValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>doubleValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>longValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
     </table>
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_GPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttrValue">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_CPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
   </entity>
   <entity class="org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttrUniqueValue">
     <table>
       <unique-constraint>
         <column-name>booleanValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>dateValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>stringValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>doubleValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>longValue</column-name>
-        <column-name>schema_name</column-name>
+        <column-name>schema_key</column-name>
       </unique-constraint>
     </table>
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_CPlainAttrValue" strategy="TABLE"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAAnyTemplateRealm">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AnyTemplateRealm" strategy="TABLE"/>
-        <table-generator name="SEQ_AnyTemplateRealm" pk-column-value="SEQ_AnyTemplateRealm" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.task.JPAAnyTemplatePullTask">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AnyTemplatePullTask" strategy="TABLE"/>
-        <table-generator name="SEQ_AnyTemplatePullTask" pk-column-value="SEQ_AnyTemplatePullTask" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.task.JPAPushTaskAnyFilter">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_PushTaskAnyFilter" strategy="TABLE"/>
-        <table-generator name="SEQ_PushTaskAnyFilter" pk-column-value="SEQ_PushTaskAnyFilter" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.task.AbstractTask">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Task" strategy="TABLE"/>
-        <table-generator name="SEQ_Task" pk-column-value="SEQ_Task" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.task.JPATaskExec">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_TaskExec" strategy="TABLE"/>
-        <table-generator name="SEQ_TaskExec" pk-column-value="SEQ_TaskExec" initial-value="10"/>
-      </id>
-    </attributes>
-  </entity>
-    
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.policy.AbstractPolicy">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Policy" strategy="TABLE"/>
-        <table-generator name="SEQ_Policy" pk-column-value="SEQ_Policy" initial-value="1000"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.policy.JPAAccountRuleConfInstance">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AccountRuleConfInstance" strategy="TABLE"/>
-        <table-generator name="SEQ_AccountRuleConfInstance" pk-column-value="SEQ_AccountRuleConfInstance" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.policy.JPAPasswordRuleConfInstance">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_PasswordRuleConfInstance" strategy="TABLE"/>
-        <table-generator name="SEQ_PasswordRuleConfInstance" pk-column-value="SEQ_PasswordRuleConfInstance" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-    
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAReport">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Report" strategy="TABLE"/>
-        <table-generator name="SEQ_Report" pk-column-value="SEQ_Report" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAReportExec">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_ReportExec" strategy="TABLE"/>
-        <table-generator name="SEQ_ReportExec" pk-column-value="SEQ_ReportExec" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAReportletConfInstance">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_ReportletConfInstance" strategy="TABLE"/>
-        <table-generator name="SEQ_ReportletConfInstance" pk-column-value="SEQ_ReportletConfInstance" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAAnyAbout">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_AnyAbout" strategy="TABLE"/>
-        <table-generator name="SEQ_AnyAbout" pk-column-value="SEQ_AnyAbout" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPANotification">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_Notification" strategy="TABLE"/>
-        <table-generator name="SEQ_Notification" pk-column-value="SEQ_Notification" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
-  
-  <entity class="org.apache.syncope.core.persistence.jpa.entity.JPASecurityQuestion">
-    <attributes>
-      <id name="id">
-        <generated-value generator="SEQ_SecurityQuestion" strategy="TABLE"/>
-        <table-generator name="SEQ_SecurityQuestion" pk-column-value="SEQ_SecurityQuestion" initial-value="100"/>
-      </id>
-    </attributes>
-  </entity>
+  </entity>  
 </entity-mappings>

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/resources/domains.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/domains.xml b/core/persistence-jpa/src/main/resources/domains.xml
index 42f87d0..d58f2cb 100644
--- a/core/persistence-jpa/src/main/resources/domains.xml
+++ b/core/persistence-jpa/src/main/resources/domains.xml
@@ -44,7 +44,8 @@ under the License.
         <entry key="openjpa.NontransactionalWrite" value="false"/>
         <entry key="openjpa.AutoDetach" value="close, commit, nontx-read, rollback"/>
 
-        <entry key="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)"/>
+        <!-- Removed: see https://s.apache.org/openjpaSchemaFactory for more information
+        <entry key="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)"/>-->
         <entry key="openjpa.jdbc.MappingDefaults" 
                value="ForeignKeyDeleteAction=restrict, JoinForeignKeyDeleteAction=restrict"/>
                 
@@ -52,7 +53,7 @@ under the License.
         <entry key="openjpa.QueryCache" value="true"/>
         <entry key="openjpa.RemoteCommitProvider" value="sjvm"/>
       </map>
-    </property>    
+    </property>
   </bean>
   
 </beans>

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/resources/domains/MasterContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/domains/MasterContent.xml b/core/persistence-jpa/src/main/resources/domains/MasterContent.xml
index 9a579b1..e6b345b 100644
--- a/core/persistence-jpa/src/main/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/main/resources/domains/MasterContent.xml
@@ -18,107 +18,130 @@ specific language governing permissions and limitations
 under the License.
 -->
 <dataset>
-  <Realm id="1" name="/"/>
+  <Realm key="ea696a4f-e77a-4ef1-be67-8f8093bc8686" name="/"/>
 
-  <SyncopeConf id="1" 
-               creator="admin" lastModifier="admin"
-               creationDate="2014-06-20 11:00:00" lastChangeDate="2014-06-20 11:00:00"/>
+  <SyncopeConf key="cd64d66f-6fff-4008-b966-a06b1cc1436d"/>
 
-  <PlainSchema name="password.cipher.algorithm" type="String"
+  <PlainSchema key="password.cipher.algorithm" type="String"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="1" owner_id="1" schema_name="password.cipher.algorithm"/>
-  <CPlainAttrValue id="1" attribute_id="1" stringValue="SHA1"/>
+  <CPlainAttr key="56db89b9-119e-4923-a16e-f42823b90c66" 
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="password.cipher.algorithm"/>
+  <CPlainAttrValue key="870323e8-8db6-4a64-b512-15f9fa094905" 
+                   attribute_key="56db89b9-119e-4923-a16e-f42823b90c66" stringValue="SHA1"/>
 
   <!-- notificationjob.cronExpression:
   + not existing: NotificationJob runs according to NotificationJob.DEFAULT_CRON_EXP
   + provided as empty string: NotificationJob disabled
   + provided as non-empty string: NotificationJob runs according to the given value -->
-  <PlainSchema name="notificationjob.cronExpression" type="String"
+  <PlainSchema key="notificationjob.cronExpression" type="String"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="2" owner_id="1" schema_name="notificationjob.cronExpression"/>
-  <CPlainAttrValue id="2" attribute_id="2" stringValue=""/>
+  <CPlainAttr key="abd5a2d2-25ee-48b7-b5ca-76813b54a6f2"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="notificationjob.cronExpression"/>
+  <CPlainAttrValue key="4828ea70-d151-4c16-b344-2d07b1956bee"
+                   attribute_key="abd5a2d2-25ee-48b7-b5ca-76813b54a6f2" stringValue=""/>
   
-  <PlainSchema name="notification.maxRetries" type="Long"
+  <PlainSchema key="notification.maxRetries" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="3" owner_id="1" schema_name="notification.maxRetries"/>
-  <CPlainAttrValue id="3" attribute_id="3" longValue="3"/>
+  <CPlainAttr key="0523d7e6-af13-4e1e-9edb-e35971aacee7"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="notification.maxRetries"/>
+  <CPlainAttrValue key="010e2bdc-0094-4918-bac3-d0d5ea17b54a"
+                   attribute_key="0523d7e6-af13-4e1e-9edb-e35971aacee7" longValue="3"/>
 
-  <PlainSchema name="token.length" type="Long"
+  <PlainSchema key="token.length" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="4" owner_id="1" schema_name="token.length"/>
-  <CPlainAttrValue id="4" attribute_id="4" longValue="256"/>
+  <CPlainAttr key="58977caa-dcf7-4ae3-8591-7e3d0a395200"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="token.length"/>
+  <CPlainAttrValue key="372e28e0-3af1-4774-b668-81aa84903b75"
+                   attribute_key="58977caa-dcf7-4ae3-8591-7e3d0a395200" longValue="256"/>
 
-  <PlainSchema name="token.expireTime" type="Long"
+  <PlainSchema key="token.expireTime" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="5" owner_id="1" schema_name="token.expireTime"/>
-  <CPlainAttrValue id="5" attribute_id="5" longValue="60"/>
+  <CPlainAttr key="01f69abd-df85-4e1b-bb88-ad570594e045"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="token.expireTime"/>
+  <CPlainAttrValue key="963970cf-4af6-46bb-875b-a1b758ac8d05"
+                   attribute_key="01f69abd-df85-4e1b-bb88-ad570594e045" longValue="60"/>
 
-  <PlainSchema name="selfRegistration.allowed" type="Boolean"
+  <PlainSchema key="selfRegistration.allowed" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="6" owner_id="1" schema_name="selfRegistration.allowed"/>
-  <CPlainAttrValue id="6" attribute_id="6" booleanValue="1"/>
+  <CPlainAttr key="7b19cefa-d606-477c-8431-c9464f53fe8b"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="selfRegistration.allowed"/>
+  <CPlainAttrValue key="c8b9a0f1-0168-4e2a-95b8-4819fc70e620"
+                   attribute_key="7b19cefa-d606-477c-8431-c9464f53fe8b" booleanValue="1"/>
 
-  <PlainSchema name="passwordReset.allowed" type="Boolean"
+  <PlainSchema key="passwordReset.allowed" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="7" owner_id="1" schema_name="passwordReset.allowed"/>
-  <CPlainAttrValue id="7" attribute_id="7" booleanValue="1"/>
+  <CPlainAttr key="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="passwordReset.allowed"/>
+  <CPlainAttrValue key="b1ecea41-ab7c-4dd3-9e3e-b6baf0f98046"
+                   attribute_key="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3" booleanValue="1"/>
 
-  <PlainSchema name="passwordReset.securityQuestion" type="Boolean"
+  <PlainSchema key="passwordReset.securityQuestion" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="8" owner_id="1" schema_name="passwordReset.securityQuestion"/>
-  <CPlainAttrValue id="8" attribute_id="8" booleanValue="1"/>
-
-  <PlainSchema name="authentication.statuses" type="String" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="9" owner_id="1" schema_name="authentication.statuses"/>
-  <CPlainAttrValue id="9" attribute_id="9" stringValue="created"/>
-  <CPlainAttrValue id="10" attribute_id="9" stringValue="active"/>
+  <CPlainAttr key="e5a712ad-53fd-4102-ba55-fb45caed5f7b"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="passwordReset.securityQuestion"/>
+  <CPlainAttrValue key="b5e8e79d-8039-4318-9698-fe5e181ebe98"
+                   attribute_key="e5a712ad-53fd-4102-ba55-fb45caed5f7b" booleanValue="1"/>
+
+  <PlainSchema key="authentication.statuses" type="String" multivalue="1" uniqueConstraint="0" readonly="0"/>
+  <CPlainAttr key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="authentication.statuses"/>
+  <CPlainAttrValue key="4b8e7d2b-f527-43a3-a2e2-5530dcab2f52"
+                   attribute_key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="created"/>
+  <CPlainAttrValue key="f0c89f2c-ea87-4c95-a1cf-142bf6e6f523"
+                   attribute_key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="active"/>
 
   <!-- Save user login date upon successful authentication -->
-  <PlainSchema name="log.lastlogindate" type="Boolean"
+  <PlainSchema key="log.lastlogindate" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="11" owner_id="1" schema_name="log.lastlogindate"/>
-  <CPlainAttrValue id="11" attribute_id="11" booleanValue="1"/>
+  <CPlainAttr key="9891c0a7-27ee-4215-9eea-ca32e580b4e4"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="log.lastlogindate"/>
+  <CPlainAttrValue key="162dd874-0417-4bb9-9724-db1ff2952dd1"
+                   attribute_key="9891c0a7-27ee-4215-9eea-ca32e580b4e4" booleanValue="1"/>
 
-  <PlainSchema name="tasks.interruptMaxRetries" type="Long"
+  <PlainSchema key="tasks.interruptMaxRetries" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="12" owner_id="1" schema_name="tasks.interruptMaxRetries"/>
-  <CPlainAttrValue id="12" attribute_id="12" longValue="20"/>
+  <CPlainAttr key="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="tasks.interruptMaxRetries"/>
+  <CPlainAttrValue key="5dc3f4e3-ff9f-4558-a9ac-15336b63a2ad"
+                   attribute_key="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db" longValue="20"/>
   
   <!-- Return hashed password values when reading users -->
-  <PlainSchema name="return.password.value" type="Boolean"
+  <PlainSchema key="return.password.value" type="Boolean"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr id="14" owner_id="1" schema_name="return.password.value"/>
-  <CPlainAttrValue id="14" attribute_id="14" booleanValue="0"/>
+  <CPlainAttr key="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a"
+              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="return.password.value"/>
+  <CPlainAttrValue key="e5fa94db-b524-4309-908d-8198d0b3f779"
+                   attribute_key="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a" booleanValue="0"/>
   
   <!-- For usage with admin console -->
-  <PlainSchema name="admin.user.layout" type="String"
+  <PlainSchema key="admin.user.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="self.user.layout" type="String"
+  <PlainSchema key="self.user.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="admin.group.layout" type="String"
+  <PlainSchema key="admin.group.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="self.group.layout" type="String"
+  <PlainSchema key="self.group.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="admin.membership.layout" type="String"
+  <PlainSchema key="admin.membership.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema name="self.membership.layout" type="String"
+  <PlainSchema key="self.membership.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
 
-  <AnyType name="USER" kind="USER"/>
-  <AnyTypeClass name="BaseUser"/>
-  <AnyType_AnyTypeClass anyType_name="USER" anyTypeClass_name="BaseUser"/>
+  <AnyType key="USER" kind="USER"/>
+  <AnyTypeClass key="BaseUser"/>
+  <AnyType_AnyTypeClass anyType_key="USER" anyTypeClass_key="BaseUser"/>
 
-  <AnyType name="GROUP" kind="GROUP"/>
-  <AnyTypeClass name="BaseGroup"/>
-  <AnyType_AnyTypeClass anyType_name="GROUP" anyTypeClass_name="BaseGroup"/>
+  <AnyType key="GROUP" kind="GROUP"/>
+  <AnyTypeClass key="BaseGroup"/>
+  <AnyType_AnyTypeClass anyType_key="GROUP" anyTypeClass_key="BaseGroup"/>
         
   <!-- Actual plain schemas -->
-  <PlainSchema name="email" type="String" anyTypeClass_name="BaseUser"
+  <PlainSchema key="email" type="String" anyTypeClass_key="BaseUser"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                validatorClass="org.apache.syncope.core.persistence.jpa.attrvalue.validation.EmailAddressValidator"/>
   
   <!-- Password reset notifications -->
-  <MailTemplate name="requestPasswordReset"
+  <MailTemplate key="requestPasswordReset"
                 textTemplate="Hi,
 a password reset was request for ${user.getUsername()}.
 
@@ -142,7 +165,7 @@ a password reset was request for ${user.getUsername()}.&lt;/p&gt;
 &lt;p&gt;Best regards.&lt;/p&gt;
 &lt;/body&gt;
 &lt;/html&gt;"/>
-  <MailTemplate name="confirmPasswordReset"
+  <MailTemplate key="confirmPasswordReset"
                 textTemplate="Hi,
 we are happy to inform you that the password request was execute successfully for your account.
 
@@ -156,21 +179,21 @@ we are happy to inform you that the password request was execute successfully fo
 &lt;/body&gt;
 &lt;/html&gt;"/>
 
-  <Notification id="1" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
-                sender="admin@syncope.apache.org" subject="Password Reset request" template_name="requestPasswordReset" 
+  <Notification key="e00945b5-1184-4d43-8e45-4318a8dcdfd4" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
+                sender="admin@syncope.apache.org" subject="Password Reset request" template_key="requestPasswordReset" 
                 traceLevel="FAILURES"/> 
-  <AnyAbout id="1" anyType_name="USER" notification_id="1" filter="token!=$null"/>
-  <Notification_events Notification_id="1" event="[CUSTOM]:[]:[]:[requestPasswordReset]:[SUCCESS]"/>
+  <AnyAbout key="a328f2e6-25e9-4cc1-badf-7425d7be4b39" anyType_key="USER" notification_key="e00945b5-1184-4d43-8e45-4318a8dcdfd4" filter="token!=$null"/>
+  <Notification_events notification_key="e00945b5-1184-4d43-8e45-4318a8dcdfd4" event="[CUSTOM]:[]:[]:[requestPasswordReset]:[SUCCESS]"/>
   
-  <Notification id="2" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
-                sender="admin@syncope.apache.org" subject="Password Reset successful" template_name="confirmPasswordReset" 
+  <Notification key="bef0c250-e8a7-4848-bb63-2564fc409ce2" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
+                sender="admin@syncope.apache.org" subject="Password Reset successful" template_key="confirmPasswordReset" 
                 traceLevel="FAILURES"/> 
-  <Notification_events Notification_id="2" event="[CUSTOM]:[]:[]:[confirmPasswordReset]:[SUCCESS]"/>
+  <Notification_events notification_key="bef0c250-e8a7-4848-bb63-2564fc409ce2" event="[CUSTOM]:[]:[]:[confirmPasswordReset]:[SUCCESS]"/>
 
-  <ReportTemplate name="empty"/>  
+  <ReportTemplate key="empty"/>  
 
-  <Report id="1" name="reconciliation" active="1" template_name="empty"/>
-  <ReportletConfInstance id="1" Report_id="1" 
+  <Report key="c3520ad9-179f-49e7-b315-d684d216dd97" name="reconciliation" active="1" template_key="empty"/>
+  <ReportletConfInstance key="d6c2b475-4860-4eb1-8fde-618299c2a97c" report_key="c3520ad9-179f-49e7-b315-d684d216dd97" 
                          serializedInstance='{"@class":"org.apache.syncope.common.lib.report.ReconciliationReportletConf","name":"dashboardReconciliationReportlet","userMatchingCond":null,"groupMatchingCond":null,"anyObjectMatchingCond":null,"features":["key","username","groupName"]}'/>
 
 </dataset>


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
index 9a9b1b0..5dd41ab 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
@@ -45,19 +45,19 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
     private static final Logger LOG = LoggerFactory.getLogger(CamelUserProvisioningManager.class);
 
     @Override
-    public Pair<Long, List<PropagationStatus>> create(final UserTO userTO, final boolean nullPriorityAsync) {
+    public Pair<String, List<PropagationStatus>> create(final UserTO userTO, final boolean nullPriorityAsync) {
         return create(userTO, true, false, null, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> create(
+    public Pair<String, List<PropagationStatus>> create(
             final UserTO userTO, final boolean storePassword, final boolean nullPriorityAsync) {
 
         return create(userTO, storePassword, false, null, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> create(
+    public Pair<String, List<PropagationStatus>> create(
             final UserTO userTO, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
         return create(userTO, false, false, null, excludedResources, nullPriorityAsync);
@@ -65,7 +65,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
 
     @Override
     @SuppressWarnings("unchecked")
-    public Pair<Long, List<PropagationStatus>> create(
+    public Pair<String, List<PropagationStatus>> create(
             final UserTO userTO,
             final boolean storePassword,
             final boolean disablePwdPolicyCheck,
@@ -95,7 +95,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
 
     @Override
     @SuppressWarnings("unchecked")
-    public Pair<Long, List<PropagationStatus>> update(final UserPatch userPatch, final boolean nullPriorityAsync) {
+    public Pair<String, List<PropagationStatus>> update(final UserPatch userPatch, final boolean nullPriorityAsync) {
         PollingConsumer pollingConsumer = getConsumer("direct:updatePort");
 
         Map<String, Object> props = new HashMap<>();
@@ -113,21 +113,21 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
     }
 
     @Override
-    public Pair<Long, List<PropagationStatus>> update(
+    public Pair<String, List<PropagationStatus>> update(
             final UserPatch anyPatch, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
         return update(anyPatch, new ProvisioningReport(), null, excludedResources, nullPriorityAsync);
     }
 
     @Override
-    public List<PropagationStatus> delete(final Long key, final boolean nullPriorityAsync) {
+    public List<PropagationStatus> delete(final String key, final boolean nullPriorityAsync) {
         return delete(key, Collections.<String>emptySet(), nullPriorityAsync);
     }
 
     @Override
     @SuppressWarnings("unchecked")
     public List<PropagationStatus> delete(
-            final Long key, final Set<String> excludedResources, final boolean nullPriorityAsync) {
+            final String key, final Set<String> excludedResources, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = getConsumer("direct:deletePort");
 
@@ -147,7 +147,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
     }
 
     @Override
-    public Long unlink(final UserPatch userPatch) {
+    public String unlink(final UserPatch userPatch) {
         PollingConsumer pollingConsumer = getConsumer("direct:unlinkPort");
 
         sendMessage("direct:unlinkUser", userPatch);
@@ -159,12 +159,12 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
         }
 
         exchange.getIn().setBody((exchange.getIn().getBody(UserPatch.class).getKey()));
-        return exchange.getIn().getBody(Long.class);
+        return exchange.getIn().getBody(String.class);
     }
 
     @Override
     @SuppressWarnings("unchecked")
-    public Pair<Long, List<PropagationStatus>> activate(
+    public Pair<String, List<PropagationStatus>> activate(
             final StatusPatch statusPatch, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = getConsumer("direct:statusPort");
@@ -178,7 +178,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
         if (statusPatch.isOnSyncope()) {
             sendMessage("direct:activateUser", statusPatch.getKey(), props);
         } else {
-            WorkflowResult<Long> updated =
+            WorkflowResult<String> updated =
                     new WorkflowResult<>(statusPatch.getKey(), null, statusPatch.getType().name().toLowerCase());
             sendMessage("direct:userStatusPropagation", updated, props);
         }
@@ -194,7 +194,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
 
     @Override
     @SuppressWarnings("unchecked")
-    public Pair<Long, List<PropagationStatus>> reactivate(
+    public Pair<String, List<PropagationStatus>> reactivate(
             final StatusPatch statusPatch, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = getConsumer("direct:statusPort");
@@ -207,7 +207,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
         if (statusPatch.isOnSyncope()) {
             sendMessage("direct:reactivateUser", statusPatch.getKey(), props);
         } else {
-            WorkflowResult<Long> updated =
+            WorkflowResult<String> updated =
                     new WorkflowResult<>(statusPatch.getKey(), null, statusPatch.getType().name().toLowerCase());
             sendMessage("direct:userStatusPropagation", updated, props);
         }
@@ -223,7 +223,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
 
     @Override
     @SuppressWarnings("unchecked")
-    public Pair<Long, List<PropagationStatus>> suspend(
+    public Pair<String, List<PropagationStatus>> suspend(
             final StatusPatch statusPatch, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = getConsumer("direct:statusPort");
@@ -236,7 +236,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
         if (statusPatch.isOnSyncope()) {
             sendMessage("direct:suspendUser", statusPatch.getKey(), props);
         } else {
-            WorkflowResult<Long> updated =
+            WorkflowResult<String> updated =
                     new WorkflowResult<>(statusPatch.getKey(), null, statusPatch.getType().name().toLowerCase());
             sendMessage("direct:userStatusPropagation", updated, props);
         }
@@ -251,7 +251,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
     }
 
     @Override
-    public Long link(final UserPatch anyPatch) {
+    public String link(final UserPatch anyPatch) {
         PollingConsumer pollingConsumer = getConsumer("direct:linkPort");
 
         sendMessage("direct:linkUser", anyPatch);
@@ -263,13 +263,13 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
         }
 
         exchange.getIn().setBody((exchange.getIn().getBody(UserPatch.class).getKey()));
-        return exchange.getIn().getBody(Long.class);
+        return exchange.getIn().getBody(String.class);
     }
 
     @Override
     @SuppressWarnings("unchecked")
     public List<PropagationStatus> provision(
-            final Long key,
+            final String key,
             final boolean changePwd,
             final String password,
             final Collection<String> resources,
@@ -298,7 +298,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
     @Override
     @SuppressWarnings("unchecked")
     public List<PropagationStatus> deprovision(
-            final Long user, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String user, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = getConsumer("direct:deprovisionPort");
 
@@ -319,7 +319,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
 
     @Override
     @SuppressWarnings("unchecked")
-    public Pair<Long, List<PropagationStatus>> update(
+    public Pair<String, List<PropagationStatus>> update(
             final UserPatch userPatch,
             final ProvisioningReport result,
             final Boolean enabled,
@@ -358,7 +358,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
     }
 
     @Override
-    public void internalSuspend(final Long key) {
+    public void internalSuspend(final String key) {
         PollingConsumer pollingConsumer = getConsumer("direct:internalSuspendUserPort");
 
         sendMessage("direct:internalSuspendUser", key);
@@ -371,7 +371,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
     }
 
     @Override
-    public void requestPasswordReset(final Long key) {
+    public void requestPasswordReset(final String key) {
         PollingConsumer pollingConsumer = getConsumer("direct:requestPwdResetPort");
 
         sendMessage("direct:requestPwdReset", key);
@@ -384,7 +384,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
     }
 
     @Override
-    public void confirmPasswordReset(final Long key, final String token, final String password) {
+    public void confirmPasswordReset(final String key, final String token, final String password) {
         PollingConsumer pollingConsumer = getConsumer("direct:confirmPwdResetPort");
 
         Map<String, Object> props = new HashMap<>();

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectCreateProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectCreateProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectCreateProcessor.java
index 40afe61..c35c4a5 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectCreateProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectCreateProcessor.java
@@ -46,7 +46,7 @@ public class AnyObjectCreateProcessor implements Processor {
     @SuppressWarnings("unchecked")
     @Override
     public void process(final Exchange exchange) {
-        WorkflowResult<Long> created = (WorkflowResult) exchange.getIn().getBody();
+        WorkflowResult<String> created = (WorkflowResult) exchange.getIn().getBody();
         AnyObjectTO any = exchange.getProperty("any", AnyObjectTO.class);
         Set<String> excludedResources = exchange.getProperty("excludedResources", Set.class);
         Boolean nullPriorityAsync = exchange.getProperty("nullPriorityAsync", Boolean.class);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectDeleteProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectDeleteProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectDeleteProcessor.java
index f4ef0a5..7d0b966 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectDeleteProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectDeleteProcessor.java
@@ -46,7 +46,7 @@ public class AnyObjectDeleteProcessor implements Processor {
 
     @Override
     public void process(final Exchange exchange) throws Exception {
-        Long key = exchange.getIn().getBody(Long.class);
+        String key = exchange.getIn().getBody(String.class);
         @SuppressWarnings("unchecked")
         Set<String> excludedResources = exchange.getProperty("excludedResources", Set.class);
         Boolean nullPriorityAsync = exchange.getProperty("nullPriorityAsync", Boolean.class);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectDeprovisionProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectDeprovisionProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectDeprovisionProcessor.java
index f03c9f5..f6d0166 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectDeprovisionProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectDeprovisionProcessor.java
@@ -49,7 +49,7 @@ public class AnyObjectDeprovisionProcessor implements Processor {
     @SuppressWarnings("unchecked")
     @Override
     public void process(final Exchange exchange) {
-        Long key = exchange.getIn().getBody(Long.class);
+        String key = exchange.getIn().getBody(String.class);
         List<String> resources = exchange.getProperty("resources", List.class);
         Boolean nullPriorityAsync = exchange.getProperty("nullPriorityAsync", Boolean.class);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectProvisionProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectProvisionProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectProvisionProcessor.java
index 584aaa5..d81c8fd 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectProvisionProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectProvisionProcessor.java
@@ -44,7 +44,7 @@ public class AnyObjectProvisionProcessor implements Processor {
     @SuppressWarnings("unchecked")
     @Override
     public void process(final Exchange exchange) {
-        Long key = exchange.getIn().getBody(Long.class);
+        String key = exchange.getIn().getBody(String.class);
         List<String> resources = exchange.getProperty("resources", List.class);
         Boolean nullPriorityAsync = exchange.getProperty("nullPriorityAsync", Boolean.class);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectUpdateProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectUpdateProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectUpdateProcessor.java
index e222643..3564aeb 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectUpdateProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectUpdateProcessor.java
@@ -50,7 +50,7 @@ public class AnyObjectUpdateProcessor implements Processor {
     @SuppressWarnings("unchecked")
     @Override
     public void process(final Exchange exchange) {
-        WorkflowResult<Long> updated = (WorkflowResult) exchange.getIn().getBody();
+        WorkflowResult<String> updated = (WorkflowResult) exchange.getIn().getBody();
         AnyObjectPatch anyObjectPatch = exchange.getProperty("anyPatch", AnyObjectPatch.class);
         Set<String> excludedResources = exchange.getProperty("excludedResources", Set.class);
         Boolean nullPriorityAsync = exchange.getProperty("nullPriorityAsync", Boolean.class);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateInPullProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateInPullProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateInPullProcessor.java
index 791b4b3..f3a7558 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateInPullProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateInPullProcessor.java
@@ -49,10 +49,10 @@ public class GroupCreateInPullProcessor implements Processor {
     @Override
     @SuppressWarnings("unchecked")
     public void process(final Exchange exchange) {
-        WorkflowResult<Long> created = (WorkflowResult) exchange.getIn().getBody();
+        WorkflowResult<String> created = (WorkflowResult) exchange.getIn().getBody();
 
         GroupTO groupTO = exchange.getProperty("any", GroupTO.class);
-        Map<Long, String> groupOwnerMap = exchange.getProperty("groupOwnerMap", Map.class);
+        Map<String, String> groupOwnerMap = exchange.getProperty("groupOwnerMap", Map.class);
         Set<String> excludedResources = exchange.getProperty("excludedResources", Set.class);
         Boolean nullPriorityAsync = exchange.getProperty("nullPriorityAsync", Boolean.class);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateProcessor.java
index 785bd0f..2b85af7 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupCreateProcessor.java
@@ -46,7 +46,7 @@ public class GroupCreateProcessor implements Processor {
     @SuppressWarnings("unchecked")
     @Override
     public void process(final Exchange exchange) {
-        WorkflowResult<Long> created = (WorkflowResult) exchange.getIn().getBody();
+        WorkflowResult<String> created = (WorkflowResult) exchange.getIn().getBody();
         GroupTO any = exchange.getProperty("any", GroupTO.class);
         Set<String> excludedResources = exchange.getProperty("excludedResources", Set.class);
         Boolean nullPriorityAsync = exchange.getProperty("nullPriorityAsync", Boolean.class);
@@ -61,8 +61,7 @@ public class GroupCreateProcessor implements Processor {
                 ApplicationContextProvider.getBeanFactory().getBean(PropagationReporter.class);
         taskExecutor.execute(tasks, propagationReporter, nullPriorityAsync);
 
-        exchange.getOut().setBody(new ImmutablePair<>(
-                created.getResult(), propagationReporter.getStatuses()));
+        exchange.getOut().setBody(new ImmutablePair<>(created.getResult(), propagationReporter.getStatuses()));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeleteProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeleteProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeleteProcessor.java
index 30f9218..83b8578 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeleteProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeleteProcessor.java
@@ -53,7 +53,7 @@ public class GroupDeleteProcessor implements Processor {
 
     @Override
     public void process(final Exchange exchange) throws Exception {
-        Long key = exchange.getIn().getBody(Long.class);
+        String key = exchange.getIn().getBody(String.class);
         @SuppressWarnings("unchecked")
         Set<String> excludedResources = exchange.getProperty("excludedResources", Set.class);
         Boolean nullPriorityAsync = exchange.getProperty("nullPriorityAsync", Boolean.class);
@@ -62,7 +62,7 @@ public class GroupDeleteProcessor implements Processor {
 
         // Generate propagation tasks for deleting users from group resources, if they are on those resources only
         // because of the reason being deleted (see SYNCOPE-357)
-        for (Map.Entry<Long, PropagationByResource> entry
+        for (Map.Entry<String, PropagationByResource> entry
                 : groupDAO.findUsersWithTransitiveResources(key).entrySet()) {
 
             tasks.addAll(propagationManager.getDeleteTasks(
@@ -71,7 +71,7 @@ public class GroupDeleteProcessor implements Processor {
                     entry.getValue(),
                     excludedResources));
         }
-        for (Map.Entry<Long, PropagationByResource> entry
+        for (Map.Entry<String, PropagationByResource> entry
                 : groupDAO.findAnyObjectsWithTransitiveResources(key).entrySet()) {
 
             tasks.addAll(propagationManager.getDeleteTasks(

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeprovisionProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeprovisionProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeprovisionProcessor.java
index 1c59157..1fd1e3d 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeprovisionProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeprovisionProcessor.java
@@ -49,7 +49,7 @@ public class GroupDeprovisionProcessor implements Processor {
     @SuppressWarnings("unchecked")
     @Override
     public void process(final Exchange exchange) {
-        Long key = exchange.getIn().getBody(Long.class);
+        String key = exchange.getIn().getBody(String.class);
         List<String> resources = exchange.getProperty("resources", List.class);
         Boolean nullPriorityAsync = exchange.getProperty("nullPriorityAsync", Boolean.class);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupProvisionProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupProvisionProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupProvisionProcessor.java
index ff1f43a..fc6aaa6 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupProvisionProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupProvisionProcessor.java
@@ -44,7 +44,7 @@ public class GroupProvisionProcessor implements Processor {
     @SuppressWarnings("unchecked")
     @Override
     public void process(final Exchange exchange) {
-        Long key = exchange.getIn().getBody(Long.class);
+        String key = exchange.getIn().getBody(String.class);
         List<String> resources = exchange.getProperty("resources", List.class);
         Boolean nullPriorityAsync = exchange.getProperty("nullPriorityAsync", Boolean.class);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupUpdateProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupUpdateProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupUpdateProcessor.java
index 6cb270f..86ea3af 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupUpdateProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupUpdateProcessor.java
@@ -54,7 +54,7 @@ public class GroupUpdateProcessor implements Processor {
     @SuppressWarnings("unchecked")
     @Override
     public void process(final Exchange exchange) {
-        WorkflowResult<Long> updated = (WorkflowResult) exchange.getIn().getBody();
+        WorkflowResult<String> updated = (WorkflowResult) exchange.getIn().getBody();
         GroupPatch groupPatch = exchange.getProperty("anyPatch", GroupPatch.class);
         Set<String> excludedResources = exchange.getProperty("excludedResources", Set.class);
         Boolean nullPriorityAsync = exchange.getProperty("nullPriorityAsync", Boolean.class);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserCreateProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserCreateProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserCreateProcessor.java
index 0800bd3..a27a961 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserCreateProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserCreateProcessor.java
@@ -51,7 +51,7 @@ public class UserCreateProcessor implements Processor {
     @Override
     public void process(final Exchange exchange) {
         if ((exchange.getIn().getBody() instanceof WorkflowResult)) {
-            WorkflowResult<Pair<Long, Boolean>> created = (WorkflowResult) exchange.getIn().getBody();
+            WorkflowResult<Pair<String, Boolean>> created = (WorkflowResult) exchange.getIn().getBody();
             UserTO actual = exchange.getProperty("actual", UserTO.class);
             Set<String> excludedResources = exchange.getProperty("excludedResources", Set.class);
             Boolean nullPriorityAsync = exchange.getProperty("nullPriorityAsync", Boolean.class);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeleteProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeleteProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeleteProcessor.java
index 0356afe..949afb6 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeleteProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeleteProcessor.java
@@ -49,7 +49,7 @@ public class UserDeleteProcessor implements Processor {
     @SuppressWarnings("unchecked")
     @Override
     public void process(final Exchange exchange) throws Exception {
-        Long key = (Long) exchange.getIn().getBody();
+        String key = exchange.getIn().getBody(String.class);
         Set<String> excludedResources = exchange.getProperty("excludedResources", Set.class);
         Boolean nullPriorityAsync = exchange.getProperty("nullPriorityAsync", Boolean.class);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeprovisionProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeprovisionProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeprovisionProcessor.java
index a97a5b9..3cdf8d7 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeprovisionProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeprovisionProcessor.java
@@ -48,7 +48,7 @@ public class UserDeprovisionProcessor implements Processor {
 
     @Override
     public void process(final Exchange exchange) {
-        Long key = exchange.getIn().getBody(Long.class);
+        String key = exchange.getIn().getBody(String.class);
         @SuppressWarnings("unchecked")
         List<String> resources = exchange.getProperty("resources", List.class);
         Boolean nullPriorityAsync = exchange.getProperty("nullPriorityAsync", Boolean.class);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserInternalSuspendProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserInternalSuspendProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserInternalSuspendProcessor.java
index e565872..df362de 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserInternalSuspendProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserInternalSuspendProcessor.java
@@ -43,7 +43,7 @@ public class UserInternalSuspendProcessor implements Processor {
     @Override
     public void process(final Exchange exchange) {
         @SuppressWarnings("unchecked")
-        Pair<WorkflowResult<Long>, Boolean> updated = (Pair) exchange.getIn().getBody();
+        Pair<WorkflowResult<String>, Boolean> updated = (Pair) exchange.getIn().getBody();
 
         // propagate suspension if and only if it is required by policy
         if (updated != null && updated.getValue()) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserProvisionProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserProvisionProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserProvisionProcessor.java
index fdb42cb..7e76bf3 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserProvisionProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserProvisionProcessor.java
@@ -55,7 +55,7 @@ public class UserProvisionProcessor implements Processor {
 
     @Override
     public void process(final Exchange exchange) {
-        Long key = exchange.getIn().getBody(Long.class);
+        String key = exchange.getIn().getBody(String.class);
         Boolean changePwd = exchange.getProperty("changePwd", Boolean.class);
         String password = exchange.getProperty("password", String.class);
         @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserSetStatusInPullProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserSetStatusInPullProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserSetStatusInPullProcessor.java
index 2790c57..2265952 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserSetStatusInPullProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserSetStatusInPullProcessor.java
@@ -44,12 +44,12 @@ public class UserSetStatusInPullProcessor implements Processor {
         WorkflowResult<Map.Entry<UserPatch, Boolean>> updated = (WorkflowResult) exchange.getIn().getBody();
 
         Boolean enabled = exchange.getProperty("enabled", Boolean.class);
-        Long key = exchange.getProperty("key", Long.class);
+        String key = exchange.getProperty("key", String.class);
 
         if (enabled != null) {
             User user = userDAO.find(key);
 
-            WorkflowResult<Long> enableUpdate = null;
+            WorkflowResult<String> enableUpdate = null;
             if (user.isSuspended() == null) {
                 enableUpdate = uwfAdapter.activate(key, null);
             } else if (enabled && user.isSuspended()) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/build-tools/src/main/resources/testdb.sql
----------------------------------------------------------------------
diff --git a/fit/build-tools/src/main/resources/testdb.sql b/fit/build-tools/src/main/resources/testdb.sql
index 0bbab3e..706c760 100644
--- a/fit/build-tools/src/main/resources/testdb.sql
+++ b/fit/build-tools/src/main/resources/testdb.sql
@@ -38,15 +38,15 @@ INSERT INTO test2 VALUES ('verdi', 'password321', 'true');
 -- this table is for issueSYNCOPE230
 DROP TABLE testpull IF EXISTS;
 CREATE TABLE testpull (
-id NUMBER(10) PRIMARY KEY,
+id CHAR(36) PRIMARY KEY,
 username VARCHAR(80),
 surname VARCHAR(80),
 email VARCHAR(80));
 
-INSERT INTO testpull VALUES (965, 'issuesyncope230', 'Surname', 'syncope230@syncope.apache.org');
+INSERT INTO testpull VALUES ('a54b3794-b231-47be-b24a-11e1a42949f6', 'issuesyncope230', 'Surname', 'syncope230@syncope.apache.org');
 
 DROP TABLE testPRINTER IF EXISTS;
 CREATE TABLE testPRINTER (
-id VARCHAR(10) PRIMARY KEY,
+id CHAR(36) PRIMARY KEY,
 location VARCHAR(80),
 lastModification TIMESTAMP);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/console-reference/src/main/resources/console.properties
----------------------------------------------------------------------
diff --git a/fit/console-reference/src/main/resources/console.properties b/fit/console-reference/src/main/resources/console.properties
index 0de5557..b197ef0 100644
--- a/fit/console-reference/src/main/resources/console.properties
+++ b/fit/console-reference/src/main/resources/console.properties
@@ -30,7 +30,7 @@ rootPath=/syncope/rest/
 
 activitiModelerDirectory=${activiti-modeler.directory}
 
-reconciliationReportKey=2
+reconciliationReportKey=c3520ad9-179f-49e7-b315-d684d216dd97
 
 page.dashboard=org.apache.syncope.client.console.pages.Dashboard
 page.realms=org.apache.syncope.client.console.pages.Realms

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/console-reference/src/test/resources/rebel.xml
----------------------------------------------------------------------
diff --git a/fit/console-reference/src/test/resources/rebel.xml b/fit/console-reference/src/test/resources/rebel.xml
index c22249f..ca52ec1 100644
--- a/fit/console-reference/src/test/resources/rebel.xml
+++ b/fit/console-reference/src/test/resources/rebel.xml
@@ -36,11 +36,11 @@ under the License.
       </dir>
     </link>
     <link target="/">
-      <dir name="${basedir}/../../client/console/target/classes">
+      <dir name="${basedir}/../../client/console/target/classes/META-INF/resources">
       </dir>
     </link>
     <link target="/">
-      <dir name="${basedir}/../../ext/camel/client-console/target/classes">
+      <dir name="${basedir}/../../ext/camel/client-console/target/classes/META-INF/resources">
       </dir>
     </link>
   </web>

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/main/resources/userWorkflow.bpmn20.xml
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/main/resources/userWorkflow.bpmn20.xml b/fit/core-reference/src/main/resources/userWorkflow.bpmn20.xml
index 0b05bef..1af0f14 100644
--- a/fit/core-reference/src/main/resources/userWorkflow.bpmn20.xml
+++ b/fit/core-reference/src/main/resources/userWorkflow.bpmn20.xml
@@ -35,15 +35,16 @@ under the License.
     <exclusiveGateway id="createGW"/>
     <sequenceFlow id="createAsAnonymous2Approval" sourceRef="createGW" targetRef="createApproval">
       <conditionExpression xsi:type="tFormalExpression">
-        <![CDATA[${wfExecutor == 'anonymous' || activitiUtils.isUserIngroup(user, 9)}]]>
+        <![CDATA[${wfExecutor == 'anonymous' || activitiUtils.isUserIngroup(user, '0cbcabd2-4410-4b6b-8f05-a052b451d18f')}]]>
       </conditionExpression>
     </sequenceFlow>
     <sequenceFlow id="create2Activate" sourceRef="createGW" targetRef="enableGW">
       <conditionExpression xsi:type="tFormalExpression">
-        <![CDATA[${!activitiUtils.isUserIngroup(user, 9)}]]>
+        <![CDATA[${!activitiUtils.isUserIngroup(user, '0cbcabd2-4410-4b6b-8f05-a052b451d18f')}]]>
       </conditionExpression>
     </sequenceFlow>
-    <userTask id="createApproval" name="Create approval" activiti:candidateGroups="7" activiti:formKey="createApproval">
+    <userTask id="createApproval" name="Create approval"
+              activiti:candidateGroups="bf825fe1-7320-4a54-bd64-143b5c18ab97" activiti:formKey="createApproval">
       <extensionElements>
         <activiti:formProperty id="username" name="Username" type="string" expression="${user.username}" writable="false"/>
         <activiti:formProperty id="approve" name="Approve?" type="boolean" variable="approve" required="true"/>
@@ -61,7 +62,7 @@ under the License.
     <exclusiveGateway id="enableGW"/>
     <sequenceFlow id="createApprovalGW2OptIn" sourceRef="enableGW" targetRef="generateToken">
       <conditionExpression xsi:type="tFormalExpression">
-        <![CDATA[${activitiUtils.isUserIngroup(user, 11)}]]>
+        <![CDATA[${activitiUtils.isUserIngroup(user, '268fed79-f440-4390-9435-b273768eb5d6')}]]>
       </conditionExpression>
     </sequenceFlow>
     <sequenceFlow id="createApprovalGW2Activate" sourceRef="enableGW" targetRef="activate">

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
index f71d3b9..d3f8793 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.fit;
 
-import static org.junit.Assert.assertNotNull;
-
 import java.io.InputStream;
 import java.net.URI;
 import java.util.Locale;
@@ -53,7 +51,6 @@ import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.syncope.common.lib.types.PatchOperation;
 import org.apache.syncope.common.lib.types.SchemaType;
-import org.apache.syncope.common.rest.api.RESTHeaders;
 import org.apache.syncope.common.rest.api.service.AnyObjectService;
 import org.apache.syncope.common.rest.api.service.AnyTypeClassService;
 import org.apache.syncope.common.rest.api.service.AnyTypeService;
@@ -318,7 +315,7 @@ public abstract class AbstractITCase {
     }
 
     protected UserTO readUser(final String username) {
-        return userService.read(Long.valueOf(userService.getUserKey(username).getHeaderString(RESTHeaders.USER_KEY)));
+        return userService.read(username);
     }
 
     protected ProvisioningResult<UserTO> createUser(final UserTO userTO) {
@@ -343,7 +340,7 @@ public abstract class AbstractITCase {
                 });
     }
 
-    protected ProvisioningResult<UserTO> deleteUser(final Long key) {
+    protected ProvisioningResult<UserTO> deleteUser(final String key) {
         return userService.delete(key).
                 readEntity(new GenericType<ProvisioningResult<UserTO>>() {
                 });
@@ -367,7 +364,7 @@ public abstract class AbstractITCase {
                 });
     }
 
-    protected ProvisioningResult<AnyObjectTO> deleteAnyObject(final Long key) {
+    protected ProvisioningResult<AnyObjectTO> deleteAnyObject(final String key) {
         return anyObjectService.delete(key).
                 readEntity(new GenericType<ProvisioningResult<AnyObjectTO>>() {
                 });
@@ -391,7 +388,7 @@ public abstract class AbstractITCase {
                 });
     }
 
-    protected ProvisioningResult<GroupTO> deleteGroup(final Long key) {
+    protected ProvisioningResult<GroupTO> deleteGroup(final String key) {
         return groupService.delete(key).
                 readEntity(new GenericType<ProvisioningResult<GroupTO>>() {
                 });

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/cli/CLIITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/cli/CLIITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/cli/CLIITCase.java
index af4f961..d2148e1 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/cli/CLIITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/cli/CLIITCase.java
@@ -170,26 +170,26 @@ public class CLIITCase extends AbstractITCase {
 
     @Test
     public void userRead() {
-        final long userId1 = 1;
-        final long userId2 = 2;
-        final long userId3 = 3;
-        final long userId4 = 4;
-        final long userId5 = 5;
+        final String userKey1 = "1417acbe-cbf6-4277-9372-e75e04f97000";
+        final String userKey2 = "74cd8ece-715a-44a4-a736-e17b46c4e7e6";
+        final String userKey3 = "b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee";
+        final String userKey4 = "c9b2dec2-00a7-4855-97c0-d854842b4b24";
+        final String userKey5 = "823074dc-d280-436d-a7dd-07399fae48ec";
         try {
             PROCESS_BUILDER.command(getCommand(
                     new UserCommand().getClass().getAnnotation(Command.class).name(),
                     UserCommand.UserOptions.READ_BY_ID.getOptionName(),
-                    String.valueOf(userId1)));
+                    String.valueOf(userKey1)));
             Process process = PROCESS_BUILDER.start();
             String result = IOUtils.toString(process.getInputStream());
-            assertTrue(result.contains("username: " + userService.read(userId1).getUsername()));
+            assertTrue(result.contains("username: " + userService.read(userKey1).getUsername()));
             process.destroy();
 
             PROCESS_BUILDER.command(getCommand(
                     new UserCommand().getClass().getAnnotation(Command.class).name(),
                     UserCommand.UserOptions.READ_BY_ID.getOptionName(),
-                    String.valueOf(userId1), String.valueOf(userId2),
-                    String.valueOf(userId3), String.valueOf(userId4), String.valueOf(userId5)));
+                    String.valueOf(userKey1), String.valueOf(userKey2),
+                    String.valueOf(userKey3), String.valueOf(userKey4), String.valueOf(userKey5)));
             Process process2 = PROCESS_BUILDER.start();
             long users = IterableUtils.countMatches(IOUtils.readLines(process2.getInputStream()),
                     new Predicate<String>() {
@@ -206,16 +206,16 @@ public class CLIITCase extends AbstractITCase {
             PROCESS_BUILDER.command(getCommand(
                     new UserCommand().getClass().getAnnotation(Command.class).name(),
                     UserCommand.UserOptions.READ_BY_ID.getOptionName(),
-                    String.valueOf(userId1), String.valueOf(userId2),
-                    String.valueOf(userId3), String.valueOf(userId4), String.valueOf(userId5)));
+                    String.valueOf(userKey1), String.valueOf(userKey2),
+                    String.valueOf(userKey3), String.valueOf(userKey4), String.valueOf(userKey5)));
             Process process3 = PROCESS_BUILDER.start();
             String result3 = IOUtils.toString(process3.getInputStream());
             assertTrue(
-                    result3.contains("username: " + userService.read(userId1).getUsername())
-                    && result3.contains("username: " + userService.read(userId2).getUsername())
-                    && result3.contains("username: " + userService.read(userId3).getUsername())
-                    && result3.contains("username: " + userService.read(userId4).getUsername())
-                    && result3.contains("username: " + userService.read(userId5).getUsername()));
+                    result3.contains("username: " + userService.read(userKey1).getUsername())
+                    && result3.contains("username: " + userService.read(userKey2).getUsername())
+                    && result3.contains("username: " + userService.read(userKey3).getUsername())
+                    && result3.contains("username: " + userService.read(userKey4).getUsername())
+                    && result3.contains("username: " + userService.read(userKey5).getUsername()));
             process3.destroy();
         } catch (IOException e) {
             fail(e.getMessage());
@@ -266,8 +266,7 @@ public class CLIITCase extends AbstractITCase {
                     "wrong"));
             final Process process = PROCESS_BUILDER.start();
             final String result = IOUtils.toString(process.getInputStream());
-            assertTrue(result.contains(
-                    "- Error reading wrong. It isn't a valid policy value because it isn't a boolean value"));
+            assertTrue(result.contains("- Policy wrong doesn't exist"));
 
             process.destroy();
         } catch (IOException e) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractConsoleITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractConsoleITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractConsoleITCase.java
index 2b32490..f6e1a24 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractConsoleITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractConsoleITCase.java
@@ -86,8 +86,6 @@ public abstract class AbstractConsoleITCase extends AbstractITCase {
 
                     @Override
                     public void component(final ListItem<?> object, final IVisit<Component> visit) {
-                        System.out.println("EEEEEEEEEEE " + object.getPath());
-                        
                         try {
                             Method getter = PropertyResolver.getPropertyGetter(property, object.getModelObject());
                             if (getter != null && getter.invoke(object.getModelObject()).equals(key)) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractTypesITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractTypesITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractTypesITCase.java
index e2e7d50..feaa2f1 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractTypesITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractTypesITCase.java
@@ -29,8 +29,8 @@ public abstract class AbstractTypesITCase extends AbstractConsoleITCase {
     protected static final String PLAIN_DATATABLE_PATH = "body:content:tabbedPanel:panel:"
             + "accordionPanel:tabs:0:body:content:container:content:searchContainer:resultTable";
 
-    protected static final String DATATABLE_PATH
-            = "body:content:tabbedPanel:panel:container:content:searchContainer:resultTable";
+    protected static final String DATATABLE_PATH =
+            "body:content:tabbedPanel:panel:container:content:searchContainer:resultTable";
 
     @Before
     public void login() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyObjectsITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyObjectsITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyObjectsITCase.java
index 88ae5b2..40befd3 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyObjectsITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AnyObjectsITCase.java
@@ -24,13 +24,13 @@ import org.apache.wicket.Component;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.util.tester.FormTester;
-import org.junit.Before;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
 import org.junit.runners.MethodSorters;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.wicket.markup.html.form.IndicatingOnConfirmAjaxLink;
 import org.apache.wicket.markup.html.form.TextField;
+import org.junit.Before;
 
 @FixMethodOrder(MethodSorters.JVM)
 public class AnyObjectsITCase extends AbstractConsoleITCase {
@@ -65,7 +65,8 @@ public class AnyObjectsITCase extends AbstractConsoleITCase {
         wicketTester.clickLink("body:content:body:tabbedPanel:tabs-container:tabs:3:link");
 
         Component component = findComponentByProp("key", searchResultContainer
-                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 1L);
+                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
+                "8559d14d-58c2-46eb-a2d4-a7d35161e8f8");
         assertNotNull(component);
 
         wicketTester.clickLink(component.getPageRelativePath() + ":cells:3:cell:panelClone:cloneLink");
@@ -82,7 +83,8 @@ public class AnyObjectsITCase extends AbstractConsoleITCase {
         wicketTester.clickLink("body:content:body:tabbedPanel:tabs-container:tabs:3:link");
 
         Component component = findComponentByProp("key", searchResultContainer
-                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 1L);
+                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
+                "8559d14d-58c2-46eb-a2d4-a7d35161e8f8");
         assertNotNull(component);
 
         wicketTester.clickLink(component.getPageRelativePath() + ":cells:3:cell:panelEdit:editLink");
@@ -121,7 +123,8 @@ public class AnyObjectsITCase extends AbstractConsoleITCase {
         wicketTester.clickLink(tabPanel + "outerObjectsRepeater:0:outer:form:content:action:panelClose:closeLink");
 
         component = findComponentByProp("key", searchResultContainer
-                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 1L);
+                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
+                "8559d14d-58c2-46eb-a2d4-a7d35161e8f8");
         assertNotNull(component);
     }
 
@@ -131,7 +134,8 @@ public class AnyObjectsITCase extends AbstractConsoleITCase {
         wicketTester.clickLink("body:content:body:tabbedPanel:tabs-container:tabs:3:link");
 
         Component component = findComponentByProp("key", searchResultContainer
-                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 1L);
+                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
+                "8559d14d-58c2-46eb-a2d4-a7d35161e8f8");
         assertNotNull(component);
 
         wicketTester.assertComponent(component.getPageRelativePath() + ":cells:3:cell:panelDelete:deleteLink",

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
index fcce73f..bff9cab 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
@@ -231,7 +231,8 @@ public class BulkActionITCase extends AbstractConsoleITCase {
         wicketTester.clickLink("body:content:body:tabbedPanel:tabs-container:tabs:3:link");
 
         Component component = findComponentByProp("key", searchResultContainer
-                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 1L);
+                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
+                "8559d14d-58c2-46eb-a2d4-a7d35161e8f8");
         assertNotNull(component);
 
         wicketTester.clickLink(component.getPageRelativePath()

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/console/GroupsITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/GroupsITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/GroupsITCase.java
index 9153cde..ad97b3e 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/GroupsITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/GroupsITCase.java
@@ -64,7 +64,7 @@ public class GroupsITCase extends AbstractConsoleITCase {
         wicketTester.clickLink("body:content:body:tabbedPanel:tabs-container:tabs:2:link");
 
         Component component = findComponentByProp("name", searchResultContainer
-                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "root");
+                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "secretary");
         assertNotNull(component);
 
         wicketTester.clickLink(component.getPageRelativePath() + ":cells:4:cell:panelClone:cloneLink");
@@ -74,7 +74,7 @@ public class GroupsITCase extends AbstractConsoleITCase {
 
         FormTester formTester = wicketTester.newFormTester(tabPanel + "outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);
-        
+
         formTester.submit("buttons:cancel");
     }
 
@@ -84,7 +84,7 @@ public class GroupsITCase extends AbstractConsoleITCase {
         wicketTester.clickLink("body:content:body:tabbedPanel:tabs-container:tabs:2:link");
 
         Component component = findComponentByProp("name", searchResultContainer
-                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "root");
+                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "secretary");
         assertNotNull(component);
 
         wicketTester.clickLink(component.getPageRelativePath() + ":cells:4:cell:panelEdit:editLink");
@@ -134,9 +134,8 @@ public class GroupsITCase extends AbstractConsoleITCase {
         wicketTester.clickLink(tabPanel + "outerObjectsRepeater:0:outer:form:content:action:panelClose:closeLink");
 
         component = findComponentByProp("name", searchResultContainer
-                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "root");
+                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "secretary");
         assertNotNull(component);
-
     }
 
     @Test
@@ -145,7 +144,7 @@ public class GroupsITCase extends AbstractConsoleITCase {
         wicketTester.clickLink("body:content:body:tabbedPanel:tabs-container:tabs:2:link");
 
         Component component = findComponentByProp("name", searchResultContainer
-                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "root");
+                + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "secretary");
         assertNotNull(component);
 
         wicketTester.assertComponent(component.getPageRelativePath() + ":cells:4:cell:panelDelete:deleteLink",

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/console/LogsITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/LogsITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/LogsITCase.java
index c7a8ee3..70f5881 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/LogsITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/LogsITCase.java
@@ -41,7 +41,8 @@ public class LogsITCase extends AbstractConsoleITCase {
     @Before
     public void login() {
         doLogin(ADMIN_UNAME, ADMIN_PWD);
-        browsingToLogs();
+        wicketTester.clickLink("body:configurationLI:configurationUL:logsLI:logs");
+        wicketTester.assertRenderedPage(Logs.class);
     }
 
     @Test
@@ -113,9 +114,4 @@ public class LogsITCase extends AbstractConsoleITCase {
                 });
         return result;
     }
-
-    private void browsingToLogs() {
-        wicketTester.clickLink("body:configurationLI:configurationUL:logsLI:logs");
-        wicketTester.assertRenderedPage(Logs.class);
-    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SecurityQuestionsITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SecurityQuestionsITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SecurityQuestionsITCase.java
index d6bc897..10d5531 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SecurityQuestionsITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SecurityQuestionsITCase.java
@@ -20,11 +20,13 @@ package org.apache.syncope.fit.console;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import org.apache.syncope.client.console.pages.SecurityQuestions;
 import org.apache.wicket.Component;
 import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink;
+import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.util.tester.FormTester;
 import org.junit.Before;
 import org.junit.FixMethodOrder;
@@ -40,8 +42,8 @@ public class SecurityQuestionsITCase extends AbstractConsoleITCase {
         wicketTester.assertComponent(
                 "body:content:securityQuestionPanel:outerObjectsRepeater:0:outer", Modal.class);
 
-        FormTester formTester
-                = wicketTester.newFormTester("body:content:securityQuestionPanel:outerObjectsRepeater:0:outer:form");
+        FormTester formTester =
+                wicketTester.newFormTester("body:content:securityQuestionPanel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:securityQuestionDetailsPanel:container:form:content:textField",
                 name);
 
@@ -63,10 +65,10 @@ public class SecurityQuestionsITCase extends AbstractConsoleITCase {
 
     @Test
     public void read() {
-        wicketTester.assertLabel(
+        Label label = (Label) wicketTester.getComponentFromLastRenderedPage(
                 "body:content:securityQuestionPanel:container:content:searchContainer:resultTable:"
-                + "tablePanel:groupForm:checkgroup:dataTable:body:rows:1:cells:2:cell",
-                "What&#039;s your mother&#039;s maiden name?");
+                + "tablePanel:groupForm:checkgroup:dataTable:body:rows:1:cells:2:cell");
+        assertTrue(label.getDefaultModelObjectAsString().startsWith("What&#039;s your "));
 
         wicketTester.assertComponent(
                 "body:content:securityQuestionPanel:container:content:"
@@ -77,24 +79,24 @@ public class SecurityQuestionsITCase extends AbstractConsoleITCase {
 
     @Test
     public void create() {
-        createRealm("What's your favorite team?");
+        createRealm("What's your preferred team?");
     }
 
     @Test
     public void update() {
-        createRealm("What's your favorite color?");
+        createRealm("What's your preferred color?");
         Component result = findComponentByProp("content", "body:content:securityQuestionPanel:container:content:"
                 + "searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
-                "What's your favorite color?");
+                "What's your preferred color?");
 
         assertNotNull(result);
 
         wicketTester.clickLink(result.getPageRelativePath() + ":cells:3:cell:panelEdit:editLink");
 
-        FormTester formTester
-                = wicketTester.newFormTester("body:content:securityQuestionPanel:outerObjectsRepeater:0:outer:form");
+        FormTester formTester =
+                wicketTester.newFormTester("body:content:securityQuestionPanel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:securityQuestionDetailsPanel:container:form:content:textField",
-                "What's your favorite car?");
+                "What's your preferred car?");
 
         wicketTester.clickLink(
                 "body:content:securityQuestionPanel:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
@@ -105,13 +107,12 @@ public class SecurityQuestionsITCase extends AbstractConsoleITCase {
 
     @Test
     public void delete() {
-        String name = "What's your favorite color?";
+        String name = "What's your preferred color?";
         createRealm(name);
 
         Component result = findComponentByProp("content", "body:content:securityQuestionPanel:container:content:"
                 + "searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
                 name);
-
         assertNotNull(result);
 
         wicketTester.getRequest().addParameter("confirm", "true");

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AbstractTaskITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AbstractTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AbstractTaskITCase.java
index 99fadcf..6f1e677 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AbstractTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AbstractTaskITCase.java
@@ -47,22 +47,22 @@ import org.apache.syncope.fit.AbstractITCase;
 
 public abstract class AbstractTaskITCase extends AbstractITCase {
 
-    protected static final Long PULL_TASK_ID = 4L;
+    protected static final String PULL_TASK_KEY = "c41b9b71-9bfa-4f90-89f2-84787def4c5c";
 
-    protected static final Long SCHED_TASK_ID = 5L;
+    protected static final String SCHED_TASK_KEY = "e95555d2-1b09-42c8-b25b-f4c4ec597979";
 
     protected static class ThreadExec implements Callable<ExecTO> {
 
         private final TaskService taskService;
 
-        private final Long taskKey;
+        private final String taskKey;
 
         private final int maxWaitSeconds;
 
         private final boolean dryRun;
 
         public ThreadExec(
-                final TaskService taskService, final Long taskKey, final int maxWaitSeconds, final boolean dryRun) {
+                final TaskService taskService, final String taskKey, final int maxWaitSeconds, final boolean dryRun) {
 
             this.taskService = taskService;
             this.taskKey = taskKey;
@@ -91,7 +91,7 @@ public abstract class AbstractTaskITCase extends AbstractITCase {
         }
     }
 
-    protected static ExecTO execTask(final TaskService taskService, final Long taskKey, final String initialStatus,
+    protected static ExecTO execTask(final TaskService taskService, final String taskKey, final String initialStatus,
             final int maxWaitSeconds, final boolean dryRun) {
 
         AbstractTaskTO taskTO = taskService.read(taskKey, true);
@@ -127,24 +127,24 @@ public abstract class AbstractTaskITCase extends AbstractITCase {
     }
 
     public static ExecTO execProvisioningTask(
-            final TaskService taskService, final Long taskKey, final int maxWaitSeconds, final boolean dryRun) {
+            final TaskService taskService, final String taskKey, final int maxWaitSeconds, final boolean dryRun) {
 
         return execTask(taskService, taskKey, "JOB_FIRED", maxWaitSeconds, dryRun);
     }
 
     protected static ExecTO execNotificationTask(
-            final TaskService taskService, final Long taskKey, final int maxWaitSeconds) {
+            final TaskService taskService, final String taskKey, final int maxWaitSeconds) {
 
         return execTask(taskService, taskKey, NotificationJob.Status.SENT.name(), maxWaitSeconds, false);
     }
 
     protected void execProvisioningTasks(final TaskService taskService,
-            final Set<Long> taskKeys, final int maxWaitSeconds, final boolean dryRun) throws Exception {
+            final Set<String> taskKeys, final int maxWaitSeconds, final boolean dryRun) throws Exception {
 
         ExecutorService service = Executors.newFixedThreadPool(taskKeys.size());
         List<Future<ExecTO>> futures = new ArrayList<>();
 
-        for (Long key : taskKeys) {
+        for (String key : taskKeys) {
             futures.add(service.submit(new ThreadExec(taskService, key, maxWaitSeconds, dryRun)));
             // avoid flooding the test server
             try {
@@ -162,7 +162,7 @@ public abstract class AbstractTaskITCase extends AbstractITCase {
 
     protected NotificationTaskTO findNotificationTaskBySender(final String sender) {
         PagedResult<NotificationTaskTO> tasks =
-                taskService.list(new TaskQuery.Builder(TaskType.NOTIFICATION).build());
+                taskService.list(new TaskQuery.Builder(TaskType.NOTIFICATION).page(1).size(100).build());
         assertNotNull(tasks);
         assertFalse(tasks.getResult().isEmpty());
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java
index bfc936d..b653de8 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.util.Set;
+import java.util.UUID;
 import javax.ws.rs.core.Response;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.SyncopeConstants;
@@ -78,7 +79,8 @@ public class AnyObjectITCase extends AbstractITCase {
         // 1. create anyObject in realm /odd and attempt to assign group 15, from realm /even => exception
         AnyObjectTO anyObjectTO = getSampleTO("createInvalidMembership");
         anyObjectTO.setRealm("/odd");
-        anyObjectTO.getMemberships().add(new MembershipTO.Builder().group(15L).build());
+        anyObjectTO.getMemberships().add(
+                new MembershipTO.Builder().group("034740a9-fa10-453b-af37-dc7897e98fb1").build());
 
         try {
             createAnyObject(anyObjectTO);
@@ -91,13 +93,13 @@ public class AnyObjectITCase extends AbstractITCase {
         anyObjectTO.setRealm("/even/two");
 
         anyObjectTO = createAnyObject(anyObjectTO).getAny();
-        assertTrue(anyObjectTO.getMembershipMap().containsKey(15L));
+        assertTrue(anyObjectTO.getMembershipMap().containsKey("034740a9-fa10-453b-af37-dc7897e98fb1"));
     }
 
     @Test
     public void delete() {
         try {
-            anyObjectService.delete(0L);
+            anyObjectService.delete(UUID.randomUUID().toString());
         } catch (SyncopeClientException e) {
             assertEquals(Response.Status.NOT_FOUND, e.getType().getResponseStatus());
         }
@@ -131,7 +133,7 @@ public class AnyObjectITCase extends AbstractITCase {
 
     @Test
     public void read() {
-        AnyObjectTO anyObjectTO = anyObjectService.read(1L);
+        AnyObjectTO anyObjectTO = anyObjectService.read("fc6dbc3a-6c07-4965-8781-921e7401a4a5");
         assertNotNull(anyObjectTO);
         assertNotNull(anyObjectTO.getPlainAttrs());
         assertFalse(anyObjectTO.getPlainAttrs().isEmpty());
@@ -200,7 +202,8 @@ public class AnyObjectITCase extends AbstractITCase {
     @Test
     public void issueSYNCOPE756() {
         AnyObjectTO anyObjectTO = getSampleTO("issueSYNCOPE756");
-        anyObjectTO.getRelationships().add(new RelationshipTO.Builder().right(AnyTypeKind.USER.name(), 1).build());
+        anyObjectTO.getRelationships().add(new RelationshipTO.Builder().right(
+                AnyTypeKind.USER.name(), "1417acbe-cbf6-4277-9372-e75e04f97000").build());
 
         try {
             createAnyObject(anyObjectTO).getAny();

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
index 43c9938..2ea5c65 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
@@ -35,9 +35,9 @@ import javax.ws.rs.core.Response;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.IterableUtils;
 import org.apache.commons.collections4.Predicate;
-import org.apache.commons.collections4.Transformer;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.lib.SyncopeClient;
+import org.apache.syncope.common.lib.EntityTOUtils;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.patch.DeassociationPatch;
@@ -83,8 +83,8 @@ import org.springframework.jdbc.core.JdbcTemplate;
 @FixMethodOrder(MethodSorters.JVM)
 public class AuthenticationITCase extends AbstractITCase {
 
-    private int getFailedLogins(final UserService userService, final long userId) {
-        UserTO readUserTO = userService.read(userId);
+    private int getFailedLogins(final UserService userService, final String userKey) {
+        UserTO readUserTO = userService.read(userKey);
         assertNotNull(readUserTO);
         assertNotNull(readUserTO.getFailedLogins());
         return readUserTO.getFailedLogins();
@@ -179,13 +179,13 @@ public class AuthenticationITCase extends AbstractITCase {
         UserService userService2 = clientFactory.create(userTO.getUsername(), "password123").
                 getService(UserService.class);
 
-        UserTO readUserTO = userService2.read(1L);
+        UserTO readUserTO = userService2.read("1417acbe-cbf6-4277-9372-e75e04f97000");
         assertNotNull(readUserTO);
 
         UserService userService3 = clientFactory.create("puccini", ADMIN_PWD).getService(UserService.class);
 
         try {
-            userService3.read(3L);
+            userService3.read("b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee");
             fail();
         } catch (SyncopeClientException e) {
             assertNotNull(e);
@@ -206,31 +206,25 @@ public class AuthenticationITCase extends AbstractITCase {
         UserService userService2 = clientFactory.create(userTO.getUsername(), "password123").
                 getService(UserService.class);
 
-        PagedResult<UserTO> matchedUsers = userService2.search(
+        PagedResult<UserTO> matchingUsers = userService2.search(
                 new AnySearchQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
                 fiql(SyncopeClient.getUserSearchConditionBuilder().isNotNull("key").query()).build());
-        assertNotNull(matchedUsers);
-        assertFalse(matchedUsers.getResult().isEmpty());
-        Set<Long> matchedUserKeys = CollectionUtils.collect(matchedUsers.getResult(),
-                new Transformer<UserTO, Long>() {
-
-            @Override
-            public Long transform(final UserTO input) {
-                return input.getKey();
-            }
-        }, new HashSet<Long>());
-        assertTrue(matchedUserKeys.contains(1L));
-        assertFalse(matchedUserKeys.contains(2L));
-        assertFalse(matchedUserKeys.contains(5L));
+        assertNotNull(matchingUsers);
+        assertFalse(matchingUsers.getResult().isEmpty());
+        Set<String> matchingUserKeys = CollectionUtils.collect(matchingUsers.getResult(),
+                EntityTOUtils.<UserTO>keyTransformer(), new HashSet<String>());
+        assertTrue(matchingUserKeys.contains("1417acbe-cbf6-4277-9372-e75e04f97000"));
+        assertFalse(matchingUserKeys.contains("74cd8ece-715a-44a4-a736-e17b46c4e7e6"));
+        assertFalse(matchingUserKeys.contains("823074dc-d280-436d-a7dd-07399fae48ec"));
 
         // 2. user assigned to role 4, with search entitlement on realm /even/two
         UserService userService3 = clientFactory.create("puccini", ADMIN_PWD).getService(UserService.class);
 
-        matchedUsers = userService3.search(
+        matchingUsers = userService3.search(
                 new AnySearchQuery.Builder().realm("/even/two").
                 fiql(SyncopeClient.getUserSearchConditionBuilder().isNotNull("loginDate").query()).build());
-        assertNotNull(matchedUsers);
-        assertTrue(IterableUtils.matchesAll(matchedUsers.getResult(), new Predicate<UserTO>() {
+        assertNotNull(matchingUsers);
+        assertTrue(IterableUtils.matchesAll(matchingUsers.getResult(), new Predicate<UserTO>() {
 
             @Override
             public boolean evaluate(final UserTO matched) {
@@ -242,7 +236,7 @@ public class AuthenticationITCase extends AbstractITCase {
     @Test
     public void delegatedUserCRUD() {
         String roleKey = null;
-        Long delegatedAdminKey = null;
+        String delegatedAdminKey = null;
         try {
             // 1. create role for full user administration, under realm /even/two
             RoleTO role = new RoleTO();
@@ -335,22 +329,22 @@ public class AuthenticationITCase extends AbstractITCase {
 
         userTO = createUser(userTO).getAny();
         assertNotNull(userTO);
-        long userId = userTO.getKey();
+        String userKey = userTO.getKey();
 
         UserService userService2 = clientFactory.create(userTO.getUsername(), "password123").
                 getService(UserService.class);
-        assertEquals(0, getFailedLogins(userService2, userId));
+        assertEquals(0, getFailedLogins(userService2, userKey));
 
         // authentications failed ...
         SyncopeClient badPwdClient = clientFactory.create(userTO.getUsername(), "wrongpwd1");
         assertReadFails(badPwdClient);
         assertReadFails(badPwdClient);
 
-        assertEquals(2, getFailedLogins(userService, userId));
+        assertEquals(2, getFailedLogins(userService, userKey));
 
         UserService userService4 = clientFactory.create(userTO.getUsername(), "password123").
                 getService(UserService.class);
-        assertEquals(0, getFailedLogins(userService4, userId));
+        assertEquals(0, getFailedLogins(userService4, userKey));
     }
 
     @Test
@@ -360,7 +354,7 @@ public class AuthenticationITCase extends AbstractITCase {
         userTO.getRoles().add("User manager");
 
         userTO = createUser(userTO).getAny();
-        long userKey = userTO.getKey();
+        String userKey = userTO.getKey();
         assertNotNull(userTO);
 
         assertEquals(0, getFailedLogins(userService, userKey));
@@ -476,7 +470,8 @@ public class AuthenticationITCase extends AbstractITCase {
 
         // 1. create user with group 9 (users with group 9 are defined in workflow as subject to approval)
         UserTO userTO = UserITCase.getUniqueSampleTO("createWithReject@syncope.apache.org");
-        userTO.getMemberships().add(new MembershipTO.Builder().group(9L).build());
+        userTO.getMemberships().add(
+                new MembershipTO.Builder().group("0cbcabd2-4410-4b6b-8f05-a052b451d18f").build());
 
         userTO = createUser(userTO).getAny();
         assertNotNull(userTO);
@@ -551,7 +546,7 @@ public class AuthenticationITCase extends AbstractITCase {
     public void issueSYNCOPE706() {
         String username = getUUIDString();
         try {
-            userService.getUserKey(username);
+            userService.read(username);
             fail();
         } catch (SyncopeClientException e) {
             assertEquals(ClientExceptionType.NotFound, e.getType());


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/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 7d30e0b..34ab391 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
@@ -86,18 +86,6 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
     @Autowired
     protected SyncopeLogic syncopeLogic;
 
-    @PreAuthorize("hasRole('" + StandardEntitlement.USER_READ + "')")
-    @Transactional(readOnly = true)
-    public String getUsername(final Long key) {
-        return binder.getUserTO(key).getUsername();
-    }
-
-    @PreAuthorize("hasRole('" + StandardEntitlement.USER_READ + "')")
-    @Transactional(readOnly = true)
-    public Long getKey(final String username) {
-        return binder.getUserTO(username).getKey();
-    }
-
     @PreAuthorize("hasRole('" + StandardEntitlement.USER_LIST + "')")
     @Transactional(readOnly = true)
     @Override
@@ -136,7 +124,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
     @PreAuthorize("hasRole('" + StandardEntitlement.USER_READ + "')")
     @Transactional(readOnly = true)
     @Override
-    public UserTO read(final Long key) {
+    public UserTO read(final String key) {
         return binder.returnUserTO(binder.getUserTO(key));
     }
 
@@ -206,7 +194,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
             securityChecks(effectiveRealms, before.getLeft().getRealm(), null);
         }
 
-        Pair<Long, List<PropagationStatus>> created =
+        Pair<String, List<PropagationStatus>> created =
                 provisioningManager.create(before.getLeft(), storePassword, nullPriorityAsync);
 
         return after(binder.returnUserTO(binder.getUserTO(created.getKey())), created.getRight(), before.getRight());
@@ -241,15 +229,15 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
             securityChecks(effectiveRealms, before.getLeft().getRealm().getValue(), before.getLeft().getKey());
         }
 
-        Pair<Long, List<PropagationStatus>> updated = provisioningManager.update(before.getLeft(), nullPriorityAsync);
+        Pair<String, List<PropagationStatus>> updated = provisioningManager.update(before.getLeft(), nullPriorityAsync);
 
         return after(binder.returnUserTO(binder.getUserTO(updated.getKey())), updated.getRight(), before.getRight());
     }
 
-    protected Pair<Long, List<PropagationStatus>> setStatusOnWfAdapter(
+    protected Pair<String, List<PropagationStatus>> setStatusOnWfAdapter(
             final StatusPatch statusPatch, final boolean nullPriorityAsync) {
 
-        Pair<Long, List<PropagationStatus>> updated;
+        Pair<String, List<PropagationStatus>> updated;
 
         switch (statusPatch.getType()) {
             case SUSPEND:
@@ -279,7 +267,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
                 toUpdate.getRealm());
         securityChecks(effectiveRealms, toUpdate.getRealm(), toUpdate.getKey());
 
-        Pair<Long, List<PropagationStatus>> updated = setStatusOnWfAdapter(statusPatch, nullPriorityAsync);
+        Pair<String, List<PropagationStatus>> updated = setStatusOnWfAdapter(statusPatch, nullPriorityAsync);
 
         return after(
                 binder.returnUserTO(binder.getUserTO(updated.getKey())),
@@ -302,7 +290,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
             throw new NotFoundException("Null username");
         }
 
-        User user = userDAO.find(username);
+        User user = userDAO.findByUsername(username);
         if (user == null) {
             throw new NotFoundException("User " + username);
         }
@@ -334,7 +322,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.USER_DELETE + "')")
     @Override
-    public ProvisioningResult<UserTO> delete(final Long key, final boolean nullPriorityAsync) {
+    public ProvisioningResult<UserTO> delete(final String key, final boolean nullPriorityAsync) {
         UserTO userTO = binder.getUserTO(key);
         return doDelete(userTO, false, nullPriorityAsync);
     }
@@ -379,7 +367,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.USER_UPDATE + "')")
     @Override
-    public UserTO unlink(final Long key, final Collection<String> resources) {
+    public UserTO unlink(final String key, final Collection<String> resources) {
         // security checks
         UserTO user = binder.getUserTO(key);
         Set<String> effectiveRealms = getEffectiveRealms(
@@ -402,7 +390,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.USER_UPDATE + "')")
     @Override
-    public UserTO link(final Long key, final Collection<String> resources) {
+    public UserTO link(final String key, final Collection<String> resources) {
         // security checks
         UserTO user = binder.getUserTO(key);
         Set<String> effectiveRealms = getEffectiveRealms(
@@ -426,7 +414,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
     @PreAuthorize("hasRole('" + StandardEntitlement.USER_UPDATE + "')")
     @Override
     public ProvisioningResult<UserTO> unassign(
-            final Long key, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String key, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         // security checks
         UserTO user = binder.getUserTO(key);
@@ -451,7 +439,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
     @PreAuthorize("hasRole('" + StandardEntitlement.USER_UPDATE + "')")
     @Override
     public ProvisioningResult<UserTO> assign(
-            final Long key,
+            final String key,
             final Collection<String> resources,
             final boolean changepwd,
             final String password,
@@ -485,7 +473,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
     @PreAuthorize("hasRole('" + StandardEntitlement.USER_UPDATE + "')")
     @Override
     public ProvisioningResult<UserTO> deprovision(
-            final Long key, final Collection<String> resources, final boolean nullPriorityAsync) {
+            final String key, final Collection<String> resources, final boolean nullPriorityAsync) {
 
         // security checks
         UserTO user = binder.getUserTO(key);
@@ -505,7 +493,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
     @PreAuthorize("hasRole('" + StandardEntitlement.USER_UPDATE + "')")
     @Override
     public ProvisioningResult<UserTO> provision(
-            final Long key,
+            final String key,
             final Collection<String> resources,
             final boolean changePwd,
             final String password,
@@ -533,9 +521,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
 
         if (!"confirmPasswordReset".equals(method.getName()) && ArrayUtils.isNotEmpty(args)) {
             for (int i = 0; key == null && i < args.length; i++) {
-                if (args[i] instanceof Long) {
-                    key = (Long) args[i];
-                } else if (args[i] instanceof String) {
+                if (args[i] instanceof String) {
                     key = (String) args[i];
                 } else if (args[i] instanceof UserTO) {
                     key = ((UserTO) args[i]).getKey();
@@ -545,10 +531,9 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
             }
         }
 
-        if ((key != null) && !key.equals(0L)) {
+        if (key instanceof String) {
             try {
-                return binder.returnUserTO(key instanceof Long
-                        ? binder.getUserTO((Long) key) : binder.getUserTO((String) key));
+                return binder.getUserTO((String) key);
             } catch (Throwable ignore) {
                 LOG.debug("Unresolved reference", ignore);
                 throw new UnresolvedReferenceException(ignore);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/UserWorkflowLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/UserWorkflowLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/UserWorkflowLogic.java
index ebde234..41b89ca 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/UserWorkflowLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/UserWorkflowLogic.java
@@ -66,7 +66,7 @@ public class UserWorkflowLogic extends AbstractTransactionalLogic<WorkflowFormTO
 
     @PreAuthorize("hasRole('" + StandardEntitlement.USER_UPDATE + "')")
     public UserTO executeWorkflowTask(final UserTO userTO, final String taskId) {
-        WorkflowResult<Long> updated = uwfAdapter.execute(userTO, taskId);
+        WorkflowResult<String> updated = uwfAdapter.execute(userTO, taskId);
 
         UserPatch userPatch = new UserPatch();
         userPatch.setKey(userTO.getKey());
@@ -84,7 +84,7 @@ public class UserWorkflowLogic extends AbstractTransactionalLogic<WorkflowFormTO
     @PreAuthorize("hasRole('" + StandardEntitlement.WORKFLOW_FORM_READ + "') and hasRole('"
             + StandardEntitlement.USER_READ + "')")
     @Transactional(rollbackFor = { Throwable.class })
-    public WorkflowFormTO getFormForUser(final Long key) {
+    public WorkflowFormTO getFormForUser(final String key) {
         User user = userDAO.authFind(key);
         return uwfAdapter.getForm(user.getWorkflowId());
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/report/GroupReportlet.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/report/GroupReportlet.java b/core/logic/src/main/java/org/apache/syncope/core/logic/report/GroupReportlet.java
index 1d890a6..726b865 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/report/GroupReportlet.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/report/GroupReportlet.java
@@ -175,8 +175,8 @@ public class GroupReportlet extends AbstractReportlet {
                 String value = null;
                 switch (feature) {
                     case key:
-                        type = ReportXMLConst.XSD_LONG;
-                        value = String.valueOf(group.getKey());
+                        type = ReportXMLConst.XSD_STRING;
+                        value = group.getKey();
                         break;
 
                     case name:
@@ -185,13 +185,13 @@ public class GroupReportlet extends AbstractReportlet {
                         break;
 
                     case groupOwner:
-                        type = ReportXMLConst.XSD_LONG;
-                        value = String.valueOf(group.getGroupOwner());
+                        type = ReportXMLConst.XSD_STRING;
+                        value = group.getGroupOwner().getKey();
                         break;
 
                     case userOwner:
-                        type = ReportXMLConst.XSD_LONG;
-                        value = String.valueOf(group.getUserOwner());
+                        type = ReportXMLConst.XSD_STRING;
+                        value = group.getUserOwner().getKey();
                         break;
 
                     default:
@@ -221,8 +221,8 @@ public class GroupReportlet extends AbstractReportlet {
                 for (UMembership memb : groupDAO.findUMemberships(group)) {
                     atts.clear();
 
-                    atts.addAttribute("", "", "key", ReportXMLConst.XSD_LONG,
-                            String.valueOf(memb.getLeftEnd().getKey()));
+                    atts.addAttribute("", "", "key", ReportXMLConst.XSD_STRING,
+                            memb.getLeftEnd().getKey());
                     atts.addAttribute("", "", "username", ReportXMLConst.XSD_STRING,
                             String.valueOf(memb.getLeftEnd().getUsername()));
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReconciliationReportlet.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReconciliationReportlet.java b/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReconciliationReportlet.java
index a1c86c6..2fb56da 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReconciliationReportlet.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReconciliationReportlet.java
@@ -135,8 +135,8 @@ public class ReconciliationReportlet extends AbstractReportlet {
             String value = null;
             switch (feature) {
                 case key:
-                    type = ReportXMLConst.XSD_LONG;
-                    value = String.valueOf(any.getKey());
+                    type = ReportXMLConst.XSD_STRING;
+                    value = any.getKey();
                     break;
 
                 case username:
@@ -154,8 +154,8 @@ public class ReconciliationReportlet extends AbstractReportlet {
                     break;
 
                 case workflowId:
-                    type = ReportXMLConst.XSD_LONG;
-                    value = String.valueOf(any.getWorkflowId());
+                    type = ReportXMLConst.XSD_STRING;
+                    value = any.getWorkflowId();
                     break;
 
                 case status:
@@ -421,7 +421,7 @@ public class ReconciliationReportlet extends AbstractReportlet {
         for (AnyType anyType : anyTypeDAO.findAll()) {
             if (!anyType.equals(anyTypeDAO.findUser()) && !anyType.equals(anyTypeDAO.findGroup())) {
                 AnyTypeCond anyTypeCond = new AnyTypeCond();
-                anyTypeCond.setAnyTypeName(anyType.getKey());
+                anyTypeCond.setAnyTypeKey(anyType.getKey());
                 SearchCond cond = StringUtils.isBlank(this.conf.getAnyObjectMatchingCond())
                         ? SearchCond.getLeafCond(anyTypeCond)
                         : SearchCond.getAndCond(

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReportJob.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReportJob.java b/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReportJob.java
index cd4bf0a..8b14024 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReportJob.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReportJob.java
@@ -37,7 +37,7 @@ public class ReportJob extends AbstractInterruptableJob {
     /**
      * Key, set by the caller, for identifying the report to be executed.
      */
-    private Long reportKey;
+    private String reportKey;
 
     @Autowired
     private ReportJobDelegate delegate;
@@ -47,7 +47,7 @@ public class ReportJob extends AbstractInterruptableJob {
      *
      * @param reportKey to be set
      */
-    public void setReportKey(final Long reportKey) {
+    public void setReportKey(final String reportKey) {
         this.reportKey = reportKey;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReportJobDelegate.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReportJobDelegate.java b/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReportJobDelegate.java
index 5d5430d..2d040d9 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReportJobDelegate.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReportJobDelegate.java
@@ -75,7 +75,7 @@ public class ReportJobDelegate {
     private ImplementationLookup implementationLookup;
 
     @Transactional
-    public void execute(final Long reportKey) throws JobExecutionException {
+    public void execute(final String reportKey) throws JobExecutionException {
         Report report = reportDAO.find(reportKey);
         if (report == null) {
             throw new JobExecutionException("Report " + reportKey + " not found");

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/logic/src/main/java/org/apache/syncope/core/logic/report/UserReportlet.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/report/UserReportlet.java b/core/logic/src/main/java/org/apache/syncope/core/logic/report/UserReportlet.java
index 724b8ac..38fba8a 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/report/UserReportlet.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/report/UserReportlet.java
@@ -187,8 +187,8 @@ public class UserReportlet extends AbstractReportlet {
                 String value = null;
                 switch (feature) {
                     case key:
-                        type = ReportXMLConst.XSD_LONG;
-                        value = String.valueOf(user.getKey());
+                        type = ReportXMLConst.XSD_STRING;
+                        value = user.getKey();
                         break;
 
                     case username:
@@ -197,8 +197,8 @@ public class UserReportlet extends AbstractReportlet {
                         break;
 
                     case workflowId:
-                        type = ReportXMLConst.XSD_LONG;
-                        value = String.valueOf(user.getWorkflowId());
+                        type = ReportXMLConst.XSD_STRING;
+                        value = user.getWorkflowId();
                         break;
 
                     case status:
@@ -260,7 +260,7 @@ public class UserReportlet extends AbstractReportlet {
                     atts.clear();
 
                     atts.addAttribute("", "", "anyObjectKey",
-                            ReportXMLConst.XSD_LONG, String.valueOf(rel.getRightKey()));
+                            ReportXMLConst.XSD_STRING, rel.getRightKey());
                     handler.startElement("", "", "relationship", atts);
 
                     if (conf.getFeatures().contains(Feature.resources)) {
@@ -282,7 +282,7 @@ public class UserReportlet extends AbstractReportlet {
                     atts.clear();
 
                     atts.addAttribute("", "", "groupKey",
-                            ReportXMLConst.XSD_LONG, String.valueOf(memb.getRightKey()));
+                            ReportXMLConst.XSD_STRING, memb.getRightKey());
                     atts.addAttribute("", "", "groupName", ReportXMLConst.XSD_STRING, memb.getGroupName());
                     handler.startElement("", "", "membership", atts);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java
index e957588..b6d78fd 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java
@@ -27,11 +27,11 @@ import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.Schema;
 
-public interface AnyDAO<A extends Any<?>> extends DAO<A, Long> {
+public interface AnyDAO<A extends Any<?>> extends DAO<A> {
 
-    A authFind(Long key);
+    A authFind(String key);
 
-    A find(Long key);
+    A find(String key);
 
     A findByWorkflowId(String workflowId);
 
@@ -78,7 +78,7 @@ public interface AnyDAO<A extends Any<?>> extends DAO<A, Long> {
 
     A save(A any);
 
-    void delete(Long key);
+    void delete(String key);
 
     void delete(A any);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java
index 7fabda3..bdf9642 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java
@@ -48,7 +48,7 @@ public interface AnyObjectDAO extends AnyDAO<AnyObject> {
 
     Collection<Group> findAllGroups(AnyObject anyObject);
 
-    Collection<Long> findAllGroupKeys(AnyObject anyObject);
+    Collection<String> findAllGroupKeys(AnyObject anyObject);
 
     Collection<ExternalResource> findAllResources(AnyObject anyObject);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnySearchDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnySearchDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnySearchDAO.java
index 67e85f2..b93ca49 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnySearchDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnySearchDAO.java
@@ -25,7 +25,7 @@ import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
 import org.apache.syncope.core.persistence.api.entity.Any;
 
-public interface AnySearchDAO extends DAO<Any<?>, Long> {
+public interface AnySearchDAO extends DAO<Any<?>> {
 
     /**
      * @param adminRealms realms for which the caller owns the proper entitlement(s)

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyTypeClassDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyTypeClassDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyTypeClassDAO.java
index e43740b..3b57b01 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyTypeClassDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyTypeClassDAO.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.dao;
 import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
 
-public interface AnyTypeClassDAO extends DAO<AnyTypeClass, String> {
+public interface AnyTypeClassDAO extends DAO<AnyTypeClass> {
 
     AnyTypeClass find(String key);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyTypeDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyTypeDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyTypeDAO.java
index 32483b5..1c07bce 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyTypeDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyTypeDAO.java
@@ -22,7 +22,7 @@ import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
 
-public interface AnyTypeDAO extends DAO<AnyType, String> {
+public interface AnyTypeDAO extends DAO<AnyType> {
 
     AnyType find(String key);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
index 0c2e477..681ee67 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.dao;
 import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttr;
 import org.apache.syncope.core.persistence.api.entity.conf.Conf;
 
-public interface ConfDAO extends DAO<Conf, Long> {
+public interface ConfDAO extends DAO<Conf> {
 
     CPlainAttr find(String key);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConnInstanceDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConnInstanceDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConnInstanceDAO.java
index b669338..a7ba370 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConnInstanceDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConnInstanceDAO.java
@@ -21,13 +21,13 @@ package org.apache.syncope.core.persistence.api.dao;
 import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.ConnInstance;
 
-public interface ConnInstanceDAO extends DAO<ConnInstance, Long> {
+public interface ConnInstanceDAO extends DAO<ConnInstance> {
 
-    ConnInstance find(Long key);
+    ConnInstance find(String key);
 
     List<ConnInstance> findAll();
 
     ConnInstance save(ConnInstance connector);
 
-    void delete(Long key);
+    void delete(String key);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/DAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/DAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/DAO.java
index 4452890..04ea153 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/DAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/DAO.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.persistence.api.dao;
 
 import org.apache.syncope.core.persistence.api.entity.Entity;
 
-public interface DAO<E extends Entity<KEY>, KEY> {
+public interface DAO<E extends Entity> {
 
     void refresh(E entity);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/DomainDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/DomainDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/DomainDAO.java
index ece1b16..5bc1e6d 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/DomainDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/DomainDAO.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.dao;
 import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.Domain;
 
-public interface DomainDAO extends DAO<Domain, String> {
+public interface DomainDAO extends DAO<Domain> {
 
     Domain find(String key);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceDAO.java
index b92e9f2..94914a9 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceDAO.java
@@ -25,13 +25,13 @@ import org.apache.syncope.core.persistence.api.entity.Policy;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.resource.Provision;
 
-public interface ExternalResourceDAO extends DAO<ExternalResource, String> {
+public interface ExternalResourceDAO extends DAO<ExternalResource> {
 
     int count();
 
     ExternalResource find(String key);
 
-    Provision findProvision(Long key);
+    Provision findProvision(String key);
 
     List<Provision> findProvisionsByAuxClass(AnyTypeClass anyTypeClass);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
index 1de4ba2..f0a5b08 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
@@ -35,11 +35,13 @@ public interface GroupDAO extends AnyDAO<Group> {
 
     Map<String, Integer> countByRealm();
 
-    Group find(String name);
+    Group findByName(String name);
 
-    List<Group> findOwnedByUser(Long userKey);
+    Group authFindByName(String name);
 
-    List<Group> findOwnedByGroup(Long groupKey);
+    List<Group> findOwnedByUser(String userKey);
+
+    List<Group> findOwnedByGroup(String groupKey);
 
     List<AMembership> findAMemberships(Group group);
 
@@ -52,7 +54,7 @@ public interface GroupDAO extends AnyDAO<Group> {
      * @return map containing pairs with any object key and operations to be performed on those resources (DELETE,
      * typically).
      */
-    Map<Long, PropagationByResource> findAnyObjectsWithTransitiveResources(Long groupKey);
+    Map<String, PropagationByResource> findAnyObjectsWithTransitiveResources(String groupKey);
 
     /**
      * Finds users having resources assigned exclusively because of memberships of the given group.
@@ -61,7 +63,7 @@ public interface GroupDAO extends AnyDAO<Group> {
      * @return map containing pairs with user key and operations to be performed on those resources (DELETE,
      * typically).
      */
-    Map<Long, PropagationByResource> findUsersWithTransitiveResources(Long groupKey);
+    Map<String, PropagationByResource> findUsersWithTransitiveResources(String groupKey);
 
     List<TypeExtension> findTypeExtensions(AnyTypeClass anyTypeClass);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/LoggerDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/LoggerDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/LoggerDAO.java
index 0ce4b6a..55a5db7 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/LoggerDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/LoggerDAO.java
@@ -22,7 +22,7 @@ import java.util.List;
 import org.apache.syncope.common.lib.types.LoggerType;
 import org.apache.syncope.core.persistence.api.entity.Logger;
 
-public interface LoggerDAO extends DAO<Logger, String> {
+public interface LoggerDAO extends DAO<Logger> {
 
     Logger find(String key);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/MailTemplateDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/MailTemplateDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/MailTemplateDAO.java
index 38ec5ad..9f40918 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/MailTemplateDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/MailTemplateDAO.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.dao;
 import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.MailTemplate;
 
-public interface MailTemplateDAO extends DAO<MailTemplate, String> {
+public interface MailTemplateDAO extends DAO<MailTemplate> {
 
     MailTemplate find(String key);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/NotificationDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/NotificationDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/NotificationDAO.java
index 779cc0b..569e6db 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/NotificationDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/NotificationDAO.java
@@ -22,9 +22,9 @@ import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.MailTemplate;
 import org.apache.syncope.core.persistence.api.entity.Notification;
 
-public interface NotificationDAO extends DAO<Notification, Long> {
+public interface NotificationDAO extends DAO<Notification> {
 
-    Notification find(Long key);
+    Notification find(String key);
 
     List<Notification> findByTemplate(MailTemplate template);
 
@@ -32,5 +32,5 @@ public interface NotificationDAO extends DAO<Notification, Long> {
 
     Notification save(Notification notification);
 
-    void delete(Long key);
+    void delete(String key);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PlainAttrDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PlainAttrDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PlainAttrDAO.java
index e15b634..204aade 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PlainAttrDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PlainAttrDAO.java
@@ -20,11 +20,11 @@ package org.apache.syncope.core.persistence.api.dao;
 
 import org.apache.syncope.core.persistence.api.entity.PlainAttr;
 
-public interface PlainAttrDAO extends DAO<PlainAttr<?>, Long> {
+public interface PlainAttrDAO extends DAO<PlainAttr<?>> {
 
-    <T extends PlainAttr<?>> T find(Long key, Class<T> reference);
+    <T extends PlainAttr<?>> T find(String key, Class<T> reference);
 
-    <T extends PlainAttr<?>> void delete(Long key, Class<T> reference);
+    <T extends PlainAttr<?>> void delete(String key, Class<T> reference);
 
     <T extends PlainAttr<?>> void delete(T attr);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PlainAttrValueDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PlainAttrValueDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PlainAttrValueDAO.java
index b554442..36a2b92 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PlainAttrValueDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PlainAttrValueDAO.java
@@ -21,15 +21,15 @@ package org.apache.syncope.core.persistence.api.dao;
 import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
 
-public interface PlainAttrValueDAO extends DAO<PlainAttrValue, Long> {
+public interface PlainAttrValueDAO extends DAO<PlainAttrValue> {
 
-    <T extends PlainAttrValue> T find(Long key, Class<T> reference);
+    <T extends PlainAttrValue> T find(String key, Class<T> reference);
 
     <T extends PlainAttrValue> List<T> findAll(Class<T> reference);
 
     <T extends PlainAttrValue> T save(T attributeValue);
 
-    <T extends PlainAttrValue> void delete(Long key, Class<T> reference);
+    <T extends PlainAttrValue> void delete(String key, Class<T> reference);
 
     <T extends PlainAttrValue> void delete(T attributeValue);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PolicyDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PolicyDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PolicyDAO.java
index aa41223..245758b 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PolicyDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PolicyDAO.java
@@ -23,9 +23,9 @@ import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.Policy;
 
-public interface PolicyDAO extends DAO<Policy, Long> {
+public interface PolicyDAO extends DAO<Policy> {
 
-    <T extends Policy> T find(Long key);
+    <T extends Policy> T find(String key);
 
     <T extends Policy> List<T> find(Class<T> reference);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RealmDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RealmDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RealmDAO.java
index f8c94b6..42bd7b9 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RealmDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RealmDAO.java
@@ -23,15 +23,15 @@ import java.util.regex.Pattern;
 import org.apache.syncope.core.persistence.api.entity.Policy;
 import org.apache.syncope.core.persistence.api.entity.Realm;
 
-public interface RealmDAO extends DAO<Realm, Long> {
+public interface RealmDAO extends DAO<Realm> {
 
     Pattern PATH_PATTERN = Pattern.compile("^(/[A-Za-z0-9]+)+");
 
     Realm getRoot();
 
-    Realm find(Long key);
+    Realm find(String key);
 
-    Realm find(String fullPath);
+    Realm findByFullPath(String fullPath);
 
     <T extends Policy> List<Realm> findByPolicy(T policy);
 
@@ -47,5 +47,5 @@ public interface RealmDAO extends DAO<Realm, Long> {
 
     void delete(Realm realm);
 
-    void delete(Long key);
+    void delete(String key);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RelationshipTypeDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RelationshipTypeDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RelationshipTypeDAO.java
index e7d14b9..5388e1b 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RelationshipTypeDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RelationshipTypeDAO.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.dao;
 import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.RelationshipType;
 
-public interface RelationshipTypeDAO extends DAO<RelationshipType, String> {
+public interface RelationshipTypeDAO extends DAO<RelationshipType> {
 
     RelationshipType find(String key);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportDAO.java
index cfce78f..89f07ff 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportDAO.java
@@ -22,9 +22,9 @@ import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.Report;
 import org.apache.syncope.core.persistence.api.entity.ReportTemplate;
 
-public interface ReportDAO extends DAO<Report, Long> {
+public interface ReportDAO extends DAO<Report> {
 
-    Report find(Long key);
+    Report find(String key);
 
     List<Report> findByTemplate(ReportTemplate template);
 
@@ -32,7 +32,7 @@ public interface ReportDAO extends DAO<Report, Long> {
 
     Report save(Report report);
 
-    void delete(Long key);
+    void delete(String key);
 
     void delete(Report report);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportExecDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportExecDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportExecDAO.java
index dd79dd9..f4c1fcf 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportExecDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportExecDAO.java
@@ -23,9 +23,9 @@ import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.Report;
 import org.apache.syncope.core.persistence.api.entity.ReportExec;
 
-public interface ReportExecDAO extends DAO<ReportExec, Long> {
+public interface ReportExecDAO extends DAO<ReportExec> {
 
-    ReportExec find(Long key);
+    ReportExec find(String key);
 
     List<ReportExec> findRecent(int max);
 
@@ -37,7 +37,7 @@ public interface ReportExecDAO extends DAO<ReportExec, Long> {
 
     ReportExec save(ReportExec execution);
 
-    void delete(Long key);
+    void delete(String key);
 
     void delete(ReportExec execution);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportTemplateDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportTemplateDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportTemplateDAO.java
index 6796f9b..3274660 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportTemplateDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportTemplateDAO.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.dao;
 import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.ReportTemplate;
 
-public interface ReportTemplateDAO extends DAO<ReportTemplate, String> {
+public interface ReportTemplateDAO extends DAO<ReportTemplate> {
 
     ReportTemplate find(String key);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java
index 2b76eb9..c5ff0e8 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java
@@ -23,7 +23,7 @@ import org.apache.syncope.core.persistence.api.entity.Realm;
 import org.apache.syncope.core.persistence.api.entity.Role;
 import org.apache.syncope.core.persistence.api.entity.user.User;
 
-public interface RoleDAO extends DAO<Role, String> {
+public interface RoleDAO extends DAO<Role> {
 
     int count();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/SchemaDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/SchemaDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/SchemaDAO.java
index 64a78fb..6a51d79 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/SchemaDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/SchemaDAO.java
@@ -23,7 +23,7 @@ import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
 import org.apache.syncope.core.persistence.api.entity.Schema;
 
-public interface SchemaDAO<S extends Schema> extends DAO<S, String> {
+public interface SchemaDAO<S extends Schema> extends DAO<S> {
 
     S find(String name);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/SecurityQuestionDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/SecurityQuestionDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/SecurityQuestionDAO.java
index e001f41..a632292 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/SecurityQuestionDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/SecurityQuestionDAO.java
@@ -21,14 +21,14 @@ package org.apache.syncope.core.persistence.api.dao;
 import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.user.SecurityQuestion;
 
-public interface SecurityQuestionDAO extends DAO<SecurityQuestion, Long> {
+public interface SecurityQuestionDAO extends DAO<SecurityQuestion> {
 
-    SecurityQuestion find(Long key);
+    SecurityQuestion find(String key);
 
     List<SecurityQuestion> findAll();
 
     SecurityQuestion save(SecurityQuestion securityQuestion);
 
-    void delete(Long key);
+    void delete(String key);
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskDAO.java
index 19eb2e4..c39bf94 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskDAO.java
@@ -26,26 +26,36 @@ import org.apache.syncope.core.persistence.api.entity.Notification;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.task.Task;
 
-public interface TaskDAO extends DAO<Task, Long> {
+public interface TaskDAO extends DAO<Task> {
 
     Class<? extends Task> getEntityReference(TaskType type);
 
-    <T extends Task> T find(Long key);
+    <T extends Task> T find(String key);
 
     <T extends Task> List<T> findToExec(TaskType type);
 
     <T extends Task> List<T> findAll(TaskType type);
 
     <T extends Task> List<T> findAll(
-            TaskType type, ExternalResource resource, Notification notification, AnyTypeKind anyTypeKind, Long anyKey,
-            int page, int itemsPerPage, List<OrderByClause> orderByClauses);
+            TaskType type,
+            ExternalResource resource,
+            Notification notification,
+            AnyTypeKind anyTypeKind,
+            String anyKey,
+            int page,
+            int itemsPerPage,
+            List<OrderByClause> orderByClauses);
 
     int count(
-            TaskType type, ExternalResource resource, Notification notification, AnyTypeKind anyTypeKind, Long anyKey);
+            TaskType type,
+            ExternalResource resource,
+            Notification notification,
+            AnyTypeKind anyTypeKind,
+            String anyKey);
 
     <T extends Task> T save(T task);
 
-    void delete(Long key);
+    void delete(String key);
 
     void delete(Task task);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskExecDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskExecDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskExecDAO.java
index 4af1453..703ad74 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskExecDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskExecDAO.java
@@ -24,9 +24,9 @@ import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.entity.task.Task;
 import org.apache.syncope.core.persistence.api.entity.task.TaskExec;
 
-public interface TaskExecDAO extends DAO<TaskExec, Long> {
+public interface TaskExecDAO extends DAO<TaskExec> {
 
-    TaskExec find(Long key);
+    TaskExec find(String key);
 
     List<TaskExec> findRecent(int max);
 
@@ -37,15 +37,15 @@ public interface TaskExecDAO extends DAO<TaskExec, Long> {
     <T extends Task> List<TaskExec> findAll(
             T task, Date startedBefore, Date startedAfter, Date endedBefore, Date endedAfter);
 
-    int count(Long taskKey);
+    int count(String taskKey);
 
     <T extends Task> List<TaskExec> findAll(T task, int page, int itemsPerPage, List<OrderByClause> orderByClauses);
 
     TaskExec save(TaskExec execution);
 
-    void saveAndAdd(Long taskId, TaskExec execution);
+    void saveAndAdd(String taskKey, TaskExec execution);
 
-    void delete(Long key);
+    void delete(String key);
 
     void delete(TaskExec execution);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java
index 3eed6bc..dce9a1e 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java
@@ -36,9 +36,9 @@ public interface UserDAO extends AnyDAO<User> {
 
     Map<String, Integer> countByStatus();
 
-    User authFind(String username);
+    User authFindByUsername(String username);
 
-    User find(String username);
+    User findByUsername(String username);
 
     User findByToken(String token);
 
@@ -52,7 +52,7 @@ public interface UserDAO extends AnyDAO<User> {
 
     Collection<Group> findAllGroups(User user);
 
-    Collection<Long> findAllGroupKeys(User user);
+    Collection<String> findAllGroupKeys(User user);
 
     Collection<ExternalResource> findAllResources(User user);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/AnyTypeCond.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/AnyTypeCond.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/AnyTypeCond.java
index a12a3e7..5072fc1 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/AnyTypeCond.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/AnyTypeCond.java
@@ -22,19 +22,19 @@ public class AnyTypeCond extends AbstractSearchCond {
 
     private static final long serialVersionUID = 4298076973281246633L;
 
-    private String anyTypeName;
+    private String anyTypeKey;
 
-    public String getAnyTypeName() {
-        return anyTypeName;
+    public String getAnyTypeKey() {
+        return anyTypeKey;
     }
 
-    public void setAnyTypeName(final String anyTypeName) {
-        this.anyTypeName = anyTypeName;
+    public void setAnyTypeKey(final String anyTypeKey) {
+        this.anyTypeKey = anyTypeKey;
     }
 
     @Override
     public boolean isValid() {
-        return anyTypeName != null;
+        return anyTypeKey != null;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/MembershipCond.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/MembershipCond.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/MembershipCond.java
index 8872107..7f9bca5 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/MembershipCond.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/MembershipCond.java
@@ -22,13 +22,13 @@ public class MembershipCond extends AbstractSearchCond {
 
     private static final long serialVersionUID = -728155256293925989L;
 
-    private Long groupKey;
+    private String groupKey;
 
-    public Long getGroupKey() {
+    public String getGroupKey() {
         return groupKey;
     }
 
-    public void setGroupKey(final Long groupKey) {
+    public void setGroupKey(final String groupKey) {
         this.groupKey = groupKey;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/RelationshipCond.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/RelationshipCond.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/RelationshipCond.java
index ec26eb8..587634f 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/RelationshipCond.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/RelationshipCond.java
@@ -22,13 +22,13 @@ public class RelationshipCond extends AbstractSearchCond {
 
     private static final long serialVersionUID = 6865985945516722103L;
 
-    private Long anyObjectKey;
+    private String anyObjectKey;
 
-    public Long getAnyObjectKey() {
+    public String getAnyObjectKey() {
         return anyObjectKey;
     }
 
-    public void setAnyObjectKey(final Long anyObjectKey) {
+    public void setAnyObjectKey(final String anyObjectKey) {
         this.anyObjectKey = anyObjectKey;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/ResourceCond.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/ResourceCond.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/ResourceCond.java
index 7d9818f..a20f3e6 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/ResourceCond.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/ResourceCond.java
@@ -25,18 +25,18 @@ public class ResourceCond extends AbstractSearchCond {
 
     private static final long serialVersionUID = 466054166309460002L;
 
-    private String resourceName;
+    private String resourceKey;
 
-    public String getResourceName() {
-        return resourceName;
+    public String getResourceKey() {
+        return resourceKey;
     }
 
-    public void setResourceName(final String resourceName) {
-        this.resourceName = resourceName;
+    public void setResourceKey(final String resourceKey) {
+        this.resourceKey = resourceKey;
     }
 
     @Override
     public final boolean isValid() {
-        return resourceName != null;
+        return resourceKey != null;
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/SearchCond.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/SearchCond.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/SearchCond.java
index a33ccf3..5b4b926 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/SearchCond.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/SearchCond.java
@@ -313,7 +313,7 @@ public class SearchCond extends AbstractSearchCond {
             case LEAF:
             case NOT_LEAF:
                 if (anyTypeCond != null) {
-                    anyTypeName = anyTypeCond.getAnyTypeName();
+                    anyTypeName = anyTypeCond.getAnyTypeKey();
                 }
                 break;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnnotatedEntity.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnnotatedEntity.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnnotatedEntity.java
index 2847d74..7792b41 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnnotatedEntity.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnnotatedEntity.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.persistence.api.entity;
 
 import java.util.Date;
 
-public interface AnnotatedEntity<KEY> extends Entity<KEY> {
+public interface AnnotatedEntity extends Entity {
 
     Date getCreationDate();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
index c5d4af7..b1580e3 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.entity;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import java.util.List;
 
-public interface Any<P extends PlainAttr<?>> extends AnnotatedEntity<Long> {
+public interface Any<P extends PlainAttr<?>> extends AnnotatedEntity {
 
     AnyType getType();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyAbout.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyAbout.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyAbout.java
index 2f1684b..ba3180c 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyAbout.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyAbout.java
@@ -18,7 +18,7 @@
  */
 package org.apache.syncope.core.persistence.api.entity;
 
-public interface AnyAbout extends Entity<Long> {
+public interface AnyAbout extends Entity {
 
     Notification getNotification();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyTemplate.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyTemplate.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyTemplate.java
index c00d3a4..25aa666 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyTemplate.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyTemplate.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.persistence.api.entity;
 
 import org.apache.syncope.common.lib.to.AnyTO;
 
-public interface AnyTemplate extends Entity<Long> {
+public interface AnyTemplate extends Entity {
 
     AnyType getAnyType();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyType.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyType.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyType.java
index 0a807fb..0d89fac 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyType.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyType.java
@@ -21,9 +21,7 @@ package org.apache.syncope.core.persistence.api.entity;
 import java.util.List;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 
-public interface AnyType extends Entity<String> {
-
-    void setKey(String key);
+public interface AnyType extends ProvidedKeyEntity {
 
     AnyTypeKind getKind();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyTypeClass.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyTypeClass.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyTypeClass.java
index 1908b69..c7906df 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyTypeClass.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyTypeClass.java
@@ -20,9 +20,7 @@ package org.apache.syncope.core.persistence.api.entity;
 
 import java.util.List;
 
-public interface AnyTypeClass extends Entity<String> {
-
-    void setKey(String key);
+public interface AnyTypeClass extends ProvidedKeyEntity {
 
     boolean add(PlainSchema schema);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ConnInstance.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ConnInstance.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ConnInstance.java
index 43af15b..90650a2 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ConnInstance.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ConnInstance.java
@@ -18,13 +18,13 @@
  */
 package org.apache.syncope.core.persistence.api.entity;
 
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import java.util.List;
 import java.util.Set;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.syncope.common.lib.types.ConnectorCapability;
+import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 
-public interface ConnInstance extends Entity<Long> {
+public interface ConnInstance extends Entity {
 
     void setConnectorName(String connectorName);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Domain.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Domain.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Domain.java
index 7c496f0..dab1074 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Domain.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Domain.java
@@ -20,9 +20,7 @@ package org.apache.syncope.core.persistence.api.entity;
 
 import org.apache.syncope.common.lib.types.CipherAlgorithm;
 
-public interface Domain extends Entity<String> {
-
-    void setKey(String name);
+public interface Domain extends ProvidedKeyEntity {
 
     String getAdminPwd();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/DynMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/DynMembership.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/DynMembership.java
index 9062bd9..c3bcea9 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/DynMembership.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/DynMembership.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.persistence.api.entity;
 
 import java.util.List;
 
-public interface DynMembership<A extends Any<?>> extends Entity<Long> {
+public interface DynMembership<A extends Any<?>> extends Entity {
 
     String getFIQLCond();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Entity.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Entity.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Entity.java
index 8f7934a..1f59d0b 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Entity.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Entity.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.persistence.api.entity;
 
 import java.io.Serializable;
 
-public interface Entity<KEY> extends Serializable {
+public interface Entity extends Serializable {
 
-    KEY getKey();
+    String getKey();
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/EntityFactory.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/EntityFactory.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/EntityFactory.java
index 91a6a0f..29be9ed 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/EntityFactory.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/EntityFactory.java
@@ -1,5 +1,3 @@
-package org.apache.syncope.core.persistence.api.entity;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements. See the NOTICE file
@@ -18,9 +16,11 @@ package org.apache.syncope.core.persistence.api.entity;
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.syncope.core.persistence.api.entity;
+
 public interface EntityFactory {
 
-    <KEY, T extends Entity<KEY>> T newEntity(Class<T> reference);
+    <E extends Entity> E newEntity(Class<E> reference);
 
     ConnPoolConf newConnPoolConf();
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Exec.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Exec.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Exec.java
index 8654b1d..3f34ae1 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Exec.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Exec.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.persistence.api.entity;
 
 import java.util.Date;
 
-public interface Exec extends Entity<Long> {
+public interface Exec extends Entity {
 
     /**
      * Set a message for this execution, taking care of replacing every null character with newline.

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/LinkingMappingItem.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/LinkingMappingItem.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/LinkingMappingItem.java
index 781b77a..85b7d5a 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/LinkingMappingItem.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/LinkingMappingItem.java
@@ -39,8 +39,8 @@ public class LinkingMappingItem implements MappingItem {
     }
 
     @Override
-    public Long getKey() {
-        return -1L;
+    public String getKey() {
+        return null;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Logger.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Logger.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Logger.java
index 6206e95..875854b 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Logger.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Logger.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.entity;
 import org.apache.syncope.common.lib.types.LoggerLevel;
 import org.apache.syncope.common.lib.types.LoggerType;
 
-public interface Logger extends Entity<String> {
+public interface Logger extends Entity {
 
     void setKey(String name);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/MailTemplate.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/MailTemplate.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/MailTemplate.java
index e6ea97d..1218d25 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/MailTemplate.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/MailTemplate.java
@@ -18,9 +18,7 @@
  */
 package org.apache.syncope.core.persistence.api.entity;
 
-public interface MailTemplate extends Entity<String> {
-
-    void setKey(String key);
+public interface MailTemplate extends ProvidedKeyEntity {
 
     String getTextTemplate();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Notification.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Notification.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Notification.java
index 00bd23a..38a053f 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Notification.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Notification.java
@@ -22,7 +22,7 @@ import java.util.List;
 import org.apache.syncope.common.lib.types.IntMappingType;
 import org.apache.syncope.common.lib.types.TraceLevel;
 
-public interface Notification extends Entity<Long> {
+public interface Notification extends Entity {
 
     List<String> getEvents();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/PlainAttr.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/PlainAttr.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/PlainAttr.java
index b7bdc0c..2e44dce 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/PlainAttr.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/PlainAttr.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.persistence.api.entity;
 
 import java.util.List;
 
-public interface PlainAttr<A extends Any<?>> extends Entity<Long> {
+public interface PlainAttr<A extends Any<?>> extends Entity {
 
     A getOwner();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/PlainAttrValue.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/PlainAttrValue.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/PlainAttrValue.java
index e1f43b6..87eac8f 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/PlainAttrValue.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/PlainAttrValue.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.entity;
 import java.util.Date;
 import org.apache.syncope.common.lib.types.AttrSchemaType;
 
-public interface PlainAttrValue extends Entity<Long> {
+public interface PlainAttrValue extends Entity {
 
     PlainAttr<?> getAttr();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Policy.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Policy.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Policy.java
index 39d91ce..85fc90e 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Policy.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Policy.java
@@ -18,7 +18,7 @@
  */
 package org.apache.syncope.core.persistence.api.entity;
 
-public interface Policy extends Entity<Long> {
+public interface Policy extends Entity {
 
     String getDescription();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ProvidedKeyEntity.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ProvidedKeyEntity.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ProvidedKeyEntity.java
new file mode 100644
index 0000000..ccf23a9
--- /dev/null
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ProvidedKeyEntity.java
@@ -0,0 +1,25 @@
+/*
+ * 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.core.persistence.api.entity;
+
+public interface ProvidedKeyEntity extends Entity {
+
+    void setKey(String key);
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Realm.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Realm.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Realm.java
index 71b7a22..c30912d 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Realm.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Realm.java
@@ -23,7 +23,7 @@ import java.util.Set;
 import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy;
 import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
 
-public interface Realm extends Entity<Long> {
+public interface Realm extends Entity {
 
     String getName();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Relationship.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Relationship.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Relationship.java
index 0114908..170ec0d 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Relationship.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Relationship.java
@@ -18,7 +18,7 @@
  */
 package org.apache.syncope.core.persistence.api.entity;
 
-public interface Relationship<L extends Any<?>, R extends Any<?>> extends Entity<Long> {
+public interface Relationship<L extends Any<?>, R extends Any<?>> extends Entity {
 
     RelationshipType getType();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/RelationshipType.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/RelationshipType.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/RelationshipType.java
index 71f1155..142a7f6 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/RelationshipType.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/RelationshipType.java
@@ -18,9 +18,7 @@
  */
 package org.apache.syncope.core.persistence.api.entity;
 
-public interface RelationshipType extends Entity<String> {
-
-    void setKey(String key);
+public interface RelationshipType extends ProvidedKeyEntity {
 
     String getDescription();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Report.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Report.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Report.java
index 08650c2..3e51233 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Report.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Report.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.entity;
 import java.util.List;
 import org.apache.syncope.common.lib.report.ReportletConf;
 
-public interface Report extends Entity<Long> {
+public interface Report extends Entity {
 
     String getName();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ReportTemplate.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ReportTemplate.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ReportTemplate.java
index 3169f82..fc4062f 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ReportTemplate.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ReportTemplate.java
@@ -18,9 +18,7 @@
  */
 package org.apache.syncope.core.persistence.api.entity;
 
-public interface ReportTemplate extends Entity<String> {
-
-    void setKey(String key);
+public interface ReportTemplate extends ProvidedKeyEntity {
 
     String getFOTemplate();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Role.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Role.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Role.java
index 3987e96..60d62f1 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Role.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Role.java
@@ -22,9 +22,7 @@ import org.apache.syncope.core.persistence.api.entity.user.DynRoleMembership;
 import java.util.List;
 import java.util.Set;
 
-public interface Role extends Entity<String> {
-
-    void setKey(String name);
+public interface Role extends ProvidedKeyEntity {
 
     Set<String> getEntitlements();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Schema.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Schema.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Schema.java
index ec6bf50..544408f 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Schema.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Schema.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.persistence.api.entity;
 
 import org.apache.syncope.common.lib.types.AttrSchemaType;
 
-public interface Schema extends Entity<String> {
+public interface Schema extends ProvidedKeyEntity {
 
     AnyTypeClass getAnyTypeClass();
 
@@ -36,6 +36,4 @@ public interface Schema extends Entity<String> {
 
     boolean isUniqueConstraint();
 
-    void setKey(String name);
-
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/anyobject/AnyObject.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/anyobject/AnyObject.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/anyobject/AnyObject.java
index c40c643..ac5fda0 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/anyobject/AnyObject.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/anyobject/AnyObject.java
@@ -27,9 +27,9 @@ public interface AnyObject extends Any<APlainAttr> {
 
     boolean add(ARelationship relationship);
 
-    ARelationship getRelationship(RelationshipType relationshipType, Long anyObjectKey);
+    ARelationship getRelationship(RelationshipType relationshipType, String anyObjectKey);
 
-    Collection<? extends ARelationship> getRelationships(Long anyObjectKey);
+    Collection<? extends ARelationship> getRelationships(String anyObjectKey);
 
     Collection<? extends ARelationship> getRelationships(RelationshipType relationshipType);
 
@@ -37,7 +37,7 @@ public interface AnyObject extends Any<APlainAttr> {
 
     boolean add(AMembership membership);
 
-    AMembership getMembership(Long membershipKey);
+    AMembership getMembership(String membershipKey);
 
     List<? extends AMembership> getMemberships();
 


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/resources/indexes.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/indexes.xml b/core/persistence-jpa/src/main/resources/indexes.xml
index 3807b35..b9bb332 100644
--- a/core/persistence-jpa/src/main/resources/indexes.xml
+++ b/core/persistence-jpa/src/main/resources/indexes.xml
@@ -45,24 +45,24 @@ under the License.
   <entry key="CPlainAttrValue_doublevalueIndex">CREATE INDEX CAttrValue_doublevalueIndex ON CPlainAttrValue(doublevalue)</entry>
   <entry key="CPlainAttrValue_booleanvalueIndex">CREATE INDEX CAttrValue_booleanvalueIndex ON CPlainAttrValue(booleanvalue)</entry>
 
-  <entry key="UMembership_GroupIndex">CREATE INDEX UMembership_GroupIndex ON UMembership(group_id)</entry>
-  <entry key="UMembership_UserIndex">CREATE INDEX UMembership_UserIndex ON UMembership(user_id)</entry>
-  <entry key="AMembership_GroupIndex">CREATE INDEX AMembership_GroupIndex ON AMembership(group_id)</entry>
-  <entry key="AMembership_AnyObjectIndex">CREATE INDEX AMembership_AnyObjectIndex ON AMembership(anyObject_id)</entry>
+  <entry key="UMembership_GroupIndex">CREATE INDEX UMembership_GroupIndex ON UMembership(group_key)</entry>
+  <entry key="UMembership_UserIndex">CREATE INDEX UMembership_UserIndex ON UMembership(user_key)</entry>
+  <entry key="AMembership_GroupIndex">CREATE INDEX AMembership_GroupIndex ON AMembership(group_key)</entry>
+  <entry key="AMembership_AnyObjectIndex">CREATE INDEX AMembership_AnyObjectIndex ON AMembership(anyObject_key)</entry>
 
-  <entry key="URelationship_RightIndex">CREATE INDEX URelationship_RightIndex ON URelationship(anyObject_id)</entry>
-  <entry key="URelationship_LeftIndex">CREATE INDEX URelationship_LeftIndex ON URelationship(user_id)</entry>
-  <entry key="ARelationship_RightIndex">CREATE INDEX ARelationship_RightIndex ON ARelationship(right_anyObject_id)</entry>
-  <entry key="ARelationship_AnyObjectIndex">CREATE INDEX ARelationship_AnyObjectIndex ON ARelationship(left_anyObject_id)</entry>
+  <entry key="URelationship_RightIndex">CREATE INDEX URelationship_RightIndex ON URelationship(anyObject_key)</entry>
+  <entry key="URelationship_LeftIndex">CREATE INDEX URelationship_LeftIndex ON URelationship(user_key)</entry>
+  <entry key="ARelationship_RightIndex">CREATE INDEX ARelationship_RightIndex ON ARelationship(right_anyObject_key)</entry>
+  <entry key="ARelationship_AnyObjectIndex">CREATE INDEX ARelationship_AnyObjectIndex ON ARelationship(left_anyObject_key)</entry>
 
-  <entry key="UPlainAttrValue_attrIndex">CREATE INDEX UPlainAttrValue_attrIndex on UPlainAttrValue(attribute_id)</entry>
-  <entry key="GPlainAttrValue_attrIndex">CREATE INDEX GPlainAttrValue_attrIndex on GPlainAttrValue(attribute_id)</entry>
-  <entry key="APlainAttrValue_attrIndex">CREATE INDEX APlainAttrValue_attrIndex on APlainAttrValue(attribute_id)</entry>
-  <entry key="CPlainAttrValue_attrIndex">CREATE INDEX CPlainAttrValue_attrIndex on CPlainAttrValue(attribute_id)</entry>
+  <entry key="UPlainAttrValue_attrIndex">CREATE INDEX UPlainAttrValue_attrIndex on UPlainAttrValue(attribute_key)</entry>
+  <entry key="GPlainAttrValue_attrIndex">CREATE INDEX GPlainAttrValue_attrIndex on GPlainAttrValue(attribute_key)</entry>
+  <entry key="APlainAttrValue_attrIndex">CREATE INDEX APlainAttrValue_attrIndex on APlainAttrValue(attribute_key)</entry>
+  <entry key="CPlainAttrValue_attrIndex">CREATE INDEX CPlainAttrValue_attrIndex on CPlainAttrValue(attribute_key)</entry>
 
-  <entry key="UPlainAttr_owner_id_index">CREATE INDEX UPlainAttr_owner_id_index on UPlainAttr(owner_id)</entry>
-  <entry key="GPlainAttr_owner_id_index">CREATE INDEX GPlainAttr_owner_id_index on GPlainAttr(owner_id)</entry>
-  <entry key="APlainAttr_owner_id_index">CREATE INDEX APlainAttr_owner_id_index on APlainAttr(owner_id)</entry>
+  <entry key="UPlainAttr_owner_key_index">CREATE INDEX UPlainAttr_owner_key_index on UPlainAttr(owner_key)</entry>
+  <entry key="GPlainAttr_owner_key_index">CREATE INDEX GPlainAttr_owner_key_index on GPlainAttr(owner_key)</entry>
+  <entry key="APlainAttr_owner_key_index">CREATE INDEX APlainAttr_owner_key_index on APlainAttr(owner_key)</entry>
 
   <entry key="Task_executedIndex">CREATE INDEX Task_executedIndex ON Task(executed)</entry>
 </properties>

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/resources/persistence-enhance.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/persistence-enhance.xml b/core/persistence-jpa/src/main/resources/persistence-enhance.xml
new file mode 100644
index 0000000..1fbd550
--- /dev/null
+++ b/core/persistence-jpa/src/main/resources/persistence-enhance.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
+                                 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+             version="2.0">
+  
+  <persistence-unit name="Master">
+    <mapping-file>META-INF/spring-orm.xml</mapping-file>
+    <validation-mode>NONE</validation-mode>
+  </persistence-unit>
+  
+</persistence>

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/resources/views.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/views.xml b/core/persistence-jpa/src/main/resources/views.xml
index 48c801e..31eb379 100644
--- a/core/persistence-jpa/src/main/resources/views.xml
+++ b/core/persistence-jpa/src/main/resources/views.xml
@@ -25,225 +25,225 @@ under the License.
   <entry key="user_search">
     CREATE VIEW user_search AS
  
-    SELECT u.id as any_id, u.* FROM SyncopeUser u
+    SELECT u.key as any_key, u.* FROM SyncopeUser u
   </entry>
   <entry key="user_search_unique_attr">
     CREATE VIEW user_search_unique_attr AS
 
-    SELECT ua.owner_id AS any_id,
-    ua.schema_name AS schema_name,
+    SELECT ua.owner_key AS any_key,
+    ua.schema_key AS schema_key,
     uav.booleanvalue AS booleanvalue,
     uav.datevalue AS datevalue,
     uav.doublevalue AS doublevalue,
     uav.longvalue AS longvalue,
     uav.stringvalue AS stringvalue
     FROM UPlainAttrUniqueValue uav, UPlainAttr ua
-    WHERE uav.attribute_id = ua.id
+    WHERE uav.attribute_key = ua.key
   </entry>
   <entry key="user_search_attr">
     CREATE VIEW user_search_attr AS
 
-    SELECT ua.owner_id AS any_id,
-    ua.schema_name AS schema_name,
+    SELECT ua.owner_key AS any_key,
+    ua.schema_key AS schema_key,
     uav.booleanvalue AS booleanvalue,
     uav.datevalue AS datevalue,
     uav.doublevalue AS doublevalue,
     uav.longvalue AS longvalue,
     uav.stringvalue AS stringvalue
     FROM UPlainAttrValue uav, UPlainAttr ua
-    WHERE uav.attribute_id = ua.id
+    WHERE uav.attribute_key = ua.key
   </entry>
   <entry key="user_search_null_attr">
     CREATE VIEW user_search_null_attr AS
 
-    SELECT u.id AS any_id,
-    PlainSchema.name AS schema_name,
+    SELECT u.key AS any_key,
+    PlainSchema.key AS schema_key,
     NULL AS booleanvalue,
     NULL AS datevalue,
     NULL AS doublevalue,
     NULL AS longvalue,
     NULL AS stringvalue
     FROM SyncopeUser u CROSS JOIN PlainSchema
-    LEFT OUTER JOIN UPlainAttr ua ON (PlainSchema.name = ua.schema_name AND ua.owner_id = u.id)
-    WHERE ua.id IS NULL
+    LEFT OUTER JOIN UPlainAttr ua ON (PlainSchema.key = ua.schema_key AND ua.owner_key = u.key)
+    WHERE ua.key IS NULL
   </entry>
   <entry key="user_search_urelationship">
     CREATE VIEW user_search_urelationship AS
 
-    SELECT m.user_id AS any_id, m.anyObject_id AS right_any_id, m.type_name AS type
+    SELECT m.user_key AS any_key, m.anyObject_key AS right_any_key, m.type_key AS type
     FROM URelationship m
   </entry>
   <entry key="user_search_umembership">
     CREATE VIEW user_search_umembership AS
 
-    SELECT m.user_id AS any_id, g.id AS group_id, g.name AS group_name
+    SELECT m.user_key AS any_key, g.key AS group_key, g.name AS group_name
     FROM UMembership m, SyncopeGroup g
-    WHERE m.group_id = g.id
+    WHERE m.group_key = g.key
   </entry>
   <entry key="user_search_udyngmemb">
     CREATE VIEW user_search_udyngmemb AS
 
-    SELECT ds.user_id AS any_id, d.group_id AS group_id
+    SELECT ds.user_key AS any_key, d.group_key AS group_key
     FROM UDynGroupMembership d, UDynGroupMembership_User ds
-    WHERE d.id = ds.uDynGroupMembership_id
+    WHERE d.key = ds.uDynGroupMembership_key
   </entry>
   <entry key="user_search_role">
     CREATE VIEW user_search_role AS
 
-    SELECT ss.user_id AS any_id, ss.role_name AS role_name
+    SELECT ss.user_key AS any_key, ss.role_key AS role_key
     FROM SyncopeUser_SyncopeRole ss
   </entry>
   <entry key="user_search_dynrmemb">
     CREATE VIEW user_search_dynrmemb AS
 
-    SELECT ds.user_id AS any_id, d.role_name AS role_name
+    SELECT ds.user_key AS any_key, d.role_key AS role_key
     FROM DynRoleMembership d, DynRoleMembership_User ds
-    WHERE d.id = ds.dynRoleMembership_id
+    WHERE d.key = ds.dynRoleMembership_key
   </entry>
   <entry key="user_search_resource">
     CREATE VIEW user_search_resource AS
 
-    SELECT st.user_id AS any_id, st.resource_name AS resource_name
+    SELECT st.user_key AS any_key, st.resource_key AS resource_key
     FROM SyncopeUser_ExternalResource st
   </entry>
   <entry key="user_search_group_res">
     CREATE VIEW user_search_group_res AS
 
-    SELECT m.user_id AS any_id, st.resource_name AS resource_name
+    SELECT m.user_key AS any_key, st.resource_key AS resource_key
     FROM UMembership m, SyncopeGroup r, SyncopeGroup_ExternalResource st
-    WHERE m.group_id = r.id AND st.group_id = r.id
+    WHERE m.group_key = r.key AND st.group_key = r.key
   </entry>
 
   <!-- anyObject -->
   <entry key="anyObject_search">
     CREATE VIEW anyObject_search AS
  
-    SELECT a.id as any_id, a.* FROM AnyObject a
+    SELECT a.key as any_key, a.* FROM AnyObject a
   </entry>
   <entry key="anyObject_search_unique_attr">
     CREATE VIEW anyObject_search_unique_attr AS
 
-    SELECT ua.owner_id AS any_id,
-    ua.schema_name AS schema_name,
+    SELECT ua.owner_key AS any_key,
+    ua.schema_key AS schema_key,
     uav.booleanvalue AS booleanvalue,
     uav.datevalue AS datevalue,
     uav.doublevalue AS doublevalue,
     uav.longvalue AS longvalue,
     uav.stringvalue AS stringvalue
     FROM APlainAttrUniqueValue uav, APlainAttr ua
-    WHERE uav.attribute_id = ua.id
+    WHERE uav.attribute_key = ua.key
   </entry>
   <entry key="anyObject_search_attr">
     CREATE VIEW anyObject_search_attr AS
 
-    SELECT ua.owner_id AS any_id,
-    ua.schema_name AS schema_name,
+    SELECT ua.owner_key AS any_key,
+    ua.schema_key AS schema_key,
     uav.booleanvalue AS booleanvalue,
     uav.datevalue AS datevalue,
     uav.doublevalue AS doublevalue,
     uav.longvalue AS longvalue,
     uav.stringvalue AS stringvalue
     FROM APlainAttrValue uav, APlainAttr ua
-    WHERE uav.attribute_id = ua.id
+    WHERE uav.attribute_key = ua.key
   </entry>
   <entry key="anyObject_search_null_attr">
     CREATE VIEW anyObject_search_null_attr AS
 
-    SELECT u.id AS any_id,
-    PlainSchema.name AS schema_name,
+    SELECT u.key AS any_key,
+    PlainSchema.key AS schema_key,
     NULL AS booleanvalue,
     NULL AS datevalue,
     NULL AS doublevalue,
     NULL AS longvalue,
     NULL AS stringvalue
     FROM AnyObject u CROSS JOIN PlainSchema
-    LEFT OUTER JOIN APlainAttr ua ON (PlainSchema.name = ua.schema_name AND ua.owner_id = u.id)
-    WHERE ua.id IS NULL
+    LEFT OUTER JOIN APlainAttr ua ON (PlainSchema.key = ua.schema_key AND ua.owner_key = u.key)
+    WHERE ua.key IS NULL
   </entry>
   <entry key="anyObject_search_arelationship">
     CREATE VIEW anyObject_search_arelationship AS
 
-    SELECT m.left_anyObject_id AS any_id, m.right_anyObject_id AS right_any_id, m.type_name AS type
+    SELECT m.left_anyObject_key AS any_key, m.right_anyObject_key AS right_any_key, m.type_key AS type
     FROM ARelationship m
   </entry>
   <entry key="anyObject_search_amembership">
     CREATE VIEW anyObject_search_amembership AS
 
-    SELECT m.anyObject_id AS any_id, g.id AS group_id, g.name AS group_name
+    SELECT m.anyObject_key AS any_key, g.key AS group_key, g.name AS group_name
     FROM AMembership m, SyncopeGroup g
-    WHERE m.group_id = g.id
+    WHERE m.group_key = g.key
   </entry>
   <entry key="anyObject_search_adyngmemb">
     CREATE VIEW anyObject_search_adyngmemb AS
 
-    SELECT ds.anyObject_id AS any_id, d.group_id AS group_id
+    SELECT ds.anyObject_key AS any_key, d.group_key AS group_key
     FROM ADynGroupMembership d, ADynGroupMembership_AnyObject ds
-    WHERE d.id = ds.aDynGroupMembership_id
+    WHERE d.key = ds.aDynGroupMembership_key
   </entry>
   <entry key="anyObject_search_resource">
     CREATE VIEW anyObject_search_resource AS
 
-    SELECT st.anyObject_id AS any_id, st.resource_name AS resource_name
+    SELECT st.anyObject_key AS any_key, st.resource_key AS resource_key
     FROM AnyObject_ExternalResource st
   </entry>
   <entry key="anyObject_search_group_res">
     CREATE VIEW anyObject_search_group_res AS
 
-    SELECT m.anyObject_id AS any_id, st.resource_name AS resource_name
+    SELECT m.anyObject_key AS any_key, st.resource_key AS resource_key
     FROM AMembership m, SyncopeGroup r, SyncopeGroup_ExternalResource st
-    WHERE m.group_id = r.id AND st.group_id = r.id
+    WHERE m.group_key = r.key AND st.group_key = r.key
   </entry>
 
   <!-- group -->
   <entry key="group_search">
     CREATE VIEW group_search AS
  
-    SELECT r.id as any_id, r.* FROM SyncopeGroup r
+    SELECT r.key as any_key, r.* FROM SyncopeGroup r
   </entry>
   <entry key="group_search_unique_attr">
     CREATE VIEW group_search_unique_attr AS
 
-    SELECT ua.owner_id AS any_id,
-    ua.schema_name AS schema_name,
+    SELECT ua.owner_key AS any_key,
+    ua.schema_key AS schema_key,
     uav.booleanvalue AS booleanvalue,
     uav.datevalue AS datevalue,
     uav.doublevalue AS doublevalue,
     uav.longvalue AS longvalue,
     uav.stringvalue AS stringvalue
     FROM GPlainAttrUniqueValue uav, GPlainAttr ua
-    WHERE uav.attribute_id = ua.id
+    WHERE uav.attribute_key = ua.key
   </entry>
   <entry key="group_search_attr">
     CREATE VIEW group_search_attr AS
 
-    SELECT ua.owner_id AS any_id,
-    ua.schema_name AS schema_name,
+    SELECT ua.owner_key AS any_key,
+    ua.schema_key AS schema_key,
     uav.booleanvalue AS booleanvalue,
     uav.datevalue AS datevalue,
     uav.doublevalue AS doublevalue,
     uav.longvalue AS longvalue,
     uav.stringvalue AS stringvalue
     FROM GPlainAttrValue uav, GPlainAttr ua
-    WHERE uav.attribute_id = ua.id
+    WHERE uav.attribute_key = ua.key
   </entry>
   <entry key="group_search_null_attr">
     CREATE VIEW group_search_null_attr AS
 
-    SELECT u.id AS any_id,
-    PlainSchema.name AS schema_name,
+    SELECT u.key AS any_key,
+    PlainSchema.key AS schema_key,
     NULL AS booleanvalue,
     NULL AS datevalue,
     NULL AS doublevalue,
     NULL AS longvalue,
     NULL AS stringvalue
     FROM SyncopeGroup u CROSS JOIN PlainSchema
-    LEFT OUTER JOIN GPlainAttr ua ON (PlainSchema.name = ua.schema_name AND ua.owner_id = u.id)
-    WHERE ua.id IS NULL
+    LEFT OUTER JOIN GPlainAttr ua ON (PlainSchema.key = ua.schema_key AND ua.owner_key = u.key)
+    WHERE ua.key IS NULL
   </entry>
   <entry key="group_search_resource">
     CREATE VIEW group_search_resource AS
 
-    SELECT st.group_id AS any_id, st.resource_name AS resource_name
+    SELECT st.group_key AS any_key, st.resource_key AS resource_key
     FROM SyncopeGroup_ExternalResource st
   </entry>
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
index 6ab3e01..f12e913 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
@@ -53,7 +53,7 @@ public class AnyObjectTest extends AbstractTest {
 
     @Test
     public void find() {
-        AnyObject anyObject = anyObjectDAO.find(2L);
+        AnyObject anyObject = anyObjectDAO.find("8559d14d-58c2-46eb-a2d4-a7d35161e8f8");
         assertNotNull(anyObject);
         assertNotNull(anyObject.getType());
         assertFalse(anyObject.getType().getClasses().isEmpty());
@@ -63,7 +63,7 @@ public class AnyObjectTest extends AbstractTest {
     public void save() {
         AnyObject anyObject = entityFactory.newEntity(AnyObject.class);
         anyObject.setType(anyTypeDAO.find("PRINTER"));
-        anyObject.setRealm(realmDAO.find(SyncopeConstants.ROOT_REALM));
+        anyObject.setRealm(realmDAO.findByFullPath(SyncopeConstants.ROOT_REALM));
 
         anyObject = anyObjectDAO.save(anyObject);
         assertNotNull(anyObject);
@@ -71,10 +71,10 @@ public class AnyObjectTest extends AbstractTest {
 
     @Test
     public void delete() {
-        AnyObject anyObject = anyObjectDAO.find(2L);
+        AnyObject anyObject = anyObjectDAO.find("8559d14d-58c2-46eb-a2d4-a7d35161e8f8");
         anyObjectDAO.delete(anyObject.getKey());
 
-        AnyObject actual = anyObjectDAO.find(2L);
+        AnyObject actual = anyObjectDAO.find("8559d14d-58c2-46eb-a2d4-a7d35161e8f8");
         assertNull(actual);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
index db26b96..fe7118e 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
@@ -73,11 +73,11 @@ public class AnySearchTest extends AbstractTest {
 
     @Test
     public void anyObjectMatch() {
-        AnyObject anyObject = anyObjectDAO.find(1L);
+        AnyObject anyObject = anyObjectDAO.find("fc6dbc3a-6c07-4965-8781-921e7401a4a5");
         assertNotNull(anyObject);
 
         RelationshipCond relationshipCond = new RelationshipCond();
-        relationshipCond.setAnyObjectKey(2L);
+        relationshipCond.setAnyObjectKey("8559d14d-58c2-46eb-a2d4-a7d35161e8f8");
         assertTrue(searchDAO.matches(anyObject, SearchCond.getLeafCond(relationshipCond), AnyTypeKind.ANY_OBJECT));
 
         RelationshipTypeCond relationshipTypeCond = new RelationshipTypeCond();
@@ -87,25 +87,25 @@ public class AnySearchTest extends AbstractTest {
 
     @Test
     public void userMatch() {
-        User user = userDAO.find(1L);
+        User user = userDAO.find("1417acbe-cbf6-4277-9372-e75e04f97000");
         assertNotNull(user);
 
         MembershipCond groupCond = new MembershipCond();
-        groupCond.setGroupKey(5L);
+        groupCond.setGroupKey("a3c1a693-a6be-483f-a2b3-5cfec146f4bf");
         assertFalse(searchDAO.matches(user, SearchCond.getLeafCond(groupCond), AnyTypeKind.USER));
 
-        groupCond.setGroupKey(1L);
+        groupCond.setGroupKey("37d15e4c-cdc1-460b-a591-8505c8133806");
         assertTrue(searchDAO.matches(user, SearchCond.getLeafCond(groupCond), AnyTypeKind.USER));
 
         RoleCond roleCond = new RoleCond();
         roleCond.setRoleKey("Other");
         assertTrue(searchDAO.matches(user, SearchCond.getLeafCond(roleCond), AnyTypeKind.USER));
 
-        user = userDAO.find(4L);
+        user = userDAO.find("c9b2dec2-00a7-4855-97c0-d854842b4b24");
         assertNotNull(user);
 
         RelationshipCond relationshipCond = new RelationshipCond();
-        relationshipCond.setAnyObjectKey(1L);
+        relationshipCond.setAnyObjectKey("fc6dbc3a-6c07-4965-8781-921e7401a4a5");
         assertTrue(searchDAO.matches(user, SearchCond.getLeafCond(relationshipCond), AnyTypeKind.USER));
 
         RelationshipTypeCond relationshipTypeCond = new RelationshipTypeCond();
@@ -115,7 +115,7 @@ public class AnySearchTest extends AbstractTest {
 
     @Test
     public void groupMatch() {
-        Group group = groupDAO.find(1L);
+        Group group = groupDAO.find("37d15e4c-cdc1-460b-a591-8505c8133806");
         assertNotNull(group);
 
         AttributeCond attrCond = new AttributeCond();
@@ -132,7 +132,7 @@ public class AnySearchTest extends AbstractTest {
         fullnameLeafCond.setExpression("%o%");
 
         MembershipCond groupCond = new MembershipCond();
-        groupCond.setGroupKey(1L);
+        groupCond.setGroupKey("37d15e4c-cdc1-460b-a591-8505c8133806");
 
         AttributeCond loginDateCond = new AttributeCond(AttributeCond.Type.EQ);
         loginDateCond.setSchema("loginDate");
@@ -165,12 +165,12 @@ public class AnySearchTest extends AbstractTest {
         assertNotNull(users);
         assertEquals(4, users.size());
 
-        Set<Long> ids = new HashSet<>(users.size());
+        Set<String> ids = new HashSet<>(users.size());
         for (User user : users) {
             ids.add(user.getKey());
         }
-        assertTrue(ids.contains(1L));
-        assertTrue(ids.contains(3L));
+        assertTrue(ids.contains("1417acbe-cbf6-4277-9372-e75e04f97000"));
+        assertTrue(ids.contains("b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee"));
     }
 
     @Test
@@ -186,7 +186,7 @@ public class AnySearchTest extends AbstractTest {
         assertNotNull(users);
         assertEquals(1, users.size());
 
-        assertEquals(Long.valueOf(4L), users.get(0).getKey());
+        assertEquals("c9b2dec2-00a7-4855-97c0-d854842b4b24", users.get(0).getKey());
     }
 
     @Test
@@ -196,7 +196,7 @@ public class AnySearchTest extends AbstractTest {
         fullnameLeafCond.setExpression("%o%");
 
         MembershipCond groupCond = new MembershipCond();
-        groupCond.setGroupKey(1L);
+        groupCond.setGroupKey("37d15e4c-cdc1-460b-a591-8505c8133806");
 
         AttributeCond loginDateCond = new AttributeCond(AttributeCond.Type.EQ);
         loginDateCond.setSchema("loginDate");
@@ -227,14 +227,14 @@ public class AnySearchTest extends AbstractTest {
     @Test
     public void searchByGroup() {
         MembershipCond groupCond = new MembershipCond();
-        groupCond.setGroupKey(1L);
+        groupCond.setGroupKey("37d15e4c-cdc1-460b-a591-8505c8133806");
 
         List<User> users = searchDAO.search(SearchCond.getLeafCond(groupCond), AnyTypeKind.USER);
         assertNotNull(users);
         assertEquals(2, users.size());
 
         groupCond = new MembershipCond();
-        groupCond.setGroupKey(5L);
+        groupCond.setGroupKey("a3c1a693-a6be-483f-a2b3-5cfec146f4bf");
 
         users = searchDAO.search(SearchCond.getNotLeafCond(groupCond), AnyTypeKind.USER);
         assertNotNull(users);
@@ -271,10 +271,10 @@ public class AnySearchTest extends AbstractTest {
     @Test
     public void searchByResource() {
         ResourceCond ws2 = new ResourceCond();
-        ws2.setResourceName("ws-target-resource-2");
+        ws2.setResourceKey("ws-target-resource-2");
 
         ResourceCond ws1 = new ResourceCond();
-        ws1.setResourceName("ws-target-resource-list-mappings-2");
+        ws1.setResourceKey("ws-target-resource-list-mappings-2");
 
         SearchCond searchCondition = SearchCond.getAndCond(SearchCond.getNotLeafCond(ws2), SearchCond.getLeafCond(ws1));
         assertTrue(searchCondition.isValid());
@@ -309,11 +309,11 @@ public class AnySearchTest extends AbstractTest {
                 SearchCond.getLeafCond(usernameLeafCond),
                 SearchCond.getLeafCond(idRightCond));
 
-        List<User> matchingUsers = searchDAO.search(searchCondition, AnyTypeKind.USER);
-        assertNotNull(matchingUsers);
-        assertEquals(1, matchingUsers.size());
-        assertEquals("rossini", matchingUsers.iterator().next().getUsername());
-        assertEquals(1L, matchingUsers.iterator().next().getKey(), 0);
+        List<User> matching = searchDAO.search(searchCondition, AnyTypeKind.USER);
+        assertNotNull(matching);
+        assertEquals(1, matching.size());
+        assertEquals("rossini", matching.iterator().next().getUsername());
+        assertEquals("1417acbe-cbf6-4277-9372-e75e04f97000", matching.iterator().next().getKey());
     }
 
     @Test
@@ -322,21 +322,21 @@ public class AnySearchTest extends AbstractTest {
         groupNameLeafCond.setSchema("name");
         groupNameLeafCond.setExpression("root");
 
-        AnyCond idRightCond = new AnyCond(AnyCond.Type.LT);
-        idRightCond.setSchema("key");
-        idRightCond.setExpression("2");
+        AnyCond keyRightCond = new AnyCond(AnyCond.Type.EQ);
+        keyRightCond.setSchema("key");
+        keyRightCond.setExpression("37d15e4c-cdc1-460b-a591-8505c8133806");
 
         SearchCond searchCondition = SearchCond.getAndCond(
                 SearchCond.getLeafCond(groupNameLeafCond),
-                SearchCond.getLeafCond(idRightCond));
+                SearchCond.getLeafCond(keyRightCond));
 
         assertTrue(searchCondition.isValid());
 
-        List<Group> matchingGroups = searchDAO.search(searchCondition, AnyTypeKind.GROUP);
-        assertNotNull(matchingGroups);
-        assertEquals(1, matchingGroups.size());
-        assertEquals("root", matchingGroups.iterator().next().getName());
-        assertEquals(1L, matchingGroups.iterator().next().getKey(), 0);
+        List<Group> matching = searchDAO.search(searchCondition, AnyTypeKind.GROUP);
+        assertNotNull(matching);
+        assertEquals(1, matching.size());
+        assertEquals("root", matching.iterator().next().getName());
+        assertEquals("37d15e4c-cdc1-460b-a591-8505c8133806", matching.iterator().next().getKey());
     }
 
     @Test
@@ -360,42 +360,24 @@ public class AnySearchTest extends AbstractTest {
     }
 
     @Test
-    public void searchById() {
-        AnyCond idLeafCond = new AnyCond(AnyCond.Type.LT);
-        idLeafCond.setSchema("id");
-        idLeafCond.setExpression("2");
+    public void searchByKey() {
+        AnyCond keyLeafCond = new AnyCond(AnyCond.Type.EQ);
+        keyLeafCond.setSchema("key");
+        keyLeafCond.setExpression("74cd8ece-715a-44a4-a736-e17b46c4e7e6");
 
-        SearchCond searchCondition = SearchCond.getLeafCond(idLeafCond);
+        SearchCond searchCondition = SearchCond.getLeafCond(keyLeafCond);
         assertTrue(searchCondition.isValid());
 
         List<User> users = searchDAO.search(searchCondition, AnyTypeKind.USER);
         assertNotNull(users);
         assertEquals(1, users.size());
-        assertEquals(1L, users.iterator().next().getKey(), 0);
-
-        idLeafCond = new AnyCond(AnyCond.Type.LT);
-        idLeafCond.setSchema("id");
-        idLeafCond.setExpression("4");
-
-        searchCondition = SearchCond.getNotLeafCond(idLeafCond);
-        assertTrue(searchCondition.isValid());
-
-        users = searchDAO.search(searchCondition, AnyTypeKind.USER);
-        assertNotNull(users);
-        assertEquals(2, users.size());
-        assertTrue(IterableUtils.matchesAny(users, new Predicate<User>() {
-
-            @Override
-            public boolean evaluate(User user) {
-                return user.getKey() == 4;
-            }
-        }));
+        assertEquals("74cd8ece-715a-44a4-a736-e17b46c4e7e6", users.iterator().next().getKey());
     }
 
     @Test
     public void searchByType() {
         AnyTypeCond tcond = new AnyTypeCond();
-        tcond.setAnyTypeName("PRINTER");
+        tcond.setAnyTypeKey("PRINTER");
 
         SearchCond searchCondition = SearchCond.getLeafCond(tcond);
         assertTrue(searchCondition.isValid());
@@ -404,7 +386,7 @@ public class AnySearchTest extends AbstractTest {
         assertNotNull(printers);
         assertEquals(3, printers.size());
 
-        tcond.setAnyTypeName("UNEXISTING");
+        tcond.setAnyTypeKey("UNEXISTING");
         printers = searchDAO.search(searchCondition, AnyTypeKind.ANY_OBJECT);
         assertNotNull(printers);
         assertTrue(printers.isEmpty());
@@ -417,7 +399,7 @@ public class AnySearchTest extends AbstractTest {
         relationshipTypeCond.setRelationshipTypeKey("neighborhood");
 
         AnyTypeCond tcond = new AnyTypeCond();
-        tcond.setAnyTypeName("PRINTER");
+        tcond.setAnyTypeKey("PRINTER");
 
         SearchCond searchCondition = SearchCond.getAndCond(
                 SearchCond.getLeafCond(relationshipTypeCond), SearchCond.getLeafCond(tcond));
@@ -430,14 +412,14 @@ public class AnySearchTest extends AbstractTest {
 
             @Override
             public boolean evaluate(final Any<?> any) {
-                return any.getKey() == 1L;
+                return "fc6dbc3a-6c07-4965-8781-921e7401a4a5".equals(any.getKey());
             }
         }));
         assertTrue(IterableUtils.matchesAny(matching, new Predicate<Any<?>>() {
 
             @Override
             public boolean evaluate(final Any<?> any) {
-                return any.getKey() == 2L;
+                return "8559d14d-58c2-46eb-a2d4-a7d35161e8f8".equals(any.getKey());
             }
         }));
 
@@ -445,12 +427,12 @@ public class AnySearchTest extends AbstractTest {
         searchCondition = SearchCond.getLeafCond(relationshipTypeCond);
         matching = searchDAO.search(searchCondition, AnyTypeKind.USER);
         assertNotNull(matching);
-        assertEquals(2, matching.size());
+        assertEquals(1, matching.size());
         assertTrue(IterableUtils.matchesAny(matching, new Predicate<Any<?>>() {
 
             @Override
             public boolean evaluate(final Any<?> any) {
-                return any.getKey() == 4L;
+                return "c9b2dec2-00a7-4855-97c0-d854842b4b24".equals(any.getKey());
             }
         }));
     }
@@ -512,14 +494,14 @@ public class AnySearchTest extends AbstractTest {
 
             @Override
             public boolean evaluate(final Group group) {
-                return group.getKey().equals(15L);
+                return "additional".equals(group.getName());
             }
         }));
         assertFalse(IterableUtils.matchesAny(groups, new Predicate<Group>() {
 
             @Override
             public boolean evaluate(final Group group) {
-                return group.getKey().equals(16L);
+                return "fake".equals(group.getName());
             }
         }));
 
@@ -533,7 +515,7 @@ public class AnySearchTest extends AbstractTest {
 
             @Override
             public boolean evaluate(final AnyObject anyObject) {
-                return anyObject.getKey().equals(3L);
+                return "9e1d130c-d6a3-48b1-98b3-182477ed0688".equals(anyObject.getKey());
             }
         }));
     }
@@ -541,10 +523,10 @@ public class AnySearchTest extends AbstractTest {
     @Test
     public void issue202() {
         ResourceCond ws2 = new ResourceCond();
-        ws2.setResourceName("ws-target-resource-2");
+        ws2.setResourceKey("ws-target-resource-2");
 
         ResourceCond ws1 = new ResourceCond();
-        ws1.setResourceName("ws-target-resource-list-mappings-1");
+        ws1.setResourceKey("ws-target-resource-list-mappings-1");
 
         SearchCond searchCondition =
                 SearchCond.getAndCond(SearchCond.getNotLeafCond(ws2), SearchCond.getNotLeafCond(ws1));
@@ -556,8 +538,8 @@ public class AnySearchTest extends AbstractTest {
         assertTrue(IterableUtils.matchesAny(users, new Predicate<User>() {
 
             @Override
-            public boolean evaluate(User user) {
-                return user.getKey() == 4;
+            public boolean evaluate(final User user) {
+                return "c9b2dec2-00a7-4855-97c0-d854842b4b24".equals(user.getKey());
             }
         }));
     }
@@ -565,7 +547,7 @@ public class AnySearchTest extends AbstractTest {
     @Test
     public void issue242() {
         AnyCond cond = new AnyCond(AttributeCond.Type.LIKE);
-        cond.setSchema("id");
+        cond.setSchema("key");
         cond.setExpression("test%");
 
         SearchCond searchCondition = SearchCond.getLeafCond(cond);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java
index 6033bd4..b8eb01a 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java
@@ -52,7 +52,7 @@ public class ConnInstanceTest extends AbstractTest {
 
     @Test
     public void findById() {
-        ConnInstance connectorInstance = connInstanceDAO.find(100L);
+        ConnInstance connectorInstance = connInstanceDAO.find("88a7a819-dab5-46b4-9b90-0b9769eabdb8");
 
         assertNotNull("findById did not work", connectorInstance);
 
@@ -82,7 +82,7 @@ public class ConnInstanceTest extends AbstractTest {
         connInstance.setConnRequestTimeout(60);
 
         // set the connector configuration using PropertyTO
-        Set<ConnConfProperty> conf = new HashSet<ConnConfProperty>();
+        Set<ConnConfProperty> conf = new HashSet<>();
 
         ConnConfPropSchema endpointSchema = new ConnConfPropSchema();
         endpointSchema.setName("endpoint");
@@ -112,8 +112,6 @@ public class ConnInstanceTest extends AbstractTest {
 
         assertNotNull("save did not work", actual.getKey());
 
-        assertTrue("save did not work", actual.getKey() > 100L);
-
         assertEquals("save did not work for \"name\" attribute", "WebService", actual.getConnectorName());
 
         assertEquals("save did not work for \"bundle name\" attribute", "org.apache.syncope.core.persistence.test.util",
@@ -134,12 +132,12 @@ public class ConnInstanceTest extends AbstractTest {
 
     @Test
     public void delete() {
-        ConnInstance connectorInstance = connInstanceDAO.find(100L);
+        ConnInstance connectorInstance = connInstanceDAO.find("88a7a819-dab5-46b4-9b90-0b9769eabdb8");
         assertNotNull("find to delete did not work", connectorInstance);
 
         connInstanceDAO.delete(connectorInstance.getKey());
 
-        ConnInstance actual = connInstanceDAO.find(100L);
+        ConnInstance actual = connInstanceDAO.find("88a7a819-dab5-46b4-9b90-0b9769eabdb8");
         assertNull("delete did not work", actual);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java
index c4dba81..2d7e0ce 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java
@@ -53,10 +53,10 @@ public class GroupTest extends AbstractTest {
 
     @Test
     public void find() {
-        Group group = groupDAO.find("root");
+        Group group = groupDAO.findByName("root");
         assertNotNull("did not find expected group", group);
 
-        group = groupDAO.find("additional");
+        group = groupDAO.findByName("additional");
         assertNotNull(group);
         assertEquals(1, group.getTypeExtensions().size());
         assertEquals(2, group.getTypeExtension(anyTypeDAO.findUser()).getAuxClasses().size());
@@ -66,7 +66,7 @@ public class GroupTest extends AbstractTest {
     public void save() {
         Group group = entityFactory.newEntity(Group.class);
         group.setName("secondChild");
-        group.setRealm(realmDAO.find(SyncopeConstants.ROOT_REALM));
+        group.setRealm(realmDAO.findByFullPath(SyncopeConstants.ROOT_REALM));
 
         group = groupDAO.save(group);
 
@@ -76,10 +76,10 @@ public class GroupTest extends AbstractTest {
 
     @Test
     public void delete() {
-        Group group = groupDAO.find(4L);
+        Group group = groupDAO.find("8fb2d51e-c605-4e80-a72b-13ffecf1aa9a");
         groupDAO.delete(group.getKey());
 
-        Group actual = groupDAO.find(4L);
+        Group actual = groupDAO.find("8fb2d51e-c605-4e80-a72b-13ffecf1aa9a");
         assertNull("delete did not work", actual);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/NotificationTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/NotificationTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/NotificationTest.java
index 4d88246..e9c7836 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/NotificationTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/NotificationTest.java
@@ -48,7 +48,7 @@ public class NotificationTest extends AbstractTest {
 
     @Test
     public void find() {
-        Notification notification = notificationDAO.find(10L);
+        Notification notification = notificationDAO.find("9e2b911c-25de-4c77-bcea-b86ed9451050");
         assertNotNull(notification);
         assertNotNull(notification.getEvents());
         assertFalse(notification.getEvents().isEmpty());
@@ -91,8 +91,8 @@ public class NotificationTest extends AbstractTest {
 
     @Test
     public void delete() {
-        notificationDAO.delete(10L);
-        assertNull(notificationDAO.find(10L));
+        notificationDAO.delete("9e2b911c-25de-4c77-bcea-b86ed9451050");
+        assertNull(notificationDAO.find("9e2b911c-25de-4c77-bcea-b86ed9451050"));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
index b033ecb..712aa51 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
@@ -59,16 +59,16 @@ public class PlainAttrTest extends AbstractTest {
     private PlainSchemaDAO plainSchemaDAO;
 
     @Test
-    public void findById() {
-        UPlainAttr attribute = plainAttrDAO.find(100L, UPlainAttr.class);
-        assertNotNull("did not find expected attribute schema", attribute);
-        attribute = plainAttrDAO.find(104L, UPlainAttr.class);
-        assertNotNull("did not find expected attribute schema", attribute);
+    public void findByKey() {
+        UPlainAttr attribute = plainAttrDAO.find("01f22fbd-b672-40af-b528-686d9b27ebc4", UPlainAttr.class);
+        assertNotNull("did not find expected attribute", attribute);
+        attribute = plainAttrDAO.find("9d0d9e40-1b18-488e-9482-37dab82163c9", UPlainAttr.class);
+        assertNotNull("did not find expected attribute", attribute);
     }
 
     @Test
     public void read() {
-        UPlainAttr attribute = plainAttrDAO.find(100L, UPlainAttr.class);
+        UPlainAttr attribute = plainAttrDAO.find("01f22fbd-b672-40af-b528-686d9b27ebc4", UPlainAttr.class);
         assertNotNull(attribute);
         assertTrue(attribute.getValues().isEmpty());
         assertNotNull(attribute.getUniqueValue());
@@ -76,7 +76,7 @@ public class PlainAttrTest extends AbstractTest {
 
     @Test
     public void save() throws ClassNotFoundException {
-        User user = userDAO.find(1L);
+        User user = userDAO.find("1417acbe-cbf6-4277-9372-e75e04f97000");
 
         PlainSchema emailSchema = plainSchemaDAO.find("email");
         assertNotNull(emailSchema);
@@ -104,7 +104,7 @@ public class PlainAttrTest extends AbstractTest {
 
     @Test
     public void saveWithEnum() throws ClassNotFoundException {
-        User user = userDAO.find(1L);
+        User user = userDAO.find("1417acbe-cbf6-4277-9372-e75e04f97000");
         assertNotNull(user);
 
         PlainSchema gender = plainSchemaDAO.find("gender");
@@ -138,7 +138,7 @@ public class PlainAttrTest extends AbstractTest {
 
     @Test
     public void validateAndSave() {
-        User user = userDAO.find(1L);
+        User user = userDAO.find("1417acbe-cbf6-4277-9372-e75e04f97000");
 
         PlainSchema emailSchema = plainSchemaDAO.find("email");
         assertNotNull(emailSchema);
@@ -175,7 +175,7 @@ public class PlainAttrTest extends AbstractTest {
 
     @Test
     public void saveWithEncrypted() throws Exception {
-        User user = userDAO.find(1L);
+        User user = userDAO.find("1417acbe-cbf6-4277-9372-e75e04f97000");
 
         PlainSchema obscureSchema = plainSchemaDAO.find("obscure");
         assertNotNull(obscureSchema);
@@ -199,7 +199,7 @@ public class PlainAttrTest extends AbstractTest {
 
     @Test
     public void saveWithBinary() throws UnsupportedEncodingException {
-        User user = userDAO.find(1L);
+        User user = userDAO.find("1417acbe-cbf6-4277-9372-e75e04f97000");
 
         PlainSchema photoSchema = plainSchemaDAO.find("photo");
         assertNotNull(photoSchema);
@@ -225,7 +225,8 @@ public class PlainAttrTest extends AbstractTest {
 
     @Test
     public void delete() {
-        UPlainAttr attribute = plainAttrDAO.find(104L, UPlainAttr.class);
+        UPlainAttr attribute = plainAttrDAO.find(
+                "9d0d9e40-1b18-488e-9482-37dab82163c9", UPlainAttr.class);
         String attrSchemaName = attribute.getSchema().getKey();
 
         plainAttrDAO.delete(attribute.getKey(), UPlainAttr.class);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
index a3be9bb..1086d3e 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
@@ -58,7 +58,7 @@ public class PolicyTest extends AbstractTest {
 
     @Test
     public void findByKey() {
-        PullPolicy policy = policyDAO.find(3L);
+        PullPolicy policy = policyDAO.find("880f8553-069b-4aed-9930-2cd53873f544");
         assertNotNull("findById did not work", policy);
 
         PullPolicySpec spec = policy.getSpecification();
@@ -110,7 +110,7 @@ public class PolicyTest extends AbstractTest {
         ruleConf.setMaxLength(8);
         ruleConf.setMinLength(6);
 
-        PasswordPolicy policy = policyDAO.find(2L);
+        PasswordPolicy policy = policyDAO.find("ce93fcda-dc3a-4369-a7b0-a6108c261c85");
         assertNotNull(policy);
         assertEquals(1, policy.getRuleConfs().size());
         policy.add(ruleConf);
@@ -124,12 +124,12 @@ public class PolicyTest extends AbstractTest {
 
     @Test
     public void delete() {
-        Policy policy = policyDAO.find(1L);
+        Policy policy = policyDAO.find("66691e96-285f-4464-bc19-e68384ea4c85");
         assertNotNull("find to delete did not work", policy);
 
         policyDAO.delete(policy);
 
-        Policy actual = policyDAO.find(1L);
+        Policy actual = policyDAO.find("66691e96-285f-4464-bc19-e68384ea4c85");
         assertNull("delete did not work", actual);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
index 0fa7c35..63620cb 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
@@ -57,38 +57,38 @@ public class RealmTest extends AbstractTest {
 
     @Test
     public void find() {
-        Realm realm = realmDAO.find(1L);
+        Realm realm = realmDAO.find("e4c28e7a-9dbf-4ee7-9441-93812a0d4a28");
         assertNotNull(realm);
         assertEquals(SyncopeConstants.ROOT_REALM, realm.getName());
         assertEquals(SyncopeConstants.ROOT_REALM, realm.getFullPath());
 
-        realm = realmDAO.find(3L);
+        realm = realmDAO.find("c5b75db1-fce7-470f-b780-3b9934d82a9d");
         assertNotNull(realm);
         assertEquals("even", realm.getName());
         assertEquals("/even", realm.getFullPath());
-        assertEquals(1, realm.getParent().getKey(), 0);
+        assertEquals("e4c28e7a-9dbf-4ee7-9441-93812a0d4a28", realm.getParent().getKey());
         assertEquals(realmDAO.getRoot(), realm.getParent());
 
-        realm = realmDAO.find("/even/two");
+        realm = realmDAO.findByFullPath("/even/two");
         assertNotNull(realm);
-        assertEquals(4, realm.getKey(), 0);
+        assertEquals("0679e069-7355-4b20-bd11-a5a0a5453c7c", realm.getKey());
         assertEquals("two", realm.getName());
         assertEquals("/even/two", realm.getFullPath());
     }
 
     @Test(expected = MalformedPathException.class)
     public void findInvalidPath() {
-        realmDAO.find("even/two");
+        realmDAO.findByFullPath("even/two");
     }
 
     @Test
     public void findChildren() {
-        List<Realm> children = realmDAO.findChildren(realmDAO.find(SyncopeConstants.ROOT_REALM));
+        List<Realm> children = realmDAO.findChildren(realmDAO.findByFullPath(SyncopeConstants.ROOT_REALM));
         assertEquals(2, children.size());
-        assertTrue(children.contains(realmDAO.find("/odd")));
-        assertTrue(children.contains(realmDAO.find("/even")));
+        assertTrue(children.contains(realmDAO.findByFullPath("/odd")));
+        assertTrue(children.contains(realmDAO.findByFullPath("/even")));
 
-        children = realmDAO.findChildren(realmDAO.find("/odd"));
+        children = realmDAO.findChildren(realmDAO.findByFullPath("/odd"));
         assertTrue(children.isEmpty());
     }
 
@@ -112,24 +112,26 @@ public class RealmTest extends AbstractTest {
     public void save() {
         Realm realm = entityFactory.newEntity(Realm.class);
         realm.setName("last");
-        realm.setParent(realmDAO.find("/even/two"));
+        realm.setParent(realmDAO.findByFullPath("/even/two"));
         assertNull(realm.getKey());
 
         Realm actual = realmDAO.save(realm);
         assertNotNull(actual.getKey());
         assertEquals("last", actual.getName());
         assertEquals("/even/two/last", actual.getFullPath());
-        assertEquals(realmDAO.find("/even/two"), actual.getParent());
-        assertEquals(5L, realm.getAccountPolicy().getKey(), 0);
-        assertEquals(2L, realm.getPasswordPolicy().getKey(), 0);
+        assertEquals(realmDAO.findByFullPath("/even/two"), actual.getParent());
+        assertEquals("20ab5a8c-4b0c-432c-b957-f7fb9784d9f7", realm.getAccountPolicy().getKey());
+        assertEquals("ce93fcda-dc3a-4369-a7b0-a6108c261c85", realm.getPasswordPolicy().getKey());
 
         realm = actual;
-        realm.setAccountPolicy((AccountPolicy) policyDAO.find(6L));
-        realm.setPasswordPolicy((PasswordPolicy) policyDAO.find(4L));
+        realm.setAccountPolicy(
+                (AccountPolicy) policyDAO.find("06e2ed52-6966-44aa-a177-a0ca7434201f"));
+        realm.setPasswordPolicy(
+                (PasswordPolicy) policyDAO.find("986d1236-3ac5-4a19-810c-5ab21d79cba1"));
 
         actual = realmDAO.save(realm);
-        assertEquals(6L, actual.getAccountPolicy().getKey(), 0);
-        assertEquals(4L, actual.getPasswordPolicy().getKey(), 0);
+        assertEquals("06e2ed52-6966-44aa-a177-a0ca7434201f", actual.getAccountPolicy().getKey());
+        assertEquals("986d1236-3ac5-4a19-810c-5ab21d79cba1", actual.getPasswordPolicy().getKey());
     }
 
     @Test
@@ -169,7 +171,7 @@ public class RealmTest extends AbstractTest {
         Realm actual = realmDAO.save(realm);
         assertNotNull(actual);
 
-        Long key = actual.getKey();
+        String key = actual.getKey();
         assertNotNull(realmDAO.find(key));
 
         realmDAO.delete(key);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RelationshipTypeTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RelationshipTypeTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RelationshipTypeTest.java
index 0a16023..3a54a17 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RelationshipTypeTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RelationshipTypeTest.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.util.List;
+import java.util.UUID;
 import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException;
 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
 import org.apache.syncope.core.persistence.api.dao.RelationshipTypeDAO;
@@ -89,7 +90,7 @@ public class RelationshipTypeTest extends AbstractTest {
         RelationshipType neighborhood = relationshipTypeDAO.find("neighborhood");
         assertNotNull(neighborhood);
 
-        AnyObject anyObject = anyObjectDAO.find(1L);
+        AnyObject anyObject = anyObjectDAO.find("fc6dbc3a-6c07-4965-8781-921e7401a4a5");
         assertNotNull(anyObject);
         assertNotNull(anyObject.getRelationships(neighborhood));
         assertFalse(anyObject.getRelationships(neighborhood).isEmpty());
@@ -98,7 +99,7 @@ public class RelationshipTypeTest extends AbstractTest {
 
         relationshipTypeDAO.flush();
 
-        anyObject = anyObjectDAO.find(1L);
+        anyObject = anyObjectDAO.find("fc6dbc3a-6c07-4965-8781-921e7401a4a5");
         assertNotNull(anyObject);
         assertTrue(anyObject.getRelationships().isEmpty());
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ReportTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ReportTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ReportTest.java
index a009f42..e34b8b3 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ReportTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ReportTest.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
 import java.util.List;
+import java.util.UUID;
 import org.apache.syncope.common.lib.report.UserReportletConf;
 import org.apache.syncope.core.persistence.api.dao.ReportDAO;
 import org.apache.syncope.core.persistence.api.dao.ReportTemplateDAO;
@@ -43,10 +44,10 @@ public class ReportTest extends AbstractTest {
 
     @Test
     public void find() {
-        Report report = reportDAO.find(1L);
+        Report report = reportDAO.find("0062ea9c-924d-4ecf-9961-4492a8cc6d1b");
         assertNotNull(report);
 
-        report = reportDAO.find(10L);
+        report = reportDAO.find(UUID.randomUUID().toString());
         assertNull(report);
     }
 
@@ -78,12 +79,12 @@ public class ReportTest extends AbstractTest {
 
     @Test
     public void delete() {
-        Report report = reportDAO.find(1L);
+        Report report = reportDAO.find("0062ea9c-924d-4ecf-9961-4492a8cc6d1b");
         assertNotNull(report);
 
-        reportDAO.delete(1L);
+        reportDAO.delete("0062ea9c-924d-4ecf-9961-4492a8cc6d1b");
 
-        report = reportDAO.find(1L);
+        report = reportDAO.find("0062ea9c-924d-4ecf-9961-4492a8cc6d1b");
         assertNull(report);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java
index 828ce6c..19451e9 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.util.List;
+import java.util.UUID;
 import org.apache.commons.collections4.IterableUtils;
 import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
@@ -73,7 +74,7 @@ public class ResourceTest extends AbstractTest {
 
             @Override
             public boolean evaluate(final MappingItem item) {
-                return 100 == item.getKey();
+                return "7f55b09c-b573-41dc-a9eb-ccd80bd3ea7a".equals(item.getKey());
             }
         }));
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RoleTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RoleTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RoleTest.java
index ce2039a..2b230c0 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RoleTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RoleTest.java
@@ -68,7 +68,7 @@ public class RoleTest extends AbstractTest {
         Role role = entityFactory.newEntity(Role.class);
         role.setKey("new");
         role.add(realmDAO.getRoot());
-        role.add(realmDAO.find("/even/two"));
+        role.add(realmDAO.findByFullPath("/even/two"));
         role.getEntitlements().add(StandardEntitlement.LOG_LIST);
         role.getEntitlements().add(StandardEntitlement.LOG_SET_LEVEL);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/SecurityQuestionTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/SecurityQuestionTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/SecurityQuestionTest.java
index 08466b1..7a84762 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/SecurityQuestionTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/SecurityQuestionTest.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
 import java.util.List;
+import java.util.UUID;
 import org.apache.syncope.core.persistence.api.dao.SecurityQuestionDAO;
 import org.apache.syncope.core.persistence.api.entity.user.SecurityQuestion;
 import org.apache.syncope.core.persistence.jpa.AbstractTest;
@@ -38,7 +39,8 @@ public class SecurityQuestionTest extends AbstractTest {
 
     @Test
     public void find() {
-        SecurityQuestion securityQuestion = securityQuestionDAO.find(1L);
+        SecurityQuestion securityQuestion = securityQuestionDAO.find(
+                "887028ea-66fc-41e7-b397-620d7ea6dfbb");
         assertNotNull(securityQuestion);
         assertNotNull(securityQuestion.getContent());
     }
@@ -62,7 +64,7 @@ public class SecurityQuestionTest extends AbstractTest {
 
     @Test
     public void delete() {
-        securityQuestionDAO.delete(1L);
-        assertNull(securityQuestionDAO.find(1L));
+        securityQuestionDAO.delete("887028ea-66fc-41e7-b397-620d7ea6dfbb");
+        assertNull(securityQuestionDAO.find("887028ea-66fc-41e7-b397-620d7ea6dfbb"));
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskExecTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskExecTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskExecTest.java
index 469816c..df08139 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskExecTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskExecTest.java
@@ -45,7 +45,7 @@ public class TaskExecTest extends AbstractTest {
 
     @Test
     public void findAll() {
-        PropagationTask task = taskDAO.find(1L);
+        PropagationTask task = taskDAO.find("1e697572-b896-484c-ae7f-0c8f63fcbc6c");
         assertNotNull(task);
 
         Calendar calendar = Calendar.getInstance();
@@ -59,17 +59,17 @@ public class TaskExecTest extends AbstractTest {
 
     @Test
     public void findLatestStarted() {
-        PropagationTask task = taskDAO.find(1L);
+        PropagationTask task = taskDAO.find("1e697572-b896-484c-ae7f-0c8f63fcbc6c");
         assertNotNull(task);
 
         TaskExec latestStarted = taskExecDAO.findLatestStarted(task);
         assertNotNull(latestStarted);
-        assertEquals(Long.valueOf(1L), latestStarted.getKey());
+        assertEquals("e58ca1c7-178a-4012-8a71-8aa14eaf0655", latestStarted.getKey());
     }
 
     @Test
     public void issueSYNCOPE214() {
-        PropagationTask task = taskDAO.find(1L);
+        PropagationTask task = taskDAO.find("1e697572-b896-484c-ae7f-0c8f63fcbc6c");
         assertNotNull(task);
 
         String faultyMessage = "A faulty message";

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java
index d0675db..ca11c3f 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java
@@ -107,7 +107,7 @@ public class TaskTest extends AbstractTest {
         ExternalResource resource = resourceDAO.find("ws-target-resource-1");
         assertNotNull(resource);
 
-        User user = userDAO.find(2L);
+        User user = userDAO.find("74cd8ece-715a-44a4-a736-e17b46c4e7e6");
         assertNotNull(user);
 
         PropagationTask task = entityFactory.newEntity(PropagationTask.class);
@@ -131,14 +131,14 @@ public class TaskTest extends AbstractTest {
 
     @Test
     public void delete() {
-        PropagationTask task = taskDAO.find(1L);
+        PropagationTask task = taskDAO.find("1e697572-b896-484c-ae7f-0c8f63fcbc6c");
         assertNotNull(task);
 
         ExternalResource resource = task.getResource();
         assertNotNull(resource);
 
         taskDAO.delete(task);
-        task = taskDAO.find(1L);
+        task = taskDAO.find("1e697572-b896-484c-ae7f-0c8f63fcbc6c");
         assertNull(task);
 
         resource = resourceDAO.find(resource.getKey());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
index 810534b..730a6c2 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
@@ -26,6 +26,7 @@ import static org.junit.Assert.fail;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.UUID;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.types.CipherAlgorithm;
 import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException;
@@ -121,22 +122,18 @@ public class UserTest extends AbstractTest {
     }
 
     @Test
-    public void findById() {
-        User user = userDAO.find(1L);
+    public void findByKey() {
+        User user = userDAO.find("1417acbe-cbf6-4277-9372-e75e04f97000");
         assertNotNull("did not find expected user", user);
-        user = userDAO.find(3L);
-        assertNotNull("did not find expected user", user);
-        user = userDAO.find(6L);
-        assertNull("found user but did not expect it", user);
     }
 
     @Test
     public void findByUsername() {
-        User user = userDAO.find("rossini");
+        User user = userDAO.findByUsername("rossini");
         assertNotNull("did not find expected user", user);
-        user = userDAO.find("vivaldi");
+        user = userDAO.findByUsername("vivaldi");
         assertNotNull("did not find expected user", user);
-        user = userDAO.find("user6");
+        user = userDAO.findByUsername("user6");
         assertNull("found user but did not expect it", user);
     }
 
@@ -144,7 +141,7 @@ public class UserTest extends AbstractTest {
     public void save() {
         User user = entityFactory.newEntity(User.class);
         user.setUsername("username");
-        user.setRealm(realmDAO.find("/even/two"));
+        user.setRealm(realmDAO.findByFullPath("/even/two"));
         user.setCreator("admin");
         user.setCreationDate(new Date());
 
@@ -177,11 +174,11 @@ public class UserTest extends AbstractTest {
 
     @Test
     public void delete() {
-        User user = userDAO.find(3L);
+        User user = userDAO.find("b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee");
 
         userDAO.delete(user.getKey());
 
-        User actual = userDAO.find(3L);
+        User actual = userDAO.find("b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee");
         assertNull("delete did not work", actual);
     }
 
@@ -189,7 +186,7 @@ public class UserTest extends AbstractTest {
     public void issue237() {
         User user = entityFactory.newEntity(User.class);
         user.setUsername("username");
-        user.setRealm(realmDAO.find("/even/two"));
+        user.setRealm(realmDAO.findByFullPath("/even/two"));
         user.setCreator("admin");
         user.setCreationDate(new Date());
 
@@ -204,7 +201,7 @@ public class UserTest extends AbstractTest {
         User user = entityFactory.newEntity(User.class);
         user.setUsername("username");
         user.setPassword(null, CipherAlgorithm.AES);
-        user.setRealm(realmDAO.find("/even/two"));
+        user.setRealm(realmDAO.findByFullPath("/even/two"));
 
         User actual = userDAO.save(user);
         assertNull(user.getPassword());
@@ -213,7 +210,7 @@ public class UserTest extends AbstractTest {
 
     @Test
     public void issueSYNCOPE226() {
-        User user = userDAO.find(5L);
+        User user = userDAO.find("823074dc-d280-436d-a7dd-07399fae48ec");
         String password = "";
         try {
             password = passwordGenerator.generate(user);
@@ -230,7 +227,7 @@ public class UserTest extends AbstractTest {
 
     @Test
     public void testPasswordGenerator() {
-        User user = userDAO.find(5L);
+        User user = userDAO.find("823074dc-d280-436d-a7dd-07399fae48ec");
 
         String password = "";
         try {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnySearchTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnySearchTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnySearchTest.java
index d000884..17c45ba 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnySearchTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnySearchTest.java
@@ -77,7 +77,7 @@ public class AnySearchTest extends AbstractTest {
         assertNotNull(users);
         assertEquals(1, users.size());
 
-        assertEquals(4L, users.get(0).getKey(), 0);
+        assertEquals("c9b2dec2-00a7-4855-97c0-d854842b4b24", users.get(0).getKey());
     }
 
     @Test
@@ -86,7 +86,7 @@ public class AnySearchTest extends AbstractTest {
         Role role = entityFactory.newEntity(Role.class);
         role.setKey("new");
         role.add(realmDAO.getRoot());
-        role.add(realmDAO.find("/even/two"));
+        role.add(realmDAO.findByFullPath("/even/two"));
         role.getEntitlements().add(StandardEntitlement.LOG_LIST);
         role.getEntitlements().add(StandardEntitlement.LOG_SET_LEVEL);
 
@@ -108,6 +108,6 @@ public class AnySearchTest extends AbstractTest {
         List<User> users = searchDAO.search(SearchCond.getLeafCond(roleCond), AnyTypeKind.USER);
         assertNotNull(users);
         assertEquals(1, users.size());
-        assertEquals(4L, users.get(0).getKey(), 0);
+        assertEquals("c9b2dec2-00a7-4855-97c0-d854842b4b24", users.get(0).getKey());
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceTest.java
index f557e8c..e0794f8 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceTest.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.util.List;
+import java.util.UUID;
 import org.apache.syncope.common.lib.types.ConnectorCapability;
 import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
@@ -46,7 +47,7 @@ public class ConnInstanceTest extends AbstractTest {
 
     @Test
     public void deleteCascade() {
-        ConnInstance connInstance = connInstanceDAO.find(103L);
+        ConnInstance connInstance = connInstanceDAO.find("fcf9f2b0-f7d6-42c9-84a6-61b28255a42b");
         assertNotNull(connInstance);
 
         List<? extends ExternalResource> resources = connInstance.getResources();
@@ -57,7 +58,7 @@ public class ConnInstanceTest extends AbstractTest {
 
         connInstanceDAO.flush();
 
-        ConnInstance actual = connInstanceDAO.find(103L);
+        ConnInstance actual = connInstanceDAO.find("fcf9f2b0-f7d6-42c9-84a6-61b28255a42b");
         assertNull(actual);
 
         for (ExternalResource resource : resources) {
@@ -65,14 +66,9 @@ public class ConnInstanceTest extends AbstractTest {
         }
     }
 
-    /**
-     * Connector change used to miss connector bean registration.
-     *
-     * http://code.google.com/p/syncope/issues/detail?id=176
-     */
     @Test
     public void issue176() {
-        ConnInstance connInstance = connInstanceDAO.find(103L);
+        ConnInstance connInstance = connInstanceDAO.find("fcf9f2b0-f7d6-42c9-84a6-61b28255a42b");
         assertNotNull(connInstance);
         assertTrue(connInstance.getCapabilities().isEmpty());
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
index 7c7df15..ae450aa 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
@@ -91,10 +91,10 @@ public class GroupTest extends AbstractTest {
 
     @Test(expected = InvalidEntityException.class)
     public void saveWithTwoOwners() {
-        Group root = groupDAO.find("root");
+        Group root = groupDAO.findByName("root");
         assertNotNull("did not find expected group", root);
 
-        User user = userDAO.find(1L);
+        User user = userDAO.findByUsername("rossini");
         assertNotNull("did not find expected user", user);
 
         Group group = entityFactory.newEntity(Group.class);
@@ -108,10 +108,10 @@ public class GroupTest extends AbstractTest {
 
     @Test
     public void findByOwner() {
-        Group group = groupDAO.find(6L);
+        Group group = groupDAO.find("ebf97068-aa4b-4a85-9f01-680e8c4cf227");
         assertNotNull("did not find expected group", group);
 
-        User user = userDAO.find(5L);
+        User user = userDAO.find("823074dc-d280-436d-a7dd-07399fae48ec");
         assertNotNull("did not find expected user", user);
 
         assertEquals(user, group.getUserOwner());
@@ -140,7 +140,7 @@ public class GroupTest extends AbstractTest {
 
         groupDAO.flush();
 
-        group = groupDAO.find("new");
+        group = groupDAO.findByName("new");
         assertNotNull(group);
         assertEquals(1, group.getTypeExtensions().size());
         assertEquals(2, group.getTypeExtension(anyTypeDAO.findUser()).getAuxClasses().size());
@@ -148,14 +148,16 @@ public class GroupTest extends AbstractTest {
 
     @Test
     public void delete() {
-        groupDAO.delete(2L);
+        groupDAO.delete("b1f7c12d-ec83-441f-a50e-1691daaedf3b");
 
         groupDAO.flush();
 
-        assertNull(groupDAO.find(2L));
-        assertEquals(userDAO.findAllGroups(userDAO.find(2L)).size(), 2);
-        assertNull(plainAttrDAO.find(700L, GPlainAttr.class));
-        assertNull(plainAttrValueDAO.find(41L, GPlainAttrValue.class));
+        assertNull(groupDAO.find("b1f7c12d-ec83-441f-a50e-1691daaedf3b"));
+        assertEquals(userDAO.findAllGroups(userDAO.findByUsername("verdi")).size(), 2);
+        assertNull(plainAttrDAO.find(
+                "f82fc61f-8e74-4a4b-9f9e-b8a41f38aad9", GPlainAttr.class));
+        assertNull(plainAttrValueDAO.find(
+                "49f35879-2510-4f11-a901-24152f753538", GPlainAttrValue.class));
         assertNotNull(plainSchemaDAO.find("icon"));
     }
 
@@ -178,7 +180,7 @@ public class GroupTest extends AbstractTest {
         // 0. create user matching the condition below
         User user = entityFactory.newEntity(User.class);
         user.setUsername("username");
-        user.setRealm(realmDAO.find("/even/two"));
+        user.setRealm(realmDAO.findByFullPath("/even/two"));
         user.add(anyTypeClassDAO.find("other"));
 
         UPlainAttr attr = entityFactory.newEntity(UPlainAttr.class);
@@ -188,7 +190,7 @@ public class GroupTest extends AbstractTest {
         user.add(attr);
 
         user = userDAO.save(user);
-        Long newUserKey = user.getKey();
+        String newUserKey = user.getKey();
         assertNotNull(newUserKey);
 
         // 1. create group with dynamic membership
@@ -216,12 +218,12 @@ public class GroupTest extends AbstractTest {
 
         // 3. verify that expected users have the created group dynamically assigned
         assertEquals(2, actual.getUDynMembership().getMembers().size());
-        assertEquals(new HashSet<>(Arrays.asList(4L, newUserKey)),
+        assertEquals(new HashSet<>(Arrays.asList("c9b2dec2-00a7-4855-97c0-d854842b4b24", newUserKey)),
                 CollectionUtils.collect(actual.getUDynMembership().getMembers(),
-                        EntityUtils.<Long, User>keyTransformer(),
-                        new HashSet<Long>()));
+                        EntityUtils.<User>keyTransformer(),
+                        new HashSet<String>()));
 
-        user = userDAO.find(4L);
+        user = userDAO.findByUsername("bellini");
         assertNotNull(user);
         Collection<Group> dynGroupMemberships = findDynGroupMemberships(user);
         assertEquals(1, dynGroupMemberships.size());
@@ -234,10 +236,12 @@ public class GroupTest extends AbstractTest {
 
         actual = groupDAO.find(actual.getKey());
         assertEquals(1, actual.getUDynMembership().getMembers().size());
-        assertEquals(4L, actual.getUDynMembership().getMembers().get(0).getKey(), 0);
+        assertEquals(
+                "c9b2dec2-00a7-4855-97c0-d854842b4b24",
+                actual.getUDynMembership().getMembers().get(0).getKey());
 
         // 5. delete group and verify that dynamic membership was also removed
-        Long dynMembershipKey = actual.getUDynMembership().getKey();
+        String dynMembershipKey = actual.getUDynMembership().getKey();
 
         groupDAO.delete(actual);
 
@@ -268,7 +272,7 @@ public class GroupTest extends AbstractTest {
         // 0. create any object matching the condition below
         AnyObject anyObject = entityFactory.newEntity(AnyObject.class);
         anyObject.setType(anyTypeDAO.find("PRINTER"));
-        anyObject.setRealm(realmDAO.find("/even/two"));
+        anyObject.setRealm(realmDAO.findByFullPath("/even/two"));
 
         APlainAttr attr = entityFactory.newEntity(APlainAttr.class);
         attr.setOwner(anyObject);
@@ -277,7 +281,7 @@ public class GroupTest extends AbstractTest {
         anyObject.add(attr);
 
         anyObject = anyObjectDAO.save(anyObject);
-        Long newAnyObjectKey = anyObject.getKey();
+        String newAnyObjectKey = anyObject.getKey();
         assertNotNull(newAnyObjectKey);
 
         // 1. create group with dynamic membership
@@ -306,12 +310,13 @@ public class GroupTest extends AbstractTest {
 
         // 3. verify that expected any objects have the created group dynamically assigned
         assertEquals(2, actual.getADynMembership(anyTypeDAO.find("PRINTER")).getMembers().size());
-        assertEquals(new HashSet<>(Arrays.asList(1L, newAnyObjectKey)),
+        assertEquals(new HashSet<>(Arrays.asList(
+                "fc6dbc3a-6c07-4965-8781-921e7401a4a5", newAnyObjectKey)),
                 CollectionUtils.collect(actual.getADynMembership(anyTypeDAO.find("PRINTER")).getMembers(),
-                        EntityUtils.<Long, AnyObject>keyTransformer(),
-                        new HashSet<Long>()));
+                        EntityUtils.<AnyObject>keyTransformer(),
+                        new HashSet<String>()));
 
-        anyObject = anyObjectDAO.find(1L);
+        anyObject = anyObjectDAO.find("fc6dbc3a-6c07-4965-8781-921e7401a4a5");
         assertNotNull(anyObject);
         Collection<Group> dynGroupMemberships = findDynGroupMemberships(anyObject);
         assertEquals(1, dynGroupMemberships.size());
@@ -324,10 +329,12 @@ public class GroupTest extends AbstractTest {
 
         actual = groupDAO.find(actual.getKey());
         assertEquals(1, actual.getADynMembership(anyTypeDAO.find("PRINTER")).getMembers().size());
-        assertEquals(1L, actual.getADynMembership(anyTypeDAO.find("PRINTER")).getMembers().get(0).getKey(), 0);
+        assertEquals(
+                "fc6dbc3a-6c07-4965-8781-921e7401a4a5",
+                actual.getADynMembership(anyTypeDAO.find("PRINTER")).getMembers().get(0).getKey());
 
         // 5. delete group and verify that dynamic membership was also removed
-        Long dynMembershipKey = actual.getADynMembership(anyTypeDAO.find("PRINTER")).getKey();
+        String dynMembershipKey = actual.getADynMembership(anyTypeDAO.find("PRINTER")).getKey();
 
         groupDAO.delete(actual);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainAttrTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainAttrTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainAttrTest.java
index 331c4ca..456076c 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainAttrTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainAttrTest.java
@@ -41,17 +41,19 @@ public class PlainAttrTest extends AbstractTest {
 
     @Test
     public void deleteAttribute() {
-        plainAttrDAO.delete(117L, UPlainAttr.class);
+        plainAttrDAO.delete("35f407a2-d254-4890-9e45-5a7dd8c8df7d", UPlainAttr.class);
 
         plainAttrDAO.flush();
 
-        assertNull(plainAttrDAO.find(117L, UPlainAttr.class));
-        assertNull(plainAttrValueDAO.find(28L, UPlainAttrValue.class));
+        assertNull(plainAttrDAO.find("35f407a2-d254-4890-9e45-5a7dd8c8df7d", UPlainAttr.class));
+        assertNull(
+                plainAttrValueDAO.find("0c67225a-030a-4c56-b337-17cf7a311f0f", UPlainAttrValue.class));
     }
 
     @Test
     public void deleteAttributeValue() {
-        UPlainAttrValue value = plainAttrValueDAO.find(14L, UPlainAttrValue.class);
+        UPlainAttrValue value = plainAttrValueDAO.find(
+                "7034de3b-3687-4db5-8454-363468f1a9de", UPlainAttrValue.class);
         int attributeValueNumber = value.getAttr().getValues().size();
 
         plainAttrValueDAO.delete(value.getKey(), UPlainAttrValue.class);
@@ -60,7 +62,8 @@ public class PlainAttrTest extends AbstractTest {
 
         assertNull(plainAttrValueDAO.find(value.getKey(), UPlainAttrValue.class));
 
-        UPlainAttr attribute = plainAttrDAO.find(104L, UPlainAttr.class);
+        UPlainAttr attribute = plainAttrDAO.find(
+                "9d0d9e40-1b18-488e-9482-37dab82163c9", UPlainAttr.class);
         assertEquals(attribute.getValues().size(), attributeValueNumber - 1);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java
index a484ac7..1c3ad04 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertTrue;
 
 import java.util.HashSet;
 import java.util.Set;
+import java.util.UUID;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainAttrDAO;
@@ -117,10 +118,10 @@ public class PlainSchemaTest extends AbstractTest {
         }
         assertTrue(mapItems.isEmpty());
 
-        assertNull(plainAttrDAO.find(100L, UPlainAttr.class));
-        assertNull(plainAttrDAO.find(300L, UPlainAttr.class));
-        assertNull(userDAO.find(1L).getPlainAttr("fullname"));
-        assertNull(userDAO.find(3L).getPlainAttr("fullname"));
+        assertNull(plainAttrDAO.find("01f22fbd-b672-40af-b528-686d9b27ebc4", UPlainAttr.class));
+        assertNull(plainAttrDAO.find(UUID.randomUUID().toString(), UPlainAttr.class));
+        assertNull(userDAO.findByUsername("rossini").getPlainAttr("fullname"));
+        assertNull(userDAO.findByUsername("vivaldi").getPlainAttr("fullname"));
     }
 
     @Test
@@ -155,16 +156,16 @@ public class PlainSchemaTest extends AbstractTest {
     }
 
     @Test
-    public void deleteALong() {
-        assertEquals(6, resourceDAO.find("resource-db-pull").
+    public void deleteFirstname() {
+        assertEquals(5, resourceDAO.find("resource-db-pull").
                 getProvision(anyTypeDAO.findUser()).getMapping().getItems().size());
 
-        plainSchemaDAO.delete("aLong");
-        assertNull(plainSchemaDAO.find("aLong"));
+        plainSchemaDAO.delete("firstname");
+        assertNull(plainSchemaDAO.find("firstname"));
 
         plainSchemaDAO.flush();
 
-        assertEquals(5, resourceDAO.find("resource-db-pull").
+        assertEquals(4, resourceDAO.find("resource-db-pull").
                 getProvision(anyTypeDAO.findUser()).getMapping().getItems().size());
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RealmTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RealmTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RealmTest.java
index d1bb773..141a2f6 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RealmTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RealmTest.java
@@ -47,11 +47,11 @@ public class RealmTest extends AbstractTest {
 
     @Test
     public void test() {
-        Realm realm = realmDAO.find("/odd");
+        Realm realm = realmDAO.findByFullPath("/odd");
         assertNotNull(realm);
 
         // need to remove this group in order to remove the realm, which is otherwise empty
-        Group group = groupDAO.find(16L);
+        Group group = groupDAO.findByName("fake");
         assertNotNull(group);
         assertEquals(realm, group.getRealm());
         groupDAO.delete(group);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ReportTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ReportTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ReportTest.java
index c39e3ce..9c3919f 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ReportTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ReportTest.java
@@ -50,7 +50,7 @@ public class ReportTest extends AbstractTest {
 
     @Test
     public void find() {
-        Report report = reportDAO.find(1L);
+        Report report = reportDAO.find("0062ea9c-924d-4ecf-9961-4492a8cc6d1b");
         assertNotNull(report);
 
         assertNotNull(report.getExecs());
@@ -60,7 +60,7 @@ public class ReportTest extends AbstractTest {
 
     @Test(expected = EntityExistsException.class)
     public void saveWithExistingName() {
-        Report report = reportDAO.find(1L);
+        Report report = reportDAO.find("0062ea9c-924d-4ecf-9961-4492a8cc6d1b");
         assertNotNull(report);
 
         String name = report.getName();
@@ -76,7 +76,7 @@ public class ReportTest extends AbstractTest {
 
     @Test
     public void save() {
-        Report report = reportDAO.find(1L);
+        Report report = reportDAO.find("0062ea9c-924d-4ecf-9961-4492a8cc6d1b");
         assertNotNull(report);
         assertEquals(1, report.getExecs().size());
 
@@ -94,33 +94,33 @@ public class ReportTest extends AbstractTest {
 
         reportExecDAO.flush();
 
-        report = reportDAO.find(1L);
+        report = reportDAO.find("0062ea9c-924d-4ecf-9961-4492a8cc6d1b");
         assertNotNull(report);
         assertEquals(2, report.getExecs().size());
     }
 
     @Test
     public void deleteReport() {
-        reportDAO.delete(1L);
+        reportDAO.delete("0062ea9c-924d-4ecf-9961-4492a8cc6d1b");
 
         reportDAO.flush();
 
-        assertNull(reportDAO.find(1L));
-        assertNull(reportExecDAO.find(1L));
+        assertNull(reportDAO.find("0062ea9c-924d-4ecf-9961-4492a8cc6d1b"));
+        assertNull(reportExecDAO.find("0062ea9c-924d-4ecf-9961-4492a8cc6d1b"));
     }
 
     @Test
     public void deleteReportExecution() {
-        ReportExec execution = reportExecDAO.find(1L);
+        ReportExec execution = reportExecDAO.find("c13f39c5-0d35-4bff-ba79-3cd5de940369");
         int executionNumber = execution.getReport().getExecs().size();
 
-        reportExecDAO.delete(1L);
+        reportExecDAO.delete("c13f39c5-0d35-4bff-ba79-3cd5de940369");
 
         reportExecDAO.flush();
 
-        assertNull(reportExecDAO.find(1L));
+        assertNull(reportExecDAO.find("0062ea9c-924d-4ecf-9961-4492a8cc6d1b"));
 
-        Report report = reportDAO.find(1L);
+        Report report = reportDAO.find("0062ea9c-924d-4ecf-9961-4492a8cc6d1b");
         assertEquals(report.getExecs().size(), executionNumber - 1);
     }
 }


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
index 037773d..a38dd99 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
@@ -94,9 +94,7 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
         modelObject.fillRecipientConditions();
         modelObject.fillAboutConditions();
 
-        final boolean createFlag
-                = modelObject.getInnerObject().getKey() == null || modelObject.getInnerObject().getKey() <= 0;
-
+        final boolean createFlag = modelObject.getInnerObject().getKey() == null;
         if (createFlag) {
             restClient.create(modelObject.getInnerObject());
         } else {
@@ -121,7 +119,7 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
 
         public Details(final NotificationHandler modelObject) {
             final NotificationTO notificationTO = modelObject.getInnerObject();
-            final boolean createFlag = notificationTO.getKey() == null || notificationTO.getKey() <= 0;
+            final boolean createFlag = notificationTO.getKey() == null;
 
             final AjaxTextFieldPanel sender = new AjaxTextFieldPanel("sender", getString("sender"),
                     new PropertyModel<String>(notificationTO, "sender"));
@@ -134,18 +132,18 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
             subject.addRequiredLabel();
             add(subject);
 
-            final AjaxDropDownChoicePanel<IntMappingType> recipientAttrType
-                    = new AjaxDropDownChoicePanel<IntMappingType>(
+            final AjaxDropDownChoicePanel<IntMappingType> recipientAttrType =
+                    new AjaxDropDownChoicePanel<>(
                             "recipientAttrType",
                             new ResourceModel("recipientAttrType", "recipientAttrType").getObject(),
                             new PropertyModel<IntMappingType>(notificationTO, "recipientAttrType"));
             recipientAttrType.setChoices(
-                    new ArrayList<IntMappingType>(IntMappingType.getAttributeTypes(AnyTypeKind.USER,
+                    new ArrayList<>(IntMappingType.getAttributeTypes(AnyTypeKind.USER,
                             EnumSet.of(IntMappingType.UserKey, IntMappingType.Password))));
             recipientAttrType.addRequiredLabel();
             add(recipientAttrType);
 
-            final AjaxDropDownChoicePanel<String> recipientAttrName = new AjaxDropDownChoicePanel<String>(
+            final AjaxDropDownChoicePanel<String> recipientAttrName = new AjaxDropDownChoicePanel<>(
                     "recipientAttrName", new ResourceModel("recipientAttrName", "recipientAttrName").getObject(),
                     new PropertyModel<String>(notificationTO, "recipientAttrName"));
             recipientAttrName.setChoices(getSchemaNames(recipientAttrType.getModelObject()));
@@ -163,7 +161,7 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
                 }
             });
 
-            final AjaxDropDownChoicePanel<String> template = new AjaxDropDownChoicePanel<String>(
+            final AjaxDropDownChoicePanel<String> template = new AjaxDropDownChoicePanel<>(
                     "template", getString("template"),
                     new PropertyModel<String>(notificationTO, "template"));
 
@@ -179,7 +177,7 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
             template.addRequiredLabel();
             add(template);
 
-            final AjaxDropDownChoicePanel<TraceLevel> traceLevel = new AjaxDropDownChoicePanel<TraceLevel>(
+            final AjaxDropDownChoicePanel<TraceLevel> traceLevel = new AjaxDropDownChoicePanel<>(
                     "traceLevel", getString("traceLevel"),
                     new PropertyModel<TraceLevel>(notificationTO, "traceLevel"));
             traceLevel.setChoices(Arrays.asList(TraceLevel.values()));
@@ -236,11 +234,10 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
 
             final List<String> anyTypeTOs = CollectionUtils.collect(
                     new AnyTypeRestClient().list(),
-                    EntityTOUtils.<String, AnyTypeTO>keyTransformer(),
-                    new ArrayList<String>());
+                    EntityTOUtils.<AnyTypeTO>keyTransformer(), new ArrayList<String>());
 
-            final AjaxDropDownChoicePanel<String> type
-                    = new AjaxDropDownChoicePanel<String>("about", "about", new Model<String>() {
+            final AjaxDropDownChoicePanel<String> type =
+                    new AjaxDropDownChoicePanel<>("about", "about", new Model<String>() {
 
                         private static final long serialVersionUID = -2350296434572623272L;
 
@@ -323,8 +320,8 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
             aboutContainer.setOutputMarkupId(true);
             add(aboutContainer);
 
-            final IModel<List<Pair<String, List<SearchClause>>>> model
-                    = new PropertyModel<List<Pair<String, List<SearchClause>>>>(modelObject, "aboutClauses");
+            final IModel<List<Pair<String, List<SearchClause>>>> model =
+                    new PropertyModel<>(modelObject, "aboutClauses");
 
             aboutContainer.add(new MultiPanel<Pair<String, List<SearchClause>>>("abouts", "abouts", model, false) {
 
@@ -368,13 +365,13 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
 
         public Recipients(final NotificationHandler modelObject) {
             final NotificationTO notificationTO = modelObject.getInnerObject();
-            final boolean createFlag = notificationTO.getKey() == null || notificationTO.getKey() <= 0;
+            final boolean createFlag = notificationTO.getKey() == null;
 
-            final AjaxTextFieldPanel staticRecipientsFieldPanel
-                    = new AjaxTextFieldPanel("panel", "staticRecipients", new Model<String>());
+            final AjaxTextFieldPanel staticRecipientsFieldPanel =
+                    new AjaxTextFieldPanel("panel", "staticRecipients", new Model<String>());
             staticRecipientsFieldPanel.addValidator(EmailAddressValidator.getInstance());
 
-            final MultiFieldPanel<String> staticRecipients = new MultiFieldPanel.Builder<String>(
+            final MultiFieldPanel<String> staticRecipients = new MultiFieldPanel.Builder<>(
                     new PropertyModel<List<String>>(notificationTO, "staticRecipients")).
                     build("staticRecipients", "staticRecipients", staticRecipientsFieldPanel);
 
@@ -406,19 +403,19 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
                 case UserPlainSchema:
                     result = CollectionUtils.collect(
                             schemaRestClient.<PlainSchemaTO>getSchemas(SchemaType.PLAIN, AnyTypeKind.USER.name()),
-                            EntityTOUtils.<String, PlainSchemaTO>keyTransformer(), new ArrayList<String>());
+                            EntityTOUtils.<PlainSchemaTO>keyTransformer(), new ArrayList<String>());
                     break;
 
                 case UserDerivedSchema:
                     result = CollectionUtils.collect(
                             schemaRestClient.<DerSchemaTO>getSchemas(SchemaType.DERIVED, AnyTypeKind.USER.name()),
-                            EntityTOUtils.<String, DerSchemaTO>keyTransformer(), new ArrayList<String>());
+                            EntityTOUtils.<DerSchemaTO>keyTransformer(), new ArrayList<String>());
                     break;
 
                 case UserVirtualSchema:
                     result = CollectionUtils.collect(
                             schemaRestClient.<VirSchemaTO>getSchemas(SchemaType.VIRTUAL, AnyTypeKind.USER.name()),
-                            EntityTOUtils.<String, VirSchemaTO>keyTransformer(), new ArrayList<String>());
+                            EntityTOUtils.<VirSchemaTO>keyTransformer(), new ArrayList<String>());
                     break;
 
                 case Username:

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
index 8fae231..b2e3356 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
@@ -148,7 +148,7 @@ public class Realms extends BasePage {
             @Override
             protected void onClickDelete(final AjaxRequestTarget target, final RealmTO realmTO) {
                 try {
-                    if (realmTO.getKey() == null || realmTO.getKey() == 0) {
+                    if (realmTO.getKey() == null) {
                         throw new Exception("Root realm cannot be deleted");
                     }
                     realmRestClient.delete(realmTO.getFullPath());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
index 4c2d7bf..62ef279 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
@@ -79,6 +79,7 @@ public abstract class AnyDirectoryPanel<T extends AnyTO>
         this.type = builder.type;
         this.fiql = builder.fiql;
 
+        utilityModal.size(Modal.Size.Large);
         addOuterObject(utilityModal);
         setWindowClosedReloadCallback(utilityModal);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
index 8d786ab..6721e1a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
@@ -34,6 +34,7 @@ import org.apache.syncope.client.console.status.StatusModal;
 import org.apache.syncope.client.console.tasks.AnyPropagationTasks;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AttrColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
@@ -81,7 +82,9 @@ public class AnyObjectDirectoryPanel extends AnyDirectoryPanel<AnyObjectTO> {
 
             final Field field = ReflectionUtils.findField(AnyObjectTO.class, name);
 
-            if (field != null && field.getType().equals(Date.class)) {
+            if ("key".equalsIgnoreCase(name)) {
+                columns.add(new KeyPropertyColumn<AnyObjectTO>(new ResourceModel(name, name), name, name));
+            } else if (field != null && field.getType().equals(Date.class)) {
                 columns.add(new PropertyColumn<AnyObjectTO, String>(new ResourceModel(name, name), name, name));
             } else {
                 columns.add(new PropertyColumn<AnyObjectTO, String>(new ResourceModel(name, name), name, name));
@@ -161,7 +164,7 @@ public class AnyObjectDirectoryPanel extends AnyDirectoryPanel<AnyObjectTO> {
                     @Override
                     public void onClick(final AjaxRequestTarget target, final AnyObjectTO ignore) {
                         final AnyObjectTO clone = SerializationUtils.clone(model.getObject());
-                        clone.setKey(0L);
+                        clone.setKey(null);
                         send(AnyObjectDirectoryPanel.this, Broadcast.EXACT,
                                 new AjaxWizard.NewItemActionEvent<>(new AnyHandler<>(clone), target));
                     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
index c32b507..7cf3b33 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
@@ -75,7 +75,6 @@ public class AnyTypeDetailsPanel extends Panel {
 
     private List<String> getAvailableAnyTypeClasses() {
         return CollectionUtils.collect(new AnyTypeClassRestClient().list(),
-                EntityTOUtils.<String, AnyTypeClassTO>keyTransformer(),
-                new ArrayList<String>());
+                EntityTOUtils.<AnyTypeClassTO>keyTransformer(), new ArrayList<String>());
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
index 3e0e171..71cd7de 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
@@ -35,6 +35,7 @@ import org.apache.syncope.client.console.tasks.AnyPropagationTasks;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AttrColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
@@ -80,7 +81,9 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO> {
         for (String name : prefMan.getList(getRequest(), Constants.PREF_GROUP_DETAILS_VIEW)) {
             final Field field = ReflectionUtils.findField(GroupTO.class, name);
 
-            if (field != null && field.getType().equals(Date.class)) {
+            if ("key".equalsIgnoreCase(name)) {
+                columns.add(new KeyPropertyColumn<GroupTO>(new ResourceModel(name, name), name, name));
+            } else if (field != null && field.getType().equals(Date.class)) {
                 columns.add(new DatePropertyColumn<GroupTO>(new ResourceModel(name, name), name, name));
             } else {
                 columns.add(new PropertyColumn<GroupTO, String>(new ResourceModel(name, name), name, name));
@@ -155,7 +158,7 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO> {
                     @Override
                     public void onClick(final AjaxRequestTarget target, final GroupTO ignore) {
                         final GroupTO clone = SerializationUtils.clone(model.getObject());
-                        clone.setKey(0L);
+                        clone.setKey(null);
                         send(GroupDirectoryPanel.this, Broadcast.EXACT,
                                 new AjaxWizard.NewItemActionEvent<>(new GroupHandler(clone), target));
                     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
index eed2a4e..fe25812 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
@@ -63,7 +63,7 @@ public class RealmChoicePanel extends Panel {
 
     private final Model<RealmTO> model;
 
-    private final Map<Long, Pair<RealmTO, List<RealmTO>>> tree;
+    private final Map<String, Pair<RealmTO, List<RealmTO>>> tree;
 
     public RealmChoicePanel(final String id, final PageReference pageRef) {
         super(id);
@@ -81,8 +81,8 @@ public class RealmChoicePanel extends Panel {
 
             private void getChildren(
                     final List<Pair<String, RealmTO>> full,
-                    final long key,
-                    final Map<Long, Pair<RealmTO, List<RealmTO>>> tree,
+                    final String key,
+                    final Map<String, Pair<RealmTO, List<RealmTO>>> tree,
                     final String indent) {
 
                 if (tree.containsKey(key)) {
@@ -96,11 +96,11 @@ public class RealmChoicePanel extends Panel {
 
             @Override
             protected List<Pair<String, RealmTO>> load() {
-                Map<Long, Pair<RealmTO, List<RealmTO>>> map = reloadRealmParentMap();
-                model.setObject(map.get(1L).getKey());
+                Map<String, Pair<RealmTO, List<RealmTO>>> map = reloadRealmParentMap();
+                model.setObject(map.get(null).getKey());
 
                 final List<Pair<String, RealmTO>> full = new ArrayList<>();
-                getChildren(full, 0L, map, StringUtils.EMPTY);
+                getChildren(full, null, map, StringUtils.EMPTY);
                 return full;
             }
         };
@@ -163,17 +163,17 @@ public class RealmChoicePanel extends Panel {
         return this;
     }
 
-    private Map<Long, Pair<RealmTO, List<RealmTO>>> reloadRealmParentMap() {
+    private Map<String, Pair<RealmTO, List<RealmTO>>> reloadRealmParentMap() {
         final List<RealmTO> realms = realmRestClient.list();
         Collections.sort(realms, new RealmNameComparator());
         return reloadRealmParentMap(realms);
     }
 
-    private Map<Long, Pair<RealmTO, List<RealmTO>>> reloadRealmParentMap(final List<RealmTO> realms) {
+    private Map<String, Pair<RealmTO, List<RealmTO>>> reloadRealmParentMap(final List<RealmTO> realms) {
         tree.clear();
-        tree.put(0L, Pair.<RealmTO, List<RealmTO>>of(realms.get(0), new ArrayList<RealmTO>()));
+        tree.put(null, Pair.<RealmTO, List<RealmTO>>of(realms.get(0), new ArrayList<RealmTO>()));
 
-        final Map<Long, List<RealmTO>> cache = new HashMap<>();
+        final Map<String, List<RealmTO>> cache = new HashMap<>();
 
         for (RealmTO realm : realms) {
             final List<RealmTO> children = new ArrayList<>();
@@ -223,7 +223,7 @@ public class RealmChoicePanel extends Panel {
         return model.getObject();
     }
 
-    public RealmTO moveToParentRealm(final long key) {
+    public RealmTO moveToParentRealm(final String key) {
         for (Pair<RealmTO, List<RealmTO>> subtree : tree.values()) {
             for (RealmTO child : subtree.getRight()) {
                 if (child.getKey() == key) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
index 3b4c413..766a2b8 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
@@ -53,13 +53,13 @@ public class RealmDetails extends Panel {
 
     private final PolicyRestClient policyRestClient = new PolicyRestClient();
 
-    private final IModel<Map<Long, String>> accountPolicies = new LoadableDetachableModel<Map<Long, String>>() {
+    private final IModel<Map<String, String>> accountPolicies = new LoadableDetachableModel<Map<String, String>>() {
 
         private static final long serialVersionUID = -2012833443695917883L;
 
         @Override
-        protected Map<Long, String> load() {
-            Map<Long, String> res = new HashMap<>();
+        protected Map<String, String> load() {
+            Map<String, String> res = new HashMap<>();
             for (AbstractPolicyTO policyTO : policyRestClient.getPolicies(PolicyType.ACCOUNT)) {
                 res.put(policyTO.getKey(), policyTO.getDescription());
             }
@@ -67,13 +67,13 @@ public class RealmDetails extends Panel {
         }
     };
 
-    private final IModel<Map<Long, String>> passwordPolicies = new LoadableDetachableModel<Map<Long, String>>() {
+    private final IModel<Map<String, String>> passwordPolicies = new LoadableDetachableModel<Map<String, String>>() {
 
         private static final long serialVersionUID = -2012833443695917883L;
 
         @Override
-        protected Map<Long, String> load() {
-            Map<Long, String> res = new HashMap<>();
+        protected Map<String, String> load() {
+            Map<String, String> res = new HashMap<>();
             for (AbstractPolicyTO policyTO : policyRestClient.getPolicies(PolicyType.PASSWORD)) {
                 res.put(policyTO.getKey(), policyTO.getDescription());
             }
@@ -120,20 +120,20 @@ public class RealmDetails extends Panel {
         fullPath.setEnabled(false);
         container.add(fullPath);
 
-        AjaxDropDownChoicePanel<Long> accountPolicy = new AjaxDropDownChoicePanel<>(
+        AjaxDropDownChoicePanel<String> accountPolicy = new AjaxDropDownChoicePanel<>(
                 "accountPolicy",
                 new ResourceModel("accountPolicy", "accountPolicy").getObject(),
-                new PropertyModel<Long>(realmTO, "accountPolicy"),
+                new PropertyModel<String>(realmTO, "accountPolicy"),
                 false);
         accountPolicy.setChoiceRenderer(new PolicyRenderer(accountPolicies));
         accountPolicy.setChoices(new ArrayList<>(accountPolicies.getObject().keySet()));
         ((DropDownChoice<?>) accountPolicy.getField()).setNullValid(true);
         container.add(accountPolicy);
 
-        AjaxDropDownChoicePanel<Long> passwordPolicy = new AjaxDropDownChoicePanel<>(
+        AjaxDropDownChoicePanel<String> passwordPolicy = new AjaxDropDownChoicePanel<>(
                 "passwordPolicy",
                 new ResourceModel("passwordPolicy", "passwordPolicy").getObject(),
-                new PropertyModel<Long>(realmTO, "passwordPolicy"),
+                new PropertyModel<String>(realmTO, "passwordPolicy"),
                 false);
         passwordPolicy.setChoiceRenderer(new PolicyRenderer(passwordPolicies));
         passwordPolicy.setChoices(new ArrayList<>(passwordPolicies.getObject().keySet()));

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsModalPanel.java
index 0d27f0c..81ae568 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsModalPanel.java
@@ -51,7 +51,7 @@ public class SecurityQuestionsModalPanel extends AbstractModalPanel<SecurityQues
     @Override
     public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
         try {
-            if (securityQuestionTO.getKey() == null || securityQuestionTO.getKey() == 0) {
+            if (securityQuestionTO.getKey() == null) {
                 SyncopeConsoleSession.get().getService(SecurityQuestionService.class).create(securityQuestionTO);
             } else {
                 SyncopeConsoleSession.get().getService(SecurityQuestionService.class).update(securityQuestionTO);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
index 38d81cf..1735620 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
@@ -19,14 +19,11 @@
 package org.apache.syncope.client.console.panels;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.Constants;
@@ -35,6 +32,7 @@ import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.panels.SecurityQuestionsPanel.SecurityQuestionsProvider;
 import org.apache.syncope.client.console.rest.SecurityQuestionRestClient;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
 import org.apache.syncope.client.console.wizards.AbstractModalPanelBuilder;
@@ -52,6 +50,7 @@ import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColu
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.model.StringResourceModel;
 
 public class SecurityQuestionsPanel extends DirectoryPanel<
         SecurityQuestionTO, SecurityQuestionTO, SecurityQuestionsProvider, SecurityQuestionRestClient> {
@@ -113,37 +112,13 @@ public class SecurityQuestionsPanel extends DirectoryPanel<
 
     @Override
     protected List<IColumn<SecurityQuestionTO, String>> getColumns() {
-        final List<IColumn<SecurityQuestionTO, String>> columns = new ArrayList<>();
-
-        for (Field field : SecurityQuestionTO.class.getDeclaredFields()) {
-            if (field != null && !Modifier.isStatic(field.getModifiers())) {
-                final String fieldName = field.getName();
-                if (field.getType().isArray()
-                        || Collection.class.isAssignableFrom(field.getType())
-                        || Map.class.isAssignableFrom(field.getType())) {
-
-                    columns.add(new PropertyColumn<SecurityQuestionTO, String>(
-                            new ResourceModel(field.getName()), field.getName()));
-                } else {
-                    columns.add(new PropertyColumn<SecurityQuestionTO, String>(
-                            new ResourceModel(field.getName()), field.getName(), field.getName()) {
-
-                        private static final long serialVersionUID = -6902459669035442212L;
-
-                        @Override
-                        public String getCssClass() {
-                            String css = super.getCssClass();
-                            if ("key".equals(fieldName)) {
-                                css = StringUtils.isBlank(css)
-                                        ? "col-xs-1"
-                                        : css + " col-xs-1";
-                            }
-                            return css;
-                        }
-                    });
-                }
-            }
-        }
+        List<IColumn<SecurityQuestionTO, String>> columns = new ArrayList<>();
+
+        columns.add(new KeyPropertyColumn<SecurityQuestionTO>(
+                new StringResourceModel("key", this, null), "key", "key"));
+
+        columns.add(new PropertyColumn<SecurityQuestionTO, String>(
+                new StringResourceModel("content", this, null), "content", "content"));
 
         columns.add(new ActionColumn<SecurityQuestionTO, String>(new ResourceModel("actions")) {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
index f2416ea..e3e9424 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
@@ -37,6 +37,7 @@ import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AttrColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.TokenColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
@@ -94,7 +95,9 @@ public class UserDirectoryPanel extends AnyDirectoryPanel<UserTO> {
         for (String name : prefMan.getList(getRequest(), Constants.PREF_USERS_DETAILS_VIEW)) {
             final Field field = ReflectionUtils.findField(UserTO.class, name);
 
-            if ("token".equalsIgnoreCase(name)) {
+            if ("key".equalsIgnoreCase(name)) {
+                columns.add(new KeyPropertyColumn<UserTO>(new ResourceModel(name, name), name, name));
+            } else if ("token".equalsIgnoreCase(name)) {
                 columns.add(new TokenColumn<UserTO>(new ResourceModel(name, name), name));
             } else if (field != null
                     && (field.getType().equals(Boolean.class) || field.getType().equals(boolean.class))) {
@@ -214,7 +217,7 @@ public class UserDirectoryPanel extends AnyDirectoryPanel<UserTO> {
                     @Override
                     public void onClick(final AjaxRequestTarget target, final UserTO ignore) {
                         UserTO clone = SerializationUtils.clone(model.getObject());
-                        clone.setKey(0L);
+                        clone.setKey(null);
                         clone.setUsername(model.getObject().getUsername() + "_clone");
                         send(UserDirectoryPanel.this, Broadcast.EXACT,
                                 new AjaxWizard.NewItemActionEvent<>(new AnyHandler<>(clone), target));

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
index b683d0f..d0124c5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
@@ -43,9 +43,9 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
 
     private final ResourceRestClient resourceRestClient = new ResourceRestClient();
 
-    private Map<Long, String> anys = new HashMap<>();
+    private Map<String, String> anys = new HashMap<>();
 
-    private final AjaxDropDownChoicePanel<Long> provision;
+    private final AjaxDropDownChoicePanel<String> provision;
 
     public VirSchemaDetails(final String id,
             final PageReference pageReference,
@@ -59,15 +59,14 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
         final AjaxDropDownChoicePanel<String> resource = new AjaxDropDownChoicePanel<>(
                 "resource", getString("resource"), new PropertyModel<String>(schemaTO, "resource"));
         resource.setChoices(CollectionUtils.collect(resourceRestClient.list(),
-                EntityTOUtils.<String, ResourceTO>keyTransformer(),
-                new ArrayList<String>()));
+                EntityTOUtils.<ResourceTO>keyTransformer(), new ArrayList<String>()));
 
         resource.setOutputMarkupId(true);
         resource.addRequiredLabel();
         schemaForm.add(resource);
 
         provision = new AjaxDropDownChoicePanel<>(
-                "provision", getString("provision"), new PropertyModel<Long>(schemaTO, "provision"));
+                "provision", getString("provision"), new PropertyModel<String>(schemaTO, "provision"));
 
         provision.setChoices(new ArrayList<>(anys.keySet()));
         provision.setChoiceRenderer(new AnyTypeRenderer());
@@ -98,14 +97,14 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
                     }
                 }
                 provision.setChoices(new ArrayList<>(anys.keySet()));
-                provision.setModelObject(0L);
+                provision.setModelObject(null);
                 provision.setVisible(true);
                 target.add(provision);
             }
         });
     }
 
-    private class AnyTypeRenderer extends ChoiceRenderer<Long> {
+    private class AnyTypeRenderer extends ChoiceRenderer<String> {
 
         private static final long serialVersionUID = 2840364232128308553L;
 
@@ -114,12 +113,12 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
         }
 
         @Override
-        public Object getDisplayValue(final Long object) {
+        public Object getDisplayValue(final String object) {
             return anys.get(object);
         }
 
         @Override
-        public String getIdValue(final Long object, final int index) {
+        public String getIdValue(final String object, final int index) {
             return String.valueOf(object != null ? object : 0L);
         }
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
index 2ec657c..1b6de2c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
@@ -61,7 +61,7 @@ public abstract class AbstractSearchPanel extends Panel {
 
     protected IModel<List<SearchClause.Type>> types;
 
-    protected IModel<Map<Long, String>> groupNames;
+    protected IModel<Map<String, String>> groupNames;
 
     protected IModel<List<String>> roleNames;
 
@@ -168,8 +168,7 @@ public abstract class AbstractSearchPanel extends Panel {
                 return CollectionUtils.collect(
                         schemaRestClient.getSchemas(SchemaType.PLAIN, anyTypeRestClient.read(type).getClasses().
                                 toArray(new String[] {})),
-                        EntityTOUtils.<String, AbstractSchemaTO>keyTransformer(),
-                        new ArrayList<String>());
+                        EntityTOUtils.<AbstractSchemaTO>keyTransformer(), new ArrayList<String>());
             }
         };
 
@@ -180,8 +179,7 @@ public abstract class AbstractSearchPanel extends Panel {
             @Override
             protected List<String> load() {
                 return CollectionUtils.collect(resourceRestClient.list(),
-                        EntityTOUtils.<String, ResourceTO>keyTransformer(),
-                        new ArrayList<String>());
+                        EntityTOUtils.<ResourceTO>keyTransformer(), new ArrayList<String>());
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java
index 5665318..f67e32b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java
@@ -74,15 +74,15 @@ public class AnyObjectSearchPanel extends AbstractSearchPanel {
             }
         };
 
-        this.groupNames = new LoadableDetachableModel<Map<Long, String>>() {
+        this.groupNames = new LoadableDetachableModel<Map<String, String>>() {
 
             private static final long serialVersionUID = 5275935387613157437L;
 
             @Override
-            protected Map<Long, String> load() {
+            protected Map<String, String> load() {
                 List<GroupTO> groupTOs = groupRestClient.list("/", -1, -1, new SortParam<>("name", true), null);
 
-                final Map<Long, String> result = new HashMap<>(groupTOs.size());
+                final Map<String, String> result = new HashMap<>(groupTOs.size());
                 for (GroupTO group : groupTOs) {
                     result.put(group.getKey(), group.getName());
                 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
index 7e1db89..17b8aa0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
@@ -33,6 +33,7 @@ import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AttrColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.TokenColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
@@ -72,7 +73,9 @@ public abstract class AnySelectionDirectoryPanel<T extends AnyTO> extends AnyDir
         for (String name : prefMan.getList(getRequest(), getPrefDetailsView())) {
             final Field field = ReflectionUtils.findField(AnyObjectTO.class, name);
 
-            if (reference == UserTO.class && "token".equalsIgnoreCase(name)) {
+            if ("key".equalsIgnoreCase(name)) {
+                columns.add(new KeyPropertyColumn<T>(new ResourceModel(name, name), name, name));
+            } else if (reference == UserTO.class && "token".equalsIgnoreCase(name)) {
                 columns.add(new TokenColumn<T>(new ResourceModel(name, name), name));
             } else if (field != null
                     && (field.getType().equals(Boolean.class) || field.getType().equals(boolean.class))) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSearchPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSearchPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSearchPanel.java
index 5780cf1..d91aa28 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSearchPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSearchPanel.java
@@ -65,13 +65,13 @@ public final class GroupSearchPanel extends AbstractSearchPanel {
             }
         };
 
-        this.groupNames = new LoadableDetachableModel<Map<Long, String>>() {
+        this.groupNames = new LoadableDetachableModel<Map<String, String>>() {
 
             private static final long serialVersionUID = 5275935387613157437L;
 
             @Override
-            protected Map<Long, String> load() {
-                return Collections.<Long, String>emptyMap();
+            protected Map<String, String> load() {
+                return Collections.<String, String>emptyMap();
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
index afe2bcb..05c5157 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
@@ -70,7 +70,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
 
     private final IModel<List<String>> dnames;
 
-    private final IModel<Map<Long, String>> groupNames;
+    private final IModel<Map<String, String>> groupNames;
 
     private final IModel<List<String>> roleNames;
 
@@ -96,7 +96,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
             final IModel<List<SearchClause.Type>> types,
             final IModel<List<String>> anames,
             final IModel<List<String>> dnames,
-            final IModel<Map<Long, String>> groupNames,
+            final IModel<Map<String, String>> groupNames,
             final IModel<List<String>> roleNames,
             final IModel<List<String>> resourceNames
     ) {
@@ -190,7 +190,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
 
                     case GROUP_MEMBERSHIP:
                         final List<String> groups = CollectionUtils.collect(groupNames.getObject().keySet(),
-                                StringValueTransformer.<Long>stringValueTransformer(), new ArrayList<String>());
+                                StringValueTransformer.<String>stringValueTransformer(), new ArrayList<String>());
 
                         Collections.sort(groups);
                         return groups;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
index 0d53955..83960e1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
@@ -176,16 +176,16 @@ public final class SearchUtils implements Serializable {
 
                 switch (clause.getType()) {
                     case GROUP_MEMBERSHIP:
-                        Long groupId = NumberUtils.toLong(clause.getProperty().split(" ")[0]);
+                        String groupKey = clause.getProperty().split(" ")[0];
 
                         if (builder instanceof UserFiqlSearchConditionBuilder) {
                             condition = clause.getComparator() == SearchClause.Comparator.EQUALS
-                                    ? ((UserFiqlSearchConditionBuilder) builder).inGroups(groupId)
-                                    : ((UserFiqlSearchConditionBuilder) builder).notInGroups(groupId);
+                                    ? ((UserFiqlSearchConditionBuilder) builder).inGroups(groupKey)
+                                    : ((UserFiqlSearchConditionBuilder) builder).notInGroups(groupKey);
                         } else {
                             condition = clause.getComparator() == SearchClause.Comparator.EQUALS
-                                    ? ((AnyObjectFiqlSearchConditionBuilder) builder).inGroups(groupId)
-                                    : ((AnyObjectFiqlSearchConditionBuilder) builder).notInGroups(groupId);
+                                    ? ((AnyObjectFiqlSearchConditionBuilder) builder).inGroups(groupKey)
+                                    : ((AnyObjectFiqlSearchConditionBuilder) builder).notInGroups(groupKey);
                         }
                         break;
 
@@ -271,11 +271,11 @@ public final class SearchUtils implements Serializable {
                                     break;
                                 case EQUALS:
                                     condition = ((UserFiqlSearchConditionBuilder) builder).
-                                            inRelationships(Long.parseLong(value));
+                                            inRelationships(value);
                                     break;
                                 case NOT_EQUALS:
                                     condition = ((UserFiqlSearchConditionBuilder) builder).
-                                            notInRelationships(Long.parseLong(value));
+                                            notInRelationships(value);
                                     break;
                                 default:
                                     break;
@@ -292,11 +292,11 @@ public final class SearchUtils implements Serializable {
                                     break;
                                 case EQUALS:
                                     condition = ((AnyObjectFiqlSearchConditionBuilder) builder).
-                                            inRelationships(Long.parseLong(value));
+                                            inRelationships(value);
                                     break;
                                 case NOT_EQUALS:
                                     condition = ((AnyObjectFiqlSearchConditionBuilder) builder).
-                                            notInRelationships(Long.parseLong(value));
+                                            notInRelationships(value);
                                     break;
                                 default:
                                     break;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
index 78c4ff2..2eaad2f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
@@ -47,12 +47,12 @@ public abstract class AbstractAnyRestClient<T extends AnyTO> extends BaseRestCli
     public abstract List<T> search(
             String realm, String fiql, int page, int size, final SortParam<String> sort, final String type);
 
-    public abstract T read(final Long key);
+    public abstract T read(final String key);
 
-    public abstract ProvisioningResult<T> delete(String etag, Long key);
+    public abstract ProvisioningResult<T> delete(String etag, String key);
 
     protected <E extends AnyService<T, ?>> ProvisioningResult<T> delete(
-            final Class<E> serviceClass, final Class<T> objectType, final String etag, final Long key) {
+            final Class<E> serviceClass, final Class<T> objectType, final String etag, final String key) {
         ProvisioningResult<T> result;
         synchronized (this) {
             final E service = getService(etag, serviceClass);
@@ -67,7 +67,7 @@ public abstract class AbstractAnyRestClient<T extends AnyTO> extends BaseRestCli
 
     protected abstract Class<? extends AnyService<?, ?>> getAnyServiceClass();
 
-    public BulkActionResult unlink(final String etag, final long key, final List<StatusBean> statuses) {
+    public BulkActionResult unlink(final String etag, final String key, final List<StatusBean> statuses) {
         BulkActionResult result;
         synchronized (this) {
             AnyService<?, ?> service = getService(etag, getAnyServiceClass());
@@ -84,7 +84,7 @@ public abstract class AbstractAnyRestClient<T extends AnyTO> extends BaseRestCli
         return result;
     }
 
-    public BulkActionResult link(final String etag, final long key, final List<StatusBean> statuses) {
+    public BulkActionResult link(final String etag, final String key, final List<StatusBean> statuses) {
         BulkActionResult result;
         synchronized (this) {
             AnyService<?, ?> service = getService(etag, getAnyServiceClass());
@@ -104,7 +104,7 @@ public abstract class AbstractAnyRestClient<T extends AnyTO> extends BaseRestCli
         return result;
     }
 
-    public BulkActionResult deprovision(final String etag, final long key, final List<StatusBean> statuses) {
+    public BulkActionResult deprovision(final String etag, final String key, final List<StatusBean> statuses) {
         BulkActionResult result;
         synchronized (this) {
             AnyService<?, ?> service = getService(etag, getAnyServiceClass());
@@ -121,7 +121,7 @@ public abstract class AbstractAnyRestClient<T extends AnyTO> extends BaseRestCli
         return result;
     }
 
-    public BulkActionResult provision(final String etag, final long key, final List<StatusBean> statuses) {
+    public BulkActionResult provision(final String etag, final String key, final List<StatusBean> statuses) {
         BulkActionResult result;
         synchronized (this) {
             AnyService<?, ?> service = getService(etag, getAnyServiceClass());
@@ -141,7 +141,7 @@ public abstract class AbstractAnyRestClient<T extends AnyTO> extends BaseRestCli
         return result;
     }
 
-    public BulkActionResult unassign(final String etag, final long key, final List<StatusBean> statuses) {
+    public BulkActionResult unassign(final String etag, final String key, final List<StatusBean> statuses) {
         BulkActionResult result;
         synchronized (this) {
             AnyService<?, ?> service = getService(etag, getAnyServiceClass());
@@ -158,7 +158,7 @@ public abstract class AbstractAnyRestClient<T extends AnyTO> extends BaseRestCli
         return result;
     }
 
-    public BulkActionResult assign(final String etag, final long key, final List<StatusBean> statuses) {
+    public BulkActionResult assign(final String etag, final String key, final List<StatusBean> statuses) {
         BulkActionResult result;
         synchronized (this) {
             AnyService<?, ?> service = getService(etag, getAnyServiceClass());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
index b132d2d..1160fe7 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
@@ -81,7 +81,7 @@ public class AnyObjectRestClient extends AbstractAnyRestClient<AnyObjectTO> {
     }
 
     @Override
-    public AnyObjectTO read(final Long key) {
+    public AnyObjectTO read(final String key) {
         return getService(AnyObjectService.class).read(key);
     }
 
@@ -103,7 +103,7 @@ public class AnyObjectRestClient extends AbstractAnyRestClient<AnyObjectTO> {
     }
 
     @Override
-    public ProvisioningResult<AnyObjectTO> delete(final String etag, final Long key) {
+    public ProvisioningResult<AnyObjectTO> delete(final String etag, final String key) {
         return delete(AnyObjectService.class, AnyObjectTO.class, etag, key);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
index 8dbc8f6..f9e293b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
@@ -71,7 +71,7 @@ public class ConnectorRestClient extends BaseRestClient {
      * @param key the id
      * @return ConnInstanceTO
      */
-    public ConnInstanceTO read(final Long key) {
+    public ConnInstanceTO read(final String key) {
         ConnInstanceTO connectorTO = null;
 
         try {
@@ -91,7 +91,7 @@ public class ConnectorRestClient extends BaseRestClient {
         getService(ConnectorService.class).update(connectorTO);
     }
 
-    public ConnInstanceTO delete(final Long key) {
+    public ConnInstanceTO delete(final String key) {
         ConnInstanceTO connectorTO = getService(ConnectorService.class).
                 read(key, SyncopeConsoleSession.get().getLocale().toString());
         getService(ConnectorService.class).delete(key);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/ExecutionRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ExecutionRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ExecutionRestClient.java
index 7659a5d..1bb0ad9 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ExecutionRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ExecutionRestClient.java
@@ -24,9 +24,9 @@ import org.apache.syncope.common.lib.to.ExecTO;
 
 public interface ExecutionRestClient {
 
-    void startExecution(long executionCollectorKey, Date start);
+    void startExecution(String executionCollectorKey, Date start);
 
-    void deleteExecution(long executionKeyI);
+    void deleteExecution(String executionKey);
 
     List<ExecTO> listRecentExecutions(final int max);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/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 9955073..ff5e08e 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
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.rest;
 
 import java.util.List;
 import javax.ws.rs.core.GenericType;
-
 import javax.ws.rs.core.Response;
 import org.apache.syncope.common.lib.patch.GroupPatch;
 import org.apache.syncope.common.lib.to.BulkAction;
@@ -53,8 +52,9 @@ public class GroupRestClient extends AbstractAnyRestClient<GroupTO> {
     }
 
     @Override
-    public List<GroupTO> list(final String realm, final int page, final int size, final SortParam<String> sort,
-            final String type) {
+    public List<GroupTO> list(
+            final String realm, final int page, final int size, final SortParam<String> sort, final String type) {
+
         return getService(GroupService.class).
                 list(new AnyListQuery.Builder().realm(realm).page(page).size(size).
                         orderBy(toOrderBy(sort)).details(false).build()).
@@ -86,7 +86,7 @@ public class GroupRestClient extends AbstractAnyRestClient<GroupTO> {
     }
 
     @Override
-    public GroupTO read(final Long key) {
+    public GroupTO read(final String key) {
         return getService(GroupService.class).read(key);
     }
 
@@ -102,7 +102,7 @@ public class GroupRestClient extends AbstractAnyRestClient<GroupTO> {
     }
 
     @Override
-    public ProvisioningResult<GroupTO> delete(final String etag, final Long key) {
+    public ProvisioningResult<GroupTO> delete(final String etag, final String key) {
         return delete(GroupService.class, GroupTO.class, etag, key);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java
index 3f9d820..f5b2e30 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java
@@ -39,7 +39,7 @@ public class NotificationRestClient extends BaseRestClient {
         return getService(NotificationService.class).list();
     }
 
-    public NotificationTO read(final Long key) {
+    public NotificationTO read(final String key) {
         return getService(NotificationService.class).read(key);
     }
 
@@ -51,7 +51,7 @@ public class NotificationRestClient extends BaseRestClient {
         getService(NotificationService.class).update(notificationTO);
     }
 
-    public void delete(final Long key) {
+    public void delete(final String key) {
         getService(NotificationService.class).delete(key);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
index 6d21769..c5e8e36 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
@@ -31,7 +31,7 @@ public class PolicyRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -1392090291817187902L;
 
-    public <T extends AbstractPolicyTO> T getPolicy(final Long key) {
+    public <T extends AbstractPolicyTO> T getPolicy(final String key) {
         T policy = null;
         try {
             policy = getService(PolicyService.class).read(key);
@@ -62,7 +62,7 @@ public class PolicyRestClient extends BaseRestClient {
         getService(PolicyService.class).update(policy);
     }
 
-    public void delete(final Long id, final Class<? extends AbstractPolicyTO> policyClass) {
-        getService(PolicyService.class).delete(id);
+    public void delete(final String key, final Class<? extends AbstractPolicyTO> policyClass) {
+        getService(PolicyService.class).delete(key);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
index 9c2b86b..743ebfb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
@@ -31,7 +31,7 @@ public class ReportRestClient extends BaseRestClient implements ExecutionRestCli
 
     private static final long serialVersionUID = 1644689667998953604L;
 
-    public ReportTO read(final Long reportKey) {
+    public ReportTO read(final String reportKey) {
         return getService(ReportService.class).read(reportKey);
     }
 
@@ -52,17 +52,17 @@ public class ReportRestClient extends BaseRestClient implements ExecutionRestCli
      *
      * @param reportKey report to delete
      */
-    public void delete(final long reportKey) {
+    public void delete(final String reportKey) {
         getService(ReportService.class).delete(reportKey);
     }
 
     @Override
-    public void startExecution(final long reportKey, final Date start) {
+    public void startExecution(final String reportKey, final Date start) {
         getService(ReportService.class).execute(new ExecuteQuery.Builder().key(reportKey).startAt(start).build());
     }
 
     @Override
-    public void deleteExecution(final long reportExecKey) {
+    public void deleteExecution(final String reportExecKey) {
         getService(ReportService.class).deleteExecution(reportExecKey);
     }
 
@@ -71,7 +71,7 @@ public class ReportRestClient extends BaseRestClient implements ExecutionRestCli
         return getService(ReportService.class).listRecentExecutions(max);
     }
 
-    public Response exportExecutionResult(final long executionId, final ReportExecExportFormat fmt) {
-        return getService(ReportService.class).exportExecutionResult(executionId, fmt);
+    public Response exportExecutionResult(final String executionKey, final ReportExecExportFormat fmt) {
+        return getService(ReportService.class).exportExecutionResult(executionKey, fmt);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
index 5e97b69..fceef65 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
@@ -39,7 +39,7 @@ public class ResourceRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -6898907679835668987L;
 
-    public ConnObjectTO readConnObject(final String resource, final String anyTypeKey, final Long anyKey) {
+    public ConnObjectTO readConnObject(final String resource, final String anyTypeKey, final String anyKey) {
         return getService(ResourceService.class).readConnObject(resource, anyTypeKey, anyKey);
     }
 
@@ -97,7 +97,7 @@ public class ResourceRestClient extends BaseRestClient {
 
     public BulkActionResult bulkAssociationAction(
             final String resourceName, final String anyTypeName,
-            final ResourceDeassociationAction action, final List<Long> anyKeys) {
+            final ResourceDeassociationAction action, final List<String> anyKeys) {
 
         ResourceDeassociationPatch patch = new ResourceDeassociationPatch();
         patch.setKey(resourceName);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
index 725a088..d6d5081 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
@@ -77,8 +77,7 @@ public class SchemaRestClient extends BaseRestClient {
 
         try {
             CollectionUtils.collect(getSchemas(schemaType),
-                    EntityTOUtils.<String, AbstractSchemaTO>keyTransformer(),
-                    schemaNames);
+                    EntityTOUtils.<AbstractSchemaTO>keyTransformer(), schemaNames);
         } catch (SyncopeClientException e) {
             LOG.error("While getting all user schema names", e);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/SecurityQuestionRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/SecurityQuestionRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/SecurityQuestionRestClient.java
index 2ed516c..2eb2691 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/SecurityQuestionRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/SecurityQuestionRestClient.java
@@ -38,7 +38,7 @@ public class SecurityQuestionRestClient extends BaseRestClient {
         getService(SecurityQuestionService.class).update(securityQuestionTO);
     }
 
-    public void delete(final Long securityQuestionKey) {
+    public void delete(final String securityQuestionKey) {
         getService(SecurityQuestionService.class).delete(securityQuestionKey);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
index 378269e..2a494cd 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
@@ -55,13 +55,13 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
                 build()).getTotalCount();
     }
 
-    public int count(final AnyTypeKind anyTypeKind, final Long anyTypeKey, final TaskType kind) {
+    public int count(final AnyTypeKind anyTypeKind, final String anyTypeKey, final TaskType kind) {
         return getService(TaskService.class).list(
                 new TaskQuery.Builder(kind).anyTypeKind(anyTypeKind).anyTypeKey(anyTypeKey).page(1).size(1).
                 build()).getTotalCount();
     }
 
-    public int countExecutions(final Long taskKey) {
+    public int countExecutions(final String taskKey) {
         return getService(TaskService.class).
                 listExecutions(new TaskExecQuery.Builder().key(taskKey).page(1).size(1).build()).getTotalCount();
     }
@@ -78,7 +78,7 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
     }
 
     public List<PropagationTaskTO> listPropagationTasks(
-            final AnyTypeKind anyTypeKind, final Long anyTypeKey,
+            final AnyTypeKind anyTypeKind, final String anyTypeKey,
             final int page, final int size, final SortParam<String> sort) {
 
         return getService(TaskService.class).
@@ -91,9 +91,9 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
 
     @SuppressWarnings("unchecked")
     public <T extends AbstractTaskTO> List<T> listNotificationTasks(
-            final Long notification,
+            final String notification,
             final AnyTypeKind anyTypeKind,
-            final Long anyTypeKey,
+            final String anyTypeKey,
             final int page,
             final int size,
             final SortParam<String> sort) {
@@ -139,9 +139,9 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
                 getResult();
     }
 
-    public List<ExecTO> listExecutions(final Long taskId, final int page, final int size) {
+    public List<ExecTO> listExecutions(final String taskKey, final int page, final int size) {
         return getService(TaskService.class).
-                listExecutions(new TaskExecQuery.Builder().key(taskId).page(page).size(size).build()).getResult();
+                listExecutions(new TaskExecQuery.Builder().key(taskKey).page(page).size(size).build()).getResult();
     }
 
     private TaskType getTaskType(final Class<?> reference) {
@@ -160,35 +160,35 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
         return result;
     }
 
-    public PropagationTaskTO readPropagationTask(final Long taskKey) {
+    public PropagationTaskTO readPropagationTask(final String taskKey) {
         return getService(TaskService.class).read(taskKey, false);
     }
 
-    public NotificationTaskTO readNotificationTask(final Long taskKey) {
+    public NotificationTaskTO readNotificationTask(final String taskKey) {
         return getService(TaskService.class).read(taskKey, false);
     }
 
-    public <T extends SchedTaskTO> T readSchedTask(final Class<T> reference, final Long taskKey) {
+    public <T extends SchedTaskTO> T readSchedTask(final Class<T> reference, final String taskKey) {
         return getService(TaskService.class).read(taskKey, false);
     }
 
-    public void delete(final Long taskKey, final Class<? extends AbstractTaskTO> taskToClass) {
+    public void delete(final String taskKey, final Class<? extends AbstractTaskTO> taskToClass) {
         getService(TaskService.class).delete(taskKey);
     }
 
     @Override
-    public void startExecution(final long taskKey, final Date start) {
+    public void startExecution(final String taskKey, final Date start) {
         startExecution(taskKey, start, false);
     }
 
-    public void startExecution(final long taskKey, final Date start, final boolean dryRun) {
+    public void startExecution(final String taskKey, final Date start, final boolean dryRun) {
         getService(TaskService.class).execute(
                 new ExecuteQuery.Builder().key(taskKey).startAt(start).dryRun(dryRun).build());
     }
 
     @Override
-    public void deleteExecution(final long taskExecId) {
-        getService(TaskService.class).deleteExecution(taskExecId);
+    public void deleteExecution(final String taskExecKey) {
+        getService(TaskService.class).deleteExecution(taskExecKey);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/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 d4561fe..dce489c 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
@@ -83,12 +83,12 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO> {
     }
 
     @Override
-    public ProvisioningResult<UserTO> delete(final String etag, final Long key) {
+    public ProvisioningResult<UserTO> delete(final String etag, final String key) {
         return delete(UserService.class, UserTO.class, etag, key);
     }
 
     @Override
-    public UserTO read(final Long key) {
+    public UserTO read(final String key) {
         return getService(UserService.class).read(key);
     }
 
@@ -109,14 +109,14 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO> {
                         orderBy(toOrderBy(sort)).details(false).build()).getResult();
     }
 
-    public ProvisioningResult<UserTO> mustChangePassword(final String etag, final boolean value, final Long key) {
+    public ProvisioningResult<UserTO> mustChangePassword(final String etag, final boolean value, final String key) {
         final UserPatch userPatch = new UserPatch();
         userPatch.setKey(key);
         userPatch.setMustChangePassword(new BooleanReplacePatchItem.Builder().value(value).build());
         return update(etag, userPatch);
     }
 
-    public void suspend(final String etag, final long userKey, final List<StatusBean> statuses) {
+    public void suspend(final String etag, final String userKey, final List<StatusBean> statuses) {
         StatusPatch statusPatch = StatusUtils.buildStatusPatch(statuses, false);
         statusPatch.setKey(userKey);
         statusPatch.setType(StatusPatchType.SUSPEND);
@@ -127,7 +127,7 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO> {
         }
     }
 
-    public void reactivate(final String etag, final long userKey, final List<StatusBean> statuses) {
+    public void reactivate(final String etag, final String userKey, final List<StatusBean> statuses) {
         StatusPatch statusPatch = StatusUtils.buildStatusPatch(statuses, true);
         statusPatch.setKey(userKey);
         statusPatch.setType(StatusPatchType.REACTIVATE);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTaskDirectoryPanel.java
index c8ea264..811e3a2 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTaskDirectoryPanel.java
@@ -33,13 +33,13 @@ public abstract class AnyPropagationTaskDirectoryPanel extends PropagationTaskDi
 
     private final AnyTypeKind anyTypeKind;
 
-    private final Long anyTypeKey;
+    private final String anyTypeKey;
 
     protected AnyPropagationTaskDirectoryPanel(
             final BaseModal<?> baseModal,
             final MultilevelPanel multiLevelPanelRef,
             final AnyTypeKind anyTypeKind,
-            final Long anyTypeKey,
+            final String anyTypeKey,
             final PageReference pageRef) {
 
         super(baseModal, multiLevelPanelRef, null, pageRef);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTasks.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTasks.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTasks.java
index d59ee81..5cfa7d5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTasks.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTasks.java
@@ -35,7 +35,7 @@ public class AnyPropagationTasks extends AbstractPropagationTasks {
     public <T extends AnyTO> AnyPropagationTasks(
             final BaseModal<?> baseModal,
             final AnyTypeKind anyTypeKind,
-            final Long anyTypeKey,
+            final String anyTypeKey,
             final PageReference pageReference) {
 
         super(BaseModal.CONTENT_ID);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
index d60d507..03d62e7 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
@@ -49,26 +49,24 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.StringResourceModel;
 
-/**
- * Tasks page.
- */
 public abstract class NotificationTaskDirectoryPanel
         extends TaskDirectoryPanel<NotificationTaskTO> implements ModalPanel<NotificationTaskTO> {
 
     private static final long serialVersionUID = 4984337552918213290L;
 
-    private final Long notification;
+    private final String notification;
 
     private final AnyTypeKind anyTypeKind;
 
-    private final Long anyTypeKey;
+    private final String anyTypeKey;
 
     protected NotificationTaskDirectoryPanel(
-            final Long notification,
+            final String notification,
             final AnyTypeKind anyTypeKind,
-            final Long anyTypeKey,
+            final String anyTypeKey,
             final MultilevelPanel multiLevelPanelRef,
             final PageReference pageRef) {
+
         super(null, multiLevelPanelRef, pageRef);
         this.notification = notification;
         this.anyTypeKind = anyTypeKind;
@@ -201,17 +199,18 @@ public abstract class NotificationTaskDirectoryPanel
 
         private static final long serialVersionUID = 4725679400450513556L;
 
-        private final Long notification;
+        private final String notification;
 
         private final AnyTypeKind anyTypeKind;
 
-        private final Long anyTypeKey;
+        private final String anyTypeKey;
 
         public NotificationTasksProvider(
-                final Long notification,
+                final String notification,
                 final AnyTypeKind anyTypeKind,
-                final Long anyTypeKey,
+                final String anyTypeKey,
                 final int paginatorRows) {
+
             super(paginatorRows, TaskType.PROPAGATION, restClient);
             this.notification = notification;
             this.anyTypeKind = anyTypeKind;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
index 282e847..da36a28 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
@@ -32,6 +32,7 @@ import org.apache.syncope.client.console.panels.ModalPanel;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
@@ -72,7 +73,7 @@ public abstract class PropagationTaskDirectoryPanel
     protected List<IColumn<PropagationTaskTO, String>> getColumns() {
         final List<IColumn<PropagationTaskTO, String>> columns = new ArrayList<>();
 
-        columns.add(new PropertyColumn<PropagationTaskTO, String>(
+        columns.add(new KeyPropertyColumn<PropagationTaskTO>(
                 new StringResourceModel("key", this, null), "key", "key"));
 
         columns.add(new PropertyColumn<PropagationTaskTO, String>(new StringResourceModel(

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
index 0d8538f..6d1554c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
@@ -24,6 +24,7 @@ import java.util.Iterator;
 import java.util.List;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.common.lib.to.AbstractProvisioningTaskTO;
 import org.apache.syncope.common.lib.to.PullTaskTO;
@@ -67,9 +68,9 @@ public abstract class ProvisioningTaskDirectoryPanel<T extends AbstractProvision
 
     @Override
     protected List<IColumn<T, String>> getFieldColumns() {
-        final List<IColumn<T, String>> columns = new ArrayList<>();
+        List<IColumn<T, String>> columns = new ArrayList<>();
 
-        columns.add(new PropertyColumn<T, String>(
+        columns.add(new KeyPropertyColumn<T>(
                 new StringResourceModel("key", this, null), "key", "key"));
 
         columns.add(new PropertyColumn<T, String>(

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
index 1ef8b50..ac8f210 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
@@ -32,6 +32,7 @@ import org.apache.syncope.client.console.panels.ModalPanel;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
@@ -98,7 +99,7 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
     protected List<IColumn<T, String>> getFieldColumns() {
         final List<IColumn<T, String>> columns = new ArrayList<>();
 
-        columns.add(new PropertyColumn<T, String>(
+        columns.add(new KeyPropertyColumn<T>(
                 new StringResourceModel("key", this, null), "key", "key"));
 
         columns.add(new PropertyColumn<T, String>(
@@ -195,7 +196,7 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
                             @Override
                             public void onClick(final AjaxRequestTarget target, final T ignore) {
                                 final T clone = SerializationUtils.clone(model.getObject());
-                                clone.setKey(0L);
+                                clone.setKey(null);
                                 send(SchedTaskDirectoryPanel.this, Broadcast.EXACT,
                                         new AjaxWizard.EditItemActionEvent<>(clone, target));
                             }


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

Posted by il...@apache.org.
[SYNCOPE-822] UUID keys


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

Branch: refs/heads/master
Commit: 550ee4f4c9d52cacf879303f29905212a5f4d2c3
Parents: 1735c44
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Apr 18 15:28:16 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Apr 19 15:01:19 2016 +0200

----------------------------------------------------------------------
 .../anyobject/AnyObjectSyncopeOperations.java   |   16 +-
 .../connector/ConnectorSyncopeOperations.java   |    8 +-
 .../EntitlementSyncopeOperations.java           |    2 +-
 .../commands/group/GroupSyncopeOperations.java  |   26 +-
 .../cli/commands/migrate/MigrateConf.java       |  292 ++--
 .../NotificationSyncopeOperations.java          |    8 +-
 .../policy/PolicySyncopeOperations.java         |    8 +-
 .../question/QuestionSyncopeOperations.java     |   10 +-
 .../report/ReportSyncopeOperations.java         |   59 +-
 .../resource/ResourceResultManager.java         |    5 -
 .../commands/task/TaskSyncopeOperations.java    |    9 +-
 .../client/cli/commands/user/UserCommand.java   |   10 +-
 .../client/cli/commands/user/UserGetKey.java    |   51 -
 .../cli/commands/user/UserGetUsername.java      |   51 -
 .../cli/commands/user/UserReadByUsername.java   |    3 +-
 .../commands/user/UserSyncopeOperations.java    |   17 +-
 client/cli/src/test/resources/schema20.sql      |  401 +++---
 .../console/SyncopeConsoleApplication.java      |    6 +-
 .../client/console/SyncopeConsoleSession.java   |    3 +-
 .../client/console/bulk/BulkContent.java        |    8 +-
 .../console/commons/RoleDataProvider.java       |    4 +-
 .../commons/SortableAnyProviderComparator.java  |   10 +-
 .../console/commons/status/StatusBean.java      |    4 +-
 .../MailTemplateDirectoryPanel.java             |   13 +-
 .../NotificationDirectoryPanel.java             |    7 +-
 .../notifications/NotificationHandler.java      |    2 +-
 .../notifications/NotificationTasks.java        |    9 +-
 .../NotificationWizardBuilder.java              |   43 +-
 .../syncope/client/console/pages/Realms.java    |    2 +-
 .../console/panels/AnyDirectoryPanel.java       |    1 +
 .../console/panels/AnyObjectDirectoryPanel.java |    7 +-
 .../console/panels/AnyTypeDetailsPanel.java     |    3 +-
 .../console/panels/GroupDirectoryPanel.java     |    7 +-
 .../client/console/panels/RealmChoicePanel.java |   22 +-
 .../client/console/panels/RealmDetails.java     |   20 +-
 .../panels/SecurityQuestionsModalPanel.java     |    2 +-
 .../console/panels/SecurityQuestionsPanel.java  |   43 +-
 .../console/panels/UserDirectoryPanel.java      |    7 +-
 .../client/console/panels/VirSchemaDetails.java |   17 +-
 .../panels/search/AbstractSearchPanel.java      |    8 +-
 .../panels/search/AnyObjectSearchPanel.java     |    6 +-
 .../search/AnySelectionDirectoryPanel.java      |    5 +-
 .../console/panels/search/GroupSearchPanel.java |    6 +-
 .../panels/search/SearchClausePanel.java        |    6 +-
 .../console/panels/search/SearchUtils.java      |   18 +-
 .../console/rest/AbstractAnyRestClient.java     |   18 +-
 .../console/rest/AnyObjectRestClient.java       |    4 +-
 .../console/rest/ConnectorRestClient.java       |    4 +-
 .../console/rest/ExecutionRestClient.java       |    4 +-
 .../client/console/rest/GroupRestClient.java    |   10 +-
 .../console/rest/NotificationRestClient.java    |    4 +-
 .../client/console/rest/PolicyRestClient.java   |    6 +-
 .../client/console/rest/ReportRestClient.java   |   12 +-
 .../client/console/rest/ResourceRestClient.java |    4 +-
 .../client/console/rest/SchemaRestClient.java   |    3 +-
 .../rest/SecurityQuestionRestClient.java        |    2 +-
 .../client/console/rest/TaskRestClient.java     |   30 +-
 .../client/console/rest/UserRestClient.java     |   10 +-
 .../tasks/AnyPropagationTaskDirectoryPanel.java |    4 +-
 .../console/tasks/AnyPropagationTasks.java      |    2 +-
 .../tasks/NotificationTaskDirectoryPanel.java   |   21 +-
 .../tasks/PropagationTaskDirectoryPanel.java    |    3 +-
 .../tasks/ProvisioningTaskDirectoryPanel.java   |    5 +-
 .../console/tasks/SchedTaskDirectoryPanel.java  |    5 +-
 .../console/tasks/SchedTaskWizardBuilder.java   |    4 +-
 .../client/console/tasks/TaskExecutions.java    |   13 +-
 .../client/console/topology/Topology.java       |   16 +-
 .../console/topology/TopologyTogglePanel.java   |    6 +-
 .../topology/TopologyWebSocketBehavior.java     |   10 +-
 .../repeater/data/table/KeyPropertyColumn.java  |   60 +
 .../wicket/markup/html/form/PolicyRenderer.java |   10 +-
 .../console/widgets/ReconciliationWidget.java   |    4 +-
 .../console/widgets/reconciliation/Any.java     |    6 +-
 .../ReconciliationReportParser.java             |    6 +-
 .../console/wizards/any/AbstractAttrs.java      |    8 +-
 .../wizards/any/AnyObjectWizardBuilder.java     |    2 +-
 .../console/wizards/any/AnyWizardBuilder.java   |    2 +-
 .../client/console/wizards/any/AuxClasses.java  |   14 +-
 .../client/console/wizards/any/DerAttrs.java    |    3 +-
 .../console/wizards/any/GroupWizardBuilder.java |    4 +-
 .../client/console/wizards/any/Ownership.java   |    8 +-
 .../client/console/wizards/any/PlainAttrs.java  |    3 +-
 .../console/wizards/any/Relationships.java      |    3 +-
 .../client/console/wizards/any/Resources.java   |    4 +-
 .../client/console/wizards/any/Roles.java       |    3 +-
 .../client/console/wizards/any/StatusPanel.java |    2 +-
 .../console/wizards/any/UserWizardBuilder.java  |    5 +-
 .../client/console/wizards/any/VirAttrs.java    |    3 +-
 .../resources/ConnectorDetailsPanel.java        |    2 +-
 .../resources/ProvisionWizardBuilder.java       |    2 +-
 .../resources/ResourceConnConfPanel.java        |    2 +-
 .../wizards/resources/ResourceMappingPanel.java |    8 +-
 .../resources/ResourceProvisionPanel.java       |    2 +-
 .../resources/ResourceSecurityPanel.java        |   30 +-
 .../META-INF/resources/css/syncopeConsole.css   |    4 +
 .../src/main/resources/console.properties       |    2 +-
 .../SyncopeConsoleApplication.properties        |    2 +-
 .../SyncopeConsoleApplication_it.properties     |    2 +-
 .../SyncopeConsoleApplication_pt_BR.properties  |    2 +-
 .../SyncopeConsoleApplication_ru.properties     |  106 +-
 .../console/panels/DirectoryPanel.properties    |    2 -
 .../console/panels/DirectoryPanel_it.properties |    4 +-
 .../panels/DirectoryPanel_pt_BR.properties      |    2 -
 .../console/panels/DirectoryPanel_ru.properties |   50 +-
 .../console/tasks/TaskDirectoryPanel.properties |    2 -
 .../tasks/TaskDirectoryPanel_it.properties      |    2 -
 .../tasks/TaskDirectoryPanel_pt_BR.properties   |    2 -
 .../tasks/TaskDirectoryPanel_ru.properties      |   17 +-
 .../syncope/common/lib/AnyOperations.java       |   47 +-
 .../syncope/common/lib/EntityTOUtils.java       |    6 +-
 .../syncope/common/lib/SyncopeConstants.java    |    4 +
 .../lib/patch/AbstractReplacePatchItem.java     |    2 +-
 .../syncope/common/lib/patch/AnyPatch.java      |    6 +-
 .../common/lib/patch/AssociationPatch.java      |    6 +-
 .../common/lib/patch/DeassociationPatch.java    |    6 +-
 .../syncope/common/lib/patch/GroupPatch.java    |   12 +-
 .../common/lib/patch/LongReplacePatchItem.java  |   37 -
 .../lib/patch/ResourceDeassociationPatch.java   |    4 +-
 .../syncope/common/lib/patch/StatusPatch.java   |    6 +-
 .../syncope/common/lib/patch/UserPatch.java     |    6 +-
 .../common/lib/policy/AbstractPolicyTO.java     |   11 +-
 .../AnyObjectFiqlSearchConditionBuilder.java    |   16 +-
 .../common/lib/search/AnyObjectProperty.java    |    8 +-
 .../search/UserFiqlSearchConditionBuilder.java  |   16 +-
 .../syncope/common/lib/search/UserProperty.java |    8 +-
 .../syncope/common/lib/to/AbstractSchemaTO.java |    2 +-
 .../syncope/common/lib/to/AbstractTaskTO.java   |    8 +-
 .../syncope/common/lib/to/AnyObjectTO.java      |   12 +-
 .../org/apache/syncope/common/lib/to/AnyTO.java |    8 +-
 .../syncope/common/lib/to/AnyTypeClassTO.java   |    2 +-
 .../apache/syncope/common/lib/to/AnyTypeTO.java |    2 +-
 .../syncope/common/lib/to/ConnInstanceTO.java   |    8 +-
 .../apache/syncope/common/lib/to/DomainTO.java  |    2 +-
 .../apache/syncope/common/lib/to/EntityTO.java  |    6 +-
 .../apache/syncope/common/lib/to/ExecTO.java    |   14 +-
 .../apache/syncope/common/lib/to/GroupTO.java   |   12 +-
 .../syncope/common/lib/to/GroupableTO.java      |    4 +-
 .../org/apache/syncope/common/lib/to/JobTO.java |    6 +-
 .../syncope/common/lib/to/MailTemplateTO.java   |    2 +-
 .../syncope/common/lib/to/MappingItemTO.java    |    8 +-
 .../syncope/common/lib/to/MembershipTO.java     |    6 +-
 .../syncope/common/lib/to/NotificationTO.java   |    8 +-
 .../common/lib/to/NotificationTaskTO.java       |   13 +-
 .../syncope/common/lib/to/ProvisionTO.java      |    8 +-
 .../apache/syncope/common/lib/to/RealmTO.java   |   26 +-
 .../syncope/common/lib/to/RelatableTO.java      |    2 +-
 .../syncope/common/lib/to/RelationshipTO.java   |   16 +-
 .../common/lib/to/RelationshipTypeTO.java       |    2 +-
 .../apache/syncope/common/lib/to/ReportTO.java  |    8 +-
 .../syncope/common/lib/to/ReportTemplateTO.java |    2 +-
 .../syncope/common/lib/to/ResourceTO.java       |   27 +-
 .../apache/syncope/common/lib/to/RoleTO.java    |    2 +-
 .../common/lib/to/SecurityQuestionTO.java       |    8 +-
 .../apache/syncope/common/lib/to/UserTO.java    |   18 +-
 .../syncope/common/lib/to/VirSchemaTO.java      |    6 +-
 .../syncope/common/lib/to/WorkflowFormTO.java   |    6 +-
 .../common/lib/types/ClientExceptionType.java   |    1 +
 .../org/apache/syncope/common/lib/JSONTest.java |    3 +-
 .../syncope/common/rest/api/RESTHeaders.java    |    4 -
 .../common/rest/api/beans/AbstractQuery.java    |    2 +-
 .../rest/api/beans/BulkExecDeleteQuery.java     |    8 +-
 .../common/rest/api/beans/ExecuteQuery.java     |    8 +-
 .../common/rest/api/beans/TaskExecQuery.java    |    8 +-
 .../common/rest/api/beans/TaskQuery.java        |   16 +-
 .../common/rest/api/service/AnyService.java     |   12 +-
 .../rest/api/service/ConnectorService.java      |    4 +-
 .../rest/api/service/NotificationService.java   |    4 +-
 .../common/rest/api/service/PolicyService.java  |    4 +-
 .../common/rest/api/service/RealmService.java   |    4 +-
 .../common/rest/api/service/ReportService.java  |   10 +-
 .../rest/api/service/ResourceService.java       |    2 +-
 .../api/service/SecurityQuestionService.java    |    4 +-
 .../common/rest/api/service/TaskService.java    |    8 +-
 .../common/rest/api/service/UserService.java    |   22 -
 .../rest/api/service/UserWorkflowService.java   |    2 +-
 .../syncope/core/logic/AbstractAnyLogic.java    |   12 +-
 .../syncope/core/logic/AbstractJobLogic.java    |    4 +-
 .../core/logic/AbstractResourceAssociator.java  |   12 +-
 .../syncope/core/logic/AnyObjectLogic.java      |   28 +-
 .../apache/syncope/core/logic/AnyTypeLogic.java |    4 +-
 .../syncope/core/logic/ConnectorLogic.java      |   12 +-
 .../apache/syncope/core/logic/GroupLogic.java   |   32 +-
 .../syncope/core/logic/NotificationLogic.java   |   16 +-
 .../apache/syncope/core/logic/PolicyLogic.java  |   12 +-
 .../apache/syncope/core/logic/RealmLogic.java   |   25 +-
 .../apache/syncope/core/logic/ReportLogic.java  |   26 +-
 .../syncope/core/logic/ResourceLogic.java       |    6 +-
 .../apache/syncope/core/logic/SchemaLogic.java  |    3 +
 .../core/logic/SecurityQuestionLogic.java       |   40 +-
 .../apache/syncope/core/logic/TaskLogic.java    |   36 +-
 .../apache/syncope/core/logic/UserLogic.java    |   49 +-
 .../syncope/core/logic/UserWorkflowLogic.java   |    4 +-
 .../core/logic/report/GroupReportlet.java       |   16 +-
 .../logic/report/ReconciliationReportlet.java   |   10 +-
 .../syncope/core/logic/report/ReportJob.java    |    4 +-
 .../core/logic/report/ReportJobDelegate.java    |    2 +-
 .../core/logic/report/UserReportlet.java        |   12 +-
 .../core/persistence/api/dao/AnyDAO.java        |    8 +-
 .../core/persistence/api/dao/AnyObjectDAO.java  |    2 +-
 .../core/persistence/api/dao/AnySearchDAO.java  |    2 +-
 .../persistence/api/dao/AnyTypeClassDAO.java    |    2 +-
 .../core/persistence/api/dao/AnyTypeDAO.java    |    2 +-
 .../core/persistence/api/dao/ConfDAO.java       |    2 +-
 .../persistence/api/dao/ConnInstanceDAO.java    |    6 +-
 .../syncope/core/persistence/api/dao/DAO.java   |    2 +-
 .../core/persistence/api/dao/DomainDAO.java     |    2 +-
 .../api/dao/ExternalResourceDAO.java            |    4 +-
 .../core/persistence/api/dao/GroupDAO.java      |   12 +-
 .../core/persistence/api/dao/LoggerDAO.java     |    2 +-
 .../persistence/api/dao/MailTemplateDAO.java    |    2 +-
 .../persistence/api/dao/NotificationDAO.java    |    6 +-
 .../core/persistence/api/dao/PlainAttrDAO.java  |    6 +-
 .../persistence/api/dao/PlainAttrValueDAO.java  |    6 +-
 .../core/persistence/api/dao/PolicyDAO.java     |    4 +-
 .../core/persistence/api/dao/RealmDAO.java      |    8 +-
 .../api/dao/RelationshipTypeDAO.java            |    2 +-
 .../core/persistence/api/dao/ReportDAO.java     |    6 +-
 .../core/persistence/api/dao/ReportExecDAO.java |    6 +-
 .../persistence/api/dao/ReportTemplateDAO.java  |    2 +-
 .../core/persistence/api/dao/RoleDAO.java       |    2 +-
 .../core/persistence/api/dao/SchemaDAO.java     |    2 +-
 .../api/dao/SecurityQuestionDAO.java            |    6 +-
 .../core/persistence/api/dao/TaskDAO.java       |   22 +-
 .../core/persistence/api/dao/TaskExecDAO.java   |   10 +-
 .../core/persistence/api/dao/UserDAO.java       |    6 +-
 .../persistence/api/dao/search/AnyTypeCond.java |   12 +-
 .../api/dao/search/MembershipCond.java          |    6 +-
 .../api/dao/search/RelationshipCond.java        |    6 +-
 .../api/dao/search/ResourceCond.java            |   12 +-
 .../persistence/api/dao/search/SearchCond.java  |    2 +-
 .../persistence/api/entity/AnnotatedEntity.java |    2 +-
 .../core/persistence/api/entity/Any.java        |    2 +-
 .../core/persistence/api/entity/AnyAbout.java   |    2 +-
 .../persistence/api/entity/AnyTemplate.java     |    2 +-
 .../core/persistence/api/entity/AnyType.java    |    4 +-
 .../persistence/api/entity/AnyTypeClass.java    |    4 +-
 .../persistence/api/entity/ConnInstance.java    |    4 +-
 .../core/persistence/api/entity/Domain.java     |    4 +-
 .../persistence/api/entity/DynMembership.java   |    2 +-
 .../core/persistence/api/entity/Entity.java     |    4 +-
 .../persistence/api/entity/EntityFactory.java   |    6 +-
 .../core/persistence/api/entity/Exec.java       |    2 +-
 .../api/entity/LinkingMappingItem.java          |    4 +-
 .../core/persistence/api/entity/Logger.java     |    2 +-
 .../persistence/api/entity/MailTemplate.java    |    4 +-
 .../persistence/api/entity/Notification.java    |    2 +-
 .../core/persistence/api/entity/PlainAttr.java  |    2 +-
 .../persistence/api/entity/PlainAttrValue.java  |    2 +-
 .../core/persistence/api/entity/Policy.java     |    2 +-
 .../api/entity/ProvidedKeyEntity.java           |   25 +
 .../core/persistence/api/entity/Realm.java      |    2 +-
 .../persistence/api/entity/Relationship.java    |    2 +-
 .../api/entity/RelationshipType.java            |    4 +-
 .../core/persistence/api/entity/Report.java     |    2 +-
 .../persistence/api/entity/ReportTemplate.java  |    4 +-
 .../core/persistence/api/entity/Role.java       |    4 +-
 .../core/persistence/api/entity/Schema.java     |    4 +-
 .../api/entity/anyobject/AnyObject.java         |    6 +-
 .../core/persistence/api/entity/conf/Conf.java  |    5 +-
 .../api/entity/group/TypeExtension.java         |    2 +-
 .../api/entity/resource/ExternalResource.java   |    6 +-
 .../api/entity/resource/Mapping.java            |    2 +-
 .../api/entity/resource/MappingItem.java        |    2 +-
 .../api/entity/resource/Provision.java          |    2 +-
 .../api/entity/task/NotificationTask.java       |    4 +-
 .../api/entity/task/PropagationTask.java        |    4 +-
 .../api/entity/task/PushTaskAnyFilter.java      |    2 +-
 .../core/persistence/api/entity/task/Task.java  |    2 +-
 .../api/entity/user/SecurityQuestion.java       |    2 +-
 .../core/persistence/api/entity/user/User.java  |    6 +-
 .../api/search/SearchCondVisitor.java           |    8 +-
 .../api/search/SearchCondConverterTest.java     |   18 +-
 core/persistence-jpa/pom.xml                    |    6 +-
 .../persistence/jpa/dao/AbstractAnyDAO.java     |   52 +-
 .../core/persistence/jpa/dao/AbstractDAO.java   |    2 +-
 .../persistence/jpa/dao/JPAAnyObjectDAO.java    |    6 +-
 .../persistence/jpa/dao/JPAAnySearchDAO.java    |  176 ++-
 .../persistence/jpa/dao/JPAAnyTypeClassDAO.java |    2 +-
 .../core/persistence/jpa/dao/JPAAnyTypeDAO.java |    2 +-
 .../core/persistence/jpa/dao/JPAConfDAO.java    |    8 +-
 .../persistence/jpa/dao/JPAConnInstanceDAO.java |    6 +-
 .../persistence/jpa/dao/JPADerSchemaDAO.java    |    4 +-
 .../core/persistence/jpa/dao/JPADomainDAO.java  |    2 +-
 .../jpa/dao/JPAExternalResourceDAO.java         |    8 +-
 .../core/persistence/jpa/dao/JPAGroupDAO.java   |   39 +-
 .../core/persistence/jpa/dao/JPALoggerDAO.java  |    2 +-
 .../persistence/jpa/dao/JPAMailTemplateDAO.java |    2 +-
 .../persistence/jpa/dao/JPANotificationDAO.java |    6 +-
 .../persistence/jpa/dao/JPAPlainAttrDAO.java    |    6 +-
 .../jpa/dao/JPAPlainAttrValueDAO.java           |    8 +-
 .../persistence/jpa/dao/JPAPlainSchemaDAO.java  |    4 +-
 .../core/persistence/jpa/dao/JPAPolicyDAO.java  |    4 +-
 .../core/persistence/jpa/dao/JPARealmDAO.java   |    8 +-
 .../jpa/dao/JPARelationshipTypeDAO.java         |    2 +-
 .../core/persistence/jpa/dao/JPAReportDAO.java  |    6 +-
 .../persistence/jpa/dao/JPAReportExecDAO.java   |    6 +-
 .../jpa/dao/JPAReportTemplateDAO.java           |    2 +-
 .../core/persistence/jpa/dao/JPARoleDAO.java    |    2 +-
 .../jpa/dao/JPASecurityQuestionDAO.java         |    6 +-
 .../core/persistence/jpa/dao/JPATaskDAO.java    |   24 +-
 .../persistence/jpa/dao/JPATaskExecDAO.java     |   18 +-
 .../core/persistence/jpa/dao/JPAUserDAO.java    |   17 +-
 .../persistence/jpa/dao/JPAVirSchemaDAO.java    |    4 +-
 .../jpa/entity/AbstractAnnotatedEntity.java     |    4 +-
 .../persistence/jpa/entity/AbstractAny.java     |    6 +-
 .../jpa/entity/AbstractDynMembership.java       |    2 +-
 .../persistence/jpa/entity/AbstractEntity.java  |    2 +-
 .../persistence/jpa/entity/AbstractExec.java    |    2 +-
 .../jpa/entity/AbstractGeneratedKeyEntity.java  |   42 +
 .../jpa/entity/AbstractPlainAttr.java           |    4 +-
 .../jpa/entity/AbstractPlainAttrValue.java      |   17 +-
 .../jpa/entity/AbstractProvidedKeyEntity.java   |   43 +
 .../jpa/entity/AnnotatedEntityListener.java     |    2 +-
 .../persistence/jpa/entity/JPAAnyAbout.java     |   13 +-
 .../jpa/entity/JPAAnyTemplateRealm.java         |   11 +-
 .../core/persistence/jpa/entity/JPAAnyType.java |   20 +-
 .../persistence/jpa/entity/JPAAnyTypeClass.java |   16 +-
 .../persistence/jpa/entity/JPAAnyUtils.java     |    2 +-
 .../persistence/jpa/entity/JPAConnInstance.java |   13 +-
 .../persistence/jpa/entity/JPADerSchema.java    |   20 +-
 .../core/persistence/jpa/entity/JPADomain.java  |   16 +-
 .../jpa/entity/JPAEntityFactory.java            |  122 +-
 .../core/persistence/jpa/entity/JPALogger.java  |    8 +-
 .../persistence/jpa/entity/JPAMailTemplate.java |   16 +-
 .../persistence/jpa/entity/JPANotification.java |   17 +-
 .../persistence/jpa/entity/JPAPlainSchema.java  |   20 +-
 .../core/persistence/jpa/entity/JPARealm.java   |   15 +-
 .../jpa/entity/JPARelationshipType.java         |   16 +-
 .../core/persistence/jpa/entity/JPAReport.java  |   13 +-
 .../persistence/jpa/entity/JPAReportExec.java   |    9 -
 .../jpa/entity/JPAReportTemplate.java           |   16 +-
 .../jpa/entity/JPAReportletConfInstance.java    |   11 +-
 .../core/persistence/jpa/entity/JPARole.java    |   24 +-
 .../jpa/entity/JPASecurityQuestion.java         |   11 +-
 .../persistence/jpa/entity/JPAVirSchema.java    |   20 +-
 .../anyobject/JPAADynGroupMembership.java       |   13 +-
 .../jpa/entity/anyobject/JPAAMembership.java    |   17 +-
 .../jpa/entity/anyobject/JPAAPlainAttr.java     |    9 -
 .../anyobject/JPAAPlainAttrUniqueValue.java     |   11 +-
 .../entity/anyobject/JPAAPlainAttrValue.java    |    9 -
 .../jpa/entity/anyobject/JPAARelationship.java  |   19 +-
 .../jpa/entity/anyobject/JPAAnyObject.java      |   23 +-
 .../jpa/entity/conf/JPACPlainAttr.java          |   12 -
 .../entity/conf/JPACPlainAttrUniqueValue.java   |   11 +-
 .../jpa/entity/conf/JPACPlainAttrValue.java     |    9 -
 .../persistence/jpa/entity/conf/JPAConf.java    |   59 +-
 .../jpa/entity/group/JPAGPlainAttr.java         |    9 -
 .../entity/group/JPAGPlainAttrUniqueValue.java  |   11 +-
 .../jpa/entity/group/JPAGPlainAttrValue.java    |    9 -
 .../persistence/jpa/entity/group/JPAGroup.java  |   17 +-
 .../jpa/entity/group/JPATypeExtension.java      |   19 +-
 .../jpa/entity/policy/AbstractPolicy.java       |   13 +-
 .../jpa/entity/policy/JPAAccountPolicy.java     |    6 +-
 .../policy/JPAAccountRuleConfInstance.java      |   13 +-
 .../policy/JPAPasswordRuleConfInstance.java     |   13 +-
 .../entity/resource/AbstractAnyTemplate.java    |    4 +-
 .../entity/resource/JPAExternalResource.java    |   27 +-
 .../jpa/entity/resource/JPAMapping.java         |   13 +-
 .../jpa/entity/resource/JPAMappingItem.java     |   17 +-
 .../jpa/entity/resource/JPAProvision.java       |   19 +-
 .../jpa/entity/task/AbstractTask.java           |   14 +-
 .../jpa/entity/task/JPAAnyTemplatePullTask.java |   11 +-
 .../jpa/entity/task/JPANotificationTask.java    |    9 +-
 .../jpa/entity/task/JPAPropagationTask.java     |    6 +-
 .../jpa/entity/task/JPAPullTask.java            |    2 +-
 .../jpa/entity/task/JPAPushTask.java            |    2 +-
 .../jpa/entity/task/JPAPushTaskAnyFilter.java   |   15 +-
 .../jpa/entity/task/JPATaskExec.java            |   11 +-
 .../jpa/entity/user/JPADynRoleMembership.java   |   13 +-
 .../jpa/entity/user/JPAUDynGroupMembership.java |   13 +-
 .../jpa/entity/user/JPAUMembership.java         |   17 +-
 .../jpa/entity/user/JPAUPlainAttr.java          |    9 -
 .../entity/user/JPAUPlainAttrUniqueValue.java   |   11 +-
 .../jpa/entity/user/JPAUPlainAttrValue.java     |    9 -
 .../jpa/entity/user/JPAURelationship.java       |   19 +-
 .../persistence/jpa/entity/user/JPAUser.java    |   29 +-
 .../persistence/jpa/openjpa/UUIDGenerator.java  |   58 +
 .../entity/EntityValidationListener.java        |    2 +
 .../jpa/validation/entity/SchemaKeyCheck.java   |   41 +
 .../validation/entity/SchemaKeyValidator.java   |   98 ++
 .../jpa/validation/entity/SchemaNameCheck.java  |   41 -
 .../validation/entity/SchemaNameValidator.java  |   98 --
 .../resources/META-INF/spring-orm-oracle.xml    |  356 +----
 .../resources/META-INF/spring-orm-sqlserver.xml |  358 +----
 .../src/main/resources/META-INF/spring-orm.xml  |  390 +----
 .../src/main/resources/domains.xml              |    5 +-
 .../main/resources/domains/MasterContent.xml    |  157 ++-
 .../src/main/resources/indexes.xml              |   30 +-
 .../src/main/resources/persistence-enhance.xml  |   31 +
 .../src/main/resources/views.xml                |  106 +-
 .../persistence/jpa/inner/AnyObjectTest.java    |    8 +-
 .../persistence/jpa/inner/AnySearchTest.java    |  124 +-
 .../persistence/jpa/inner/ConnInstanceTest.java |   10 +-
 .../core/persistence/jpa/inner/GroupTest.java   |   10 +-
 .../persistence/jpa/inner/NotificationTest.java |    6 +-
 .../persistence/jpa/inner/PlainAttrTest.java    |   25 +-
 .../core/persistence/jpa/inner/PolicyTest.java  |    8 +-
 .../core/persistence/jpa/inner/RealmTest.java   |   40 +-
 .../jpa/inner/RelationshipTypeTest.java         |    5 +-
 .../core/persistence/jpa/inner/ReportTest.java  |   11 +-
 .../persistence/jpa/inner/ResourceTest.java     |    3 +-
 .../core/persistence/jpa/inner/RoleTest.java    |    2 +-
 .../jpa/inner/SecurityQuestionTest.java         |    8 +-
 .../persistence/jpa/inner/TaskExecTest.java     |    8 +-
 .../core/persistence/jpa/inner/TaskTest.java    |    6 +-
 .../core/persistence/jpa/inner/UserTest.java    |   29 +-
 .../persistence/jpa/outer/AnySearchTest.java    |    6 +-
 .../persistence/jpa/outer/ConnInstanceTest.java |   12 +-
 .../core/persistence/jpa/outer/GroupTest.java   |   59 +-
 .../persistence/jpa/outer/PlainAttrTest.java    |   13 +-
 .../persistence/jpa/outer/PlainSchemaTest.java  |   19 +-
 .../core/persistence/jpa/outer/RealmTest.java   |    4 +-
 .../core/persistence/jpa/outer/ReportTest.java  |   22 +-
 .../persistence/jpa/outer/ResourceTest.java     |   26 +-
 .../core/persistence/jpa/outer/RoleTest.java    |   22 +-
 .../jpa/outer/SecurityQuestionTest.java         |    8 +-
 .../core/persistence/jpa/outer/TaskTest.java    |  140 +-
 .../core/persistence/jpa/outer/UserTest.java    |   51 +-
 .../persistence/jpa/outer/VirSchemaTest.java    |    5 +-
 .../resources/META-INF/persistence-enhance.xml  |   31 -
 .../test/resources/domains/MasterContent.xml    | 1329 +++++++++---------
 .../src/test/resources/domains/TwoContent.xml   |  148 +-
 .../api/AnyObjectProvisioningManager.java       |    2 +-
 .../api/GroupProvisioningManager.java           |    9 +-
 .../provisioning/api/ProvisioningManager.java   |   18 +-
 .../api/UserProvisioningManager.java            |   20 +-
 .../provisioning/api/cache/VirAttrCache.java    |   10 +-
 .../provisioning/api/cache/VirAttrCacheKey.java |    6 +-
 .../api/data/AnyObjectDataBinder.java           |    2 +-
 .../api/data/ConnInstanceDataBinder.java        |    2 +-
 .../provisioning/api/data/GroupDataBinder.java  |    2 +-
 .../provisioning/api/data/UserDataBinder.java   |    4 +-
 .../core/provisioning/api/job/JobNamer.java     |   17 +-
 .../api/job/SchedTaskJobDelegate.java           |    2 +-
 .../api/notification/NotificationManager.java   |    8 +-
 .../api/propagation/PropagationManager.java     |    8 +-
 .../api/pushpull/GroupPullResultHandler.java    |    2 +-
 .../api/pushpull/ProvisioningReport.java        |   13 +-
 .../api/pushpull/SyncopePushResultHandler.java  |    2 +-
 .../provisioning/api/utils/EntityUtils.java     |    6 +-
 .../core/provisioning/api/utils/RealmUtils.java |    2 +-
 .../provisioning/java/ConnectorManager.java     |    2 +-
 .../DefaultAnyObjectProvisioningManager.java    |   26 +-
 .../java/DefaultGroupProvisioningManager.java   |   36 +-
 .../java/DefaultUserProvisioningManager.java    |   60 +-
 .../java/cache/DisabledVirAttrCache.java        |    6 +-
 .../java/cache/MemoryVirAttrCache.java          |   37 +-
 .../java/data/AbstractAnyDataBinder.java        |   12 +-
 .../java/data/AnyObjectDataBinderImpl.java      |    7 +-
 .../java/data/ConnInstanceDataBinderImpl.java   |    4 +-
 .../java/data/GroupDataBinderImpl.java          |    9 +-
 .../java/data/RealmDataBinderImpl.java          |    6 +-
 .../java/data/ResourceDataBinderImpl.java       |   14 +-
 .../java/data/RoleDataBinderImpl.java           |    2 +-
 .../java/data/TaskDataBinderImpl.java           |    2 +-
 .../java/data/UserDataBinderImpl.java           |   32 +-
 .../java/job/AbstractSchedTaskJobDelegate.java  |    4 +-
 .../core/provisioning/java/job/TaskJob.java     |    4 +-
 .../notification/NotificationManagerImpl.java   |    8 +-
 .../propagation/PropagationManagerImpl.java     |   10 +-
 .../AbstractProvisioningJobDelegate.java        |   48 +-
 .../pushpull/AbstractPullResultHandler.java     |   38 +-
 .../pushpull/AbstractPushResultHandler.java     |    2 +-
 .../pushpull/AbstractSyncopeResultHandler.java  |    8 +-
 .../AnyObjectPullResultHandlerImpl.java         |   12 +-
 .../AnyObjectPushResultHandlerImpl.java         |    8 +-
 .../pushpull/GroupPullResultHandlerImpl.java    |   16 +-
 .../pushpull/GroupPushResultHandlerImpl.java    |    8 +-
 .../pushpull/LDAPMembershipPullActions.java     |   10 +-
 .../java/pushpull/LDAPPasswordPullActions.java  |    6 +-
 .../java/pushpull/PullJobDelegate.java          |    6 +-
 .../provisioning/java/pushpull/PullUtils.java   |   27 +-
 .../pushpull/UserPullResultHandlerImpl.java     |   14 +-
 .../pushpull/UserPushResultHandlerImpl.java     |    8 +-
 .../java/utils/ConnObjectUtils.java             |    4 +-
 .../provisioning/java/utils/TemplateUtils.java  |    4 +-
 .../core/provisioning/java/DerAttrTest.java     |    2 +-
 .../provisioning/java/MailTemplateTest.java     |    2 +-
 .../core/provisioning/java/MappingTest.java     |    2 +-
 .../java/ResourceDataBinderTest.java            |    2 +-
 .../rest/cxf/service/AbstractAnyService.java    |   35 +-
 .../rest/cxf/service/AnyObjectServiceImpl.java  |    2 +-
 .../rest/cxf/service/ConnectorServiceImpl.java  |    7 +-
 .../core/rest/cxf/service/GroupServiceImpl.java |    2 +-
 .../cxf/service/NotificationServiceImpl.java    |    4 +-
 .../rest/cxf/service/PolicyServiceImpl.java     |    4 +-
 .../rest/cxf/service/ReportServiceImpl.java     |   10 +-
 .../rest/cxf/service/ResourceServiceImpl.java   |   24 +-
 .../service/SecurityQuestionServiceImpl.java    |    4 +-
 .../core/rest/cxf/service/TaskServiceImpl.java  |   16 +-
 .../core/rest/cxf/service/UserServiceImpl.java  |   18 +-
 .../cxf/service/UserWorkflowServiceImpl.java    |    2 +-
 .../core/spring/security/AuthDataAccessor.java  |    8 +-
 .../DelegatedAdministrationException.java       |    2 +-
 .../security/SyncopeAuthenticationProvider.java |   70 +-
 .../activiti/ActivitiUserWorkflowAdapter.java   |   26 +-
 .../core/workflow/activiti/ActivitiUtils.java   |    2 +-
 .../workflow/activiti/SyncopeGroupManager.java  |    6 +-
 .../activiti/SyncopeGroupQueryImpl.java         |    9 +-
 .../workflow/activiti/SyncopeUserManager.java   |    2 +-
 .../workflow/activiti/SyncopeUserQueryImpl.java |   12 +-
 .../workflow/api/AnyObjectWorkflowAdapter.java  |    8 +-
 .../core/workflow/api/GroupWorkflowAdapter.java |    8 +-
 .../core/workflow/api/UserWorkflowAdapter.java  |   22 +-
 .../java/AbstractAnyObjectWorkflowAdapter.java  |    6 +-
 .../java/AbstractGroupWorkflowAdapter.java      |    6 +-
 .../java/AbstractUserWorkflowAdapter.java       |   22 +-
 .../java/DefaultAnyObjectWorkflowAdapter.java   |    6 +-
 .../java/DefaultGroupWorkflowAdapter.java       |    6 +-
 .../java/DefaultUserWorkflowAdapter.java        |   16 +-
 .../syncope/core/logic/CamelRouteLogic.java     |    4 +-
 .../core/logic/init/CamelRouteLoader.java       |    2 +-
 .../core/persistence/api/dao/CamelRouteDAO.java |    2 +-
 .../core/persistence/api/entity/CamelRoute.java |    4 +-
 ext/camel/persistence-jpa/pom.xml               |    2 +-
 .../persistence/jpa/dao/JPACamelRouteDAO.java   |    2 +-
 .../persistence/jpa/entity/JPACamelRoute.java   |   16 +-
 .../CamelAnyObjectProvisioningManager.java      |   26 +-
 .../camel/CamelGroupProvisioningManager.java    |   28 +-
 .../camel/CamelUserProvisioningManager.java     |   48 +-
 .../processor/AnyObjectCreateProcessor.java     |    2 +-
 .../processor/AnyObjectDeleteProcessor.java     |    2 +-
 .../AnyObjectDeprovisionProcessor.java          |    2 +-
 .../processor/AnyObjectProvisionProcessor.java  |    2 +-
 .../processor/AnyObjectUpdateProcessor.java     |    2 +-
 .../processor/GroupCreateInPullProcessor.java   |    4 +-
 .../camel/processor/GroupCreateProcessor.java   |    5 +-
 .../camel/processor/GroupDeleteProcessor.java   |    6 +-
 .../processor/GroupDeprovisionProcessor.java    |    2 +-
 .../processor/GroupProvisionProcessor.java      |    2 +-
 .../camel/processor/GroupUpdateProcessor.java   |    2 +-
 .../camel/processor/UserCreateProcessor.java    |    2 +-
 .../camel/processor/UserDeleteProcessor.java    |    2 +-
 .../processor/UserDeprovisionProcessor.java     |    2 +-
 .../processor/UserInternalSuspendProcessor.java |    2 +-
 .../camel/processor/UserProvisionProcessor.java |    2 +-
 .../processor/UserSetStatusInPullProcessor.java |    4 +-
 fit/build-tools/src/main/resources/testdb.sql   |    6 +-
 .../src/main/resources/console.properties       |    2 +-
 .../src/test/resources/rebel.xml                |    4 +-
 .../src/main/resources/userWorkflow.bpmn20.xml  |    9 +-
 .../org/apache/syncope/fit/AbstractITCase.java  |   11 +-
 .../org/apache/syncope/fit/cli/CLIITCase.java   |   35 +-
 .../fit/console/AbstractConsoleITCase.java      |    2 -
 .../fit/console/AbstractTypesITCase.java        |    4 +-
 .../syncope/fit/console/AnyObjectsITCase.java   |   14 +-
 .../syncope/fit/console/BulkActionITCase.java   |    3 +-
 .../syncope/fit/console/GroupsITCase.java       |   11 +-
 .../apache/syncope/fit/console/LogsITCase.java  |    8 +-
 .../fit/console/SecurityQuestionsITCase.java    |   27 +-
 .../syncope/fit/core/AbstractTaskITCase.java    |   20 +-
 .../syncope/fit/core/AnyObjectITCase.java       |   13 +-
 .../syncope/fit/core/AuthenticationITCase.java  |   55 +-
 .../syncope/fit/core/ConnectorITCase.java       |   74 +-
 .../apache/syncope/fit/core/GroupITCase.java    |   41 +-
 .../syncope/fit/core/MultitenancyITCase.java    |  157 ++-
 .../syncope/fit/core/NotificationITCase.java    |   12 +-
 .../fit/core/NotificationTaskITCase.java        |   12 +-
 .../syncope/fit/core/PlainSchemaITCase.java     |    3 +-
 .../apache/syncope/fit/core/PolicyITCase.java   |   10 +-
 .../syncope/fit/core/PropagationTaskITCase.java |   42 +-
 .../apache/syncope/fit/core/PullTaskITCase.java |  208 +--
 .../apache/syncope/fit/core/PushTaskITCase.java |  104 +-
 .../apache/syncope/fit/core/RealmITCase.java    |   10 +-
 .../apache/syncope/fit/core/ReportITCase.java   |   30 +-
 .../apache/syncope/fit/core/ResourceITCase.java |   28 +-
 .../org/apache/syncope/fit/core/RoleITCase.java |    7 +-
 .../syncope/fit/core/SchedTaskITCase.java       |    4 +-
 .../apache/syncope/fit/core/SearchITCase.java   |   51 +-
 .../fit/core/SecurityQuestionITCase.java        |    6 +-
 .../org/apache/syncope/fit/core/UserITCase.java |  136 +-
 .../apache/syncope/fit/core/UserSelfITCase.java |   14 +-
 .../syncope/fit/core/UserWorkflowITCase.java    |   25 +-
 .../apache/syncope/fit/core/VirAttrITCase.java  |   17 +-
 .../syncope/fit/core/VirSchemaITCase.java       |    2 +-
 .../src/test/resources/console.properties       |    2 +-
 fit/core-reference/src/test/resources/rebel.xml |    1 +
 .../src/test/resources/rebel.xml                |    2 +-
 pom.xml                                         |    9 +-
 579 files changed, 4903 insertions(+), 6209 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/anyobject/AnyObjectSyncopeOperations.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/anyobject/AnyObjectSyncopeOperations.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/anyobject/AnyObjectSyncopeOperations.java
index c55499a..4f06c5d 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/anyobject/AnyObjectSyncopeOperations.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/anyobject/AnyObjectSyncopeOperations.java
@@ -35,19 +35,19 @@ public class AnyObjectSyncopeOperations {
         return anyObjectService.list(type, new AnyListQuery()).getResult();
     }
 
-    public AnyObjectTO read(final String anyId) {
-        return anyObjectService.read(Long.valueOf(anyId));
+    public AnyObjectTO read(final String anyKey) {
+        return anyObjectService.read(anyKey);
     }
 
-    public Set<AttrTO> readAttributes(final String anyId, final String schemaType) {
-        return anyObjectService.read(Long.valueOf(anyId), SchemaType.valueOf(schemaType));
+    public Set<AttrTO> readAttributes(final String anyKey, final String schemaType) {
+        return anyObjectService.read(anyKey, SchemaType.valueOf(schemaType));
     }
 
-    public AttrTO readAttribute(final String anyId, final String schemaType, final String schema) {
-        return anyObjectService.read(Long.valueOf(anyId), SchemaType.valueOf(schemaType), schema);
+    public AttrTO readAttribute(final String anyKey, final String schemaType, final String schema) {
+        return anyObjectService.read(anyKey, SchemaType.valueOf(schemaType), schema);
     }
 
-    public void delete(final String anyId) {
-        anyObjectService.delete(Long.valueOf(anyId));
+    public void delete(final String anyKey) {
+        anyObjectService.delete(anyKey);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/connector/ConnectorSyncopeOperations.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/connector/ConnectorSyncopeOperations.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/connector/ConnectorSyncopeOperations.java
index 11ac036..44c9ea8 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/connector/ConnectorSyncopeOperations.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/connector/ConnectorSyncopeOperations.java
@@ -32,8 +32,8 @@ public class ConnectorSyncopeOperations {
         return connectorService.readByResource(resourceName, null);
     }
 
-    public ConnInstanceTO read(final String resourceId) {
-        return connectorService.read(Long.valueOf(resourceId), null);
+    public ConnInstanceTO read(final String resourceKey) {
+        return connectorService.read(resourceKey, null);
     }
 
     public List<ConnBundleTO> getBundles() {
@@ -44,7 +44,7 @@ public class ConnectorSyncopeOperations {
         return connectorService.list(null);
     }
 
-    public void delete(final String resourceId) {
-        connectorService.delete(Long.valueOf(resourceId));
+    public void delete(final String resourceKey) {
+        connectorService.delete(resourceKey);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/entitlement/EntitlementSyncopeOperations.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/entitlement/EntitlementSyncopeOperations.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/entitlement/EntitlementSyncopeOperations.java
index 31053a8..55f0847 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/entitlement/EntitlementSyncopeOperations.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/entitlement/EntitlementSyncopeOperations.java
@@ -47,7 +47,7 @@ public class EntitlementSyncopeOperations {
 
     public Set<String> usernameEntitlements(final String username) {
         final Set<String> entitlements = new TreeSet<>();
-        final UserTO userTO = userSyncopeOperations.read(userSyncopeOperations.getIdFromUsername(username));
+        final UserTO userTO = userSyncopeOperations.read(username);
         for (final String role : userTO.getRoles()) {
             entitlements.addAll(roleSyncopeOperations.read(role).getEntitlements());
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/group/GroupSyncopeOperations.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/group/GroupSyncopeOperations.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/group/GroupSyncopeOperations.java
index 744fbe8..8df8e8c 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/group/GroupSyncopeOperations.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/group/GroupSyncopeOperations.java
@@ -35,29 +35,19 @@ public class GroupSyncopeOperations {
         return groupService.list(new AnyListQuery()).getResult();
     }
 
-    public GroupTO read(final String groupId) {
-        return groupService.read(Long.valueOf(groupId));
+    public GroupTO read(final String groupKey) {
+        return groupService.read(groupKey);
     }
 
-    public Set<AttrTO> readAttributes(final String groupId, final String schemaType) {
-        return groupService.read(Long.valueOf(groupId), SchemaType.valueOf(schemaType));
+    public Set<AttrTO> readAttributes(final String groupKey, final String schemaType) {
+        return groupService.read(groupKey, SchemaType.valueOf(schemaType));
     }
 
-    public AttrTO readAttribute(final String groupId, final String schemaType, final String schema) {
-        return groupService.read(Long.valueOf(groupId), SchemaType.valueOf(schemaType), schema);
+    public AttrTO readAttribute(final String groupKey, final String schemaType, final String schema) {
+        return groupService.read(groupKey, SchemaType.valueOf(schemaType), schema);
     }
 
-    public void delete(final String groupId) {
-        groupService.delete(Long.valueOf(groupId));
-    }
-
-    public boolean exists(final String realm) {
-        boolean exists = false;
-        for (final GroupTO list : list()) {
-            if (list.getName().equals(realm)) {
-                exists = true;
-            }
-        }
-        return exists;
+    public void delete(final String groupKey) {
+        groupService.delete(groupKey);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/migrate/MigrateConf.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/migrate/MigrateConf.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/migrate/MigrateConf.java
index 8de6d04..34851e9 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/migrate/MigrateConf.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/migrate/MigrateConf.java
@@ -26,9 +26,12 @@ import java.io.FileWriter;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.UUID;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamException;
@@ -62,6 +65,8 @@ public class MigrateConf {
 
         Set<String> exceptions = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
         exceptions.addAll(Arrays.asList(but));
+        exceptions.add("id");
+        exceptions.add("name");
 
         for (int i = 0; i < streamReader.getAttributeCount(); i++) {
             String name = streamReader.getAttributeLocalName(i);
@@ -72,11 +77,12 @@ public class MigrateConf {
     }
 
     private static String getAttributeValue(final XMLStreamReader streamReader, final String key) {
-        String value = streamReader.getAttributeValue("", key);
-        if (value == null || value.isEmpty()) {
-            value = streamReader.getAttributeValue("", key.toUpperCase());
-            if (value == null || value.isEmpty()) {
-                value = streamReader.getAttributeValue("", key.toLowerCase());
+        String value = null;
+
+        for (int i = 0; i < streamReader.getAttributeCount(); i++) {
+            String attrName = streamReader.getAttributeLocalName(i);
+            if (attrName.equalsIgnoreCase(key)) {
+                value = streamReader.getAttributeValue(i);
             }
         }
 
@@ -139,39 +145,50 @@ public class MigrateConf {
         reader.nextTag(); // dataset
 
         writer.writeStartElement("AnyType");
-        writer.writeAttribute("name", "USER");
+        writer.writeAttribute("key", "USER");
         writer.writeAttribute("kind", "USER");
         writer.writeEndElement();
 
         writer.writeStartElement("AnyTypeClass");
-        writer.writeAttribute("name", "BaseUser");
+        writer.writeAttribute("key", "BaseUser");
         writer.writeEndElement();
 
         writer.writeStartElement("AnyType_AnyTypeClass");
-        writer.writeAttribute("anyType_name", "USER");
-        writer.writeAttribute("anyTypeClass_name", "BaseUser");
+        writer.writeAttribute("anyType_key", "USER");
+        writer.writeAttribute("anyTypeClass_key", "BaseUser");
         writer.writeEndElement();
 
         writer.writeStartElement("AnyType");
-        writer.writeAttribute("name", "GROUP");
+        writer.writeAttribute("key", "GROUP");
         writer.writeAttribute("kind", "GROUP");
         writer.writeEndElement();
 
         writer.writeStartElement("AnyTypeClass");
-        writer.writeAttribute("name", "BaseGroup");
+        writer.writeAttribute("key", "BaseGroup");
         writer.writeEndElement();
 
         writer.writeStartElement("AnyType_AnyTypeClass");
-        writer.writeAttribute("anyType_name", "GROUP");
-        writer.writeAttribute("anyTypeClass_name", "BaseGroup");
+        writer.writeAttribute("anyType_key", "GROUP");
+        writer.writeAttribute("anyTypeClass_key", "BaseGroup");
         writer.writeEndElement();
 
         writer.writeStartElement("AnyTypeClass");
-        writer.writeAttribute("name", "BaseUMembership");
+        writer.writeAttribute("key", "BaseUMembership");
         writer.writeEndElement();
 
         Set<String> connInstanceCapabilities = new HashSet<>();
 
+        String lastUUID;
+        String syncopeConf = UUID.randomUUID().toString();
+        Map<String, String> cPlainAttrs = new HashMap<>();
+        Map<String, String> policies = new HashMap<>();
+        Map<String, String> connInstances = new HashMap<>();
+        Map<String, String> provisions = new HashMap<>();
+        Map<String, String> mappings = new HashMap<>();
+        Map<String, String> tasks = new HashMap<>();
+        Map<String, String> notifications = new HashMap<>();
+        Map<String, String> reports = new HashMap<>();
+
         String globalAccountPolicy = null;
         String globalPasswordPolicy = null;
         while (reader.hasNext()) {
@@ -179,64 +196,79 @@ public class MigrateConf {
                 switch (reader.getLocalName().toLowerCase()) {
                     case "syncopeconf":
                         writer.writeStartElement("SyncopeConf");
-                        copyAttrs(reader, writer);
+                        writer.writeAttribute("key", syncopeConf);
                         writer.writeEndElement();
                         break;
 
                     case "cschema":
                         writer.writeStartElement("PlainSchema");
                         copyAttrs(reader, writer);
+                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
                         writer.writeEndElement();
                         break;
 
                     case "cattr":
                         writer.writeStartElement("CPlainAttr");
-                        copyAttrs(reader, writer);
+                        copyAttrs(reader, writer, "owner_id", "schema_name");
+                        lastUUID = UUID.randomUUID().toString();
+                        writer.writeAttribute("key", lastUUID);
+                        writer.writeAttribute("owner_key", syncopeConf);
+                        writer.writeAttribute("schema_key", getAttributeValue(reader, "schema_name"));
                         writer.writeEndElement();
+                        cPlainAttrs.put(getAttributeValue(reader, "id"), lastUUID);
                         break;
 
                     case "cattrvalue":
                         writer.writeStartElement("CPlainAttrValue");
-                        copyAttrs(reader, writer);
+                        copyAttrs(reader, writer, "attribute_id");
+                        writer.writeAttribute("key", UUID.randomUUID().toString());
+                        writer.writeAttribute(
+                                "attribute_key", cPlainAttrs.get(getAttributeValue(reader, "attribute_id")));
                         writer.writeEndElement();
                         break;
 
                     case "uschema":
                         writer.writeStartElement("PlainSchema");
                         copyAttrs(reader, writer);
-                        writer.writeAttribute("anyTypeClass_name", "BaseUser");
+                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
+                        writer.writeAttribute("anyTypeClass_key", "BaseUser");
                         writer.writeEndElement();
                         break;
 
                     case "uderschema":
                         writer.writeStartElement("DerSchema");
                         copyAttrs(reader, writer);
-                        writer.writeAttribute("anyTypeClass_name", "BaseUser");
+                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
+                        writer.writeAttribute("anyTypeClass_key", "BaseUser");
                         writer.writeEndElement();
                         break;
 
                     case "uvirschema":
                         reporter.writeStartElement("VirSchema");
                         copyAttrs(reader, reporter);
+                        reporter.writeAttribute("key", getAttributeValue(reader, "name"));
                         reporter.writeEndElement();
                         break;
 
                     case "rschema":
                         writer.writeStartElement("PlainSchema");
                         copyAttrs(reader, writer);
-                        writer.writeAttribute("anyTypeClass_name", "BaseGroup");
+                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
+                        writer.writeAttribute("anyTypeClass_key", "BaseGroup");
                         writer.writeEndElement();
                         break;
 
                     case "rderschema":
                         writer.writeStartElement("DerSchema");
                         copyAttrs(reader, writer);
-                        writer.writeAttribute("anyTypeClass_name", "BaseGroup");
+                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
+                        writer.writeAttribute("anyTypeClass_key", "BaseGroup");
                         writer.writeEndElement();
                         break;
 
                     case "rvirschema":
                         reporter.writeStartElement("VirSchema");
+                        reporter.writeAttribute("key", getAttributeValue(reader, "name"));
                         copyAttrs(reader, reporter);
                         reporter.writeEndElement();
                         break;
@@ -244,32 +276,38 @@ public class MigrateConf {
                     case "mschema":
                         writer.writeStartElement("PlainSchema");
                         copyAttrs(reader, writer);
-                        writer.writeAttribute("anyTypeClass_name", "BaseUMembership");
+                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
+                        writer.writeAttribute("anyTypeClass_key", "BaseUMembership");
                         writer.writeEndElement();
                         break;
 
                     case "mderschema":
                         writer.writeStartElement("DerSchema");
                         copyAttrs(reader, writer);
-                        writer.writeAttribute("anyTypeClass_name", "BaseUMembership");
+                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
+                        writer.writeAttribute("anyTypeClass_key", "BaseUMembership");
                         writer.writeEndElement();
                         break;
 
                     case "mvirschema":
                         reporter.writeStartElement("VirSchema");
                         copyAttrs(reader, reporter);
+                        reporter.writeAttribute("key", getAttributeValue(reader, "name"));
                         reporter.writeEndElement();
                         break;
 
                     case "policy":
                         String policyId = getAttributeValue(reader, "id");
+                        lastUUID = UUID.randomUUID().toString();
+                        policies.put(policyId, lastUUID);
+
                         ObjectNode specification = (ObjectNode) OBJECT_MAPPER.readTree(
                                 getAttributeValue(reader, "specification"));
 
                         switch (getAttributeValue(reader, "DTYPE")) {
                             case "SyncPolicy":
                                 writer.writeStartElement("PullPolicy");
-                                writer.writeAttribute("id", policyId);
+                                writer.writeAttribute("key", lastUUID);
                                 writer.writeAttribute(
                                         "description", getAttributeValue(reader, "description"));
                                 writer.writeEndElement();
@@ -277,12 +315,12 @@ public class MigrateConf {
 
                             case "PasswordPolicy":
                                 writer.writeStartElement("PasswordPolicy");
-                                writer.writeAttribute("id", policyId);
+                                writer.writeAttribute("key", lastUUID);
                                 writer.writeAttribute(
                                         "description", getAttributeValue(reader, "description"));
 
                                 if ("GLOBAL_PASSWORD".equalsIgnoreCase(getAttributeValue(reader, "type"))) {
-                                    globalPasswordPolicy = getAttributeValue(reader, "id");
+                                    globalPasswordPolicy = lastUUID;
                                 }
 
                                 JsonNode allowNullPassword = specification.get("allowNullPassword");
@@ -301,20 +339,20 @@ public class MigrateConf {
                                 writer.writeEndElement();
 
                                 writer.writeStartElement("PasswordRuleConfInstance");
-                                writer.writeAttribute("id", policyId);
-                                writer.writeAttribute("passwordPolicy_id", policyId);
+                                writer.writeAttribute("key", lastUUID);
+                                writer.writeAttribute("passwordPolicy_key", lastUUID);
                                 writer.writeAttribute("serializedInstance", specification.toString());
                                 writer.writeEndElement();
                                 break;
 
                             case "AccountPolicy":
                                 writer.writeStartElement("AccountPolicy");
-                                writer.writeAttribute("id", policyId);
+                                writer.writeAttribute("key", lastUUID);
                                 writer.writeAttribute(
                                         "description", getAttributeValue(reader, "description"));
 
                                 if ("GLOBAL_ACCOUNT".equalsIgnoreCase(getAttributeValue(reader, "type"))) {
-                                    globalAccountPolicy = getAttributeValue(reader, "id");
+                                    globalAccountPolicy = lastUUID;
                                 }
 
                                 JsonNode propagateSuspension = specification.get("propagateSuspension");
@@ -334,8 +372,8 @@ public class MigrateConf {
                                 writer.writeEndElement();
 
                                 writer.writeStartElement("AccountRuleConfInstance");
-                                writer.writeAttribute("id", policyId);
-                                writer.writeAttribute("accountPolicy_id", policyId);
+                                writer.writeAttribute("key", lastUUID);
+                                writer.writeAttribute("accountPolicy_key", lastUUID);
                                 writer.writeAttribute("serializedInstance", specification.toString());
                                 writer.writeEndElement();
                                 break;
@@ -345,13 +383,19 @@ public class MigrateConf {
                         break;
 
                     case "conninstance":
+                        lastUUID = UUID.randomUUID().toString();
+                        connInstances.put(getAttributeValue(reader, "id"), lastUUID);
+
                         writer.writeStartElement("ConnInstance");
                         copyAttrs(reader, writer);
+                        writer.writeAttribute("key", lastUUID);
                         writer.writeEndElement();
                         break;
 
                     case "conninstance_capabilities":
-                        String connInstanceId = getAttributeValue(reader, "ConnInstance_id");
+                        String connInstanceId = getAttributeValue(reader, "connInstance_id");
+                        String connInstanceKey = connInstances.get(connInstanceId);
+
                         String capabilities = getAttributeValue(reader, "capabilities");
                         if (capabilities.startsWith("ONE_PHASE_")) {
                             capabilities = capabilities.substring(10);
@@ -360,7 +404,7 @@ public class MigrateConf {
                         }
                         if (!connInstanceCapabilities.contains(connInstanceId + capabilities)) {
                             writer.writeStartElement("ConnInstance_capabilities");
-                            writer.writeAttribute("ConnInstance_id", connInstanceId);
+                            writer.writeAttribute("connInstance_key", connInstanceKey);
                             writer.writeAttribute("capability", capabilities);
                             writer.writeEndElement();
 
@@ -372,21 +416,33 @@ public class MigrateConf {
                         writer.writeStartElement("ExternalResource");
                         copyAttrs(reader, writer,
                                 "syncTraceLevel", "userializedSyncToken", "rserializedSyncToken",
-                                "propagationMode", "propagationPrimary", "syncPolicy_id");
-                        String syncPolicyId = getAttributeValue(reader, "syncPolicy_id");
+                                "propagationMode", "propagationPrimary", "connector_id", "syncPolicy_id",
+                                "passwordPolicy_id",
+                                "creator", "lastModifier", "creationDate", "lastChangeDate");
+
+                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
                         writer.writeAttribute(
-                                "pullTraceLevel", getAttributeValue(reader, "syncTraceLevel"));
-                        if (StringUtils.isNotBlank(syncPolicyId)) {
-                            writer.writeAttribute(
-                                    "pullPolicy_id", getAttributeValue(reader, "syncPolicy_id"));
+                                "connector_key", connInstances.get(getAttributeValue(reader, "connector_id")));
+
+                        writer.writeAttribute("pullTraceLevel", getAttributeValue(reader, "syncTraceLevel"));
+
+                        String syncPolicyKey = policies.get(getAttributeValue(reader, "syncPolicy_id"));
+                        if (StringUtils.isNotBlank(syncPolicyKey)) {
+                            writer.writeAttribute("pullPolicy_key", syncPolicyKey);
+                        }
+
+                        String passwordPolicyKey = policies.get(getAttributeValue(reader, "passwordPolicy_id"));
+                        if (StringUtils.isNotBlank(passwordPolicyKey)) {
+                            writer.writeAttribute("passwordPolicy_key", passwordPolicyKey);
                         }
+
                         writer.writeEndElement();
                         break;
 
                     case "externalresource_propactions":
                         writer.writeStartElement("ExternalResource_PropActions");
 
-                        writer.writeAttribute("resource_name", getAttributeValue(reader, "externalResource_name"));
+                        writer.writeAttribute("resource_key", getAttributeValue(reader, "externalResource_name"));
 
                         String propActionClassName = getAttributeValue(reader, "element");
                         switch (propActionClassName) {
@@ -403,6 +459,7 @@ public class MigrateConf {
                             case "org.apache.syncope.core.propagation.impl.DBPasswordPropagationActions":
                                 propActionClassName = "org.apache.syncope.core.provisioning.java.propagation."
                                         + "DBPasswordPropagationActions";
+                                break;
 
                             default:
                         }
@@ -412,24 +469,30 @@ public class MigrateConf {
 
                     case "policy_externalresource":
                         writer.writeStartElement("AccountPolicy_ExternalResource");
-                        writer.writeAttribute("accountPolicy_id", getAttributeValue(reader, "account_policy_id"));
-                        writer.writeAttribute("resource_name", getAttributeValue(reader, "resource_name"));
+                        writer.writeAttribute(
+                                "accountPolicy_key", policies.get(getAttributeValue(reader, "account_policy_id")));
+                        writer.writeAttribute("resource_key", getAttributeValue(reader, "resource_name"));
                         writer.writeEndElement();
                         break;
 
                     case "umapping":
                         String umappingId = getAttributeValue(reader, "id");
+                        lastUUID = UUID.randomUUID().toString();
+                        provisions.put(umappingId, lastUUID);
+
                         writer.writeStartElement("Provision");
-                        writer.writeAttribute("id", umappingId);
-                        writer.writeAttribute(
-                                "resource_name", getAttributeValue(reader, "resource_name"));
-                        writer.writeAttribute("anyType_name", "USER");
+                        writer.writeAttribute("key", lastUUID);
+                        writer.writeAttribute("resource_key", getAttributeValue(reader, "resource_name"));
+                        writer.writeAttribute("anyType_key", "USER");
                         writer.writeAttribute("objectClass", "__ACCOUNT__");
                         writer.writeEndElement();
 
+                        lastUUID = UUID.randomUUID().toString();
+                        mappings.put(umappingId, lastUUID);
+
                         writer.writeStartElement("Mapping");
-                        writer.writeAttribute("id", umappingId);
-                        writer.writeAttribute("provision_id", umappingId);
+                        writer.writeAttribute("key", lastUUID);
+                        writer.writeAttribute("provision_key", provisions.get(umappingId));
 
                         String uaccountLink = getAttributeValue(reader, "accountlink");
                         if (StringUtils.isNotBlank(uaccountLink)) {
@@ -446,7 +509,9 @@ public class MigrateConf {
                             reporter.writeEndElement();
                         } else {
                             writer.writeStartElement("MappingItem");
-                            copyAttrs(reader, writer, "accountid", "intMappingType");
+                            copyAttrs(reader, writer, "accountid", "intMappingType", "mapping_id");
+                            writer.writeAttribute("key", UUID.randomUUID().toString());
+                            writer.writeAttribute("mapping_key", mappings.get(getAttributeValue(reader, "mapping_id")));
                             writer.writeAttribute("intMappingType", toNewIntMappingType(uIntMappingType));
                             writer.writeAttribute("connObjectKey", getAttributeValue(reader, "accountid"));
                             writer.writeEndElement();
@@ -455,17 +520,22 @@ public class MigrateConf {
 
                     case "rmapping":
                         String rmappingId = "10" + getAttributeValue(reader, "id");
+                        lastUUID = UUID.randomUUID().toString();
+                        provisions.put(rmappingId, lastUUID);
+
                         writer.writeStartElement("Provision");
-                        writer.writeAttribute("id", rmappingId);
-                        writer.writeAttribute(
-                                "resource_name", getAttributeValue(reader, "resource_name"));
-                        writer.writeAttribute("anyType_name", "GROUP");
+                        writer.writeAttribute("key", lastUUID);
+                        writer.writeAttribute("resource_key", getAttributeValue(reader, "resource_name"));
+                        writer.writeAttribute("anyType_key", "GROUP");
                         writer.writeAttribute("objectClass", "__GROUP__");
                         writer.writeEndElement();
 
+                        lastUUID = UUID.randomUUID().toString();
+                        mappings.put(rmappingId, lastUUID);
+
                         writer.writeStartElement("Mapping");
-                        writer.writeAttribute("id", rmappingId);
-                        writer.writeAttribute("provision_id", rmappingId);
+                        writer.writeAttribute("key", lastUUID);
+                        writer.writeAttribute("provision_key", provisions.get(rmappingId));
 
                         String raccountLink = getAttributeValue(reader, "accountlink");
                         if (StringUtils.isNotBlank(raccountLink)) {
@@ -482,7 +552,10 @@ public class MigrateConf {
                             reporter.writeEndElement();
                         } else {
                             writer.writeStartElement("MappingItem");
-                            copyAttrs(reader, writer, "accountid", "intMappingType");
+                            copyAttrs(reader, writer, "accountid", "intMappingType", "mapping_id");
+                            writer.writeAttribute("key", UUID.randomUUID().toString());
+                            writer.writeAttribute(
+                                    "mapping_key", mappings.get("10" + getAttributeValue(reader, "mapping_id")));
                             writer.writeAttribute("intMappingType", toNewIntMappingType(rIntMappingType));
                             writer.writeAttribute("connObjectKey", getAttributeValue(reader, "accountid"));
                             writer.writeEndElement();
@@ -494,9 +567,22 @@ public class MigrateConf {
                         copyAttrs(reader, writer,
                                 "DTYPE", "propagationMode", "subjectType", "subjectId", "xmlAttributes",
                                 "jobClassName", "userTemplate", "roleTemplate", "userFilter", "roleFilter",
-                                "propagationOperation", "syncStatus", "fullReconciliation");
+                                "propagationOperation", "syncStatus", "fullReconciliation", "resource_name");
+
+                        lastUUID = UUID.randomUUID().toString();
+                        tasks.put(getAttributeValue(reader, "id"), lastUUID);
+
+                        writer.writeAttribute("key", lastUUID);
 
-                        String taskId = getAttributeValue(reader, "id");
+                        String resourceName = getAttributeValue(reader, "resource_name");
+                        if (StringUtils.isNotBlank(resourceName)) {
+                            writer.writeAttribute("resource_key", resourceName);
+                        }
+
+                        String name = getAttributeValue(reader, "name");
+                        if (StringUtils.isNotBlank(name)) {
+                            writer.writeAttribute("name", name);
+                        }
 
                         switch (getAttributeValue(reader, "DTYPE")) {
                             case "PropagationTask":
@@ -532,9 +618,9 @@ public class MigrateConf {
                                     template.set("plainAttrs", plainAttrs);
 
                                     writer.writeStartElement("AnyTemplatePullTask");
-                                    writer.writeAttribute("id", taskId + "1");
-                                    writer.writeAttribute("pullTask_id", taskId);
-                                    writer.writeAttribute("anyType_name", "USER");
+                                    writer.writeAttribute("key", UUID.randomUUID().toString());
+                                    writer.writeAttribute("pullTask_key", lastUUID);
+                                    writer.writeAttribute("anyType_key", "USER");
                                     writer.writeAttribute("template", template.toString());
                                     writer.writeEndElement();
                                 }
@@ -545,9 +631,9 @@ public class MigrateConf {
                                     template.set("plainAttrs", plainAttrs);
 
                                     writer.writeStartElement("AnyTemplatePullTask");
-                                    writer.writeAttribute("id", taskId + "2");
-                                    writer.writeAttribute("pullTask_id", taskId);
-                                    writer.writeAttribute("anyType_name", "GROUP");
+                                    writer.writeAttribute("key", UUID.randomUUID().toString());
+                                    writer.writeAttribute("pullTask_key", lastUUID);
+                                    writer.writeAttribute("anyType_key", "GROUP");
                                     writer.writeAttribute("template", template.toString());
                                     writer.writeEndElement();
                                 }
@@ -572,18 +658,18 @@ public class MigrateConf {
                                 String userFilter = getAttributeValue(reader, "userFilter");
                                 if (StringUtils.isNotBlank(userFilter)) {
                                     writer.writeStartElement("PushTaskAnyFilter");
-                                    writer.writeAttribute("id", taskId + "1");
-                                    writer.writeAttribute("pushTask_id", taskId);
-                                    writer.writeAttribute("anyType_name", "USER");
+                                    writer.writeAttribute("key", UUID.randomUUID().toString());
+                                    writer.writeAttribute("pushTask_key", lastUUID);
+                                    writer.writeAttribute("anyType_key", "USER");
                                     writer.writeAttribute("fiql", userFilter);
                                     writer.writeEndElement();
                                 }
                                 String roleFilter = getAttributeValue(reader, "roleFilter");
                                 if (StringUtils.isNotBlank(roleFilter)) {
                                     writer.writeStartElement("PushTaskAnyFilter");
-                                    writer.writeAttribute("id", taskId + "2");
-                                    writer.writeAttribute("pushTask_id", taskId);
-                                    writer.writeAttribute("anyType_name", "GROUP");
+                                    writer.writeAttribute("key", UUID.randomUUID().toString());
+                                    writer.writeAttribute("pushTask_key", lastUUID);
+                                    writer.writeAttribute("anyType_key", "GROUP");
                                     writer.writeAttribute("fiql", roleFilter);
                                     writer.writeEndElement();
                                 }
@@ -595,14 +681,16 @@ public class MigrateConf {
 
                     case "taskexec":
                         writer.writeStartElement("TaskExec");
-                        copyAttrs(reader, writer);
+                        copyAttrs(reader, writer, "task_id");
+                        writer.writeAttribute("key", UUID.randomUUID().toString());
+                        writer.writeAttribute("task_key", tasks.get(getAttributeValue(reader, "task_id")));
                         writer.writeEndElement();
                         break;
 
                     case "synctask_actionsclassnames":
                         writer.writeStartElement("PullTask_actionsClassNames");
                         writer.writeAttribute(
-                                "pullTask_id", getAttributeValue(reader, "syncTask_id"));
+                                "pullTask_key", tasks.get(getAttributeValue(reader, "syncTask_id")));
 
                         String syncActionClassName = getAttributeValue(reader, "element");
                         switch (syncActionClassName) {
@@ -619,6 +707,7 @@ public class MigrateConf {
                             case "org.apache.syncope.core.sync.impl.DBPasswordSyncActions":
                                 syncActionClassName =
                                         "org.apache.syncope.core.provisioning.java.pushpull.DBPasswordPullActions";
+                                break;
 
                             default:
                         }
@@ -628,6 +717,12 @@ public class MigrateConf {
 
                     case "notification":
                         writer.writeStartElement("Notification");
+
+                        lastUUID = UUID.randomUUID().toString();
+                        notifications.put(getAttributeValue(reader, "id"), lastUUID);
+
+                        writer.writeAttribute("key", lastUUID);
+
                         copyAttrs(reader, writer, "recipientAttrType", "template",
                                 "userAbout", "roleAbout", "recipients");
                         String recipientAttrType = getAttributeValue(reader, "recipientAttrType");
@@ -638,26 +733,24 @@ public class MigrateConf {
                         if (StringUtils.isNotBlank(recipients)) {
                             writer.writeAttribute("recipientsFIQL", getAttributeValue(reader, "recipients"));
                         }
-                        writer.writeAttribute("template_name", getAttributeValue(reader, "template"));
+                        writer.writeAttribute("template_key", getAttributeValue(reader, "template"));
                         writer.writeEndElement();
 
-                        String notificationId = getAttributeValue(reader, "id");
-
                         String userAbout = getAttributeValue(reader, "userAbout");
                         if (StringUtils.isNotBlank(userAbout)) {
                             writer.writeStartElement("AnyAbout");
-                            writer.writeAttribute("id", notificationId);
-                            writer.writeAttribute("notification_id", notificationId);
-                            writer.writeAttribute("anyType_name", "USER");
+                            writer.writeAttribute("key", UUID.randomUUID().toString());
+                            writer.writeAttribute("notification_key", lastUUID);
+                            writer.writeAttribute("anyType_key", "USER");
                             writer.writeAttribute("filter", userAbout);
                             writer.writeEndElement();
                         }
                         String roleAbout = getAttributeValue(reader, "roleAbout");
                         if (StringUtils.isNotBlank(roleAbout)) {
                             writer.writeStartElement("AnyAbout");
-                            writer.writeAttribute("id", notificationId);
-                            writer.writeAttribute("notification_id", notificationId);
-                            writer.writeAttribute("anyType_name", "GROUP");
+                            writer.writeAttribute("key", UUID.randomUUID().toString());
+                            writer.writeAttribute("notification_key", lastUUID);
+                            writer.writeAttribute("anyType_key", "GROUP");
                             writer.writeAttribute("filter", roleAbout);
                             writer.writeEndElement();
                         }
@@ -665,7 +758,9 @@ public class MigrateConf {
 
                     case "notification_events":
                         writer.writeStartElement("Notification_events");
-                        copyAttrs(reader, writer, "events");
+                        copyAttrs(reader, writer, "notification_id", "events");
+                        writer.writeAttribute(
+                                "notification_key", notifications.get(getAttributeValue(reader, "notification_id")));
                         writer.writeAttribute(
                                 "event", getAttributeValue(reader, "events").
                                 replaceAll("Controller", "Logic"));
@@ -674,31 +769,50 @@ public class MigrateConf {
 
                     case "notificationtask_recipients":
                         writer.writeStartElement("NotificationTask_recipients");
-                        copyAttrs(reader, writer);
+                        copyAttrs(reader, writer, "notificationTask_id");
+                        writer.writeAttribute(
+                                "notificationTask_key",
+                                tasks.get(getAttributeValue(reader, "notificationTask_id")));
                         writer.writeEndElement();
                         break;
 
                     case "report":
                         writer.writeStartElement("Report");
                         copyAttrs(reader, writer);
+
+                        lastUUID = UUID.randomUUID().toString();
+                        reports.put(getAttributeValue(reader, "id"), lastUUID);
+
+                        writer.writeAttribute("key", lastUUID);
+                        writer.writeAttribute("name", getAttributeValue(reader, "name"));
+
                         writer.writeEndElement();
                         break;
 
                     case "reportletconfinstance":
                         writer.writeStartElement("ReportletConfInstance");
-                        copyAttrs(reader, writer);
+                        copyAttrs(reader, writer, "report_id");
+
+                        writer.writeAttribute("key", UUID.randomUUID().toString());
+                        writer.writeAttribute("report_key", reports.get(getAttributeValue(reader, "report_id")));
+
                         writer.writeEndElement();
                         break;
 
                     case "reportexec":
                         writer.writeStartElement("ReportExec");
-                        copyAttrs(reader, writer);
+                        copyAttrs(reader, writer, "report_id");
+
+                        writer.writeAttribute("key", UUID.randomUUID().toString());
+                        writer.writeAttribute("report_key", reports.get(getAttributeValue(reader, "report_id")));
+
                         writer.writeEndElement();
                         break;
 
                     case "securityquestion":
                         writer.writeStartElement("SecurityQuestion");
                         copyAttrs(reader, writer);
+                        writer.writeAttribute("key", UUID.randomUUID().toString());
                         writer.writeEndElement();
                         break;
 
@@ -710,13 +824,13 @@ public class MigrateConf {
         }
 
         writer.writeStartElement("Realm");
-        writer.writeAttribute("id", "1");
+        writer.writeAttribute("key", UUID.randomUUID().toString());
         writer.writeAttribute("name", "/");
         if (globalAccountPolicy != null) {
-            writer.writeAttribute("accountPolicy_id", globalAccountPolicy);
+            writer.writeAttribute("accountPolicy_key", globalAccountPolicy);
         }
         if (globalPasswordPolicy != null) {
-            writer.writeAttribute("passwordPolicy_id", globalPasswordPolicy);
+            writer.writeAttribute("passwordPolicy_key", globalPasswordPolicy);
         }
         writer.writeEndElement();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/notification/NotificationSyncopeOperations.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/notification/NotificationSyncopeOperations.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/notification/NotificationSyncopeOperations.java
index cb11cb5..cbdbf61 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/notification/NotificationSyncopeOperations.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/notification/NotificationSyncopeOperations.java
@@ -27,15 +27,15 @@ public class NotificationSyncopeOperations {
 
     private final NotificationService notificationService = SyncopeServices.get(NotificationService.class);
 
-    public NotificationTO read(final String notificationId) {
-        return notificationService.read(Long.valueOf(notificationId));
+    public NotificationTO read(final String notificationKey) {
+        return notificationService.read(notificationKey);
     }
 
     public List<NotificationTO> list() {
         return notificationService.list();
     }
 
-    public void delete(final String notificationId) {
-        notificationService.delete(Long.valueOf(notificationId));
+    public void delete(final String notificationKey) {
+        notificationService.delete(notificationKey);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/policy/PolicySyncopeOperations.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/policy/PolicySyncopeOperations.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/policy/PolicySyncopeOperations.java
index e2d4070..127818b 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/policy/PolicySyncopeOperations.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/policy/PolicySyncopeOperations.java
@@ -28,15 +28,15 @@ public class PolicySyncopeOperations {
 
     private final PolicyService policyService = SyncopeServices.get(PolicyService.class);
 
-    public <T extends AbstractPolicyTO> T read(final String policyId) {
-        return policyService.read(Long.valueOf(policyId));
+    public <T extends AbstractPolicyTO> T read(final String policyKey) {
+        return policyService.read(policyKey);
     }
 
     public <T extends AbstractPolicyTO> List<T> list(final String policyType) {
         return policyService.list(PolicyType.valueOf(policyType));
     }
 
-    public void delete(final String policyId) {
-        policyService.delete(Long.valueOf(policyId));
+    public void delete(final String policyKey) {
+        policyService.delete(policyKey);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionSyncopeOperations.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionSyncopeOperations.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionSyncopeOperations.java
index 8caced7..f4c09bb 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionSyncopeOperations.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionSyncopeOperations.java
@@ -31,14 +31,14 @@ public class QuestionSyncopeOperations {
         return securityQuestionService.list();
     }
 
-    public void delete(final String questionId) {
-        securityQuestionService.delete(Long.valueOf(questionId));
+    public void delete(final String questionKey) {
+        securityQuestionService.delete(questionKey);
     }
 
-    public SecurityQuestionTO read(final String questionId) {
-        return securityQuestionService.read(Long.valueOf(questionId));
+    public SecurityQuestionTO read(final String questionKey) {
+        return securityQuestionService.read(questionKey);
     }
-    
+
     public SecurityQuestionTO readByUser(final String username) {
         return securityQuestionService.readByUser(username);
     }


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/report/ReportSyncopeOperations.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/report/ReportSyncopeOperations.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/report/ReportSyncopeOperations.java
index 5c90069..efbd821 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/report/ReportSyncopeOperations.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/report/ReportSyncopeOperations.java
@@ -18,11 +18,13 @@
  */
 package org.apache.syncope.client.cli.commands.report;
 
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.SequenceInputStream;
 import java.util.List;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerException;
+import org.apache.cxf.helpers.IOUtils;
 import org.apache.syncope.client.cli.SyncopeServices;
 import org.apache.syncope.client.cli.util.XMLUtils;
 import org.apache.syncope.common.lib.to.JobTO;
@@ -37,7 +39,7 @@ public class ReportSyncopeOperations {
     private final ReportService reportService = SyncopeServices.get(ReportService.class);
 
     public ReportTO read(final String reportKey) {
-        return reportService.read(Long.valueOf(reportKey));
+        return reportService.read(reportKey);
     }
 
     public List<JobTO> listJobs() {
@@ -50,37 +52,62 @@ public class ReportSyncopeOperations {
 
     public String exportExecutionResult(final String executionKey, final String reportExecExportFormat)
             throws TransformerException, SAXException, IOException, ParserConfigurationException {
-        final ReportExecExportFormat format = ReportExecExportFormat.valueOf(reportExecExportFormat);
-        final SequenceInputStream report = (SequenceInputStream) reportService.exportExecutionResult(Long.valueOf(
-                executionKey), format).getEntity();
-        final String xmlFinalName = "export_" + executionKey + ".xml";
+
+        ReportExecExportFormat format = ReportExecExportFormat.valueOf(reportExecExportFormat);
+        SequenceInputStream report = (SequenceInputStream) reportService.exportExecutionResult(executionKey, format).
+                getEntity();
+
+        String fileName = "export_" + executionKey;
+        FileOutputStream fos = null;
         switch (format) {
             case XML:
-                XMLUtils.createXMLFile(report, xmlFinalName);
+                fileName += ".xml";
+                XMLUtils.createXMLFile(report, fileName);
                 break;
+
             case CSV:
-                return format + " doesn't supported";
+                fileName += ".csv";
+                fos = new FileOutputStream(fileName);
+                IOUtils.copyAndCloseInput(report, fos);
+                break;
+
             case PDF:
-                return format + " doesn't supported";
+                fileName += ".pdf";
+                fos = new FileOutputStream(fileName);
+                IOUtils.copyAndCloseInput(report, fos);
+                break;
+
             case HTML:
-                return format + " doesn't supported";
+                fileName += ".html";
+                fos = new FileOutputStream(fileName);
+                IOUtils.copyAndCloseInput(report, fos);
+                break;
+
             case RTF:
-                return format + " doesn't supported";
+                fileName += ".rtf";
+                fos = new FileOutputStream(fileName);
+                IOUtils.copyAndCloseInput(report, fos);
+                break;
+
             default:
-                return format + " doesn't supported";
+                return format + " not supported";
+        }
+        if (fos != null) {
+            fos.close();
         }
-        return xmlFinalName;
+
+        return fileName;
     }
 
     public void execute(final String reportKey) {
-        reportService.execute(new ExecuteQuery.Builder().key(Long.valueOf(reportKey)).build());
+        reportService.execute(new ExecuteQuery.Builder().key(reportKey).build());
     }
 
-    public void deleteExecution(final String executionId) {
-        reportService.deleteExecution(Long.valueOf(executionId));
+    public void deleteExecution(final String executionKey) {
+        reportService.deleteExecution(executionKey);
     }
 
     public void delete(final String reportKey) {
-        reportService.delete(Long.valueOf(reportKey));
+        reportService.delete(reportKey);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/resource/ResourceResultManager.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/resource/ResourceResultManager.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/resource/ResourceResultManager.java
index 18ab0aa..042207a 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/resource/ResourceResultManager.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/resource/ResourceResultManager.java
@@ -38,15 +38,10 @@ public class ResourceResultManager extends CommonsResultManager {
     private void printResource(final ResourceTO resourceTO) {
         System.out.println(" > RESOURCE ID: " + resourceTO.getKey());
         System.out.println("    connector dispaly name: " + resourceTO.getConnectorDisplayName());
-        System.out.println("    etag value: " + resourceTO.getETagValue());
         System.out.println("    connector id: " + resourceTO.getConnector());
         System.out.println("    account policy id: " + resourceTO.getAccountPolicy());
         System.out.println("    password policy id: " + resourceTO.getPasswordPolicy());
         System.out.println("    pull policy id: " + resourceTO.getPullPolicy());
-        System.out.println("    creator: " + resourceTO.getCreator());
-        System.out.println("    creation date: " + resourceTO.getCreationDate());
-        System.out.println("    last modifier: " + resourceTO.getLastModifier());
-        System.out.println("    last change date: " + resourceTO.getLastChangeDate());
         System.out.println("    propagation actions class: " + resourceTO.getPropagationActionsClassNames());
         System.out.println("    propagation priority: " + resourceTO.getPropagationPriority());
         System.out.println("    PROVISIONS:");

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/task/TaskSyncopeOperations.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/task/TaskSyncopeOperations.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/task/TaskSyncopeOperations.java
index 6fd1e1d..7ac8593 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/task/TaskSyncopeOperations.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/task/TaskSyncopeOperations.java
@@ -37,11 +37,11 @@ public class TaskSyncopeOperations {
     }
 
     public <T extends AbstractTaskTO> T read(final String taskKey) {
-        return taskService.read(Long.valueOf(taskKey), true);
+        return taskService.read(taskKey, true);
     }
 
     public void delete(final String taskKey) {
-        taskService.delete(Long.valueOf(taskKey));
+        taskService.delete(taskKey);
     }
 
     public List<AbstractTaskTO> list(final String type) {
@@ -53,10 +53,11 @@ public class TaskSyncopeOperations {
     }
 
     public void deleteExecution(final String executionKey) {
-        taskService.deleteExecution(Long.valueOf(executionKey));
+        taskService.deleteExecution(executionKey);
     }
 
     public ExecTO execute(final String executionKey, final boolean dryRun) {
-        return taskService.execute(new ExecuteQuery.Builder().key(Long.valueOf(executionKey)).dryRun(dryRun).build());
+        return taskService.execute(
+                new ExecuteQuery.Builder().key(executionKey).dryRun(dryRun).build());
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserCommand.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserCommand.java
index ec0aff4..22737c6 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserCommand.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserCommand.java
@@ -29,7 +29,7 @@ import org.apache.syncope.client.cli.commands.AbstractCommand;
 public class UserCommand extends AbstractCommand {
 
     private final UserResultManager userResultManager = new UserResultManager();
-    
+
     @Override
     public void execute(final Input input) {
         if (StringUtils.isBlank(input.getOption())) {
@@ -43,12 +43,6 @@ public class UserCommand extends AbstractCommand {
             case LIST:
                 new UserList(input).list();
                 break;
-            case GET_BY_KEY:
-                new UserGetKey(input).get();
-                break;
-            case GET_BY_USERNAME:
-                new UserGetUsername(input).get();
-                break;
             case READ_BY_ID:
                 new UserReadByUserId(input).read();
                 break;
@@ -91,8 +85,6 @@ public class UserCommand extends AbstractCommand {
         HELP("--help"),
         DETAILS("--details"),
         LIST("--list"),
-        GET_BY_KEY("--get-user-key"),
-        GET_BY_USERNAME("--get-username"),
         READ_BY_ID("--read-by-userid"),
         READ_BY_USERNAME("--read-by-username"),
         SEARCH_BY_ATTRIBUTE("--search-by-attribute"),

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserGetKey.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserGetKey.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserGetKey.java
deleted file mode 100644
index 2eb1e3d..0000000
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserGetKey.java
+++ /dev/null
@@ -1,51 +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.client.cli.commands.user;
-
-import org.apache.syncope.client.cli.Input;
-import org.apache.syncope.common.lib.SyncopeClientException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class UserGetKey extends AbstractUserCommand {
-
-    private static final Logger LOG = LoggerFactory.getLogger(UserGetKey.class);
-
-    private static final String GET_HELP_MESSAGE = "user --get-user-key {USERNAME}";
-
-    private final Input input;
-
-    public UserGetKey(final Input input) {
-        this.input = input;
-    }
-
-    public void get() {
-        if (input.getParameters().length == 1) {
-            try {
-                final String userId = userSyncopeOperations.getIdFromUsername(input.firstParameter());
-                userResultManager.genericMessage(input.firstParameter() + " user ID is " + userId);
-            } catch (final SyncopeClientException ex) {
-                LOG.error("Error getting user", ex);
-                userResultManager.genericError(ex.getMessage());
-            }
-        } else {
-            userResultManager.commandOptionError(GET_HELP_MESSAGE);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserGetUsername.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserGetUsername.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserGetUsername.java
deleted file mode 100644
index 42fc558..0000000
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserGetUsername.java
+++ /dev/null
@@ -1,51 +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.client.cli.commands.user;
-
-import org.apache.syncope.client.cli.Input;
-import org.apache.syncope.common.lib.SyncopeClientException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class UserGetUsername extends AbstractUserCommand {
-
-    private static final Logger LOG = LoggerFactory.getLogger(UserGetUsername.class);
-
-    private static final String GET_HELP_MESSAGE = "user --get-username {USER-ID}";
-
-    private final Input input;
-
-    public UserGetUsername(final Input input) {
-        this.input = input;
-    }
-
-    public void get() {
-        if (input.getParameters().length == 1) {
-            try {
-                final String username = userSyncopeOperations.getUsernameFromId(input.firstParameter());
-                userResultManager.genericMessage(input.firstParameter() + " username is " + username);
-            } catch (final SyncopeClientException ex) {
-                LOG.error("Error getting user", ex);
-                userResultManager.genericError(ex.getMessage());
-            }
-        } else {
-            userResultManager.commandOptionError(GET_HELP_MESSAGE);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserReadByUsername.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserReadByUsername.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserReadByUsername.java
index ae2dd7c..e09ec83 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserReadByUsername.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserReadByUsername.java
@@ -44,8 +44,7 @@ public class UserReadByUsername extends AbstractUserCommand {
             final List<UserTO> userTOs = new ArrayList<>();
             for (final String parameter : input.getParameters()) {
                 try {
-                    final String userId = userSyncopeOperations.getIdFromUsername(parameter);
-                    userTOs.add(userSyncopeOperations.read(userId));
+                    userTOs.add(userSyncopeOperations.read(parameter));
                 } catch (final SyncopeClientException | WebServiceException ex) {
                     LOG.error("Error reading user", ex);
                     if (ex.getMessage().startsWith("NotFound")) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
index 80ae127..04bed36 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
@@ -26,7 +26,6 @@ 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.to.UserTO;
-import org.apache.syncope.common.rest.api.RESTHeaders;
 import org.apache.syncope.common.rest.api.beans.AnyListQuery;
 import org.apache.syncope.common.rest.api.beans.AnySearchQuery;
 import org.apache.syncope.common.rest.api.service.UserService;
@@ -69,20 +68,12 @@ public class UserSyncopeOperations {
         return userService.list(new AnyListQuery());
     }
 
-    public UserTO read(final String userId) {
-        return userService.read(Long.valueOf(userId));
+    public UserTO read(final String userKey) {
+        return userService.read(userKey);
     }
 
-    public String getUsernameFromId(final String userId) {
-        return userService.getUsername(Long.valueOf(userId)).getHeaderString(RESTHeaders.USERNAME);
-    }
-
-    public String getIdFromUsername(final String username) {
-        return userService.getUserKey(username).getHeaderString(RESTHeaders.USER_KEY);
-    }
-
-    public void delete(final String userId) {
-        userService.delete(Long.valueOf(userId));
+    public void delete(final String userKey) {
+        userService.delete(userKey);
     }
 
     public Map<String, BulkActionResult.Status> deleteByAttribute(

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/cli/src/test/resources/schema20.sql
----------------------------------------------------------------------
diff --git a/client/cli/src/test/resources/schema20.sql b/client/cli/src/test/resources/schema20.sql
index 491bc6e..1a1d185 100644
--- a/client/cli/src/test/resources/schema20.sql
+++ b/client/cli/src/test/resources/schema20.sql
@@ -15,204 +15,207 @@
 -- specific language governing permissions and limitations
 -- under the License.
 
-CREATE TABLE AccountPolicy (id BIGINT NOT NULL, description VARCHAR(255), maxAuthenticationAttempts INTEGER, propagateSuspension INTEGER, PRIMARY KEY (id));
-CREATE TABLE AccountPolicy_ExternalResource (accountPolicy_id BIGINT, resource_name VARCHAR(255));
-CREATE TABLE AccountRuleConfInstance (id BIGINT NOT NULL, serializedInstance CLOB, ACCOUNTPOLICY_ID BIGINT, PRIMARY KEY (id));
-CREATE TABLE ADynGroupMembership (id BIGINT NOT NULL, fiql VARCHAR(255), GROUP_ID BIGINT, ANYTYPE_NAME VARCHAR(255), PRIMARY KEY (id));
-CREATE TABLE ADynGroupMembership_AnyObject (aDynGroupMembership_id BIGINT, anyObject_id BIGINT);
-CREATE TABLE AMembership (id BIGINT NOT NULL, anyObject_id BIGINT, group_id BIGINT, PRIMARY KEY (id));
-CREATE TABLE AnyAbout (id BIGINT NOT NULL, filter CLOB, ANYTYPE_NAME VARCHAR(255), NOTIFICATION_ID BIGINT, PRIMARY KEY (id), CONSTRAINT U_NYABOUT_NOTIFICATION_ID UNIQUE (NOTIFICATION_ID, ANYTYPE_NAME));
-CREATE TABLE AnyObject (id BIGINT NOT NULL, creationDate TIMESTAMP NOT NULL, creator VARCHAR(255) NOT NULL, lastChangeDate TIMESTAMP NOT NULL, lastModifier VARCHAR(255) NOT NULL, status VARCHAR(255), workflowId VARCHAR(255), REALM_ID BIGINT, TYPE_NAME VARCHAR(255), PRIMARY KEY (id));
-CREATE TABLE AnyObject_AnyTypeClass (anyObject_id BIGINT, anyTypeClass_name VARCHAR(255));
-CREATE TABLE AnyObject_ExternalResource (anyObject_id BIGINT, resource_name VARCHAR(255));
-CREATE TABLE AnyTemplatePullTask (id BIGINT NOT NULL, template CLOB, ANYTYPE_NAME VARCHAR(255), PULLTASK_ID BIGINT, PRIMARY KEY (id), CONSTRAINT U_NYTMTSK_PULLTASK_ID UNIQUE (PULLTASK_ID, ANYTYPE_NAME));
-CREATE TABLE AnyTemplateRealm (id BIGINT NOT NULL, template CLOB, REALM_ID BIGINT, ANYTYPE_NAME VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_NYTMRLM_REALM_ID UNIQUE (REALM_ID, ANYTYPE_NAME));
-CREATE TABLE AnyType (name VARCHAR(255) NOT NULL, kind VARCHAR(20), PRIMARY KEY (name));
-CREATE TABLE AnyTypeClass (name VARCHAR(255) NOT NULL, PRIMARY KEY (name));
-CREATE TABLE AnyType_AnyTypeClass (anyType_name VARCHAR(255), anyTypeClass_name VARCHAR(255));
-CREATE TABLE APlainAttr (id BIGINT NOT NULL, OWNER_ID BIGINT, schema_name VARCHAR(255), PRIMARY KEY (id));
-CREATE TABLE APlainAttrUniqueValue (id BIGINT NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID BIGINT, schema_name VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_PLNTQVL_BOOLEANVALUE1 UNIQUE (booleanValue, schema_name), CONSTRAINT U_PLNTQVL_DATEVALUE1 UNIQUE (dateValue, schema_name), CONSTRAINT U_PLNTQVL_STRINGVALUE1 UNIQUE (stringValue, schema_name), CONSTRAINT U_PLNTQVL_DOUBLEVALUE1 UNIQUE (doubleValue, schema_name), CONSTRAINT U_PLNTQVL_LONGVALUE1 UNIQUE (longValue, schema_name));
-CREATE TABLE APlainAttrValue (id BIGINT NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID BIGINT, PRIMARY KEY (id));
-CREATE TABLE ARelationship (id BIGINT NOT NULL, left_anyObject_id BIGINT, right_anyObject_id BIGINT, TYPE_NAME VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_RLTNSHP_TYPE_NAME1 UNIQUE (TYPE_NAME, left_anyObject_id, right_anyObject_id));
-CREATE TABLE ConnInstance (id BIGINT NOT NULL, bundleName VARCHAR(255), connRequestTimeout INTEGER, connectorName VARCHAR(255), displayName VARCHAR(255), jsonConf CLOB, location VARCHAR(255), version VARCHAR(255), maxIdle INTEGER, maxObjects INTEGER, maxWait BIGINT, minEvictableIdleTimeMillis BIGINT, minIdle INTEGER, PRIMARY KEY (id), CONSTRAINT U_CNNNTNC_DISPLAYNAME UNIQUE (displayName));
-CREATE TABLE ConnInstance_capabilities (connInstance_id BIGINT, capability VARCHAR(20));
-CREATE TABLE CPlainAttr (id BIGINT NOT NULL, schema_name VARCHAR(255), OWNER_ID BIGINT, PRIMARY KEY (id));
-CREATE TABLE CPlainAttrUniqueValue (id BIGINT NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID BIGINT, schema_name VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_CPLNQVL_BOOLEANVALUE UNIQUE (booleanValue, schema_name), CONSTRAINT U_CPLNQVL_DATEVALUE UNIQUE (dateValue, schema_name), CONSTRAINT U_CPLNQVL_STRINGVALUE UNIQUE (stringValue, schema_name), CONSTRAINT U_CPLNQVL_DOUBLEVALUE UNIQUE (doubleValue, schema_name), CONSTRAINT U_CPLNQVL_LONGVALUE UNIQUE (longValue, schema_name));
-CREATE TABLE CPlainAttrValue (id BIGINT NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID BIGINT, PRIMARY KEY (id));
-CREATE TABLE DerSchema (name VARCHAR(255) NOT NULL, expression VARCHAR(255), ANYTYPECLASS_NAME VARCHAR(255), PRIMARY KEY (name));
-CREATE TABLE DynRoleMembership (id BIGINT NOT NULL, fiql VARCHAR(255), ROLE_NAME VARCHAR(255), PRIMARY KEY (id));
-CREATE TABLE DynRoleMembership_User (dynRoleMembership_id BIGINT, user_id BIGINT);
-CREATE TABLE ExternalResource (name VARCHAR(255) NOT NULL, creationDate TIMESTAMP NOT NULL, creator VARCHAR(255) NOT NULL, lastChangeDate TIMESTAMP NOT NULL, lastModifier VARCHAR(255) NOT NULL, createTraceLevel VARCHAR(20), deleteTraceLevel VARCHAR(20), enforceMandatoryCondition INTEGER, jsonConf CLOB, overrideCapabilities INTEGER, propagationPriority INTEGER, pullTraceLevel VARCHAR(20), randomPwdIfNotProvided INTEGER, updateTraceLevel VARCHAR(20), ACCOUNTPOLICY_ID BIGINT, CONNECTOR_ID BIGINT, PASSWORDPOLICY_ID BIGINT, PULLPOLICY_ID BIGINT, PRIMARY KEY (name));
-CREATE TABLE ExternalResource_capOverride (resource_name VARCHAR(255), capabilityOverride VARCHAR(20));
-CREATE TABLE ExternalResource_PropActions (resource_name VARCHAR(255), actionClassName VARCHAR(255));
-CREATE TABLE GPlainAttr (id BIGINT NOT NULL, schema_name VARCHAR(255), OWNER_ID BIGINT, PRIMARY KEY (id));
-CREATE TABLE GPlainAttrUniqueValue (id BIGINT NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID BIGINT, schema_name VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_GPLNQVL_BOOLEANVALUE UNIQUE (booleanValue, schema_name), CONSTRAINT U_GPLNQVL_DATEVALUE UNIQUE (dateValue, schema_name), CONSTRAINT U_GPLNQVL_STRINGVALUE UNIQUE (stringValue, schema_name), CONSTRAINT U_GPLNQVL_DOUBLEVALUE UNIQUE (doubleValue, schema_name), CONSTRAINT U_GPLNQVL_LONGVALUE UNIQUE (longValue, schema_name));
-CREATE TABLE GPlainAttrValue (id BIGINT NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID BIGINT, PRIMARY KEY (id));
-CREATE TABLE MailTemplate (name VARCHAR(255) NOT NULL, htmlTemplate CLOB, textTemplate CLOB, PRIMARY KEY (name));
-CREATE TABLE Mapping (id BIGINT NOT NULL, connObjectLink VARCHAR(255), PROVISION_ID BIGINT, PRIMARY KEY (id));
-CREATE TABLE MappingItem (id BIGINT NOT NULL, connObjectKey INTEGER, extAttrName VARCHAR(255), intAttrName VARCHAR(255), intMappingType VARCHAR(22), mandatoryCondition VARCHAR(255), password INTEGER, purpose VARCHAR(20), MAPPING_ID BIGINT, PRIMARY KEY (id));
-CREATE TABLE MappingItem_Transformer (mappingItem_id BIGINT, transformerClassName VARCHAR(255));
-CREATE TABLE Notification (id BIGINT NOT NULL, active INTEGER, recipientAttrName VARCHAR(255), recipientAttrType VARCHAR(22), recipientsFIQL VARCHAR(255), recipientsProviderClassName VARCHAR(255), selfAsRecipient INTEGER, sender VARCHAR(255), subject VARCHAR(255), traceLevel VARCHAR(20), template_name VARCHAR(255), PRIMARY KEY (id));
-CREATE TABLE NotificationTask_recipients (notificationTask_id BIGINT, address VARCHAR(255));
-CREATE TABLE Notification_events (notification_id BIGINT, event VARCHAR(255));
-CREATE TABLE Notification_staticRecipients (notification_id BIGINT, staticRecipients VARCHAR(255));
-CREATE TABLE OPENJPA_SEQUENCES_TABLE (ID VARCHAR(255) NOT NULL, SEQUENCE_VALUE BIGINT, PRIMARY KEY (ID));
-CREATE TABLE PasswordPolicy (id BIGINT NOT NULL, description VARCHAR(255), allowNullPassword INTEGER, historyLength INTEGER, PRIMARY KEY (id));
-CREATE TABLE PasswordRuleConfInstance (id BIGINT NOT NULL, serializedInstance CLOB, PASSWORDPOLICY_ID BIGINT, PRIMARY KEY (id));
-CREATE TABLE PlainSchema (name VARCHAR(255) NOT NULL, cipherAlgorithm VARCHAR(20), conversionPattern VARCHAR(255), enumerationKeys CLOB, enumerationValues CLOB, mandatoryCondition VARCHAR(255), mimeType VARCHAR(255), multivalue INTEGER, readonly INTEGER, secretKey VARCHAR(255), type VARCHAR(20), uniqueConstraint INTEGER, validatorClass VARCHAR(255), ANYTYPECLASS_NAME VARCHAR(255), PRIMARY KEY (name));
-CREATE TABLE Provision (id BIGINT NOT NULL, objectClass VARCHAR(255), serializedSyncToken CLOB, ANYTYPE_NAME VARCHAR(255), RESOURCE_NAME VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_PROVSON_RESOURCE_NAME UNIQUE (RESOURCE_NAME, ANYTYPE_NAME));
-CREATE TABLE PullPolicy (id BIGINT NOT NULL, description VARCHAR(255), specification CLOB, PRIMARY KEY (id));
-CREATE TABLE PullTask_actionsClassNames (pullTask_id BIGINT, actionClassName VARCHAR(255));
-CREATE TABLE PushPolicy (id BIGINT NOT NULL, description VARCHAR(255), specification CLOB, PRIMARY KEY (id));
-CREATE TABLE PushTaskAnyFilter (id BIGINT NOT NULL, fiql VARCHAR(255), PUSHTASK_ID BIGINT, ANYTYPE_NAME VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_PSHTLTR_PUSHTASK_ID UNIQUE (PUSHTASK_ID, ANYTYPE_NAME));
-CREATE TABLE PushTask_actionsClassNames (pushTask_id BIGINT, actionClassName VARCHAR(255));
-CREATE TABLE Realm (id BIGINT NOT NULL, name VARCHAR(255), ACCOUNTPOLICY_ID BIGINT, PARENT_ID BIGINT, PASSWORDPOLICY_ID BIGINT, PRIMARY KEY (id), CONSTRAINT U_REALM_NAME UNIQUE (name, PARENT_ID));
-CREATE TABLE Realm_actionsClassNames (realm_id BIGINT, actionClassName VARCHAR(255));
-CREATE TABLE RelationshipType (name VARCHAR(255) NOT NULL, description VARCHAR(255), PRIMARY KEY (name));
-CREATE TABLE Report (id BIGINT NOT NULL, active INTEGER, cronExpression VARCHAR(255), name VARCHAR(255) NOT NULL, template_name VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_REPORT_NAME UNIQUE (name));
-CREATE TABLE ReportExec (id BIGINT NOT NULL, endDate TIMESTAMP, message CLOB, startDate TIMESTAMP, status VARCHAR(255), execResult BLOB, REPORT_ID BIGINT, PRIMARY KEY (id));
-CREATE TABLE ReportletConfInstance (id BIGINT NOT NULL, serializedInstance CLOB, REPORT_ID BIGINT, PRIMARY KEY (id));
-CREATE TABLE ReportTemplate (name VARCHAR(255) NOT NULL, csvTemplate CLOB, foTemplate CLOB, htmlTemplate CLOB, PRIMARY KEY (name));
-CREATE TABLE SecurityQuestion (id BIGINT NOT NULL, content VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_SCRTSTN_CONTENT UNIQUE (content));
-CREATE TABLE SyncopeConf (id BIGINT NOT NULL, creationDate TIMESTAMP NOT NULL, creator VARCHAR(255) NOT NULL, lastChangeDate TIMESTAMP NOT NULL, lastModifier VARCHAR(255) NOT NULL, PRIMARY KEY (id));
-CREATE TABLE SyncopeDomain (name VARCHAR(255) NOT NULL, adminCipherAlgorithm VARCHAR(20), adminPwd VARCHAR(255), PRIMARY KEY (name));
-CREATE TABLE SyncopeGroup (id BIGINT NOT NULL, creationDate TIMESTAMP NOT NULL, creator VARCHAR(255) NOT NULL, lastChangeDate TIMESTAMP NOT NULL, lastModifier VARCHAR(255) NOT NULL, status VARCHAR(255), workflowId VARCHAR(255), name VARCHAR(255), REALM_ID BIGINT, GROUPOWNER_ID BIGINT, USEROWNER_ID BIGINT, PRIMARY KEY (id), CONSTRAINT U_SYNCGRP_NAME UNIQUE (name));
-CREATE TABLE SyncopeGroup_AnyTypeClass (group_id BIGINT, anyTypeClass_name VARCHAR(255));
-CREATE TABLE SyncopeGroup_ExternalResource (group_id BIGINT, resource_name VARCHAR(255));
+CREATE TABLE AccountPolicy (key VARCHAR(36) NOT NULL, description VARCHAR(255), maxAuthenticationAttempts INTEGER, propagateSuspension INTEGER, PRIMARY KEY (key));
+CREATE TABLE AccountPolicy_ExternalResource (accountPolicy_key VARCHAR(36), resource_key VARCHAR(255));
+CREATE TABLE AccountRuleConfInstance (key VARCHAR(36) NOT NULL, serializedInstance CLOB, ACCOUNTPOLICY_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE ADynGroupMembership (key VARCHAR(36) NOT NULL, fiql VARCHAR(255), GROUP_KEY VARCHAR(36), ANYTYPE_KEY VARCHAR(255), PRIMARY KEY (key));
+CREATE TABLE ADynGroupMembership_AnyObject (aDynGroupMembership_key VARCHAR(36), anyObject_key VARCHAR(36));
+CREATE TABLE AMembership (key VARCHAR(36) NOT NULL, anyObject_key VARCHAR(36), group_key VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE AnyAbout (key VARCHAR(36) NOT NULL, filter CLOB, NOTIFICATION_KEY VARCHAR(36), ANYTYPE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_NYABOUT_NOTIFICATION_KEY UNIQUE (NOTIFICATION_KEY, ANYTYPE_KEY));
+CREATE TABLE AnyObject (key VARCHAR(36) NOT NULL, creationDate TIMESTAMP NOT NULL, creator VARCHAR(255) NOT NULL, lastChangeDate TIMESTAMP NOT NULL, lastModifier VARCHAR(255) NOT NULL, status VARCHAR(255), workflowId VARCHAR(255), REALM_KEY VARCHAR(36), TYPE_KEY VARCHAR(255), PRIMARY KEY (key));
+CREATE TABLE AnyObject_AnyTypeClass (anyObject_key VARCHAR(36), anyTypeClass_key VARCHAR(255));
+CREATE TABLE AnyObject_ExternalResource (anyObject_key VARCHAR(36), resource_key VARCHAR(255));
+CREATE TABLE AnyTemplatePullTask (key VARCHAR(36) NOT NULL, template CLOB, PULLTASK_KEY VARCHAR(36), ANYTYPE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_NYTMTSK_PULLTASK_KEY UNIQUE (PULLTASK_KEY, ANYTYPE_KEY));
+CREATE TABLE AnyTemplateRealm (key VARCHAR(36) NOT NULL, template CLOB, REALM_KEY VARCHAR(36), ANYTYPE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_NYTMRLM_REALM_KEY UNIQUE (REALM_KEY, ANYTYPE_KEY));
+CREATE TABLE AnyType (key VARCHAR(255) NOT NULL, kind VARCHAR(20), PRIMARY KEY (key));
+CREATE TABLE AnyTypeClass (key VARCHAR(255) NOT NULL, PRIMARY KEY (key));
+CREATE TABLE AnyType_AnyTypeClass (anyType_key VARCHAR(255), anyTypeClass_key VARCHAR(255));
+CREATE TABLE APlainAttr (key VARCHAR(36) NOT NULL, OWNER_KEY VARCHAR(36), schema_key VARCHAR(255), PRIMARY KEY (key));
+CREATE TABLE APlainAttrUniqueValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), schema_key VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_PLNTQVL_BOOLEANVALUE1 UNIQUE (booleanValue, schema_key), CONSTRAINT U_PLNTQVL_DATEVALUE1 UNIQUE (dateValue, schema_key), CONSTRAINT U_PLNTQVL_STRINGVALUE1 UNIQUE (stringValue, schema_key), CONSTRAINT U_PLNTQVL_DOUBLEVALUE1 UNIQUE (doubleValue, schema_key), CONSTRAINT U_PLNTQVL_LONGVALUE1 UNIQUE (longValue, schema_key));
+CREATE TABLE APlainAttrValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE ARelationship (key VARCHAR(36) NOT NULL, left_anyObject_key VARCHAR(36), right_anyObject_key VARCHAR(36), TYPE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_RLTNSHP_TYPE_KEY1 UNIQUE (TYPE_KEY, left_anyObject_key, right_anyObject_key));
+CREATE TABLE ConnInstance (key VARCHAR(36) NOT NULL, bundleName VARCHAR(255), connRequestTimeout INTEGER, connectorName VARCHAR(255), displayName VARCHAR(255), jsonConf CLOB, location VARCHAR(255), version VARCHAR(255), maxIdle INTEGER, maxObjects INTEGER, maxWait BIGINT, minEvictableIdleTimeMillis BIGINT, minIdle INTEGER, PRIMARY KEY (key), CONSTRAINT U_CNNNTNC_DISPLAYNAME UNIQUE (displayName));
+CREATE TABLE ConnInstance_capabilities (connInstance_key VARCHAR(36), capability VARCHAR(20));
+CREATE TABLE CPlainAttr (key VARCHAR(36) NOT NULL, schema_key VARCHAR(255), OWNER_KEY VARCHAR(255), PRIMARY KEY (key));
+CREATE TABLE CPlainAttrUniqueValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), schema_key VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_CPLNQVL_BOOLEANVALUE UNIQUE (booleanValue, schema_key), CONSTRAINT U_CPLNQVL_DATEVALUE UNIQUE (dateValue, schema_key), CONSTRAINT U_CPLNQVL_STRINGVALUE UNIQUE (stringValue, schema_key), CONSTRAINT U_CPLNQVL_DOUBLEVALUE UNIQUE (doubleValue, schema_key), CONSTRAINT U_CPLNQVL_LONGVALUE UNIQUE (longValue, schema_key));
+CREATE TABLE CPlainAttrValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE DerSchema (key VARCHAR(255) NOT NULL, expression VARCHAR(255), ANYTYPECLASS_KEY VARCHAR(255), PRIMARY KEY (key));
+CREATE TABLE DynRoleMembership (key VARCHAR(36) NOT NULL, fiql VARCHAR(255), ROLE_KEY VARCHAR(255), PRIMARY KEY (key));
+CREATE TABLE DynRoleMembership_User (dynRoleMembership_key VARCHAR(36), user_key VARCHAR(36));
+CREATE TABLE ExternalResource (key VARCHAR(255) NOT NULL, createTraceLevel VARCHAR(20), deleteTraceLevel VARCHAR(20), enforceMandatoryCondition INTEGER, jsonConf CLOB, overrideCapabilities INTEGER, propagationPriority INTEGER, pullTraceLevel VARCHAR(20), randomPwdIfNotProvided INTEGER, updateTraceLevel VARCHAR(20), ACCOUNTPOLICY_KEY VARCHAR(36), CONNECTOR_KEY VARCHAR(36), PASSWORDPOLICY_KEY VARCHAR(36), PULLPOLICY_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE ExternalResource_capOverride (resource_key VARCHAR(255), capabilityOverride VARCHAR(20));
+CREATE TABLE ExternalResource_PropActions (resource_key VARCHAR(255), actionClassName VARCHAR(255));
+CREATE TABLE GPlainAttr (key VARCHAR(36) NOT NULL, schema_key VARCHAR(255), OWNER_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE GPlainAttrUniqueValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), schema_key VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_GPLNQVL_BOOLEANVALUE UNIQUE (booleanValue, schema_key), CONSTRAINT U_GPLNQVL_DATEVALUE UNIQUE (dateValue, schema_key), CONSTRAINT U_GPLNQVL_STRINGVALUE UNIQUE (stringValue, schema_key), CONSTRAINT U_GPLNQVL_DOUBLEVALUE UNIQUE (doubleValue, schema_key), CONSTRAINT U_GPLNQVL_LONGVALUE UNIQUE (longValue, schema_key));
+CREATE TABLE GPlainAttrValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE MailTemplate (key VARCHAR(255) NOT NULL, htmlTemplate CLOB, textTemplate CLOB, PRIMARY KEY (key));
+CREATE TABLE Mapping (key VARCHAR(36) NOT NULL, connObjectLink VARCHAR(255), PROVISION_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE MappingItem (key VARCHAR(36) NOT NULL, connObjectKey INTEGER, extAttrName VARCHAR(255), intAttrName VARCHAR(255), intMappingType VARCHAR(22), mandatoryCondition VARCHAR(255), password INTEGER, purpose VARCHAR(20), MAPPING_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE MappingItem_Transformer (mappingItem_key VARCHAR(36), transformerClassName VARCHAR(255));
+CREATE TABLE Notification (key VARCHAR(36) NOT NULL, active INTEGER, recipientAttrName VARCHAR(255), recipientAttrType VARCHAR(22), recipientsFIQL VARCHAR(255), recipientsProviderClassName VARCHAR(255), selfAsRecipient INTEGER, sender VARCHAR(255), subject VARCHAR(255), traceLevel VARCHAR(20), template_key VARCHAR(255), PRIMARY KEY (key));
+CREATE TABLE NotificationTask_recipients (notificationTask_key VARCHAR(36), address VARCHAR(255));
+CREATE TABLE Notification_events (notification_key VARCHAR(36), event VARCHAR(255));
+CREATE TABLE Notification_staticRecipients (notification_key VARCHAR(36), staticRecipients VARCHAR(255));
+CREATE TABLE PasswordPolicy (key VARCHAR(36) NOT NULL, description VARCHAR(255), allowNullPassword INTEGER, historyLength INTEGER, PRIMARY KEY (key));
+CREATE TABLE PasswordRuleConfInstance (key VARCHAR(36) NOT NULL, serializedInstance CLOB, PASSWORDPOLICY_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE PlainSchema (key VARCHAR(255) NOT NULL, cipherAlgorithm VARCHAR(20), conversionPattern VARCHAR(255), enumerationKeys CLOB, enumerationValues CLOB, mandatoryCondition VARCHAR(255), mimeType VARCHAR(255), multivalue INTEGER, readonly INTEGER, secretKey VARCHAR(255), type VARCHAR(20), uniqueConstraint INTEGER, validatorClass VARCHAR(255), ANYTYPECLASS_KEY VARCHAR(255), PRIMARY KEY (key));
+CREATE TABLE Provision (key VARCHAR(36) NOT NULL, objectClass VARCHAR(255), serializedSyncToken CLOB, ANYTYPE_KEY VARCHAR(255), RESOURCE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_PROVSON_RESOURCE_KEY UNIQUE (RESOURCE_KEY, ANYTYPE_KEY));
+CREATE TABLE Provision_AnyTypeClass (provision_key VARCHAR(36), anyTypeClass_key VARCHAR(255));
+CREATE TABLE PullPolicy (key VARCHAR(36) NOT NULL, description VARCHAR(255), specification CLOB, PRIMARY KEY (key));
+CREATE TABLE PullTask_actionsClassNames (pullTask_key VARCHAR(36), actionClassName VARCHAR(255));
+CREATE TABLE PushPolicy (key VARCHAR(36) NOT NULL, description VARCHAR(255), specification CLOB, PRIMARY KEY (key));
+CREATE TABLE PushTaskAnyFilter (key VARCHAR(36) NOT NULL, fiql VARCHAR(255), PUSHTASK_KEY VARCHAR(36), ANYTYPE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_PSHTLTR_PUSHTASK_KEY UNIQUE (PUSHTASK_KEY, ANYTYPE_KEY));
+CREATE TABLE PushTask_actionsClassNames (pushTask_key VARCHAR(36), actionClassName VARCHAR(255));
+CREATE TABLE Realm (key VARCHAR(36) NOT NULL, name VARCHAR(255), ACCOUNTPOLICY_KEY VARCHAR(36), PARENT_KEY VARCHAR(36), PASSWORDPOLICY_KEY VARCHAR(36), PRIMARY KEY (key), CONSTRAINT U_REALM_KEY UNIQUE (key, PARENT_KEY));
+CREATE TABLE Realm_actionsClassNames (realm_key VARCHAR(36), actionClassName VARCHAR(255));
+CREATE TABLE RelationshipType (key VARCHAR(255) NOT NULL, description VARCHAR(255), PRIMARY KEY (key));
+CREATE TABLE Report (key VARCHAR(36) NOT NULL, active INTEGER, cronExpression VARCHAR(255), name VARCHAR(255) NOT NULL, template_key VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_REPORT_NAME UNIQUE (name));
+CREATE TABLE ReportExec (key VARCHAR(36) NOT NULL, endDate TIMESTAMP, message CLOB, startDate TIMESTAMP, status VARCHAR(255), execResult BLOB, REPORT_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE ReportletConfInstance (key VARCHAR(36) NOT NULL, serializedInstance CLOB, REPORT_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE ReportTemplate (key VARCHAR(255) NOT NULL, csvTemplate CLOB, foTemplate CLOB, htmlTemplate CLOB, PRIMARY KEY (key));
+CREATE TABLE SecurityQuestion (key VARCHAR(36) NOT NULL, content VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_SCRTSTN_CONTENT UNIQUE (content));
+CREATE TABLE SyncopeConf (key VARCHAR(255) NOT NULL, PRIMARY KEY (key));
+CREATE TABLE SyncopeDomain (key VARCHAR(255) NOT NULL, adminCipherAlgorithm VARCHAR(20), adminPwd VARCHAR(255), PRIMARY KEY (key));
+CREATE TABLE SyncopeGroup (key VARCHAR(36) NOT NULL, creationDate TIMESTAMP NOT NULL, creator VARCHAR(255) NOT NULL, lastChangeDate TIMESTAMP NOT NULL, lastModifier VARCHAR(255) NOT NULL, status VARCHAR(255), workflowId VARCHAR(255), name VARCHAR(255), REALM_KEY VARCHAR(36), GROUPOWNER_KEY VARCHAR(36), USEROWNER_KEY VARCHAR(36), PRIMARY KEY (key), CONSTRAINT U_SYNCGRP_NAME UNIQUE (name));
+CREATE TABLE SyncopeGroup_AnyTypeClass (group_key VARCHAR(36), anyTypeClass_key VARCHAR(255));
+CREATE TABLE SyncopeGroup_ExternalResource (group_key VARCHAR(36), resource_key VARCHAR(255));
 CREATE TABLE SyncopeLogger (logName VARCHAR(255) NOT NULL, logLevel VARCHAR(20) NOT NULL, logType VARCHAR(20) NOT NULL, PRIMARY KEY (logName));
-CREATE TABLE SyncopeRole (name VARCHAR(255) NOT NULL, PRIMARY KEY (name));
-CREATE TABLE SyncopeRole_entitlements (role_name VARCHAR(255), entitlement VARCHAR(255));
-CREATE TABLE SyncopeRole_Realm (role_name VARCHAR(255), realm_id BIGINT);
-CREATE TABLE SyncopeUser (id BIGINT NOT NULL, creationDate TIMESTAMP NOT NULL, creator VARCHAR(255) NOT NULL, lastChangeDate TIMESTAMP NOT NULL, lastModifier VARCHAR(255) NOT NULL, status VARCHAR(255), workflowId VARCHAR(255), changePwdDate TIMESTAMP, cipherAlgorithm VARCHAR(20), failedLogins INTEGER, lastLoginDate TIMESTAMP, mustChangePassword INTEGER, password VARCHAR(255), securityAnswer VARCHAR(255), suspended INTEGER, token CLOB, tokenExpireTime TIMESTAMP, username VARCHAR(255), REALM_ID BIGINT, SECURITYQUESTION_ID BIGINT, PRIMARY KEY (id), CONSTRAINT U_SYNCPSR_USERNAME UNIQUE (username));
-CREATE TABLE SyncopeUser_AnyTypeClass (user_id BIGINT, anyTypeClass_name VARCHAR(255));
-CREATE TABLE SyncopeUser_ExternalResource (user_id BIGINT, resource_name VARCHAR(255));
-CREATE TABLE SyncopeUser_passwordHistory (user_id BIGINT, passwordHistoryValue VARCHAR(255));
-CREATE TABLE SyncopeUser_SyncopeRole (user_id BIGINT, role_name VARCHAR(255));
-CREATE TABLE Task (id BIGINT NOT NULL, DTYPE VARCHAR(31), active INTEGER, cronExpression VARCHAR(255), description VARCHAR(255), jobDelegateClassName VARCHAR(255), name VARCHAR(255), startAt TIMESTAMP, matchingRule VARCHAR(20), performCreate INTEGER, performDelete INTEGER, performUpdate INTEGER, pullStatus INTEGER, unmatchingRule VARCHAR(20), pullMode VARCHAR(23), reconciliationFilterBuilderClassName VARCHAR(255), RESOURCE_NAME VARCHAR(255), DESTINATIONREALM_ID BIGINT, executed INTEGER, htmlBody CLOB, sender VARCHAR(255), subject VARCHAR(255), textBody CLOB, traceLevel VARCHAR(20), anyKey BIGINT, anyType VARCHAR(255), anyTypeKind VARCHAR(20), attributes CLOB, connObjectKey VARCHAR(255), objectClassName VARCHAR(255), oldConnObjectKey VARCHAR(255), operation VARCHAR(20), PRIMARY KEY (id));
-CREATE TABLE TaskExec (id BIGINT NOT NULL, endDate TIMESTAMP, message CLOB, startDate TIMESTAMP, status VARCHAR(255), TASK_ID BIGINT, PRIMARY KEY (id));
-CREATE TABLE TypeExtension (id BIGINT NOT NULL, GROUP_ID BIGINT, ANYTYPE_NAME VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_TYPXNSN_GROUP_ID UNIQUE (GROUP_ID, ANYTYPE_NAME));
-CREATE TABLE TypeExtension_AnyTypeClass (typeExtension_id BIGINT, anyTypeClass_name VARCHAR(255));
-CREATE TABLE UDynGroupMembership (id BIGINT NOT NULL, fiql VARCHAR(255), GROUP_ID BIGINT, PRIMARY KEY (id));
-CREATE TABLE UDynGroupMembership_User (uDynGroupMembership_id BIGINT, user_id BIGINT);
-CREATE TABLE UMembership (id BIGINT NOT NULL, user_id BIGINT, group_id BIGINT, PRIMARY KEY (id));
-CREATE TABLE UPlainAttr (id BIGINT NOT NULL, OWNER_ID BIGINT, schema_name VARCHAR(255), PRIMARY KEY (id));
-CREATE TABLE UPlainAttrUniqueValue (id BIGINT NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID BIGINT, schema_name VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_PLNTQVL_BOOLEANVALUE UNIQUE (booleanValue, schema_name), CONSTRAINT U_PLNTQVL_DATEVALUE UNIQUE (dateValue, schema_name), CONSTRAINT U_PLNTQVL_STRINGVALUE UNIQUE (stringValue, schema_name), CONSTRAINT U_PLNTQVL_DOUBLEVALUE UNIQUE (doubleValue, schema_name), CONSTRAINT U_PLNTQVL_LONGVALUE UNIQUE (longValue, schema_name));
-CREATE TABLE UPlainAttrValue (id BIGINT NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID BIGINT, PRIMARY KEY (id));
-CREATE TABLE URelationship (id BIGINT NOT NULL, user_id BIGINT, anyObject_id BIGINT, TYPE_NAME VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_RLTNSHP_TYPE_NAME UNIQUE (TYPE_NAME, user_id, anyObject_id));
-CREATE TABLE VirSchema (name VARCHAR(255) NOT NULL, extAttrName VARCHAR(255), readonly INTEGER, ANYTYPECLASS_NAME VARCHAR(255), PROVISION_ID BIGINT, PRIMARY KEY (name));
-CREATE INDEX I_CCNTSRC_ACCOUNTPOLICY_ID ON AccountPolicy_ExternalResource (accountPolicy_id);
-CREATE INDEX I_CCNTSRC_ELEMENT ON AccountPolicy_ExternalResource (resource_name);
-CREATE INDEX I_CCNTTNC_ACCOUNTPOLICY ON AccountRuleConfInstance (ACCOUNTPOLICY_ID);
-CREATE INDEX I_DYNGSHP_ANYTYPE ON ADynGroupMembership (ANYTYPE_NAME);
-CREATE INDEX I_DYNGSHP_GROUP ON ADynGroupMembership (GROUP_ID);
-CREATE INDEX I_DYNGJCT_ADYNGROUPMEMBERSHIP_ID ON ADynGroupMembership_AnyObject (aDynGroupMembership_id);
-CREATE INDEX I_DYNGJCT_ELEMENT ON ADynGroupMembership_AnyObject (anyObject_id);
-CREATE INDEX I_MMBRSHP_LEFTEND1 ON AMembership (anyObject_id);
-CREATE INDEX I_MMBRSHP_RIGHTEND1 ON AMembership (group_id);
-CREATE INDEX I_NYABOUT_ANYTYPE ON AnyAbout (ANYTYPE_NAME);
-CREATE INDEX I_NYABOUT_NOTIFICATION ON AnyAbout (NOTIFICATION_ID);
-CREATE INDEX I_NYOBJCT_REALM ON AnyObject (REALM_ID);
-CREATE INDEX I_NYOBJCT_TYPE ON AnyObject (TYPE_NAME);
-CREATE INDEX I_NYBJLSS_ANYOBJECT_ID ON AnyObject_AnyTypeClass (anyObject_id);
-CREATE INDEX I_NYBJLSS_ELEMENT ON AnyObject_AnyTypeClass (anyTypeClass_name);
-CREATE INDEX I_NYBJSRC_ANYOBJECT_ID ON AnyObject_ExternalResource (anyObject_id);
-CREATE INDEX I_NYBJSRC_ELEMENT ON AnyObject_ExternalResource (resource_name);
-CREATE INDEX I_NYTMTSK_ANYTYPE ON AnyTemplatePullTask (ANYTYPE_NAME);
-CREATE INDEX I_NYTMTSK_PULLTASK ON AnyTemplatePullTask (PULLTASK_ID);
-CREATE INDEX I_NYTMRLM_ANYTYPE ON AnyTemplateRealm (ANYTYPE_NAME);
-CREATE INDEX I_NYTMRLM_REALM ON AnyTemplateRealm (REALM_ID);
-CREATE INDEX I_NYTYLSS_ANYTYPE_NAME ON AnyType_AnyTypeClass (anyType_name);
-CREATE INDEX I_NYTYLSS_ELEMENT ON AnyType_AnyTypeClass (anyTypeClass_name);
-CREATE INDEX I_PLINTTR_OWNER ON APlainAttr (OWNER_ID);
-CREATE INDEX I_PLINTTR_SCHEMA ON APlainAttr (schema_name);
-CREATE INDEX I_PLNTQVL_ATTRIBUTE1 ON APlainAttrUniqueValue (ATTRIBUTE_ID);
-CREATE INDEX I_PLNTQVL_SCHEMA1 ON APlainAttrUniqueValue (schema_name);
-CREATE INDEX I_PLNTRVL_ATTRIBUTE1 ON APlainAttrValue (ATTRIBUTE_ID);
-CREATE INDEX I_RLTNSHP_LEFTEND1 ON ARelationship (left_anyObject_id);
-CREATE INDEX I_RLTNSHP_RIGHTEND1 ON ARelationship (right_anyObject_id);
-CREATE INDEX I_RLTNSHP_TYPE1 ON ARelationship (TYPE_NAME);
-CREATE INDEX I_CNNNLTS_CONNINSTANCE_ID ON ConnInstance_capabilities (connInstance_id);
-CREATE INDEX I_CPLNTTR_OWNER ON CPlainAttr (OWNER_ID);
-CREATE INDEX I_CPLNTTR_SCHEMA ON CPlainAttr (schema_name);
-CREATE INDEX I_CPLNQVL_ATTRIBUTE ON CPlainAttrUniqueValue (ATTRIBUTE_ID);
-CREATE INDEX I_CPLNQVL_SCHEMA ON CPlainAttrUniqueValue (schema_name);
-CREATE INDEX I_CPLNRVL_ATTRIBUTE ON CPlainAttrValue (ATTRIBUTE_ID);
-CREATE INDEX I_DRSCHEM_ANYTYPECLASS ON DerSchema (ANYTYPECLASS_NAME);
-CREATE INDEX I_DYNRSHP_ROLE ON DynRoleMembership (ROLE_NAME);
-CREATE INDEX I_DYNR_SR_DYNROLEMEMBERSHIP_ID ON DynRoleMembership_User (dynRoleMembership_id);
-CREATE INDEX I_DYNR_SR_ELEMENT ON DynRoleMembership_User (user_id);
-CREATE INDEX I_XTRNSRC_ACCOUNTPOLICY ON ExternalResource (ACCOUNTPOLICY_ID);
-CREATE INDEX I_XTRNSRC_CONNECTOR ON ExternalResource (CONNECTOR_ID);
-CREATE INDEX I_XTRNSRC_PASSWORDPOLICY ON ExternalResource (PASSWORDPOLICY_ID);
-CREATE INDEX I_XTRNSRC_PULLPOLICY ON ExternalResource (PULLPOLICY_ID);
-CREATE INDEX I_XTRNRRD_RESOURCE_NAME ON ExternalResource_capOverride (resource_name);
-CREATE INDEX I_XTRNTNS_RESOURCE_NAME ON ExternalResource_PropActions (resource_name);
-CREATE INDEX I_GPLNTTR_OWNER ON GPlainAttr (OWNER_ID);
-CREATE INDEX I_GPLNTTR_SCHEMA ON GPlainAttr (schema_name);
-CREATE INDEX I_GPLNQVL_ATTRIBUTE ON GPlainAttrUniqueValue (ATTRIBUTE_ID);
-CREATE INDEX I_GPLNQVL_SCHEMA ON GPlainAttrUniqueValue (schema_name);
-CREATE INDEX I_GPLNRVL_ATTRIBUTE ON GPlainAttrValue (ATTRIBUTE_ID);
-CREATE INDEX I_MAPPING_PROVISION ON Mapping (PROVISION_ID);
-CREATE INDEX I_MPPNGTM_MAPPING ON MappingItem (MAPPING_ID);
-CREATE INDEX I_MPPNRMR_MAPPINGITEM_ID ON MappingItem_Transformer (mappingItem_id);
-CREATE INDEX I_NTFCTON_TEMPLATE ON Notification (template_name);
-CREATE INDEX I_NTFCNTS_NOTIFICATIONTASK_ID ON NotificationTask_recipients (notificationTask_id);
-CREATE INDEX I_NTFCNTS_NOTIFICATION_ID ON Notification_events (notification_id);
-CREATE INDEX I_NTFCNTS_NOTIFICATION_ID1 ON Notification_staticRecipients (notification_id);
-CREATE INDEX I_PSSWTNC_PASSWORDPOLICY ON PasswordRuleConfInstance (PASSWORDPOLICY_ID);
-CREATE INDEX I_PLNSCHM_ANYTYPECLASS ON PlainSchema (ANYTYPECLASS_NAME);
-CREATE INDEX I_PROVSON_ANYTYPE ON Provision (ANYTYPE_NAME);
-CREATE INDEX I_PROVSON_RESOURCE ON Provision (RESOURCE_NAME);
-CREATE INDEX I_PLLTNMS_PULLTASK_ID ON PullTask_actionsClassNames (pullTask_id);
-CREATE INDEX I_PSHTLTR_ANYTYPE ON PushTaskAnyFilter (ANYTYPE_NAME);
-CREATE INDEX I_PSHTLTR_PUSHTASK ON PushTaskAnyFilter (PUSHTASK_ID);
-CREATE INDEX I_PSHTNMS_PUSHTASK_ID ON PushTask_actionsClassNames (pushTask_id);
-CREATE INDEX I_REALM_ACCOUNTPOLICY ON Realm (ACCOUNTPOLICY_ID);
-CREATE INDEX I_REALM_PARENT ON Realm (PARENT_ID);
-CREATE INDEX I_REALM_PASSWORDPOLICY ON Realm (PASSWORDPOLICY_ID);
-CREATE INDEX I_RLM_NMS_REALM_ID ON Realm_actionsClassNames (realm_id);
-CREATE INDEX I_REPORT_TEMPLATE ON Report (template_name);
-CREATE INDEX I_RPORTXC_REPORT ON ReportExec (REPORT_ID);
-CREATE INDEX I_RPRTTNC_REPORT ON ReportletConfInstance (REPORT_ID);
-CREATE INDEX I_SYNCGRP_GROUPOWNER ON SyncopeGroup (GROUPOWNER_ID);
-CREATE INDEX I_SYNCGRP_REALM ON SyncopeGroup (REALM_ID);
-CREATE INDEX I_SYNCGRP_USEROWNER ON SyncopeGroup (USEROWNER_ID);
-CREATE INDEX I_SYNCLSS_ELEMENT ON SyncopeGroup_AnyTypeClass (anyTypeClass_name);
-CREATE INDEX I_SYNCLSS_GROUP_ID ON SyncopeGroup_AnyTypeClass (group_id);
-CREATE INDEX I_SYNCSRC_ELEMENT ON SyncopeGroup_ExternalResource (resource_name);
-CREATE INDEX I_SYNCSRC_GROUP_ID ON SyncopeGroup_ExternalResource (group_id);
-CREATE INDEX I_SYNCNTS_ROLE_NAME ON SyncopeRole_entitlements (role_name);
-CREATE INDEX I_SYNCRLM_ELEMENT ON SyncopeRole_Realm (realm_id);
-CREATE INDEX I_SYNCRLM_ROLE_NAME ON SyncopeRole_Realm (role_name);
-CREATE INDEX I_SYNCPSR_REALM ON SyncopeUser (REALM_ID);
-CREATE INDEX I_SYNCPSR_SECURITYQUESTION ON SyncopeUser (SECURITYQUESTION_ID);
-CREATE INDEX I_SYNCLSS_ELEMENT1 ON SyncopeUser_AnyTypeClass (anyTypeClass_name);
-CREATE INDEX I_SYNCLSS_USER_ID ON SyncopeUser_AnyTypeClass (user_id);
-CREATE INDEX I_SYNCSRC_ELEMENT1 ON SyncopeUser_ExternalResource (resource_name);
-CREATE INDEX I_SYNCSRC_USER_ID ON SyncopeUser_ExternalResource (user_id);
-CREATE INDEX I_SYNCTRY_USER_ID ON SyncopeUser_passwordHistory (user_id);
-CREATE INDEX I_SYNCPRL_ELEMENT ON SyncopeUser_SyncopeRole (role_name);
-CREATE INDEX I_SYNCPRL_USER_ID ON SyncopeUser_SyncopeRole (user_id);
-CREATE INDEX I_TASK_DESTINATIONREALM ON Task (DESTINATIONREALM_ID);
+CREATE TABLE SyncopeRole (key VARCHAR(255) NOT NULL, PRIMARY KEY (key));
+CREATE TABLE SyncopeRole_entitlements (role_key VARCHAR(255), entitlement VARCHAR(255));
+CREATE TABLE SyncopeRole_Realm (role_key VARCHAR(255), realm_key VARCHAR(36));
+CREATE TABLE SyncopeUser (key VARCHAR(36) NOT NULL, creationDate TIMESTAMP NOT NULL, creator VARCHAR(255) NOT NULL, lastChangeDate TIMESTAMP NOT NULL, lastModifier VARCHAR(255) NOT NULL, status VARCHAR(255), workflowId VARCHAR(255), changePwdDate TIMESTAMP, cipherAlgorithm VARCHAR(20), failedLogins INTEGER, lastLoginDate TIMESTAMP, mustChangePassword INTEGER, password VARCHAR(255), securityAnswer VARCHAR(255), suspended INTEGER, token CLOB, tokenExpireTime TIMESTAMP, username VARCHAR(255), REALM_KEY VARCHAR(36), SECURITYQUESTION_KEY VARCHAR(36), PRIMARY KEY (key), CONSTRAINT U_SYNCPSR_USERNAME UNIQUE (username));
+CREATE TABLE SyncopeUser_AnyTypeClass (user_key VARCHAR(36), anyTypeClass_key VARCHAR(255));
+CREATE TABLE SyncopeUser_ExternalResource (user_key VARCHAR(36), resource_key VARCHAR(255));
+CREATE TABLE SyncopeUser_passwordHistory (user_key VARCHAR(36), passwordHistoryValue VARCHAR(255));
+CREATE TABLE SyncopeUser_SyncopeRole (user_key VARCHAR(36), role_key VARCHAR(255));
+CREATE TABLE Task (key VARCHAR(36) NOT NULL, DTYPE VARCHAR(31), anyKey VARCHAR(255), anyType VARCHAR(255), anyTypeKind VARCHAR(20), attributes CLOB, connObjectKey VARCHAR(255), objectClassName VARCHAR(255), oldConnObjectKey VARCHAR(255), operation VARCHAR(20), RESOURCE_KEY VARCHAR(255), active INTEGER, cronExpression VARCHAR(255), description VARCHAR(255), jobDelegateClassName VARCHAR(255), name VARCHAR(255), startAt TIMESTAMP, matchingRule VARCHAR(20), performCreate INTEGER, performDelete INTEGER, performUpdate INTEGER, pullStatus INTEGER, unmatchingRule VARCHAR(20), executed INTEGER, htmlBody CLOB, sender VARCHAR(255), subject VARCHAR(255), textBody CLOB, traceLevel VARCHAR(20), NOTIFICATION_KEY VARCHAR(36), pullMode VARCHAR(23), reconciliationFilterBuilderClassName VARCHAR(255), DESTINATIONREALM_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE TaskExec (key VARCHAR(36) NOT NULL, endDate TIMESTAMP, message CLOB, startDate TIMESTAMP, status VARCHAR(255), TASK_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE TypeExtension (key VARCHAR(36) NOT NULL, GROUP_KEY VARCHAR(36), ANYTYPE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_TYPXNSN_GROUP_KEY UNIQUE (GROUP_KEY, ANYTYPE_KEY));
+CREATE TABLE TypeExtension_AnyTypeClass (typeExtension_key VARCHAR(36), anyTypeClass_key VARCHAR(255));
+CREATE TABLE UDynGroupMembership (key VARCHAR(36) NOT NULL, fiql VARCHAR(255), GROUP_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE UDynGroupMembership_User (uDynGroupMembership_key VARCHAR(36), user_key VARCHAR(36));
+CREATE TABLE UMembership (key VARCHAR(36) NOT NULL, user_key VARCHAR(36), group_key VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE UPlainAttr (key VARCHAR(36) NOT NULL, OWNER_KEY VARCHAR(36), schema_key VARCHAR(255), PRIMARY KEY (key));
+CREATE TABLE UPlainAttrUniqueValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), schema_key VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_PLNTQVL_BOOLEANVALUE UNIQUE (booleanValue, schema_key), CONSTRAINT U_PLNTQVL_DATEVALUE UNIQUE (dateValue, schema_key), CONSTRAINT U_PLNTQVL_STRINGVALUE UNIQUE (stringValue, schema_key), CONSTRAINT U_PLNTQVL_DOUBLEVALUE UNIQUE (doubleValue, schema_key), CONSTRAINT U_PLNTQVL_LONGVALUE UNIQUE (longValue, schema_key));
+CREATE TABLE UPlainAttrValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE TABLE URelationship (key VARCHAR(36) NOT NULL, user_key VARCHAR(36), anyObject_key VARCHAR(36), TYPE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_RLTNSHP_TYPE_KEY UNIQUE (TYPE_KEY, user_key, anyObject_key));
+CREATE TABLE VirSchema (key VARCHAR(255) NOT NULL, extAttrName VARCHAR(255), readonly INTEGER, ANYTYPECLASS_KEY VARCHAR(255), PROVISION_KEY VARCHAR(36), PRIMARY KEY (key));
+CREATE INDEX I_CCNTSRC_ACCOUNTPOLICY_KEY ON AccountPolicy_ExternalResource (accountPolicy_key);
+CREATE INDEX I_CCNTSRC_ELEMENT ON AccountPolicy_ExternalResource (resource_key);
+CREATE INDEX I_CCNTTNC_ACCOUNTPOLICY ON AccountRuleConfInstance (ACCOUNTPOLICY_KEY);
+CREATE INDEX I_DYNGSHP_ANYTYPE ON ADynGroupMembership (ANYTYPE_KEY);
+CREATE INDEX I_DYNGSHP_GROUP ON ADynGroupMembership (GROUP_KEY);
+CREATE INDEX I_DYNGJCT_ADYNGROUPMEMBERSHIP_KEY ON ADynGroupMembership_AnyObject (aDynGroupMembership_key);
+CREATE INDEX I_DYNGJCT_ELEMENT ON ADynGroupMembership_AnyObject (anyObject_key);
+CREATE INDEX I_MMBRSHP_LEFTEND1 ON AMembership (anyObject_key);
+CREATE INDEX I_MMBRSHP_RIGHTEND1 ON AMembership (group_key);
+CREATE INDEX I_NYABOUT_ANYTYPE ON AnyAbout (ANYTYPE_KEY);
+CREATE INDEX I_NYABOUT_NOTIFICATION ON AnyAbout (NOTIFICATION_KEY);
+CREATE INDEX I_NYOBJCT_REALM ON AnyObject (REALM_KEY);
+CREATE INDEX I_NYOBJCT_TYPE ON AnyObject (TYPE_KEY);
+CREATE INDEX I_NYBJLSS_ANYOBJECT_KEY ON AnyObject_AnyTypeClass (anyObject_key);
+CREATE INDEX I_NYBJLSS_ELEMENT ON AnyObject_AnyTypeClass (anyTypeClass_key);
+CREATE INDEX I_NYBJSRC_ANYOBJECT_KEY ON AnyObject_ExternalResource (anyObject_key);
+CREATE INDEX I_NYBJSRC_ELEMENT ON AnyObject_ExternalResource (resource_key);
+CREATE INDEX I_NYTMTSK_ANYTYPE ON AnyTemplatePullTask (ANYTYPE_KEY);
+CREATE INDEX I_NYTMTSK_PULLTASK ON AnyTemplatePullTask (PULLTASK_KEY);
+CREATE INDEX I_NYTMRLM_ANYTYPE ON AnyTemplateRealm (ANYTYPE_KEY);
+CREATE INDEX I_NYTMRLM_REALM ON AnyTemplateRealm (REALM_KEY);
+CREATE INDEX I_NYTYLSS_ANYTYPE_KEY ON AnyType_AnyTypeClass (anyType_key);
+CREATE INDEX I_NYTYLSS_ELEMENT ON AnyType_AnyTypeClass (anyTypeClass_key);
+CREATE INDEX I_PLINTTR_OWNER ON APlainAttr (OWNER_KEY);
+CREATE INDEX I_PLINTTR_SCHEMA ON APlainAttr (schema_key);
+CREATE INDEX I_PLNTQVL_ATTRIBUTE1 ON APlainAttrUniqueValue (ATTRIBUTE_KEY);
+CREATE INDEX I_PLNTQVL_SCHEMA1 ON APlainAttrUniqueValue (schema_key);
+CREATE INDEX I_PLNTRVL_ATTRIBUTE1 ON APlainAttrValue (ATTRIBUTE_KEY);
+CREATE INDEX I_RLTNSHP_LEFTEND1 ON ARelationship (left_anyObject_key);
+CREATE INDEX I_RLTNSHP_RIGHTEND1 ON ARelationship (right_anyObject_key);
+CREATE INDEX I_RLTNSHP_TYPE1 ON ARelationship (TYPE_KEY);
+CREATE INDEX I_CNNNLTS_CONNINSTANCE_KEY ON ConnInstance_capabilities (connInstance_key);
+CREATE INDEX I_CPLNTTR_OWNER ON CPlainAttr (OWNER_KEY);
+CREATE INDEX I_CPLNTTR_SCHEMA ON CPlainAttr (schema_key);
+CREATE INDEX I_CPLNQVL_ATTRIBUTE ON CPlainAttrUniqueValue (ATTRIBUTE_KEY);
+CREATE INDEX I_CPLNQVL_SCHEMA ON CPlainAttrUniqueValue (schema_key);
+CREATE INDEX I_CPLNRVL_ATTRIBUTE ON CPlainAttrValue (ATTRIBUTE_KEY);
+CREATE INDEX I_DRSCHEM_ANYTYPECLASS ON DerSchema (ANYTYPECLASS_KEY);
+CREATE INDEX I_DYNRSHP_ROLE ON DynRoleMembership (ROLE_KEY);
+CREATE INDEX I_DYNR_SR_DYNROLEMEMBERSHIP_KEY ON DynRoleMembership_User (dynRoleMembership_key);
+CREATE INDEX I_DYNR_SR_ELEMENT ON DynRoleMembership_User (user_key);
+CREATE INDEX I_XTRNSRC_ACCOUNTPOLICY ON ExternalResource (ACCOUNTPOLICY_KEY);
+CREATE INDEX I_XTRNSRC_CONNECTOR ON ExternalResource (CONNECTOR_KEY);
+CREATE INDEX I_XTRNSRC_PASSWORDPOLICY ON ExternalResource (PASSWORDPOLICY_KEY);
+CREATE INDEX I_XTRNSRC_PULLPOLICY ON ExternalResource (PULLPOLICY_KEY);
+CREATE INDEX I_XTRNRRD_RESOURCE_KEY ON ExternalResource_capOverride (resource_key);
+CREATE INDEX I_XTRNTNS_RESOURCE_KEY ON ExternalResource_PropActions (resource_key);
+CREATE INDEX I_GPLNTTR_OWNER ON GPlainAttr (OWNER_KEY);
+CREATE INDEX I_GPLNTTR_SCHEMA ON GPlainAttr (schema_key);
+CREATE INDEX I_GPLNQVL_ATTRIBUTE ON GPlainAttrUniqueValue (ATTRIBUTE_KEY);
+CREATE INDEX I_GPLNQVL_SCHEMA ON GPlainAttrUniqueValue (schema_key);
+CREATE INDEX I_GPLNRVL_ATTRIBUTE ON GPlainAttrValue (ATTRIBUTE_KEY);
+CREATE INDEX I_MAPPING_PROVISION ON Mapping (PROVISION_KEY);
+CREATE INDEX I_MPPNGTM_MAPPING ON MappingItem (MAPPING_KEY);
+CREATE INDEX I_MPPNRMR_MAPPINGITEM_KEY ON MappingItem_Transformer (mappingItem_key);
+CREATE INDEX I_NTFCTON_TEMPLATE ON Notification (template_key);
+CREATE INDEX I_NTFCNTS_NOTIFICATIONTASK_KEY ON NotificationTask_recipients (notificationTask_key);
+CREATE INDEX I_NTFCNTS_NOTIFICATION_KEY ON Notification_events (notification_key);
+CREATE INDEX I_NTFCNTS_NOTIFICATION_KEY1 ON Notification_staticRecipients (notification_key);
+CREATE INDEX I_PSSWTNC_PASSWORDPOLICY ON PasswordRuleConfInstance (PASSWORDPOLICY_KEY);
+CREATE INDEX I_PLNSCHM_ANYTYPECLASS ON PlainSchema (ANYTYPECLASS_KEY);
+CREATE INDEX I_PROVSON_ANYTYPE ON Provision (ANYTYPE_KEY);
+CREATE INDEX I_PROVSON_RESOURCE ON Provision (RESOURCE_KEY);
+CREATE INDEX I_PRVSLSS_ELEMENT ON Provision_AnyTypeClass (anyTypeClass_key);
+CREATE INDEX I_PRVSLSS_PROVISION_KEY ON Provision_AnyTypeClass (provision_key);
+CREATE INDEX I_PLLTNMS_PULLTASK_KEY ON PullTask_actionsClassNames (pullTask_key);
+CREATE INDEX I_PSHTLTR_ANYTYPE ON PushTaskAnyFilter (ANYTYPE_KEY);
+CREATE INDEX I_PSHTLTR_PUSHTASK ON PushTaskAnyFilter (PUSHTASK_KEY);
+CREATE INDEX I_PSHTNMS_PUSHTASK_KEY ON PushTask_actionsClassNames (pushTask_key);
+CREATE INDEX I_REALM_ACCOUNTPOLICY ON Realm (ACCOUNTPOLICY_KEY);
+CREATE INDEX I_REALM_PARENT ON Realm (PARENT_KEY);
+CREATE INDEX I_REALM_PASSWORDPOLICY ON Realm (PASSWORDPOLICY_KEY);
+CREATE INDEX I_RLM_NMS_REALM_KEY ON Realm_actionsClassNames (realm_key);
+CREATE INDEX I_REPORT_TEMPLATE ON Report (template_key);
+CREATE INDEX I_RPORTXC_REPORT ON ReportExec (REPORT_KEY);
+CREATE INDEX I_RPRTTNC_REPORT ON ReportletConfInstance (REPORT_KEY);
+CREATE INDEX I_SYNCGRP_GROUPOWNER ON SyncopeGroup (GROUPOWNER_KEY);
+CREATE INDEX I_SYNCGRP_REALM ON SyncopeGroup (REALM_KEY);
+CREATE INDEX I_SYNCGRP_USEROWNER ON SyncopeGroup (USEROWNER_KEY);
+CREATE INDEX I_SYNCLSS_ELEMENT ON SyncopeGroup_AnyTypeClass (anyTypeClass_key);
+CREATE INDEX I_SYNCLSS_GROUP_KEY ON SyncopeGroup_AnyTypeClass (group_key);
+CREATE INDEX I_SYNCSRC_ELEMENT ON SyncopeGroup_ExternalResource (resource_key);
+CREATE INDEX I_SYNCSRC_GROUP_KEY ON SyncopeGroup_ExternalResource (group_key);
+CREATE INDEX I_SYNCNTS_ROLE_KEY ON SyncopeRole_entitlements (role_key);
+CREATE INDEX I_SYNCRLM_ELEMENT ON SyncopeRole_Realm (realm_key);
+CREATE INDEX I_SYNCRLM_ROLE_KEY ON SyncopeRole_Realm (role_key);
+CREATE INDEX I_SYNCPSR_REALM ON SyncopeUser (REALM_KEY);
+CREATE INDEX I_SYNCPSR_SECURITYQUESTION ON SyncopeUser (SECURITYQUESTION_KEY);
+CREATE INDEX I_SYNCLSS_ELEMENT1 ON SyncopeUser_AnyTypeClass (anyTypeClass_key);
+CREATE INDEX I_SYNCLSS_USER_KEY ON SyncopeUser_AnyTypeClass (user_key);
+CREATE INDEX I_SYNCSRC_ELEMENT1 ON SyncopeUser_ExternalResource (resource_key);
+CREATE INDEX I_SYNCSRC_USER_KEY ON SyncopeUser_ExternalResource (user_key);
+CREATE INDEX I_SYNCTRY_USER_KEY ON SyncopeUser_passwordHistory (user_key);
+CREATE INDEX I_SYNCPRL_ELEMENT ON SyncopeUser_SyncopeRole (role_key);
+CREATE INDEX I_SYNCPRL_USER_KEY ON SyncopeUser_SyncopeRole (user_key);
+CREATE INDEX I_TASK_DESTINATIONREALM ON Task (DESTINATIONREALM_KEY);
 CREATE INDEX I_TASK_DTYPE ON Task (DTYPE);
-CREATE INDEX I_TASK_RESOURCE ON Task (RESOURCE_NAME);
-CREATE INDEX I_TSKEXEC_TASK ON TaskExec (TASK_ID);
-CREATE INDEX I_TYPXNSN_ANYTYPE ON TypeExtension (ANYTYPE_NAME);
-CREATE INDEX I_TYPXNSN_GROUP ON TypeExtension (GROUP_ID);
-CREATE INDEX I_TYPXLSS_ELEMENT ON TypeExtension_AnyTypeClass (anyTypeClass_name);
-CREATE INDEX I_TYPXLSS_TYPEEXTENSION_ID ON TypeExtension_AnyTypeClass (typeExtension_id);
-CREATE INDEX I_DYNGSHP_GROUP1 ON UDynGroupMembership (GROUP_ID);
-CREATE INDEX I_DYNG_SR_ELEMENT ON UDynGroupMembership_User (user_id);
-CREATE INDEX I_DYNG_SR_UDYNGROUPMEMBERSHIP_ID ON UDynGroupMembership_User (uDynGroupMembership_id);
-CREATE INDEX I_MMBRSHP_LEFTEND ON UMembership (user_id);
-CREATE INDEX I_MMBRSHP_RIGHTEND ON UMembership (group_id);
-CREATE INDEX I_UPLNTTR_OWNER ON UPlainAttr (OWNER_ID);
-CREATE INDEX I_UPLNTTR_SCHEMA ON UPlainAttr (schema_name);
-CREATE INDEX I_PLNTQVL_ATTRIBUTE ON UPlainAttrUniqueValue (ATTRIBUTE_ID);
-CREATE INDEX I_PLNTQVL_SCHEMA ON UPlainAttrUniqueValue (schema_name);
-CREATE INDEX I_PLNTRVL_ATTRIBUTE ON UPlainAttrValue (ATTRIBUTE_ID);
-CREATE INDEX I_RLTNSHP_LEFTEND ON URelationship (user_id);
-CREATE INDEX I_RLTNSHP_RIGHTEND ON URelationship (anyObject_id);
-CREATE INDEX I_RLTNSHP_TYPE ON URelationship (TYPE_NAME);
-CREATE INDEX I_VIRSCHM_ANYTYPECLASS ON VirSchema (ANYTYPECLASS_NAME);
-CREATE INDEX I_VIRSCHM_PROVISION ON VirSchema (PROVISION_ID);
+CREATE INDEX I_TASK_NOTIFICATION ON Task (NOTIFICATION_KEY);
+CREATE INDEX I_TASK_RESOURCE ON Task (RESOURCE_KEY);
+CREATE INDEX I_TSKEXEC_TASK ON TaskExec (TASK_KEY);
+CREATE INDEX I_TYPXNSN_ANYTYPE ON TypeExtension (ANYTYPE_KEY);
+CREATE INDEX I_TYPXNSN_GROUP ON TypeExtension (GROUP_KEY);
+CREATE INDEX I_TYPXLSS_ELEMENT ON TypeExtension_AnyTypeClass (anyTypeClass_key);
+CREATE INDEX I_TYPXLSS_TYPEEXTENSION_KEY ON TypeExtension_AnyTypeClass (typeExtension_key);
+CREATE INDEX I_DYNGSHP_GROUP1 ON UDynGroupMembership (GROUP_KEY);
+CREATE INDEX I_DYNG_SR_ELEMENT ON UDynGroupMembership_User (user_key);
+CREATE INDEX I_DYNG_SR_UDYNGROUPMEMBERSHIP_KEY ON UDynGroupMembership_User (uDynGroupMembership_key);
+CREATE INDEX I_MMBRSHP_LEFTEND ON UMembership (user_key);
+CREATE INDEX I_MMBRSHP_RIGHTEND ON UMembership (group_key);
+CREATE INDEX I_UPLNTTR_OWNER ON UPlainAttr (OWNER_KEY);
+CREATE INDEX I_UPLNTTR_SCHEMA ON UPlainAttr (schema_key);
+CREATE INDEX I_PLNTQVL_ATTRIBUTE ON UPlainAttrUniqueValue (ATTRIBUTE_KEY);
+CREATE INDEX I_PLNTQVL_SCHEMA ON UPlainAttrUniqueValue (schema_key);
+CREATE INDEX I_PLNTRVL_ATTRIBUTE ON UPlainAttrValue (ATTRIBUTE_KEY);
+CREATE INDEX I_RLTNSHP_LEFTEND ON URelationship (user_key);
+CREATE INDEX I_RLTNSHP_RIGHTEND ON URelationship (anyObject_key);
+CREATE INDEX I_RLTNSHP_TYPE ON URelationship (TYPE_KEY);
+CREATE INDEX I_VIRSCHM_ANYTYPECLASS ON VirSchema (ANYTYPECLASS_KEY);
+CREATE INDEX I_VIRSCHM_PROVISION ON VirSchema (PROVISION_KEY);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
index c420368..4655faf 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleApplication.java
@@ -91,7 +91,7 @@ public class SyncopeConsoleApplication extends AuthenticatedWebApplication {
 
     private String activitiModelerDirectory;
 
-    private Long reconciliationReportKey;
+    private String reconciliationReportKey;
 
     private SyncopeClientFactoryBean clientFactory;
 
@@ -198,7 +198,7 @@ public class SyncopeConsoleApplication extends AuthenticatedWebApplication {
         Args.notNull(activitiModelerDirectory, "<activitiModelerDirectory> not set");
 
         try {
-            reconciliationReportKey = Long.valueOf(props.getProperty("reconciliationReportKey"));
+            reconciliationReportKey = props.getProperty("reconciliationReportKey");
         } catch (NumberFormatException e) {
             LOG.error("While parsing reconciliationReportKey", e);
         }
@@ -285,7 +285,7 @@ public class SyncopeConsoleApplication extends AuthenticatedWebApplication {
         return activitiModelerDirectory;
     }
 
-    public Long getReconciliationReportKey() {
+    public String getReconciliationReportKey() {
         return reconciliationReportKey;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
index 396752a..67d1238 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
@@ -104,8 +104,7 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
         domains = new ArrayList<>();
         domains.add(SyncopeConstants.MASTER_DOMAIN);
         CollectionUtils.collect(anonymousClient.getService(DomainService.class).list(),
-                EntityTOUtils.<String, DomainTO>keyTransformer(),
-                domains);
+                EntityTOUtils.<DomainTO>keyTransformer(), domains);
     }
 
     public void execute(final Runnable command) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/bulk/BulkContent.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/bulk/BulkContent.java b/client/console/src/main/java/org/apache/syncope/client/console/bulk/BulkContent.java
index caf5dce..5110119 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/bulk/BulkContent.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/bulk/BulkContent.java
@@ -143,15 +143,15 @@ public class BulkContent<T extends Serializable, S> extends MultilevelPanel.Seco
                                 throw new IllegalArgumentException("Invalid bulk action executor");
                             }
 
-                            final AbstractAnyRestClient<?> anyRestClient
-                                    = AbstractAnyRestClient.class.cast(bulkActionExecutor);
+                            final AbstractAnyRestClient<?> anyRestClient =
+                                    AbstractAnyRestClient.class.cast(bulkActionExecutor);
 
                             if (items.isEmpty() || !(items.iterator().next() instanceof StatusBean)) {
                                 throw new IllegalArgumentException("Invalid items");
                             }
 
                             // Group bean information by anyKey
-                            final Map<Long, List<StatusBean>> beans = new HashMap<>();
+                            final Map<String, List<StatusBean>> beans = new HashMap<>();
                             for (T bean : items) {
                                 final StatusBean sb = StatusBean.class.cast(bean);
                                 final List<StatusBean> sblist;
@@ -164,7 +164,7 @@ public class BulkContent<T extends Serializable, S> extends MultilevelPanel.Seco
                                 sblist.add(sb);
                             }
 
-                            for (Map.Entry<Long, List<StatusBean>> entry : beans.entrySet()) {
+                            for (Map.Entry<String, List<StatusBean>> entry : beans.entrySet()) {
                                 final String etag = anyRestClient.read(entry.getKey()).getETagValue();
                                 try {
                                     switch (ResourceDeassociationAction.valueOf(actionToBeAddresed.name())) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/commons/RoleDataProvider.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/RoleDataProvider.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/RoleDataProvider.java
index 2285b08..e2b1582 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/RoleDataProvider.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/RoleDataProvider.java
@@ -41,9 +41,9 @@ public class RoleDataProvider extends DirectoryDataProvider<RoleTO> {
 
     @Override
     public Iterator<RoleTO> iterator(final long first, final long count) {
-        final List<RoleTO> result = restClient.list();
+        List<RoleTO> result = restClient.list();
         Collections.sort(result, comparator);
-        return result.iterator();
+        return result.subList((int) first, (int) first + (int) count).iterator();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/commons/SortableAnyProviderComparator.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/SortableAnyProviderComparator.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/SortableAnyProviderComparator.java
index 668b333..52087f7 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/SortableAnyProviderComparator.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/SortableAnyProviderComparator.java
@@ -34,7 +34,7 @@ public class SortableAnyProviderComparator<T extends AnyTO> extends SortableData
     private static final long serialVersionUID = 1775967163571699258L;
 
     private static final Set<String> INLINE_PROPS = new HashSet<>(Arrays.asList(
-            new String[] { "key", "status", "token", "username" }));
+            new String[] { "key", "status", "token", "username", "name" }));
 
     public SortableAnyProviderComparator(final SortableDataProvider<T, String> provider) {
         super(provider);
@@ -54,7 +54,7 @@ public class SortableAnyProviderComparator<T extends AnyTO> extends SortableData
 
         private static final long serialVersionUID = -7856686374020091808L;
 
-        private final Map<String, AttrTO> attrs;
+        private final Map<String, AttrTO> plainAttrs;
 
         private final Map<String, AttrTO> derAttrs;
 
@@ -63,7 +63,7 @@ public class SortableAnyProviderComparator<T extends AnyTO> extends SortableData
         AttrModel(final AnyTO anyTO) {
             super();
 
-            this.attrs = anyTO.getPlainAttrMap();
+            this.plainAttrs = anyTO.getPlainAttrMap();
             this.derAttrs = anyTO.getDerAttrMap();
             this.virAttrs = anyTO.getVirAttrMap();
         }
@@ -91,12 +91,12 @@ public class SortableAnyProviderComparator<T extends AnyTO> extends SortableData
 
             final AttrTO attr;
             if (schemaType == null) {
-                attr = this.attrs.get(schema);
+                attr = this.plainAttrs.get(schema);
             } else {
                 switch (schemaType) {
                     case PLAIN:
                     default:
-                        attr = this.attrs.get(schema);
+                        attr = this.plainAttrs.get(schema);
                         break;
 
                     case DERIVED:

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java
index 3a317b8..3f1afd1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java
@@ -31,7 +31,7 @@ public class StatusBean implements Serializable {
 
     private static final long serialVersionUID = -5207260204921071129L;
 
-    private final Long anyKey;
+    private final String anyKey;
 
     private final String anyName;
 
@@ -71,7 +71,7 @@ public class StatusBean implements Serializable {
         this.status = status;
     }
 
-    public Long getAnyKey() {
+    public String getAnyKey() {
         return anyKey;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
index 86be57d..566d2b8 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
@@ -94,8 +94,7 @@ public class MailTemplateDirectoryPanel
 
     @Override
     protected List<IColumn<MailTemplateTO, String>> getColumns() {
-
-        final List<IColumn<MailTemplateTO, String>> columns = new ArrayList<IColumn<MailTemplateTO, String>>();
+        List<IColumn<MailTemplateTO, String>> columns = new ArrayList<>();
         columns.add(new PropertyColumn<MailTemplateTO, String>(
                 new StringResourceModel("key", this, null), "key", "key"));
 
@@ -115,8 +114,8 @@ public class MailTemplateDirectoryPanel
 
                     @Override
                     public void onClick(final AjaxRequestTarget target, final MailTemplateTO ignore) {
-                        MailTemplateContentModal.MailTemplateContentTO content
-                                = new MailTemplateContentModal.MailTemplateContentTO(
+                        MailTemplateContentModal.MailTemplateContentTO content =
+                                new MailTemplateContentModal.MailTemplateContentTO(
                                         model.getObject().getKey(), MailTemplateFormat.HTML);
                         content.setContent(
                                 restClient.readTemplateFormat(model.getObject().getKey(), MailTemplateFormat.HTML));
@@ -134,8 +133,8 @@ public class MailTemplateDirectoryPanel
 
                     @Override
                     public void onClick(final AjaxRequestTarget target, final MailTemplateTO ignore) {
-                        MailTemplateContentModal.MailTemplateContentTO content
-                                = new MailTemplateContentModal.MailTemplateContentTO(
+                        MailTemplateContentModal.MailTemplateContentTO content =
+                                new MailTemplateContentModal.MailTemplateContentTO(
                                         model.getObject().getKey(), MailTemplateFormat.TEXT);
                         content.setContent(
                                 restClient.readTemplateFormat(model.getObject().getKey(), MailTemplateFormat.TEXT));
@@ -196,7 +195,7 @@ public class MailTemplateDirectoryPanel
         public MailTemplateProvider(final int paginatorRows) {
             super(paginatorRows);
             setSort("key", SortOrder.ASCENDING);
-            comparator = new SortableDataProviderComparator<MailTemplateTO>(this);
+            comparator = new SortableDataProviderComparator<>(this);
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
index a7aab9d..195c5ff 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
@@ -35,6 +35,7 @@ import org.apache.syncope.client.console.panels.DirectoryPanel;
 import org.apache.syncope.client.console.rest.NotificationRestClient;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.CollectionPropertyColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
@@ -83,8 +84,8 @@ public class NotificationDirectoryPanel
     @Override
     protected List<IColumn<NotificationTO, String>> getColumns() {
 
-        final List<IColumn<NotificationTO, String>> columns = new ArrayList<IColumn<NotificationTO, String>>();
-        columns.add(new PropertyColumn<NotificationTO, String>(
+        List<IColumn<NotificationTO, String>> columns = new ArrayList<>();
+        columns.add(new KeyPropertyColumn<NotificationTO>(
                 new StringResourceModel("key", this, null), "key", "key"));
         columns.add(new CollectionPropertyColumn<NotificationTO>(
                 new StringResourceModel("events", this, null), "events", "events"));
@@ -181,7 +182,7 @@ public class NotificationDirectoryPanel
         public NotificationProvider(final int paginatorRows) {
             super(paginatorRows);
             setSort("key", SortOrder.ASCENDING);
-            comparator = new SortableDataProviderComparator<NotificationTO>(this);
+            comparator = new SortableDataProviderComparator<>(this);
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationHandler.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationHandler.java b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationHandler.java
index 28f4f26..b089631 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationHandler.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationHandler.java
@@ -45,7 +45,7 @@ public class NotificationHandler implements Serializable {
         this.notificationTO = notificationTO;
     }
 
-    public final Long getKey() {
+    public final String getKey() {
         return this.notificationTO.getKey();
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationTasks.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationTasks.java b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationTasks.java
index b0f21f5..4d24824 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationTasks.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationTasks.java
@@ -40,21 +40,22 @@ public class NotificationTasks extends Panel implements ModalPanel<Serializable>
 
     public NotificationTasks(
             final AnyTypeKind anyTypeKind,
-            final Long anyTypeKey,
+            final String anyTypeKey,
             final PageReference pageReference) {
+
         this(null, anyTypeKind, anyTypeKey, pageReference);
     }
 
     public NotificationTasks(
-            final Long notification,
+            final String notification,
             final PageReference pageReference) {
         this(notification, null, null, pageReference);
     }
 
     private NotificationTasks(
-            final Long notification,
+            final String notification,
             final AnyTypeKind anyTypeKind,
-            final Long anyTypeKey,
+            final String anyTypeKey,
             final PageReference pageReference) {
         super(BaseModal.CONTENT_ID);
 


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

Posted by il...@apache.org.
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);


[23/24] syncope git commit: [SYNCOPE-156] Fixing key input for new resources

Posted by il...@apache.org.
[SYNCOPE-156] Fixing key input for new resources


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

Branch: refs/heads/master
Commit: dbfcc55188c4ecacfa087c6a5fcbfd9e3869a6d3
Parents: 36dcf65
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Apr 18 16:50:58 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Apr 19 15:01:19 2016 +0200

----------------------------------------------------------------------
 .../client/console/wizards/resources/ResourceDetailsPanel.java  | 5 ++---
 .../client/console/wizards/resources/ResourceWizardBuilder.java | 4 ++--
 .../client/console/wizards/resources/ResourceDetailsPanel.html  | 2 +-
 3 files changed, 5 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/dbfcc551/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java
index 7435a30..22ef2c4 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java
@@ -53,7 +53,6 @@ public class ResourceDetailsPanel extends WizardStep {
     };
 
     public ResourceDetailsPanel(final ResourceTO resourceTO, final boolean createFlag) {
-
         super();
         setOutputMarkupId(true);
 
@@ -63,8 +62,8 @@ public class ResourceDetailsPanel extends WizardStep {
         add(container);
 
         container.add(new AjaxTextFieldPanel(
-                "name",
-                new ResourceModel("name", "name").
+                "key",
+                new ResourceModel("key", "key").
                 getObject(),
                 new PropertyModel<String>(resourceTO, "key"),
                 false).addRequiredLabel().setEnabled(createFlag));

http://git-wip-us.apache.org/repos/asf/syncope/blob/dbfcc551/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
index e46201f..03c1fec 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
@@ -56,9 +56,9 @@ public class ResourceWizardBuilder extends AbstractResourceWizardBuilder<Resourc
     }
 
     @Override
-    public AjaxWizard<Serializable> build(final AjaxWizard.Mode mode) {
+    public AjaxWizard<Serializable> build(final String id, final AjaxWizard.Mode mode) {
         this.createFlag = mode == AjaxWizard.Mode.CREATE;
-        return super.build(mode);
+        return super.build(id, mode);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/dbfcc551/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.html
index 10b931c..5db78b8 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.html
@@ -20,7 +20,7 @@ under the License.
   <wicket:panel>
     <div wicket:id="container" class="summarize">
       <div class="form-group">
-        <span wicket:id="name">[name]</span>
+        <span wicket:id="key">[key]</span>
       </div>
 
       <div class="form-group">


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAMembership.java
index 28ee49b..2d017ba 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAMembership.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.persistence.jpa.entity.anyobject;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 import org.apache.syncope.core.persistence.api.entity.MembershipType;
@@ -28,34 +27,26 @@ import org.apache.syncope.core.persistence.api.entity.RelationshipType;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AMembership;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
 import org.apache.syncope.core.persistence.api.entity.group.Group;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
 import org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup;
 
 @Entity
 @Table(name = JPAAMembership.TABLE)
-public class JPAAMembership extends AbstractEntity<Long> implements AMembership {
+public class JPAAMembership extends AbstractGeneratedKeyEntity implements AMembership {
 
     private static final long serialVersionUID = 1503557547394601405L;
 
     public static final String TABLE = "AMembership";
 
-    @Id
-    private Long id;
-
     @ManyToOne
-    @Column(name = "anyObject_id")
+    @Column(name = "anyObject_key")
     private JPAAnyObject leftEnd;
 
     @ManyToOne
-    @Column(name = "group_id")
+    @Column(name = "group_key")
     private JPAGroup rightEnd;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public MembershipType getType() {
         return MembershipType.getInstance();
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttr.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttr.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttr.java
index d0abc91..f9a8151 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttr.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttr.java
@@ -23,7 +23,6 @@ import java.util.List;
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
@@ -45,9 +44,6 @@ public class JPAAPlainAttr extends AbstractPlainAttr<AnyObject> implements APlai
 
     public static final String TABLE = "APlainAttr";
 
-    @Id
-    private Long id;
-
     @ManyToOne(fetch = FetchType.EAGER)
     private JPAAnyObject owner;
 
@@ -60,11 +56,6 @@ public class JPAAPlainAttr extends AbstractPlainAttr<AnyObject> implements APlai
     private JPAAPlainAttrUniqueValue uniqueValue;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public AnyObject getOwner() {
         return owner;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttrUniqueValue.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttrUniqueValue.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttrUniqueValue.java
index 01be6a8..af4d8da 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttrUniqueValue.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttrUniqueValue.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity.anyobject;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToOne;
@@ -39,22 +38,14 @@ public class JPAAPlainAttrUniqueValue extends AbstractPlainAttrValue implements
 
     public static final String TABLE = "APlainAttrUniqueValue";
 
-    @Id
-    private Long id;
-
     @OneToOne(optional = false)
     private JPAAPlainAttr attribute;
 
     @ManyToOne(optional = false)
-    @JoinColumn(name = "schema_name")
+    @JoinColumn(name = "schema_key")
     private JPAPlainSchema schema;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public APlainAttr getAttr() {
         return attribute;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttrValue.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttrValue.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttrValue.java
index 0c9e598..d7048fa 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttrValue.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttrValue.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity.anyobject;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
 import javax.persistence.ManyToOne;
@@ -39,19 +38,11 @@ public class JPAAPlainAttrValue extends AbstractPlainAttrValue implements APlain
 
     public static final String TABLE = "APlainAttrValue";
 
-    @Id
-    private Long id;
-
     @ManyToOne
     @NotNull
     private JPAAPlainAttr attribute;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public APlainAttr getAttr() {
         return attribute;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAARelationship.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAARelationship.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAARelationship.java
index e12f8d8..49bdd5b 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAARelationship.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAARelationship.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.persistence.jpa.entity.anyobject;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 import javax.persistence.UniqueConstraint;
@@ -29,38 +28,30 @@ import org.apache.syncope.core.persistence.api.entity.MembershipType;
 import org.apache.syncope.core.persistence.api.entity.RelationshipType;
 import org.apache.syncope.core.persistence.api.entity.anyobject.ARelationship;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
 import org.apache.syncope.core.persistence.jpa.entity.JPARelationshipType;
 
 @Entity
 @Table(name = JPAARelationship.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "type_name", "left_anyObject_id", "right_anyObject_id" }))
-public class JPAARelationship extends AbstractEntity<Long> implements ARelationship {
+        @UniqueConstraint(columnNames = { "type_key", "left_anyObject_key", "right_anyObject_key" }))
+public class JPAARelationship extends AbstractGeneratedKeyEntity implements ARelationship {
 
     private static final long serialVersionUID = 6608821135023815357L;
 
     public static final String TABLE = "ARelationship";
 
-    @Id
-    private Long id;
-
     @ManyToOne(fetch = FetchType.EAGER, optional = false)
     private JPARelationshipType type;
 
     @ManyToOne
-    @Column(name = "left_anyObject_id")
+    @Column(name = "left_anyObject_key")
     private JPAAnyObject leftEnd;
 
     @ManyToOne
-    @Column(name = "right_anyObject_id")
+    @Column(name = "right_anyObject_key")
     private JPAAnyObject rightEnd;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public RelationshipType getType() {
         return type;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAnyObject.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAnyObject.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAnyObject.java
index 304956e..deb19d9 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAnyObject.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAnyObject.java
@@ -25,7 +25,6 @@ import javax.persistence.Cacheable;
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.JoinTable;
 import javax.persistence.ManyToMany;
@@ -58,9 +57,6 @@ public class JPAAnyObject extends AbstractAny<APlainAttr> implements AnyObject {
 
     public static final String TABLE = "AnyObject";
 
-    @Id
-    private Long id;
-
     @NotNull
     @ManyToOne(fetch = FetchType.EAGER, optional = false)
     private JPAAnyType type;
@@ -71,16 +67,16 @@ public class JPAAnyObject extends AbstractAny<APlainAttr> implements AnyObject {
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "anyObject_id"),
+            @JoinColumn(name = "anyObject_key"),
             inverseJoinColumns =
-            @JoinColumn(name = "resource_name"))
+            @JoinColumn(name = "resource_key"))
     private List<JPAExternalResource> resources = new ArrayList<>();
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "anyObject_id"),
+            @JoinColumn(name = "anyObject_key"),
             inverseJoinColumns =
-            @JoinColumn(name = "anyTypeClass_name"))
+            @JoinColumn(name = "anyTypeClass_key"))
     private List<JPAAnyTypeClass> auxClasses = new ArrayList<>();
 
     @OneToMany(cascade = CascadeType.ALL, mappedBy = "leftEnd")
@@ -92,11 +88,6 @@ public class JPAAnyObject extends AbstractAny<APlainAttr> implements AnyObject {
     private List<JPAAMembership> memberships = new ArrayList<>();
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public AnyType getType() {
         return type;
     }
@@ -141,7 +132,7 @@ public class JPAAnyObject extends AbstractAny<APlainAttr> implements AnyObject {
     }
 
     @Override
-    public ARelationship getRelationship(final RelationshipType relationshipType, final Long anyObjectKey) {
+    public ARelationship getRelationship(final RelationshipType relationshipType, final String anyObjectKey) {
         return IterableUtils.find(getRelationships(), new Predicate<ARelationship>() {
 
             @Override
@@ -165,7 +156,7 @@ public class JPAAnyObject extends AbstractAny<APlainAttr> implements AnyObject {
     }
 
     @Override
-    public Collection<? extends ARelationship> getRelationships(final Long anyObjectKey) {
+    public Collection<? extends ARelationship> getRelationships(final String anyObjectKey) {
         return CollectionUtils.select(getRelationships(), new Predicate<ARelationship>() {
 
             @Override
@@ -187,7 +178,7 @@ public class JPAAnyObject extends AbstractAny<APlainAttr> implements AnyObject {
     }
 
     @Override
-    public AMembership getMembership(final Long groupKey) {
+    public AMembership getMembership(final String groupKey) {
         return IterableUtils.find(getMemberships(), new Predicate<AMembership>() {
 
             @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttr.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttr.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttr.java
index 270fa8b..cce0b5b 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttr.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttr.java
@@ -23,7 +23,6 @@ import java.util.List;
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
@@ -51,12 +50,6 @@ public class JPACPlainAttr extends AbstractPlainAttr<Conf> implements CPlainAttr
     public static final String TABLE = "CPlainAttr";
 
     /**
-     * Auto-generated id for this table.
-     */
-    @Id
-    private Long id;
-
-    /**
      * The owner of this attribute.
      */
     @ManyToOne(fetch = FetchType.EAGER)
@@ -77,11 +70,6 @@ public class JPACPlainAttr extends AbstractPlainAttr<Conf> implements CPlainAttr
     private JPACPlainAttrUniqueValue uniqueValue;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public Conf getOwner() {
         return owner;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttrUniqueValue.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttrUniqueValue.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttrUniqueValue.java
index fea5af4..26e7de4 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttrUniqueValue.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttrUniqueValue.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity.conf;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToOne;
@@ -39,22 +38,14 @@ public class JPACPlainAttrUniqueValue extends AbstractPlainAttrValue implements
 
     public static final String TABLE = "CPlainAttrUniqueValue";
 
-    @Id
-    private Long id;
-
     @OneToOne(optional = false)
     private JPACPlainAttr attribute;
 
     @ManyToOne(optional = false)
-    @JoinColumn(name = "schema_name")
+    @JoinColumn(name = "schema_key")
     private JPAPlainSchema schema;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public CPlainAttr getAttr() {
         return attribute;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttrValue.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttrValue.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttrValue.java
index 5b7d2b3..ac72983 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttrValue.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttrValue.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity.conf;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
 import javax.persistence.ManyToOne;
@@ -39,19 +38,11 @@ public class JPACPlainAttrValue extends AbstractPlainAttrValue implements CPlain
 
     public static final String TABLE = "CPlainAttrValue";
 
-    @Id
-    private Long id;
-
     @ManyToOne
     @NotNull
     private JPACPlainAttr attribute;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public CPlainAttr getAttr() {
         return attribute;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAConf.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAConf.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAConf.java
index 7347fbb..1ceaaa7 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAConf.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPAConf.java
@@ -20,11 +20,11 @@ package org.apache.syncope.core.persistence.jpa.entity.conf;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 import javax.persistence.Cacheable;
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
 import javax.validation.Valid;
@@ -36,35 +36,22 @@ import org.apache.syncope.core.persistence.api.entity.Realm;
 import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttr;
 import org.apache.syncope.core.persistence.api.entity.conf.Conf;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractAnnotatedEntity;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractProvidedKeyEntity;
 
 @Entity
 @Table(name = JPAConf.TABLE)
 @Cacheable
-public class JPAConf extends AbstractAnnotatedEntity<Long> implements Conf {
+public class JPAConf extends AbstractProvidedKeyEntity implements Conf {
 
     private static final long serialVersionUID = 7671699609879382195L;
 
     public static final String TABLE = "SyncopeConf";
 
-    @Id
-    private Long id;
-
     @OneToMany(cascade = CascadeType.ALL, mappedBy = "owner")
     @Valid
     private List<JPACPlainAttr> plainAttrs = new ArrayList<>();
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
-    public void setKey(final Long key) {
-        this.id = key;
-    }
-
-    @Override
     public boolean add(final CPlainAttr attr) {
         checkType(attr, JPACPlainAttr.class);
         return plainAttrs.add((JPACPlainAttr) attr);
@@ -151,4 +138,44 @@ public class JPAConf extends AbstractAnnotatedEntity<Long> implements Conf {
     public void setType(final AnyType type) {
         // nothing to do
     }
+
+    @Override
+    public Date getCreationDate() {
+        return null;
+    }
+
+    @Override
+    public void setCreationDate(final Date creationDate) {
+        // nothing to do
+    }
+
+    @Override
+    public String getCreator() {
+        return null;
+    }
+
+    @Override
+    public void setCreator(final String creator) {
+        // nothing to do
+    }
+
+    @Override
+
+    public Date getLastChangeDate() {
+        return null;
+    }
+
+    @Override
+    public void setLastChangeDate(final Date lastChangeDate) {
+        // nothing to do
+    }
+
+    @Override
+    public String getLastModifier() {
+        return null;
+    }
+
+    @Override
+    public void setLastModifier(final String lastModifier) {
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttr.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttr.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttr.java
index 1090351..644fa27 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttr.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttr.java
@@ -23,7 +23,6 @@ import java.util.List;
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
@@ -45,9 +44,6 @@ public class JPAGPlainAttr extends AbstractPlainAttr<Group> implements GPlainAtt
 
     public static final String TABLE = "GPlainAttr";
 
-    @Id
-    private Long id;
-
     @ManyToOne(fetch = FetchType.EAGER)
     private JPAGroup owner;
 
@@ -60,11 +56,6 @@ public class JPAGPlainAttr extends AbstractPlainAttr<Group> implements GPlainAtt
     private JPAGPlainAttrUniqueValue uniqueValue;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public Group getOwner() {
         return owner;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttrUniqueValue.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttrUniqueValue.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttrUniqueValue.java
index a5c1b90..49ab347 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttrUniqueValue.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttrUniqueValue.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity.group;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToOne;
@@ -39,22 +38,14 @@ public class JPAGPlainAttrUniqueValue extends AbstractPlainAttrValue implements
 
     public static final String TABLE = "GPlainAttrUniqueValue";
 
-    @Id
-    private Long id;
-
     @OneToOne(optional = false)
     private JPAGPlainAttr attribute;
 
     @ManyToOne(optional = false)
-    @JoinColumn(name = "schema_name")
+    @JoinColumn(name = "schema_key")
     private JPAPlainSchema schema;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public GPlainAttr getAttr() {
         return attribute;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttrValue.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttrValue.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttrValue.java
index e5d0830..8c9f383 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttrValue.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttrValue.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity.group;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
 import javax.persistence.ManyToOne;
@@ -39,19 +38,11 @@ public class JPAGPlainAttrValue extends AbstractPlainAttrValue implements GPlain
 
     public static final String TABLE = "GPlainAttrValue";
 
-    @Id
-    private Long id;
-
     @ManyToOne
     @NotNull
     private JPAGPlainAttr attribute;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public GPlainAttr getAttr() {
         return attribute;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGroup.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGroup.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGroup.java
index e1fcbdd..f8acfc7 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGroup.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGroup.java
@@ -25,7 +25,6 @@ import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.JoinTable;
 import javax.persistence.ManyToMany;
@@ -65,9 +64,6 @@ public class JPAGroup extends AbstractAny<GPlainAttr> implements Group {
 
     public static final String TABLE = "SyncopeGroup";
 
-    @Id
-    private Long id;
-
     @Column(unique = true)
     @NotNull
     private String name;
@@ -84,17 +80,17 @@ public class JPAGroup extends AbstractAny<GPlainAttr> implements Group {
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "group_id"),
+            @JoinColumn(name = "group_key"),
             inverseJoinColumns =
-            @JoinColumn(name = "resource_name"))
+            @JoinColumn(name = "resource_key"))
     @Valid
     private List<JPAExternalResource> resources = new ArrayList<>();
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "group_id"),
+            @JoinColumn(name = "group_key"),
             inverseJoinColumns =
-            @JoinColumn(name = "anyTypeClass_name"))
+            @JoinColumn(name = "anyTypeClass_key"))
     private List<JPAAnyTypeClass> auxClasses = new ArrayList<>();
 
     @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "group")
@@ -108,11 +104,6 @@ public class JPAGroup extends AbstractAny<GPlainAttr> implements Group {
     private List<JPATypeExtension> typeExtensions = new ArrayList<>();
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public AnyType getType() {
         return ApplicationContextProvider.getBeanFactory().getBean(AnyTypeDAO.class).findGroup();
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPATypeExtension.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPATypeExtension.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPATypeExtension.java
index 9510c23..1d8348f 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPATypeExtension.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPATypeExtension.java
@@ -22,7 +22,6 @@ import java.util.ArrayList;
 import java.util.List;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.JoinTable;
 import javax.persistence.ManyToMany;
@@ -33,22 +32,19 @@ import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
 import org.apache.syncope.core.persistence.api.entity.group.Group;
 import org.apache.syncope.core.persistence.api.entity.group.TypeExtension;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
 import org.apache.syncope.core.persistence.jpa.entity.JPAAnyType;
 import org.apache.syncope.core.persistence.jpa.entity.JPAAnyTypeClass;
 
 @Entity
 @Table(name = JPATypeExtension.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "group_id", "anyType_name" }))
-public class JPATypeExtension extends AbstractEntity<Long> implements TypeExtension {
+        @UniqueConstraint(columnNames = { "group_key", "anyType_key" }))
+public class JPATypeExtension extends AbstractGeneratedKeyEntity implements TypeExtension {
 
     private static final long serialVersionUID = -8367626793791263551L;
 
     public static final String TABLE = "TypeExtension";
 
-    @Id
-    private Long id;
-
     @ManyToOne
     private JPAGroup group;
 
@@ -57,17 +53,12 @@ public class JPATypeExtension extends AbstractEntity<Long> implements TypeExtens
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "typeExtension_id"),
+            @JoinColumn(name = "typeExtension_key"),
             inverseJoinColumns =
-            @JoinColumn(name = "anyTypeClass_name"))
+            @JoinColumn(name = "anyTypeClass_key"))
     private List<JPAAnyTypeClass> auxClasses = new ArrayList<>();
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public Group getGroup() {
         return group;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/AbstractPolicy.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/AbstractPolicy.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/AbstractPolicy.java
index 5b72758..0d5b57c 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/AbstractPolicy.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/AbstractPolicy.java
@@ -19,31 +19,22 @@
 package org.apache.syncope.core.persistence.jpa.entity.policy;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
 import javax.validation.constraints.NotNull;
 import org.apache.syncope.core.persistence.api.entity.Policy;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
 
 @Entity
 @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
-public abstract class AbstractPolicy extends AbstractEntity<Long> implements Policy {
+public abstract class AbstractPolicy extends AbstractGeneratedKeyEntity implements Policy {
 
     private static final long serialVersionUID = -5844833125843247458L;
 
-    @Id
-    private Long id;
-
     @NotNull
     private String description;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public String getDescription() {
         return description;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAAccountPolicy.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAAccountPolicy.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAAccountPolicy.java
index f65adb4..237330b 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAAccountPolicy.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAAccountPolicy.java
@@ -64,9 +64,9 @@ public class JPAAccountPolicy extends AbstractPolicy implements AccountPolicy {
      */
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "accountPolicy_id"),
+            @JoinColumn(name = "accountPolicy_key"),
             inverseJoinColumns =
-            @JoinColumn(name = "resource_name"))
+            @JoinColumn(name = "resource_key"))
     private Set<JPAExternalResource> resources = new HashSet<>();
 
     @Override
@@ -132,6 +132,6 @@ public class JPAAccountPolicy extends AbstractPolicy implements AccountPolicy {
     @Override
     public Set<String> getResourceNames() {
         return CollectionUtils.collect(
-                getResources(), EntityUtils.<String, ExternalResource>keyTransformer(), new HashSet<String>());
+                getResources(), EntityUtils.<ExternalResource>keyTransformer(), new HashSet<String>());
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAAccountRuleConfInstance.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAAccountRuleConfInstance.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAAccountRuleConfInstance.java
index d19c06e..7272c6e 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAAccountRuleConfInstance.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAAccountRuleConfInstance.java
@@ -19,37 +19,28 @@
 package org.apache.syncope.core.persistence.jpa.entity.policy;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 import org.apache.syncope.common.lib.policy.AccountRuleConf;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
 import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
 
 @Entity
 @Table(name = JPAAccountRuleConfInstance.TABLE)
-public class JPAAccountRuleConfInstance extends AbstractEntity<Long> {
+public class JPAAccountRuleConfInstance extends AbstractGeneratedKeyEntity {
 
     private static final long serialVersionUID = -2436055132955674610L;
 
     public static final String TABLE = "AccountRuleConfInstance";
 
-    @Id
-    private Long id;
-
     @Lob
     private String serializedInstance;
 
     @ManyToOne
     private JPAAccountPolicy accountPolicy;
 
-    @Override
-    public Long getKey() {
-        return id;
-    }
-
     public AccountPolicy getAccountPolicy() {
         return accountPolicy;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAPasswordRuleConfInstance.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAPasswordRuleConfInstance.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAPasswordRuleConfInstance.java
index dcc543a..788496f 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAPasswordRuleConfInstance.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAPasswordRuleConfInstance.java
@@ -19,37 +19,28 @@
 package org.apache.syncope.core.persistence.jpa.entity.policy;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 import org.apache.syncope.common.lib.policy.PasswordRuleConf;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
 import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
 
 @Entity
 @Table(name = JPAPasswordRuleConfInstance.TABLE)
-public class JPAPasswordRuleConfInstance extends AbstractEntity<Long> {
+public class JPAPasswordRuleConfInstance extends AbstractGeneratedKeyEntity {
 
     private static final long serialVersionUID = -2436055132955674610L;
 
     public static final String TABLE = "PasswordRuleConfInstance";
 
-    @Id
-    private Long id;
-
     @Lob
     private String serializedInstance;
 
     @ManyToOne
     private JPAPasswordPolicy passwordPolicy;
 
-    @Override
-    public Long getKey() {
-        return id;
-    }
-
     public PasswordPolicy getPasswordPolicy() {
         return passwordPolicy;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/AbstractAnyTemplate.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/AbstractAnyTemplate.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/AbstractAnyTemplate.java
index ed6f581..591e9f3 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/AbstractAnyTemplate.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/AbstractAnyTemplate.java
@@ -25,12 +25,12 @@ import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
 import org.apache.syncope.core.persistence.api.entity.AnyTemplate;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
 import org.apache.syncope.core.persistence.jpa.entity.JPAAnyType;
 import org.apache.syncope.core.persistence.jpa.entity.JPAAnyUtilsFactory;
 
 @MappedSuperclass
-public abstract class AbstractAnyTemplate extends AbstractEntity<Long> implements AnyTemplate {
+public abstract class AbstractAnyTemplate extends AbstractGeneratedKeyEntity implements AnyTemplate {
 
     private static final long serialVersionUID = -5280310945358790780L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
index bc36174..f4bff24 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
@@ -31,7 +31,6 @@ import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
@@ -55,13 +54,13 @@ import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.resource.Provision;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractAnnotatedEntity;
 import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAccountPolicy;
 import org.apache.syncope.core.persistence.jpa.entity.JPAConnInstance;
 import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPasswordPolicy;
 import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPullPolicy;
-import org.identityconnectors.framework.common.objects.ObjectClass;
 import org.apache.syncope.core.persistence.api.entity.policy.PullPolicy;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractProvidedKeyEntity;
+import org.identityconnectors.framework.common.objects.ObjectClass;
 
 /**
  * Resource for propagation and pull.
@@ -69,19 +68,13 @@ import org.apache.syncope.core.persistence.api.entity.policy.PullPolicy;
 @Entity
 @Table(name = JPAExternalResource.TABLE)
 @ExternalResourceCheck
-public class JPAExternalResource extends AbstractAnnotatedEntity<String> implements ExternalResource {
+public class JPAExternalResource extends AbstractProvidedKeyEntity implements ExternalResource {
 
     private static final long serialVersionUID = -6937712883512073278L;
 
     public static final String TABLE = "ExternalResource";
 
     /**
-     * The resource identifier is the name.
-     */
-    @Id
-    private String name;
-
-    /**
      * Should this resource enforce the mandatory constraints?
      */
     @NotNull
@@ -156,7 +149,7 @@ public class JPAExternalResource extends AbstractAnnotatedEntity<String> impleme
     @Column(name = "capabilityOverride")
     @CollectionTable(name = "ExternalResource_capOverride",
             joinColumns =
-            @JoinColumn(name = "resource_name", referencedColumnName = "name"))
+            @JoinColumn(name = "resource_key", referencedColumnName = "key"))
     private Set<ConnectorCapability> capabilitiesOverride = new HashSet<>();
 
     /**
@@ -166,7 +159,7 @@ public class JPAExternalResource extends AbstractAnnotatedEntity<String> impleme
     @Column(name = "actionClassName")
     @CollectionTable(name = "ExternalResource_PropActions",
             joinColumns =
-            @JoinColumn(name = "resource_name", referencedColumnName = "name"))
+            @JoinColumn(name = "resource_key", referencedColumnName = "key"))
     private List<String> propagationActionsClassNames = new ArrayList<>();
 
     public JPAExternalResource() {
@@ -260,16 +253,6 @@ public class JPAExternalResource extends AbstractAnnotatedEntity<String> impleme
     }
 
     @Override
-    public String getKey() {
-        return name;
-    }
-
-    @Override
-    public void setKey(final String name) {
-        this.name = name;
-    }
-
-    @Override
     public TraceLevel getCreateTraceLevel() {
         return createTraceLevel;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMapping.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMapping.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMapping.java
index 63fb48d..0bd2440 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMapping.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMapping.java
@@ -24,7 +24,6 @@ import javax.persistence.Cacheable;
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
@@ -35,20 +34,17 @@ import org.apache.syncope.common.lib.types.IntMappingType;
 import org.apache.syncope.core.persistence.api.entity.resource.Mapping;
 import org.apache.syncope.core.persistence.api.entity.resource.MappingItem;
 import org.apache.syncope.core.persistence.api.entity.resource.Provision;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
 
 @Entity
 @Table(name = JPAMapping.TABLE)
 @Cacheable
-public class JPAMapping extends AbstractEntity<Long> implements Mapping {
+public class JPAMapping extends AbstractGeneratedKeyEntity implements Mapping {
 
     private static final long serialVersionUID = 4316047254916259158L;
 
     public static final String TABLE = "Mapping";
 
-    @Id
-    private Long id;
-
     @NotNull
     @OneToOne
     private JPAProvision provision;
@@ -62,11 +58,6 @@ public class JPAMapping extends AbstractEntity<Long> implements Mapping {
     private String connObjectLink;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public Provision getProvision() {
         return provision;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMappingItem.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMappingItem.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMappingItem.java
index c3ee73b..ccc53ed 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMappingItem.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMappingItem.java
@@ -29,7 +29,6 @@ import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
@@ -40,20 +39,17 @@ import org.apache.syncope.common.lib.types.IntMappingType;
 import org.apache.syncope.common.lib.types.MappingPurpose;
 import org.apache.syncope.core.persistence.api.entity.resource.Mapping;
 import org.apache.syncope.core.persistence.api.entity.resource.MappingItem;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
 
 @Entity
 @Table(name = JPAMappingItem.TABLE)
 @Cacheable
-public class JPAMappingItem extends AbstractEntity<Long> implements MappingItem {
+public class JPAMappingItem extends AbstractGeneratedKeyEntity implements MappingItem {
 
     private static final long serialVersionUID = 7383601853619332424L;
 
     public static final String TABLE = "MappingItem";
 
-    @Id
-    private Long id;
-
     @ManyToOne
     private JPAMapping mapping;
 
@@ -105,7 +101,7 @@ public class JPAMappingItem extends AbstractEntity<Long> implements MappingItem
     @Column(name = "transformerClassName")
     @CollectionTable(name = "MappingItem_Transformer",
             joinColumns =
-            @JoinColumn(name = "mappingItem_id", referencedColumnName = "id"))
+            @JoinColumn(name = "mappingItem_key", referencedColumnName = "key"))
     private List<String> mappingItemTransformerClassNames = new ArrayList<>();
 
     public JPAMappingItem() {
@@ -118,11 +114,6 @@ public class JPAMappingItem extends AbstractEntity<Long> implements MappingItem
     }
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public Mapping getMapping() {
         return mapping;
     }
@@ -161,7 +152,7 @@ public class JPAMappingItem extends AbstractEntity<Long> implements MappingItem
             case UserKey:
             case GroupKey:
             case AnyObjectKey:
-                name = "id";
+                name = "key";
                 break;
 
             case Username:

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAProvision.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAProvision.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAProvision.java
index 4ae1043..96ca9a1 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAProvision.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAProvision.java
@@ -23,7 +23,6 @@ import java.util.List;
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.JoinTable;
 import javax.persistence.Lob;
@@ -39,7 +38,7 @@ import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.resource.Mapping;
 import org.apache.syncope.core.persistence.api.entity.resource.Provision;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
 import org.apache.syncope.core.persistence.jpa.entity.JPAAnyType;
 import org.apache.syncope.core.persistence.jpa.entity.JPAAnyTypeClass;
 import org.identityconnectors.framework.common.objects.ObjectClass;
@@ -47,16 +46,13 @@ import org.identityconnectors.framework.common.objects.SyncToken;
 
 @Entity
 @Table(name = JPAProvision.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "resource_name", "anyType_name" }))
-public class JPAProvision extends AbstractEntity<Long> implements Provision {
+        @UniqueConstraint(columnNames = { "resource_key", "anyType_key" }))
+public class JPAProvision extends AbstractGeneratedKeyEntity implements Provision {
 
     private static final long serialVersionUID = -1807889487945989443L;
 
     public static final String TABLE = "Provision";
 
-    @Id
-    private Long id;
-
     @ManyToOne
     private JPAExternalResource resource;
 
@@ -68,9 +64,9 @@ public class JPAProvision extends AbstractEntity<Long> implements Provision {
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "provision_id"),
+            @JoinColumn(name = "provision_key"),
             inverseJoinColumns =
-            @JoinColumn(name = "anyTypeClass_name"))
+            @JoinColumn(name = "anyTypeClass_key"))
     private List<JPAAnyTypeClass> auxClasses = new ArrayList<>();
 
     @Lob
@@ -80,11 +76,6 @@ public class JPAProvision extends AbstractEntity<Long> implements Provision {
     private JPAMapping mapping;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public ExternalResource getResource() {
         return resource;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/AbstractTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/AbstractTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/AbstractTask.java
index 403ee77..e2cd682 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/AbstractTask.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/AbstractTask.java
@@ -20,41 +20,31 @@ package org.apache.syncope.core.persistence.jpa.entity.task;
 
 import java.util.ArrayList;
 import java.util.List;
-
 import javax.persistence.CascadeType;
 import javax.persistence.DiscriminatorColumn;
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
 import org.apache.syncope.core.persistence.api.entity.task.Task;
 import org.apache.syncope.core.persistence.api.entity.task.TaskExec;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
 
 @Entity
 @Table(name = AbstractTask.TABLE)
 @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
 @DiscriminatorColumn(name = "DTYPE")
-public abstract class AbstractTask extends AbstractEntity<Long> implements Task {
+public abstract class AbstractTask extends AbstractGeneratedKeyEntity implements Task {
 
     private static final long serialVersionUID = 5837401178128177511L;
 
     public static final String TABLE = "Task";
 
-    @Id
-    private Long id;
-
     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "task")
     private List<JPATaskExec> executions = new ArrayList<>();
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public boolean add(final TaskExec exec) {
         checkType(exec, JPATaskExec.class);
         return exec != null && !executions.contains((JPATaskExec) exec) && executions.add((JPATaskExec) exec);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAAnyTemplatePullTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAAnyTemplatePullTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAAnyTemplatePullTask.java
index 66e37ff..ce52e9a 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAAnyTemplatePullTask.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAAnyTemplatePullTask.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity.task;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 import javax.persistence.UniqueConstraint;
@@ -29,25 +28,17 @@ import org.apache.syncope.core.persistence.api.entity.task.AnyTemplatePullTask;
 
 @Entity
 @Table(name = JPAAnyTemplatePullTask.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "pullTask_id", "anyType_name" }))
+        @UniqueConstraint(columnNames = { "pullTask_key", "anyType_key" }))
 public class JPAAnyTemplatePullTask extends AbstractAnyTemplate implements AnyTemplatePullTask {
 
     private static final long serialVersionUID = 3517381731849788407L;
 
     public static final String TABLE = "AnyTemplatePullTask";
 
-    @Id
-    private Long id;
-
     @ManyToOne
     private JPAPullTask pullTask;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public PullTask getPullTask() {
         return pullTask;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPANotificationTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPANotificationTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPANotificationTask.java
index 83cc170..fe01d78 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPANotificationTask.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPANotificationTask.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.persistence.jpa.entity.task;
 
 import java.util.HashSet;
 import java.util.Set;
-
 import javax.persistence.Basic;
 import javax.persistence.CollectionTable;
 import javax.persistence.Column;
@@ -55,13 +54,13 @@ public class JPANotificationTask extends AbstractTask implements NotificationTas
     @Enumerated(EnumType.STRING)
     private AnyTypeKind anyTypeKind;
 
-    private Long anyKey;
+    private String anyKey;
 
     @ElementCollection(fetch = FetchType.EAGER)
     @Column(name = "address")
     @CollectionTable(name = "NotificationTask_recipients",
             joinColumns =
-            @JoinColumn(name = "notificationTask_id", referencedColumnName = "id"))
+            @JoinColumn(name = "notificationTask_key", referencedColumnName = "key"))
     private Set<String> recipients = new HashSet<>();
 
     @NotNull
@@ -109,12 +108,12 @@ public class JPANotificationTask extends AbstractTask implements NotificationTas
     }
 
     @Override
-    public Long getAnyKey() {
+    public String getAnyKey() {
         return anyKey;
     }
 
     @Override
-    public void setAnyKey(final Long anyKey) {
+    public void setAnyKey(final String anyKey) {
         this.anyKey = anyKey;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPropagationTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPropagationTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPropagationTask.java
index bf86077..60331ec 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPropagationTask.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPropagationTask.java
@@ -76,7 +76,7 @@ public class JPAPropagationTask extends AbstractTask implements PropagationTask
 
     private String anyType;
 
-    private Long anyKey;
+    private String anyKey;
 
     /**
      * ExternalResource to which the propagation happens.
@@ -178,12 +178,12 @@ public class JPAPropagationTask extends AbstractTask implements PropagationTask
     }
 
     @Override
-    public Long getAnyKey() {
+    public String getAnyKey() {
         return anyKey;
     }
 
     @Override
-    public void setAnyKey(final Long anyKey) {
+    public void setAnyKey(final String anyKey) {
         this.anyKey = anyKey;
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPullTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPullTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPullTask.java
index 7dca06c..657a2f0 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPullTask.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPullTask.java
@@ -64,7 +64,7 @@ public class JPAPullTask extends AbstractProvisioningTask implements PullTask {
     @Column(name = "actionClassName")
     @CollectionTable(name = "PullTask_actionsClassNames",
             joinColumns =
-            @JoinColumn(name = "pullTask_id", referencedColumnName = "id"))
+            @JoinColumn(name = "pullTask_key", referencedColumnName = "key"))
     private Set<String> actionsClassNames = new HashSet<>();
 
     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER, mappedBy = "pullTask")

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
index 1afb4ee..41ef5a2 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
@@ -47,7 +47,7 @@ public class JPAPushTask extends AbstractProvisioningTask implements PushTask {
     @Column(name = "actionClassName")
     @CollectionTable(name = "PushTask_actionsClassNames",
             joinColumns =
-            @JoinColumn(name = "pushTask_id", referencedColumnName = "id"))
+            @JoinColumn(name = "pushTask_key", referencedColumnName = "key"))
     private Set<String> actionsClassNames = new HashSet<>();
 
     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER, mappedBy = "pushTask")

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTaskAnyFilter.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTaskAnyFilter.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTaskAnyFilter.java
index 6051f1e..db237c7 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTaskAnyFilter.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTaskAnyFilter.java
@@ -19,29 +19,25 @@
 package org.apache.syncope.core.persistence.jpa.entity.task;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 import javax.persistence.UniqueConstraint;
 import javax.validation.constraints.NotNull;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.task.PushTask;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
 import org.apache.syncope.core.persistence.jpa.entity.JPAAnyType;
 import org.apache.syncope.core.persistence.api.entity.task.PushTaskAnyFilter;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
 
 @Entity
 @Table(name = JPAPushTaskAnyFilter.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "pushTask_id", "anyType_name" }))
-public class JPAPushTaskAnyFilter extends AbstractEntity<Long> implements PushTaskAnyFilter {
+        @UniqueConstraint(columnNames = { "pushTask_key", "anyType_key" }))
+public class JPAPushTaskAnyFilter extends AbstractGeneratedKeyEntity implements PushTaskAnyFilter {
 
     private static final long serialVersionUID = 3517381731849788407L;
 
     public static final String TABLE = "PushTaskAnyFilter";
 
-    @Id
-    private Long id;
-
     @ManyToOne
     private JPAPushTask pushTask;
 
@@ -52,11 +48,6 @@ public class JPAPushTaskAnyFilter extends AbstractEntity<Long> implements PushTa
     private String fiql;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public PushTask getPushTask() {
         return pushTask;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPATaskExec.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPATaskExec.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPATaskExec.java
index a1712bb..533ae33 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPATaskExec.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPATaskExec.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity.task;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 import org.apache.syncope.core.persistence.api.entity.task.Task;
@@ -39,9 +38,6 @@ public class JPATaskExec extends AbstractExec implements TaskExec {
 
     public static final String TABLE = "TaskExec";
 
-    @Id
-    private Long id;
-
     /**
      * The referred task.
      */
@@ -49,11 +45,6 @@ public class JPATaskExec extends AbstractExec implements TaskExec {
     private AbstractTask task;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public Task getTask() {
         return task;
     }
@@ -67,7 +58,7 @@ public class JPATaskExec extends AbstractExec implements TaskExec {
     @Override
     public String toString() {
         return new StringBuilder(getClass().getSimpleName()).append('{').
-                append("id=").append(id).append(", ").
+                append("id=").append(getKey()).append(", ").
                 append("start=").append(start).append(", ").
                 append("end=").append(end).append(", ").
                 append("task=").append(task).append(", ").

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
index 96575d1..085bf48 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.persistence.jpa.entity.user;
 import java.util.ArrayList;
 import java.util.List;
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.JoinTable;
 import javax.persistence.ManyToMany;
@@ -39,25 +38,17 @@ public class JPADynRoleMembership extends AbstractUDynMembership implements DynR
 
     public static final String TABLE = "DynRoleMembership";
 
-    @Id
-    private Long id;
-
     @OneToOne
     private JPARole role;
 
     @ManyToMany
     @JoinTable(name = TABLE + "_User", joinColumns =
-            @JoinColumn(name = "dynRoleMembership_id"),
+            @JoinColumn(name = "dynRoleMembership_key"),
             inverseJoinColumns =
-            @JoinColumn(name = "user_id"))
+            @JoinColumn(name = "user_key"))
     private List<JPAUser> users = new ArrayList<>();
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     protected List<JPAUser> internalGetUsers() {
         return users;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
index a40bf91..e98b8b5 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.persistence.jpa.entity.user;
 import java.util.ArrayList;
 import java.util.List;
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.JoinTable;
 import javax.persistence.ManyToMany;
@@ -39,25 +38,17 @@ public class JPAUDynGroupMembership extends AbstractUDynMembership implements UD
 
     public static final String TABLE = "UDynGroupMembership";
 
-    @Id
-    private Long id;
-
     @OneToOne
     private JPAGroup group;
 
     @ManyToMany
     @JoinTable(name = TABLE + "_User", joinColumns =
-            @JoinColumn(name = "uDynGroupMembership_id"),
+            @JoinColumn(name = "uDynGroupMembership_key"),
             inverseJoinColumns =
-            @JoinColumn(name = "user_id"))
+            @JoinColumn(name = "user_key"))
     private List<JPAUser> users = new ArrayList<>();
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     protected List<JPAUser> internalGetUsers() {
         return users;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUMembership.java
index 879ee87..dbdfc31 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUMembership.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.persistence.jpa.entity.user;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 import org.apache.syncope.core.persistence.api.entity.MembershipType;
@@ -28,34 +27,26 @@ import org.apache.syncope.core.persistence.api.entity.RelationshipType;
 import org.apache.syncope.core.persistence.api.entity.group.Group;
 import org.apache.syncope.core.persistence.api.entity.user.UMembership;
 import org.apache.syncope.core.persistence.api.entity.user.User;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
 import org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup;
 
 @Entity
 @Table(name = JPAUMembership.TABLE)
-public class JPAUMembership extends AbstractEntity<Long> implements UMembership {
+public class JPAUMembership extends AbstractGeneratedKeyEntity implements UMembership {
 
     private static final long serialVersionUID = -14584450896965100L;
 
     public static final String TABLE = "UMembership";
 
-    @Id
-    private Long id;
-
     @ManyToOne
-    @Column(name = "user_id")
+    @Column(name = "user_key")
     private JPAUser leftEnd;
 
     @ManyToOne
-    @Column(name = "group_id")
+    @Column(name = "group_key")
     private JPAGroup rightEnd;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public MembershipType getType() {
         return MembershipType.getInstance();
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttr.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttr.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttr.java
index 38fa9a7..84c9c84 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttr.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttr.java
@@ -23,7 +23,6 @@ import java.util.List;
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
@@ -45,9 +44,6 @@ public class JPAUPlainAttr extends AbstractPlainAttr<User> implements UPlainAttr
 
     public static final String TABLE = "UPlainAttr";
 
-    @Id
-    private Long id;
-
     /**
      * The owner of this attribute.
      */
@@ -69,11 +65,6 @@ public class JPAUPlainAttr extends AbstractPlainAttr<User> implements UPlainAttr
     private JPAUPlainAttrUniqueValue uniqueValue;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public User getOwner() {
         return owner;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrUniqueValue.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrUniqueValue.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrUniqueValue.java
index 86dfdfa..0a0e3dc 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrUniqueValue.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrUniqueValue.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity.user;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToOne;
@@ -39,22 +38,14 @@ public class JPAUPlainAttrUniqueValue extends AbstractPlainAttrValue implements
 
     public static final String TABLE = "UPlainAttrUniqueValue";
 
-    @Id
-    private Long id;
-
     @OneToOne(optional = false)
     private JPAUPlainAttr attribute;
 
     @ManyToOne(optional = false)
-    @JoinColumn(name = "schema_name")
+    @JoinColumn(name = "schema_key")
     private JPAPlainSchema schema;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public UPlainAttr getAttr() {
         return attribute;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrValue.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrValue.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrValue.java
index 2eca97c..ce1607a 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrValue.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrValue.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity.user;
 
 import javax.persistence.Entity;
-import javax.persistence.Id;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
 import javax.persistence.ManyToOne;
@@ -39,19 +38,11 @@ public class JPAUPlainAttrValue extends AbstractPlainAttrValue implements UPlain
 
     public static final String TABLE = "UPlainAttrValue";
 
-    @Id
-    private Long id;
-
     @ManyToOne
     @NotNull
     private JPAUPlainAttr attribute;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public UPlainAttr getAttr() {
         return attribute;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAURelationship.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAURelationship.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAURelationship.java
index 25fd3a1..1b3ed51 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAURelationship.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAURelationship.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.persistence.jpa.entity.user;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 import javax.persistence.UniqueConstraint;
@@ -30,39 +29,31 @@ import org.apache.syncope.core.persistence.api.entity.RelationshipType;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
 import org.apache.syncope.core.persistence.api.entity.user.URelationship;
 import org.apache.syncope.core.persistence.api.entity.user.User;
-import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
+import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
 import org.apache.syncope.core.persistence.jpa.entity.JPARelationshipType;
 import org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAnyObject;
 
 @Entity
 @Table(name = JPAURelationship.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "type_name", "user_id", "anyObject_id" }))
-public class JPAURelationship extends AbstractEntity<Long> implements URelationship {
+        @UniqueConstraint(columnNames = { "type_key", "user_key", "anyObject_key" }))
+public class JPAURelationship extends AbstractGeneratedKeyEntity implements URelationship {
 
     private static final long serialVersionUID = 2778494939240083204L;
 
     public static final String TABLE = "URelationship";
 
-    @Id
-    private Long id;
-
     @ManyToOne(fetch = FetchType.EAGER, optional = false)
     private JPARelationshipType type;
 
     @ManyToOne
-    @Column(name = "user_id")
+    @Column(name = "user_key")
     private JPAUser leftEnd;
 
     @ManyToOne
-    @Column(name = "anyObject_id")
+    @Column(name = "anyObject_key")
     private JPAAnyObject rightEnd;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public RelationshipType getType() {
         return type;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java
index d8a1908..407d2cd 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java
@@ -33,7 +33,6 @@ import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
 import javax.persistence.FetchType;
-import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.JoinTable;
 import javax.persistence.Lob;
@@ -80,9 +79,6 @@ public class JPAUser extends AbstractAny<UPlainAttr> implements User {
 
     public static final String TABLE = "SyncopeUser";
 
-    @Id
-    private Long id;
-
     @Column(nullable = true)
     private String password;
 
@@ -91,9 +87,9 @@ public class JPAUser extends AbstractAny<UPlainAttr> implements User {
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "user_id"),
+            @JoinColumn(name = "user_key"),
             inverseJoinColumns =
-            @JoinColumn(name = "role_name"))
+            @JoinColumn(name = "role_key"))
     private List<JPARole> roles = new ArrayList<>();
 
     @OneToMany(cascade = CascadeType.ALL, mappedBy = "owner")
@@ -118,7 +114,7 @@ public class JPAUser extends AbstractAny<UPlainAttr> implements User {
     @ElementCollection
     @Column(name = "passwordHistoryValue")
     @CollectionTable(name = "SyncopeUser_passwordHistory", joinColumns =
-            @JoinColumn(name = "user_id", referencedColumnName = "id"))
+            @JoinColumn(name = "user_key", referencedColumnName = "key"))
     private List<String> passwordHistory = new ArrayList<>();
 
     /**
@@ -163,17 +159,17 @@ public class JPAUser extends AbstractAny<UPlainAttr> implements User {
      */
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "user_id"),
+            @JoinColumn(name = "user_key"),
             inverseJoinColumns =
-            @JoinColumn(name = "resource_name"))
+            @JoinColumn(name = "resource_key"))
     @Valid
     private List<JPAExternalResource> resources = new ArrayList<>();
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "user_id"),
+            @JoinColumn(name = "user_key"),
             inverseJoinColumns =
-            @JoinColumn(name = "anyTypeClass_name"))
+            @JoinColumn(name = "anyTypeClass_key"))
     private List<JPAAnyTypeClass> auxClasses = new ArrayList<>();
 
     @OneToMany(cascade = CascadeType.ALL, mappedBy = "leftEnd")
@@ -191,11 +187,6 @@ public class JPAUser extends AbstractAny<UPlainAttr> implements User {
     private String securityAnswer;
 
     @Override
-    public Long getKey() {
-        return id;
-    }
-
-    @Override
     public AnyType getType() {
         return ApplicationContextProvider.getBeanFactory().getBean(AnyTypeDAO.class).findUser();
     }
@@ -480,7 +471,7 @@ public class JPAUser extends AbstractAny<UPlainAttr> implements User {
     }
 
     @Override
-    public URelationship getRelationship(final RelationshipType relationshipType, final Long anyObjectKey) {
+    public URelationship getRelationship(final RelationshipType relationshipType, final String anyObjectKey) {
         return IterableUtils.find(getRelationships(), new Predicate<URelationship>() {
 
             @Override
@@ -504,7 +495,7 @@ public class JPAUser extends AbstractAny<UPlainAttr> implements User {
     }
 
     @Override
-    public Collection<? extends URelationship> getRelationships(final Long anyObjectKey) {
+    public Collection<? extends URelationship> getRelationships(final String anyObjectKey) {
         return CollectionUtils.select(getRelationships(), new Predicate<URelationship>() {
 
             @Override
@@ -526,7 +517,7 @@ public class JPAUser extends AbstractAny<UPlainAttr> implements User {
     }
 
     @Override
-    public UMembership getMembership(final Long groupKey) {
+    public UMembership getMembership(final String groupKey) {
         return IterableUtils.find(getMemberships(), new Predicate<UMembership>() {
 
             @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/openjpa/UUIDGenerator.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/openjpa/UUIDGenerator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/openjpa/UUIDGenerator.java
new file mode 100644
index 0000000..bf572fa
--- /dev/null
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/openjpa/UUIDGenerator.java
@@ -0,0 +1,58 @@
+/*
+ * 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.core.persistence.jpa.openjpa;
+
+import com.fasterxml.uuid.Generators;
+import com.fasterxml.uuid.impl.RandomBasedGenerator;
+import org.apache.openjpa.kernel.Seq;
+import org.apache.openjpa.kernel.StoreContext;
+import org.apache.openjpa.meta.ClassMetaData;
+
+/**
+ * Fast UUID generator for OpenJPA entities.
+ */
+public class UUIDGenerator implements Seq {
+
+    private static final RandomBasedGenerator GENERATOR = Generators.randomBasedGenerator();
+
+    private String last;
+
+    @Override
+    public void setType(final int i) {
+    }
+
+    @Override
+    public Object next(final StoreContext sc, final ClassMetaData cmd) {
+        last = GENERATOR.generate().toString();
+        return last;
+    }
+
+    @Override
+    public Object current(final StoreContext sc, final ClassMetaData cmd) {
+        return last;
+    }
+
+    @Override
+    public void allocate(final int i, final StoreContext sc, final ClassMetaData cmd) {
+    }
+
+    @Override
+    public void close() {
+    }
+}


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java
index b847a06..30cc8c8 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java
@@ -74,11 +74,11 @@ public class SchedTaskITCase extends AbstractTaskITCase {
 
     @Test
     public void update() {
-        SchedTaskTO task = taskService.read(SCHED_TASK_ID, true);
+        SchedTaskTO task = taskService.read(SCHED_TASK_KEY, true);
         assertNotNull(task);
 
         SchedTaskTO taskMod = new SchedTaskTO();
-        taskMod.setKey(SCHED_TASK_ID);
+        taskMod.setKey(SCHED_TASK_KEY);
         taskMod.setName(task.getName());
         taskMod.setCronExpression(null);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
index 0e6a991..8cdd7fb 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
@@ -70,7 +70,8 @@ public class SearchITCase extends AbstractITCase {
 
             @Override
             public boolean evaluate(final UserTO user) {
-                return user.getKey() == 2L || user.getKey() == 3L;
+                return "74cd8ece-715a-44a4-a736-e17b46c4e7e6".equals(user.getKey())
+                        || "b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee".equals(user.getKey());
             }
         });
         assertEquals(2, found.size());
@@ -85,7 +86,7 @@ public class SearchITCase extends AbstractITCase {
         assertNotNull(matchingUsers);
         assertEquals(1, matchingUsers.getResult().size());
         assertEquals("rossini", matchingUsers.getResult().iterator().next().getUsername());
-        assertEquals(1L, matchingUsers.getResult().iterator().next().getKey(), 0);
+        assertEquals("1417acbe-cbf6-4277-9372-e75e04f97000", matchingUsers.getResult().iterator().next().getKey());
     }
 
     @Test
@@ -93,18 +94,20 @@ public class SearchITCase extends AbstractITCase {
         PagedResult<GroupTO> groups = groupService.search(
                 new AnySearchQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
                 fiql(SyncopeClient.getGroupSearchConditionBuilder().
-                        is("name").equalTo("root").and("key").lessThan(2).query()).build());
+                        is("name").equalTo("root").and("key").equalTo("37d15e4c-cdc1-460b-a591-8505c8133806").
+                        query()).build());
         assertNotNull(groups);
         assertEquals(1, groups.getResult().size());
         assertEquals("root", groups.getResult().iterator().next().getName());
-        assertEquals(1L, groups.getResult().iterator().next().getKey(), 0);
+        assertEquals("37d15e4c-cdc1-460b-a591-8505c8133806", groups.getResult().iterator().next().getKey());
     }
 
     @Test
     public void searchByGroup() {
         PagedResult<UserTO> matchingUsers = userService.search(
                 new AnySearchQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
-                fiql(SyncopeClient.getUserSearchConditionBuilder().inGroups(1L).query()).
+                fiql(SyncopeClient.getUserSearchConditionBuilder().
+                        inGroups("37d15e4c-cdc1-460b-a591-8505c8133806").query()).
                 build());
         assertNotNull(matchingUsers);
         assertFalse(matchingUsers.getResult().isEmpty());
@@ -113,7 +116,7 @@ public class SearchITCase extends AbstractITCase {
 
             @Override
             public boolean evaluate(final UserTO user) {
-                return user.getKey() == 1;
+                return "1417acbe-cbf6-4277-9372-e75e04f97000".equals(user.getKey());
             }
         }));
     }
@@ -136,7 +139,7 @@ public class SearchITCase extends AbstractITCase {
 
             @Override
             public boolean evaluate(final UserTO user) {
-                return user.getKey() == 4;
+                return "c9b2dec2-00a7-4855-97c0-d854842b4b24".equals(user.getKey());
             }
         }));
     }
@@ -154,7 +157,7 @@ public class SearchITCase extends AbstractITCase {
 
             @Override
             public boolean evaluate(final UserTO user) {
-                return user.getKey() == 1;
+                return "1417acbe-cbf6-4277-9372-e75e04f97000".equals(user.getKey());
             }
         }));
     }
@@ -178,7 +181,7 @@ public class SearchITCase extends AbstractITCase {
 
             @Override
             public boolean evaluate(final UserTO user) {
-                return user.getKey() == 4;
+                return "c9b2dec2-00a7-4855-97c0-d854842b4b24".equals(user.getKey());
             }
         }));
     }
@@ -196,7 +199,7 @@ public class SearchITCase extends AbstractITCase {
 
             @Override
             public boolean evaluate(final UserTO user) {
-                return user.getKey() == 2;
+                return "74cd8ece-715a-44a4-a736-e17b46c4e7e6".equals(user.getKey());
             }
         }));
     }
@@ -253,10 +256,13 @@ public class SearchITCase extends AbstractITCase {
     public void searchByRelationshipAnyCond() {
         PagedResult<GroupTO> groups = groupService.search(
                 new AnySearchQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
-                fiql(SyncopeClient.getGroupSearchConditionBuilder().is("userOwner").equalTo(5).query()).build());
+                fiql(SyncopeClient.getGroupSearchConditionBuilder().
+                        is("userOwner").equalTo("823074dc-d280-436d-a7dd-07399fae48ec").query()).build());
         assertNotNull(groups);
         assertEquals(1, groups.getResult().size());
-        assertEquals(6L, groups.getResult().iterator().next().getKey(), 0);
+        assertEquals(
+                "ebf97068-aa4b-4a85-9f01-680e8c4cf227",
+                groups.getResult().iterator().next().getKey());
     }
 
     @Test
@@ -297,27 +303,28 @@ public class SearchITCase extends AbstractITCase {
         PagedResult<AnyObjectTO> anyObjects = anyObjectService.search(
                 new AnySearchQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
                 fiql(SyncopeClient.getAnyObjectSearchConditionBuilder("PRINTER").
-                        inRelationships(2L).query()).
+                        inRelationships("8559d14d-58c2-46eb-a2d4-a7d35161e8f8").query()).
                 build());
         assertNotNull(anyObjects);
         assertTrue(IterableUtils.matchesAny(anyObjects.getResult(), new Predicate<AnyObjectTO>() {
 
             @Override
             public boolean evaluate(final AnyObjectTO anyObject) {
-                return anyObject.getKey() == 1L;
+                return "fc6dbc3a-6c07-4965-8781-921e7401a4a5".equals(anyObject.getKey());
             }
         }));
 
         PagedResult<UserTO> users = userService.search(
                 new AnySearchQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
-                fiql(SyncopeClient.getUserSearchConditionBuilder().inRelationships(1L).query()).
+                fiql(SyncopeClient.getUserSearchConditionBuilder().
+                        inRelationships("fc6dbc3a-6c07-4965-8781-921e7401a4a5").query()).
                 build());
         assertNotNull(users);
         assertTrue(IterableUtils.matchesAny(users.getResult(), new Predicate<UserTO>() {
 
             @Override
             public boolean evaluate(final UserTO user) {
-                return user.getKey() == 4L;
+                return "c9b2dec2-00a7-4855-97c0-d854842b4b24".equals(user.getKey());
             }
         }));
     }
@@ -334,14 +341,14 @@ public class SearchITCase extends AbstractITCase {
 
             @Override
             public boolean evaluate(final AnyObjectTO anyObject) {
-                return anyObject.getKey() == 1L;
+                return "fc6dbc3a-6c07-4965-8781-921e7401a4a5".equals(anyObject.getKey());
             }
         }));
         assertTrue(IterableUtils.matchesAny(anyObjects.getResult(), new Predicate<AnyObjectTO>() {
 
             @Override
             public boolean evaluate(final AnyObjectTO anyObject) {
-                return anyObject.getKey() == 2L;
+                return "8559d14d-58c2-46eb-a2d4-a7d35161e8f8".equals(anyObject.getKey());
             }
         }));
 
@@ -354,7 +361,7 @@ public class SearchITCase extends AbstractITCase {
 
             @Override
             public boolean evaluate(final UserTO user) {
-                return user.getKey() == 4L;
+                return "c9b2dec2-00a7-4855-97c0-d854842b4b24".equals(user.getKey());
             }
         }));
     }
@@ -371,14 +378,14 @@ public class SearchITCase extends AbstractITCase {
 
             @Override
             public boolean evaluate(final GroupTO group) {
-                return group.getKey() == 15L;
+                return "034740a9-fa10-453b-af37-dc7897e98fb1".equals(group.getKey());
             }
         }));
         assertFalse(IterableUtils.matchesAny(groups.getResult(), new Predicate<GroupTO>() {
 
             @Override
             public boolean evaluate(final GroupTO group) {
-                return group.getKey() == 16L;
+                return "e7ff94e8-19c9-4f0a-b8b7-28327edbf6ed".equals(group.getKey());
             }
         }));
 
@@ -392,7 +399,7 @@ public class SearchITCase extends AbstractITCase {
 
             @Override
             public boolean evaluate(final AnyObjectTO anyObject) {
-                return anyObject.getKey() == 3L;
+                return "9e1d130c-d6a3-48b1-98b3-182477ed0688".equals(anyObject.getKey());
             }
         }));
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SecurityQuestionITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SecurityQuestionITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SecurityQuestionITCase.java
index 40d4b54..a4b1d39 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SecurityQuestionITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SecurityQuestionITCase.java
@@ -39,7 +39,8 @@ public class SecurityQuestionITCase extends AbstractITCase {
 
     @Test
     public void read() {
-        SecurityQuestionTO securityQuestionTO = securityQuestionService.read(1L);
+        SecurityQuestionTO securityQuestionTO = securityQuestionService.read(
+                "887028ea-66fc-41e7-b397-620d7ea6dfbb");
         assertNotNull(securityQuestionTO);
     }
 
@@ -70,7 +71,8 @@ public class SecurityQuestionITCase extends AbstractITCase {
 
     @Test
     public void update() {
-        SecurityQuestionTO securityQuestionTO = securityQuestionService.read(1L);
+        SecurityQuestionTO securityQuestionTO = securityQuestionService.read(
+                "887028ea-66fc-41e7-b397-620d7ea6dfbb");
         securityQuestionTO.setContent("What is your favorite color?");
 
         securityQuestionService.update(securityQuestionTO);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
index 79ec811..3e7c6db 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.fit.core;
 
-import org.apache.syncope.fit.ActivitiDetector;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
@@ -37,6 +35,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.UUID;
 import javax.naming.NamingException;
 import javax.ws.rs.core.GenericType;
 import javax.ws.rs.core.MediaType;
@@ -100,6 +99,7 @@ import org.apache.syncope.fit.core.reference.DoubleValueLogicActions;
 import org.apache.syncope.fit.core.reference.TestAccountRuleConf;
 import org.apache.syncope.fit.core.reference.TestPasswordRuleConf;
 import org.apache.syncope.fit.AbstractITCase;
+import org.apache.syncope.fit.ActivitiDetector;
 import org.identityconnectors.framework.common.objects.Name;
 import org.identityconnectors.framework.common.objects.OperationalAttributes;
 import org.junit.Assume;
@@ -141,33 +141,20 @@ public class UserITCase extends AbstractITCase {
 
     @Test
     public void createUserWithNoPropagation() {
-        // get task list
-        PagedResult<PropagationTaskTO> tasks = taskService.list(
-                new TaskQuery.Builder(TaskType.PROPAGATION).page(1).size(1).build());
-        assertNotNull(tasks);
-        assertFalse(tasks.getResult().isEmpty());
-
-        long maxKey = tasks.getResult().iterator().next().getKey();
-
         // create a new user
         UserTO userTO = getUniqueSampleTO("xxx@xxx.xxx");
         userTO.setPassword("password123");
         userTO.getResources().add(RESOURCE_NAME_NOPROPAGATION);
 
-        createUser(userTO);
+        userTO = createUser(userTO).getAny();
 
-        // get the new task list
-        tasks = taskService.list(
-                new TaskQuery.Builder(TaskType.PROPAGATION).page(1).size(1).build());
+        // get the propagation task just created
+        PagedResult<PropagationTaskTO> tasks = taskService.list(new TaskQuery.Builder(TaskType.PROPAGATION).
+                anyTypeKind(AnyTypeKind.USER).anyTypeKey(userTO.getKey()).page(1).size(1).build());
         assertNotNull(tasks);
         assertFalse(tasks.getResult().isEmpty());
 
-        long newMaxKey = tasks.getResult().iterator().next().getKey();
-
-        assertTrue(newMaxKey > maxKey);
-
-        // get last task
-        PropagationTaskTO taskTO = taskService.read(newMaxKey, true);
+        PropagationTaskTO taskTO = tasks.getResult().get(0);
         assertNotNull(taskTO);
         assertFalse(taskTO.getExecutions().isEmpty());
         assertEquals(PropagationTaskExecStatus.NOT_ATTEMPTED.name(), taskTO.getExecutions().get(0).getStatus());
@@ -331,7 +318,8 @@ public class UserITCase extends AbstractITCase {
         // configured to be minLength=16
         userTO.setPassword("password1");
 
-        userTO.getMemberships().add(new MembershipTO.Builder().group(8L).build());
+        userTO.getMemberships().add(new MembershipTO.Builder().
+                group("f779c0d4-633b-4be5-8f57-32eb478a3ca5").build());
 
         createUser(userTO);
     }
@@ -351,7 +339,7 @@ public class UserITCase extends AbstractITCase {
         assertNotNull(tasks);
         assertFalse(tasks.getResult().isEmpty());
 
-        long maxKey = tasks.getResult().iterator().next().getKey();
+        String maxKey = tasks.getResult().iterator().next().getKey();
         PropagationTaskTO taskTO = taskService.read(maxKey, true);
 
         assertNotNull(taskTO);
@@ -360,7 +348,8 @@ public class UserITCase extends AbstractITCase {
         UserTO userTO = getUniqueSampleTO("a.b@c.com");
 
         // add a membership
-        userTO.getMemberships().add(new MembershipTO.Builder().group(8L).build());
+        userTO.getMemberships().add(new MembershipTO.Builder().
+                group("f779c0d4-633b-4be5-8f57-32eb478a3ca5").build());
 
         // add an attribute with a non-existing schema: must be ignored
         AttrTO attrWithInvalidSchemaTO = attrTO("invalid schema", "a value");
@@ -391,7 +380,7 @@ public class UserITCase extends AbstractITCase {
         assertNotNull(tasks);
         assertFalse(tasks.getResult().isEmpty());
 
-        long newMaxKey = tasks.getResult().iterator().next().getKey();
+        String newMaxKey = tasks.getResult().iterator().next().getKey();
 
         // default configuration for ws-target-resource2:
         // only failed executions have to be registered
@@ -443,7 +432,8 @@ public class UserITCase extends AbstractITCase {
         AttrTO type = userTO.getPlainAttrMap().get("ctype");
         userTO.getPlainAttrs().remove(type);
 
-        userTO.getMemberships().add(new MembershipTO.Builder().group(8L).build());
+        userTO.getMemberships().add(new MembershipTO.Builder().
+                group("f779c0d4-633b-4be5-8f57-32eb478a3ca5").build());
 
         // 1. create user without type (mandatory by UserSchema)
         try {
@@ -470,7 +460,7 @@ public class UserITCase extends AbstractITCase {
     @Test
     public void delete() {
         try {
-            userService.delete(0L);
+            userService.delete(UUID.randomUUID().toString());
         } catch (SyncopeClientException e) {
             assertEquals(Response.Status.NOT_FOUND, e.getType().getResponseStatus());
         }
@@ -482,12 +472,12 @@ public class UserITCase extends AbstractITCase {
 
         userTO = createUser(userTO).getAny();
 
-        long key = userTO.getKey();
+        String key = userTO.getKey();
 
         ProvisioningResult<UserTO> result = deleteUser(key);
         assertNotNull(result);
         userTO = result.getAny();
-        assertEquals(key, userTO.getKey(), 0);
+        assertEquals(key, userTO.getKey());
         assertTrue(userTO.getPlainAttrs().isEmpty());
 
         // check for propagation result
@@ -510,13 +500,13 @@ public class UserITCase extends AbstractITCase {
 
         userTO = createUser(userTO).getAny();
 
-        long key = userTO.getKey();
+        String key = userTO.getKey();
         userTO = userService.read(key);
 
         ProvisioningResult<UserTO> result = deleteUser(userTO.getKey());
         assertNotNull(result);
         userTO = result.getAny();
-        assertEquals(key, userTO.getKey(), 0);
+        assertEquals(key, userTO.getKey());
         assertTrue(userTO.getPlainAttrs().isEmpty());
 
         // check for propagation result
@@ -568,7 +558,7 @@ public class UserITCase extends AbstractITCase {
 
     @Test
     public void read() {
-        UserTO userTO = userService.read(1L);
+        UserTO userTO = userService.read("1417acbe-cbf6-4277-9372-e75e04f97000");
 
         assertNotNull(userTO);
         assertNull(userTO.getPassword());
@@ -637,7 +627,8 @@ public class UserITCase extends AbstractITCase {
     public void update() {
         UserTO userTO = getUniqueSampleTO("g.h@t.com");
 
-        userTO.getMemberships().add(new MembershipTO.Builder().group(8L).build());
+        userTO.getMemberships().add(new MembershipTO.Builder().
+                group("f779c0d4-633b-4be5-8f57-32eb478a3ca5").build());
 
         userTO = createUser(userTO).getAny();
 
@@ -655,7 +646,8 @@ public class UserITCase extends AbstractITCase {
         userPatch.getPlainAttrs().add(attrAddReplacePatch("fullname", newFullName));
 
         userPatch.getMemberships().add(new MembershipPatch.Builder().operation(PatchOperation.ADD_REPLACE).
-                membershipTO(new MembershipTO.Builder().group(8L).build()).build());
+                membershipTO(new MembershipTO.Builder().
+                        group("f779c0d4-633b-4be5-8f57-32eb478a3ca5").build()).build());
         userPatch.getMemberships().add(new MembershipPatch.Builder().operation(PatchOperation.ADD_REPLACE).
                 membershipTO(userTO.getMemberships().get(0)).build());
 
@@ -686,7 +678,8 @@ public class UserITCase extends AbstractITCase {
         assertFalse(beforeTasks <= 0);
 
         UserTO userTO = getUniqueSampleTO("pwdonly@t.com");
-        userTO.getMemberships().add(new MembershipTO.Builder().group(8L).build());
+        userTO.getMemberships().add(new MembershipTO.Builder().
+                group("f779c0d4-633b-4be5-8f57-32eb478a3ca5").build());
 
         userTO = createUser(userTO).getAny();
 
@@ -715,7 +708,7 @@ public class UserITCase extends AbstractITCase {
         assertNotNull(tasks);
         assertFalse(tasks.getResult().isEmpty());
 
-        long maxKey = tasks.getResult().iterator().next().getKey();
+        String maxKey = tasks.getResult().iterator().next().getKey();
 
         // --------------------------------------
         // Create operation
@@ -723,7 +716,8 @@ public class UserITCase extends AbstractITCase {
         UserTO userTO = getUniqueSampleTO("t@p.mode");
 
         // add a membership
-        userTO.getMemberships().add(new MembershipTO.Builder().group(8L).build());
+        userTO.getMemberships().add(new MembershipTO.Builder().
+                group("f779c0d4-633b-4be5-8f57-32eb478a3ca5").build());
 
         // 1. create user
         userTO = createUser(userTO).getAny();
@@ -734,7 +728,7 @@ public class UserITCase extends AbstractITCase {
         assertNotNull(tasks);
         assertFalse(tasks.getResult().isEmpty());
 
-        long newMaxKey = tasks.getResult().iterator().next().getKey();
+        String newMaxKey = tasks.getResult().iterator().next().getKey();
 
         // default configuration for ws-target-resource2 during create:
         // only failed executions have to be registered
@@ -756,12 +750,9 @@ public class UserITCase extends AbstractITCase {
         // get the new task list
         tasks = taskService.list(new TaskQuery.Builder(TaskType.PROPAGATION).page(1).size(1).build());
 
-        maxKey = newMaxKey;
-        newMaxKey = tasks.getResult().iterator().next().getKey();
-
         // default configuration for ws-target-resource2 during update:
         // all update executions have to be registered
-        assertTrue(newMaxKey > maxKey);
+        newMaxKey = tasks.getResult().iterator().next().getKey();
 
         PropagationTaskTO taskTO = taskService.read(newMaxKey, true);
 
@@ -790,7 +781,8 @@ public class UserITCase extends AbstractITCase {
 
         UserTO userTO = getUniqueSampleTO("createActivate@syncope.apache.org");
 
-        userTO.getMemberships().add(new MembershipTO.Builder().group(11L).build());
+        userTO.getMemberships().add(new MembershipTO.Builder().
+                group("268fed79-f440-4390-9435-b273768eb5d6").build());
 
         userTO = createUser(userTO).getAny();
 
@@ -817,7 +809,8 @@ public class UserITCase extends AbstractITCase {
     public void suspendReactivate() {
         UserTO userTO = getUniqueSampleTO("suspendReactivate@syncope.apache.org");
 
-        userTO.getMemberships().add(new MembershipTO.Builder().group(7L).build());
+        userTO.getMemberships().add(new MembershipTO.Builder().
+                group("bf825fe1-7320-4a54-bd64-143b5c18ab97").build());
 
         userTO = createUser(userTO).getAny();
 
@@ -862,7 +855,7 @@ public class UserITCase extends AbstractITCase {
         assertEquals(ActivitiDetector.isActivitiEnabledForUsers(syncopeService)
                 ? "active"
                 : "created", userTO.getStatus());
-        long userKey = userTO.getKey();
+        String userKey = userTO.getKey();
 
         // Suspend with effect on syncope, ldap and db => user should be suspended in syncope and all resources
         StatusPatch statusPatch = new StatusPatch();
@@ -1117,7 +1110,8 @@ public class UserITCase extends AbstractITCase {
         userTO.getAuxClasses().add("csv");
         userTO.getDerAttrs().add(attrTO("csvuserid", null));
 
-        userTO.getMemberships().add(new MembershipTO.Builder().group(1L).build());
+        userTO.getMemberships().add(new MembershipTO.Builder().
+                group("37d15e4c-cdc1-460b-a591-8505c8133806").build());
 
         userTO.getResources().add(RESOURCE_NAME_CSV);
 
@@ -1152,9 +1146,9 @@ public class UserITCase extends AbstractITCase {
         assertNotNull(passwordPolicy);
 
         RealmTO realm = realmService.list("/even/two").get(0);
-        Long oldAccountPolicy = realm.getAccountPolicy();
+        String oldAccountPolicy = realm.getAccountPolicy();
         realm.setAccountPolicy(accountPolicy.getKey());
-        Long oldPasswordPolicy = realm.getPasswordPolicy();
+        String oldPasswordPolicy = realm.getPasswordPolicy();
         realm.setPasswordPolicy(passwordPolicy.getKey());
         realmService.update(realm);
 
@@ -1201,8 +1195,10 @@ public class UserITCase extends AbstractITCase {
         userTO.getAuxClasses().add("csv");
         userTO.getDerAttrs().add(attrTO("csvuserid", null));
 
-        userTO.getMemberships().add(new MembershipTO.Builder().group(12L).build());
-        userTO.getMemberships().add(new MembershipTO.Builder().group(13L).build());
+        userTO.getMemberships().add(new MembershipTO.Builder().
+                group("0626100b-a4ba-4e00-9971-86fad52a6216").build());
+        userTO.getMemberships().add(new MembershipTO.Builder().
+                group("ba9ed509-b1f5-48ab-a334-c8530a6422dc").build());
 
         userTO.getResources().add(RESOURCE_NAME_CSV);
 
@@ -1453,7 +1449,7 @@ public class UserITCase extends AbstractITCase {
     }
 
     @Test
-    public void isseSYNCOPE136AES() {
+    public void issueSYNCOPE136AES() {
         // 1. read configured cipher algorithm in order to be able to restore it at the end of test
         AttrTO pwdCipherAlgo = configurationService.get("password.cipher.algorithm");
         final String origpwdCipherAlgo = pwdCipherAlgo.getValues().get(0);
@@ -1462,9 +1458,10 @@ public class UserITCase extends AbstractITCase {
         pwdCipherAlgo.getValues().set(0, "AES");
         configurationService.set(pwdCipherAlgo);
 
+        UserTO userTO = null;
         try {
             // 3. create user with no resources
-            UserTO userTO = getUniqueSampleTO("syncope136_AES@apache.org");
+            userTO = getUniqueSampleTO("syncope136_AES@apache.org");
             userTO.getResources().clear();
 
             userTO = createUser(userTO).getAny();
@@ -1474,8 +1471,8 @@ public class UserITCase extends AbstractITCase {
             UserPatch userPatch = new UserPatch();
             userPatch.setKey(userTO.getKey());
             userPatch.getResources().add(new StringPatchItem.Builder().
-                    operation(PatchOperation.ADD_REPLACE).value(RESOURCE_NAME_WS1).build());
-            userPatch.setPassword(new PasswordPatch.Builder().onSyncope(false).resource(RESOURCE_NAME_WS1).build());
+                    operation(PatchOperation.ADD_REPLACE).value(RESOURCE_NAME_LDAP).build());
+            userPatch.setPassword(new PasswordPatch.Builder().onSyncope(false).resource(RESOURCE_NAME_LDAP).build());
 
             ProvisioningResult<UserTO> result = updateUser(userPatch);
             assertNotNull(result);
@@ -1488,12 +1485,16 @@ public class UserITCase extends AbstractITCase {
             assertEquals(1, props.size());
             PropagationStatus prop = props.iterator().next();
             assertNotNull(prop);
-            assertEquals(RESOURCE_NAME_WS1, prop.getResource());
+            assertEquals(RESOURCE_NAME_LDAP, prop.getResource());
             assertEquals(PropagationTaskExecStatus.SUCCESS, prop.getStatus());
         } finally {
             // restore initial cipher algorithm
             pwdCipherAlgo.getValues().set(0, origpwdCipherAlgo);
             configurationService.set(pwdCipherAlgo);
+
+            if (userTO != null) {
+                deleteUser(userTO.getKey());
+            }
         }
     }
 
@@ -1547,14 +1548,18 @@ public class UserITCase extends AbstractITCase {
 
     @Test
     public void issueSYNCOPE265() {
-        for (long key = 1; key <= 5; key++) {
+        String[] userKeys = new String[] {
+            "1417acbe-cbf6-4277-9372-e75e04f97000",
+            "74cd8ece-715a-44a4-a736-e17b46c4e7e6",
+            "b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee",
+            "c9b2dec2-00a7-4855-97c0-d854842b4b24",
+            "823074dc-d280-436d-a7dd-07399fae48ec" };
+
+        for (String userKey : userKeys) {
             UserPatch userPatch = new UserPatch();
-            userPatch.setKey(key);
-
+            userPatch.setKey(userKey);
             userPatch.getPlainAttrs().add(attrAddReplacePatch("ctype", "a type"));
-
             UserTO userTO = updateUser(userPatch).getAny();
-
             assertEquals("a type", userTO.getPlainAttrMap().get("ctype").getValues().get(0));
         }
     }
@@ -1577,15 +1582,13 @@ public class UserITCase extends AbstractITCase {
         BulkActionResult res = userService.bulk(bulkAction);
         assertEquals(10, res.getResultByStatus(Status.SUCCESS).size());
         assertEquals(1, res.getResultByStatus(Status.FAILURE).size());
-        assertEquals("suspended", userService.read(
-                Long.parseLong(res.getResultByStatus(Status.SUCCESS).get(3))).getStatus());
+        assertEquals("suspended", userService.read(res.getResultByStatus(Status.SUCCESS).get(3)).getStatus());
 
         bulkAction.setType(BulkAction.Type.REACTIVATE);
         res = userService.bulk(bulkAction);
         assertEquals(10, res.getResultByStatus(Status.SUCCESS).size());
         assertEquals(1, res.getResultByStatus(Status.FAILURE).size());
-        assertEquals("active", userService.read(
-                Long.parseLong(res.getResultByStatus(Status.SUCCESS).get(3))).getStatus());
+        assertEquals("active", userService.read(res.getResultByStatus(Status.SUCCESS).get(3)).getStatus());
 
         bulkAction.setType(BulkAction.Type.DELETE);
         res = userService.bulk(bulkAction);
@@ -2131,7 +2134,7 @@ public class UserITCase extends AbstractITCase {
     @Test
     public void issueSYNCOPE493() {
         // 1.  create user and check that firstname is not propagated on resource with mapping for firstname set to NONE
-        UserTO userTO = getUniqueSampleTO("issueSYNCOPE493@test.org");
+        UserTO userTO = getUniqueSampleTO("493@test.org");
         userTO.getResources().add(RESOURCE_NAME_WS1);
         ProvisioningResult<UserTO> result = createUser(userTO);
         assertNotNull(userTO);
@@ -2371,9 +2374,10 @@ public class UserITCase extends AbstractITCase {
         ResourceTO csv = resourceService.read(RESOURCE_NAME_CSV);
         assertNotNull(csv);
         try {
-            csv.setPasswordPolicy(8L);
+            csv.setPasswordPolicy("55e5de0b-c79c-4e66-adda-251b6fb8579a");
             resourceService.update(csv);
             csv = resourceService.read(RESOURCE_NAME_CSV);
+            assertEquals("55e5de0b-c79c-4e66-adda-251b6fb8579a", csv.getPasswordPolicy());
 
             userTO = getUniqueSampleTO("syncope391@syncope.apache.org");
             userTO.setPassword(null);
@@ -2443,7 +2447,7 @@ public class UserITCase extends AbstractITCase {
         assertNotNull(passwordPolicy);
 
         RealmTO realm = realmService.list("/even/two").get(0);
-        Long oldPasswordPolicy = realm.getPasswordPolicy();
+        String oldPasswordPolicy = realm.getPasswordPolicy();
         realm.setPasswordPolicy(passwordPolicy.getKey());
         realmService.update(realm);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
index abbac1a..6d412a8 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
@@ -96,7 +96,8 @@ public class UserSelfITCase extends AbstractITCase {
 
         // self-create user with membership: goes 'createApproval' with resources and membership but no propagation
         UserTO userTO = UserITCase.getUniqueSampleTO("anonymous@syncope.apache.org");
-        userTO.getMemberships().add(new MembershipTO.Builder().group(3L).build());
+        userTO.getMemberships().add(
+                new MembershipTO.Builder().group("29f96485-729e-4d31-88a1-6fc60e4677f3").build());
         userTO.getResources().add(RESOURCE_NAME_TESTDB);
 
         SyncopeClient anonClient = clientFactory.create();
@@ -134,7 +135,7 @@ public class UserSelfITCase extends AbstractITCase {
         UserService userService2 = clientFactory.create("rossini", ADMIN_PWD).getService(UserService.class);
 
         try {
-            userService2.read(1L);
+            userService2.read("1417acbe-cbf6-4277-9372-e75e04f97000");
             fail();
         } catch (AccessControlException e) {
             assertNotNull(e);
@@ -181,7 +182,8 @@ public class UserSelfITCase extends AbstractITCase {
         userPatch.setUsername(new StringReplacePatchItem.Builder().value(created.getUsername() + "XX").build());
         userPatch.getMemberships().add(new MembershipPatch.Builder().
                 operation(PatchOperation.ADD_REPLACE).
-                membershipTO(new MembershipTO.Builder().group(7L).build()).
+                membershipTO(new MembershipTO.Builder().
+                        group("bf825fe1-7320-4a54-bd64-143b5c18ab97").build()).
                 build());
         userPatch.getResources().add(new StringPatchItem.Builder().
                 operation(PatchOperation.ADD_REPLACE).value(RESOURCE_NAME_TESTDB).build());
@@ -251,7 +253,7 @@ public class UserSelfITCase extends AbstractITCase {
 
         // 1. create an user with security question and answer
         UserTO user = UserITCase.getUniqueSampleTO("pwdReset@syncope.apache.org");
-        user.setSecurityQuestion(1L);
+        user.setSecurityQuestion("887028ea-66fc-41e7-b397-620d7ea6dfbb");
         user.setSecurityAnswer("Rossi");
         user.getResources().add(RESOURCE_NAME_TESTDB);
         createUser(user);
@@ -350,7 +352,7 @@ public class UserSelfITCase extends AbstractITCase {
     public void mustChangePassword() {
         // PRE: reset vivaldi's password
         UserPatch userPatch = new UserPatch();
-        userPatch.setKey(3L);
+        userPatch.setKey("b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee");
         userPatch.setPassword(new PasswordPatch.Builder().value("password321").build());
         userService.update(userPatch);
 
@@ -361,7 +363,7 @@ public class UserSelfITCase extends AbstractITCase {
 
         // 1. update user vivaldi (3) requirig password update
         userPatch = new UserPatch();
-        userPatch.setKey(3L);
+        userPatch.setKey("b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee");
         userPatch.setMustChangePassword(new BooleanReplacePatchItem.Builder().value(true).build());
         UserTO vivaldi = updateUser(userPatch).getAny();
         assertTrue(vivaldi.isMustChangePassword());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java
index ecb83d0..32c8269 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java
@@ -61,29 +61,30 @@ public class UserWorkflowITCase extends AbstractITCase {
         userTO.getResources().add(RESOURCE_NAME_TESTDB);
 
         // User with group 9 are defined in workflow as subject to approval
-        userTO.getMemberships().add(new MembershipTO.Builder().group(9L).build());
+        userTO.getMemberships().add(
+                new MembershipTO.Builder().group("0cbcabd2-4410-4b6b-8f05-a052b451d18f").build());
 
         // 1. create user with group 9
         userTO = createUser(userTO).getAny();
         assertNotNull(userTO);
         assertEquals(1, userTO.getMemberships().size());
-        assertEquals(9, userTO.getMemberships().get(0).getRightKey());
+        assertEquals("0cbcabd2-4410-4b6b-8f05-a052b451d18f", userTO.getMemberships().get(0).getRightKey());
         assertEquals("createApproval", userTO.getStatus());
 
         // 2. request if there is any pending task for user just created
         WorkflowFormTO form = userWorkflowService.getFormForUser(userTO.getKey());
         assertNotNull(form);
         assertNotNull(form.getUserKey());
-        assertEquals(userTO.getKey(), form.getUserKey(), 0);
+        assertEquals(userTO.getKey(), form.getUserKey());
         assertNotNull(form.getTaskId());
         assertNull(form.getOwner());
 
         // 3. claim task as rossini, with role "User manager" granting entitlement to claim forms but not in group 7,
         // designated for approval in workflow definition: fail
-        UserTO rossini = userService.read(1L);
+        UserTO rossini = userService.read("1417acbe-cbf6-4277-9372-e75e04f97000");
         if (!rossini.getRoles().contains("User manager")) {
             UserPatch userPatch = new UserPatch();
-            userPatch.setKey(1L);
+            userPatch.setKey("1417acbe-cbf6-4277-9372-e75e04f97000");
             userPatch.getRoles().add(new StringPatchItem.Builder().
                     operation(PatchOperation.ADD_REPLACE).value("User manager").build());
             rossini = updateUser(userPatch).getAny();
@@ -141,15 +142,16 @@ public class UserWorkflowITCase extends AbstractITCase {
         UserTO userTO = UserITCase.getUniqueSampleTO("createWithApproval@syncope.apache.org");
         userTO.getResources().add(RESOURCE_NAME_TESTDB);
 
-        // User with group 9 are defined in workflow as subject to approval
-        userTO.getMemberships().add(new MembershipTO.Builder().group(9L).build());
+        // User with group 0cbcabd2-4410-4b6b-8f05-a052b451d18f are defined in workflow as subject to approval
+        userTO.getMemberships().add(
+                new MembershipTO.Builder().group("0cbcabd2-4410-4b6b-8f05-a052b451d18f").build());
 
         // 1. create user with group 9 (and verify that no propagation occurred)
         ProvisioningResult<UserTO> result = createUser(userTO);
         assertNotNull(result);
         userTO = result.getAny();
         assertEquals(1, userTO.getMemberships().size());
-        assertEquals(9, userTO.getMemberships().get(0).getRightKey());
+        assertEquals("0cbcabd2-4410-4b6b-8f05-a052b451d18f", userTO.getMemberships().get(0).getRightKey());
         assertEquals("createApproval", userTO.getStatus());
         assertEquals(Collections.singleton(RESOURCE_NAME_TESTDB), userTO.getResources());
 
@@ -226,13 +228,14 @@ public class UserWorkflowITCase extends AbstractITCase {
         userTO.getDerAttrs().clear();
         userTO.getMemberships().clear();
 
-        // User with group 9 are defined in workflow as subject to approval
-        userTO.getMemberships().add(new MembershipTO.Builder().group(9L).build());
+        // Users with group 0cbcabd2-4410-4b6b-8f05-a052b451d18f are defined in workflow as subject to approval
+        userTO.getMemberships().add(
+                new MembershipTO.Builder().group("0cbcabd2-4410-4b6b-8f05-a052b451d18f").build());
 
         // 1. create user with group 9 (and verify that no propagation occurred)
         userTO = createUser(userTO).getAny();
         assertNotNull(userTO);
-        assertNotEquals(0L, userTO.getKey(), 0);
+        assertNotEquals(0L, userTO.getKey());
         assertNotNull(userTO.getCreationDate());
         assertNotNull(userTO.getCreator());
         assertNotNull(userTO.getLastChangeDate());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java
index b51670b..04fc00a 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java
@@ -73,7 +73,8 @@ public class VirAttrITCase extends AbstractITCase {
         UserTO userTO = UserITCase.getUniqueSampleTO("issue16@apache.org");
         userTO.getVirAttrs().add(attrTO("virtualdata", "virtualvalue"));
         userTO.getResources().add(RESOURCE_NAME_DBVIRATTR);
-        userTO.getMemberships().add(new MembershipTO.Builder().group(8L).build());
+        userTO.getMemberships().add(
+                new MembershipTO.Builder().group("f779c0d4-633b-4be5-8f57-32eb478a3ca5").build());
 
         // 1. create user
         userTO = createUser(userTO).getAny();
@@ -450,7 +451,7 @@ public class VirAttrITCase extends AbstractITCase {
     @Test
     public void issueSYNCOPE453() {
         String resourceName = "issueSYNCOPE453-Res-" + getUUIDString();
-        Long groupKey = null;
+        String groupKey = null;
         String groupName = "issueSYNCOPE453-Group-" + getUUIDString();
 
         try {
@@ -466,7 +467,7 @@ public class VirAttrITCase extends AbstractITCase {
                 rvirtualdata = new VirSchemaTO();
                 rvirtualdata.setKey("rvirtualdata");
                 rvirtualdata.setExtAttrName("businessCategory");
-                rvirtualdata.setProvision(20);
+                rvirtualdata.setProvision("20a75199-3f2e-4b9a-9510-c68dd7fc7b3d");
 
                 rvirtualdata = createSchema(SchemaType.VIRTUAL, rvirtualdata);
             }
@@ -489,7 +490,7 @@ public class VirAttrITCase extends AbstractITCase {
             ResourceTO resourceTO = new ResourceTO();
 
             resourceTO.setKey(resourceName);
-            resourceTO.setConnector(107L);
+            resourceTO.setConnector("be24b061-019d-4e3e-baf0-0a6d0a45cb9c");
 
             ProvisionTO provisionTO = new ProvisionTO();
             provisionTO.setAnyType(AnyTypeKind.USER.name());
@@ -501,7 +502,7 @@ public class VirAttrITCase extends AbstractITCase {
             provisionTO.setMapping(mapping);
 
             MappingItemTO item = new MappingItemTO();
-            item.setIntAttrName("aLong");
+            item.setIntAttrName("fullname");
             item.setIntMappingType(IntMappingType.UserPlainSchema);
             item.setExtAttrName("ID");
             item.setPurpose(MappingPurpose.PROPAGATION);
@@ -541,7 +542,7 @@ public class VirAttrITCase extends AbstractITCase {
             // Create new user
             // -------------------------------------------
             UserTO userTO = UserITCase.getUniqueSampleTO("syncope453@syncope.apache.org");
-            userTO.getPlainAttrs().add(attrTO("aLong", "123"));
+            userTO.getPlainAttrs().add(attrTO("fullname", "123"));
             userTO.getResources().clear();
             userTO.getResources().add(resourceName);
             userTO.getVirAttrs().clear();
@@ -560,9 +561,9 @@ public class VirAttrITCase extends AbstractITCase {
 
             Map<String, Object> actuals = jdbcTemplate.queryForMap(
                     "SELECT id, surname, email FROM testpull WHERE id=?",
-                    new Object[] { Integer.parseInt(userTO.getPlainAttrMap().get("aLong").getValues().get(0)) });
+                    new Object[] { userTO.getPlainAttrMap().get("fullname").getValues().get(0) });
 
-            assertEquals(userTO.getPlainAttrMap().get("aLong").getValues().get(0), actuals.get("id").toString());
+            assertEquals(userTO.getPlainAttrMap().get("fullname").getValues().get(0), actuals.get("id").toString());
             assertEquals("ml@group.it", actuals.get("email"));
             // -------------------------------------------
         } finally {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirSchemaITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirSchemaITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirSchemaITCase.java
index 01ce60f..84d378a 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirSchemaITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirSchemaITCase.java
@@ -66,7 +66,7 @@ public class VirSchemaITCase extends AbstractITCase {
 
         schema = createSchema(SchemaType.VIRTUAL, schema);
         assertNotNull(schema);
-        assertEquals(csv.getProvisions().get(0).getKey(), schema.getProvision(), 0);
+        assertEquals(csv.getProvisions().get(0).getKey(), schema.getProvision());
 
         csv = resourceService.read(RESOURCE_NAME_CSV);
         assertNotNull(csv);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/resources/console.properties
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/resources/console.properties b/fit/core-reference/src/test/resources/console.properties
index 0de5557..b197ef0 100644
--- a/fit/core-reference/src/test/resources/console.properties
+++ b/fit/core-reference/src/test/resources/console.properties
@@ -30,7 +30,7 @@ rootPath=/syncope/rest/
 
 activitiModelerDirectory=${activiti-modeler.directory}
 
-reconciliationReportKey=2
+reconciliationReportKey=c3520ad9-179f-49e7-b315-d684d216dd97
 
 page.dashboard=org.apache.syncope.client.console.pages.Dashboard
 page.realms=org.apache.syncope.client.console.pages.Realms

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/core-reference/src/test/resources/rebel.xml
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/resources/rebel.xml b/fit/core-reference/src/test/resources/rebel.xml
index b025aa9..a14db81 100644
--- a/fit/core-reference/src/test/resources/rebel.xml
+++ b/fit/core-reference/src/test/resources/rebel.xml
@@ -41,6 +41,7 @@ under the License.
     </dir>
     <dir name="${basedir}/../../core/persistence-jpa/target/classes">
       <exclude name="persistenceContext.xml"/>
+      <exclude name="org/apache/syncope/core/persistence/jpa/entity/**"/>
     </dir>
     <dir name="${basedir}/../../core/provisioning-api/target/classes">
     </dir>

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/fit/enduser-reference/src/test/resources/rebel.xml
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/rebel.xml b/fit/enduser-reference/src/test/resources/rebel.xml
index b65a463..eca8af7 100644
--- a/fit/enduser-reference/src/test/resources/rebel.xml
+++ b/fit/enduser-reference/src/test/resources/rebel.xml
@@ -34,7 +34,7 @@ under the License.
       </dir>
     </link>
     <link target="/">
-      <dir name="${basedir}/../../client/enduser/target/classes">
+      <dir name="${basedir}/../../client/enduser/target/classes/META-INF/resources">
       </dir>
     </link>
   </web>

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 80bc895..ab044ed 100644
--- a/pom.xml
+++ b/pom.xml
@@ -598,7 +598,12 @@ under the License.
         <artifactId>openjpa-persistence-jdbc</artifactId>
         <version>${openjpa.version}</version>
       </dependency>
-    
+      <dependency>
+        <groupId>com.fasterxml.uuid</groupId>
+        <artifactId>java-uuid-generator</artifactId>
+        <version>3.1.4</version>
+      </dependency>
+
       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-dbcp2</artifactId>
@@ -1854,7 +1859,7 @@ under the License.
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-site-plugin</artifactId>
-            <version>3.5</version>
+            <version>3.5.1</version>
             <dependencies>
               <dependency>
                 <groupId>org.apache.velocity</groupId>


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
index 61d1d48..1f2e693 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
@@ -86,7 +86,7 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends AjaxWizardBui
 
     @Override
     protected Serializable onApplyInternal(final SchedTaskTO modelObject) {
-        if (modelObject.getKey() == null || modelObject.getKey() == 0L) {
+        if (modelObject.getKey() == null) {
             taskRestClient.create(modelObject);
         } else {
             taskRestClient.update(modelObject);
@@ -167,7 +167,7 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends AjaxWizardBui
                     new PropertyModel<String>(taskTO, "jobDelegateClassName"), false);
             jobDelegateClassName.setChoices(taskJobClasses.getObject());
             jobDelegateClassName.addRequiredLabel();
-            jobDelegateClassName.setEnabled(taskTO.getKey() == null || taskTO.getKey() == 0L);
+            jobDelegateClassName.setEnabled(taskTO.getKey() == null);
             jobDelegateClassName.setStyleSheet("ui-widget-content ui-corner-all long_dynamicsize");
             add(jobDelegateClassName);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java
index d674349..84025e0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java
@@ -36,6 +36,7 @@ import org.apache.syncope.client.console.rest.TaskRestClient;
 import org.apache.syncope.client.console.tasks.TaskExecutions.TaskExecProvider;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
@@ -90,7 +91,7 @@ public abstract class TaskExecutions
     protected List<IColumn<ExecTO, String>> getColumns() {
         final List<IColumn<ExecTO, String>> columns = new ArrayList<>();
 
-        columns.add(new PropertyColumn<ExecTO, String>(new ResourceModel("key"), "key", "key"));
+        columns.add(new KeyPropertyColumn<ExecTO>(new ResourceModel("key"), "key", "key"));
 
         columns.add(new DatePropertyColumn<ExecTO>(new ResourceModel("start"), "start", "start"));
 
@@ -184,11 +185,11 @@ public abstract class TaskExecutions
 
         private final SortableDataProviderComparator<ExecTO> comparator;
 
-        private final Long taskId;
+        private final String taskKey;
 
-        public TaskExecProvider(final Long taskId, final int paginatorRows) {
+        public TaskExecProvider(final String taskKey, final int paginatorRows) {
             super(paginatorRows);
-            this.taskId = taskId;
+            this.taskKey = taskKey;
             comparator = new SortableDataProviderComparator<>(this);
         }
 
@@ -199,14 +200,14 @@ public abstract class TaskExecutions
         @Override
         public Iterator<ExecTO> iterator(final long first, final long count) {
             final int page = ((int) first / paginatorRows);
-            List<ExecTO> list = taskRestClient.listExecutions(taskId, (page < 0 ? 0 : page) + 1, paginatorRows);
+            List<ExecTO> list = taskRestClient.listExecutions(taskKey, (page < 0 ? 0 : page) + 1, paginatorRows);
             Collections.sort(list, comparator);
             return list.iterator();
         }
 
         @Override
         public long size() {
-            return taskRestClient.countExecutions(taskId);
+            return taskRestClient.countExecutions(taskKey);
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
index 6f7210a..a3b7e30 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
@@ -210,7 +210,7 @@ public class Topology extends BasePage {
 
         // required to retrieve parent positions
         final Map<String, TopologyNode> servers = new HashMap<>();
-        final Map<Long, TopologyNode> connectors = new HashMap<>();
+        final Map<String, TopologyNode> connectors = new HashMap<>();
         // -----------------------------------------
 
         // -----------------------------------------
@@ -338,7 +338,7 @@ public class Topology extends BasePage {
                         topologynode.setX(x);
                         topologynode.setY(y);
 
-                        connectors.put(Long.class.cast(topologynode.getKey()), topologynode);
+                        connectors.put(String.class.cast(topologynode.getKey()), topologynode);
                         item.add(topologyNodePanel("conn", topologynode));
 
                         // Update connections
@@ -366,7 +366,7 @@ public class Topology extends BasePage {
         // -----------------------------------------
         // Add Resources
         // -----------------------------------------
-        final List<Long> connToBeProcessed = new ArrayList<>();
+        final List<String> connToBeProcessed = new ArrayList<>();
         for (ResourceTO resourceTO : resModel.getObject()) {
             final TopologyNode topologynode = new TopologyNode(
                     resourceTO.getKey(), resourceTO.getKey(), TopologyNode.Kind.RESOURCE);
@@ -387,16 +387,16 @@ public class Topology extends BasePage {
             }
         }
 
-        final ListView<Long> resources = new ListView<Long>("resources", connToBeProcessed) {
+        final ListView<String> resources = new ListView<String>("resources", connToBeProcessed) {
 
             private static final long serialVersionUID = 697862187148836038L;
 
             @Override
-            protected void populateItem(final ListItem<Long> item) {
-                final Long connectorId = item.getModelObject();
+            protected void populateItem(final ListItem<String> item) {
+                final String connectorKey = item.getModelObject();
 
                 final ListView<TopologyNode> innerListView = new ListView<TopologyNode>("resources",
-                        new ArrayList<>(connections.get(connectorId).values())) {
+                        new ArrayList<>(connections.get(connectorKey).values())) {
 
                     private static final long serialVersionUID = 1L;
 
@@ -405,7 +405,7 @@ public class Topology extends BasePage {
                     @Override
                     protected void populateItem(final ListItem<TopologyNode> item) {
                         final TopologyNode topologynode = item.getModelObject();
-                        final TopologyNode parent = connectors.get(connectorId);
+                        final TopologyNode parent = connectors.get(connectorKey);
 
                         // Set position
                         int kx = size >= 16 ? 800 : (48 * size);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
index 0c83e9b..2f405c7 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
@@ -181,7 +181,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
             @Override
             public void onClick(final AjaxRequestTarget target) {
                 try {
-                    connectorRestClient.delete(Long.class.cast(node.getKey()));
+                    connectorRestClient.delete(String.class.cast(node.getKey()));
                     target.appendJavaScript(String.format("jsPlumb.remove('%s');", node.getKey()));
                     info(getString(Constants.OPERATION_SUCCEEDED));
                 } catch (SyncopeClientException e) {
@@ -201,7 +201,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
             @Override
             public void onClick(final AjaxRequestTarget target) {
                 final ResourceTO modelObject = new ResourceTO();
-                modelObject.setConnector(Long.class.cast(node.getKey()));
+                modelObject.setConnector(String.class.cast(node.getKey()));
                 modelObject.setConnectorDisplayName(node.getDisplayName());
 
                 final IModel<ResourceTO> model = new CompoundPropertyModel<>(modelObject);
@@ -227,7 +227,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
             @Override
             public void onClick(final AjaxRequestTarget target) {
-                final ConnInstanceTO modelObject = connectorRestClient.read(Long.class.cast(node.getKey()));
+                final ConnInstanceTO modelObject = connectorRestClient.read(String.class.cast(node.getKey()));
 
                 final IModel<ConnInstanceTO> model = new CompoundPropertyModel<>(modelObject);
                 modal.setFormModel(model);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java
index e8b1edc..dbb30bc 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java
@@ -51,9 +51,9 @@ public class TopologyWebSocketBehavior extends WebSocketBehavior {
 
     private final Set<String> runningResCheck = new HashSet<>();
 
-    private final Map<Long, String> connectors = new HashMap<>();
+    private final Map<String, String> connectors = new HashMap<>();
 
-    private final Set<Long> runningConnCheck = new HashSet<>();
+    private final Set<String> runningConnCheck = new HashSet<>();
 
     private final ConnectorRestClient connectorRestClient = new ConnectorRestClient();
 
@@ -66,7 +66,7 @@ public class TopologyWebSocketBehavior extends WebSocketBehavior {
 
             switch (Topology.SupportedOperation.valueOf(obj.get("kind").asText())) {
                 case CHECK_CONNECTOR:
-                    final Long ckey = obj.get("target").asLong();
+                    final String ckey = obj.get("target").asText();
 
                     if (connectors.containsKey(ckey)) {
                         handler.push(connectors.get(ckey));
@@ -122,13 +122,13 @@ public class TopologyWebSocketBehavior extends WebSocketBehavior {
 
     class ConnCheck implements Runnable {
 
-        private final Long key;
+        private final String key;
 
         private final Application application;
 
         private final Session session;
 
-        ConnCheck(final Long key) {
+        ConnCheck(final String key) {
             this.key = key;
             this.application = Application.get();
             this.session = Session.exists() ? Session.get() : null;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/KeyPropertyColumn.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/KeyPropertyColumn.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/KeyPropertyColumn.java
new file mode 100644
index 0000000..281189a
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/KeyPropertyColumn.java
@@ -0,0 +1,60 @@
+/*
+ * 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.client.console.wicket.extensions.markup.html.repeater.data.table;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.IModel;
+import org.springframework.beans.BeanWrapper;
+import org.springframework.beans.BeanWrapperImpl;
+
+/**
+ * Format column's UUID value.
+ */
+public class KeyPropertyColumn<T> extends PropertyColumn<T, String> {
+
+    private static final long serialVersionUID = 3527840552172947705L;
+
+    public KeyPropertyColumn(final IModel<String> displayModel, final String sortProperty,
+            final String propertyExpression) {
+
+        super(displayModel, sortProperty, propertyExpression);
+    }
+
+    @Override
+    public void populateItem(final Item<ICellPopulator<T>> item, final String componentId, final IModel<T> rowModel) {
+        BeanWrapper bwi = new BeanWrapperImpl(rowModel.getObject());
+        Object obj = bwi.getPropertyValue(getPropertyExpression());
+
+        item.add(new Label(componentId, StringUtils.EMPTY));
+        item.add(new AttributeModifier("title", obj.toString()));
+        item.add(new AttributeModifier("class", "fa fa-key"));
+        item.add(new AttributeModifier("style", "display: table-cell; text-align: center;"));
+    }
+
+    @Override
+    public String getCssClass() {
+        return "keyColumn";
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/PolicyRenderer.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/PolicyRenderer.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/PolicyRenderer.java
index a3fdbb0..2b05c1b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/PolicyRenderer.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/PolicyRenderer.java
@@ -22,24 +22,24 @@ import java.util.Map;
 import org.apache.wicket.markup.html.form.ChoiceRenderer;
 import org.apache.wicket.model.IModel;
 
-public class PolicyRenderer extends ChoiceRenderer<Long> {
+public class PolicyRenderer extends ChoiceRenderer<String> {
 
     private static final long serialVersionUID = 8060500161321947000L;
 
-    private final IModel<Map<Long, String>> policies;
+    private final IModel<Map<String, String>> policies;
 
-    public PolicyRenderer(final IModel<Map<Long, String>> policies) {
+    public PolicyRenderer(final IModel<Map<String, String>> policies) {
         super();
         this.policies = policies;
     }
 
     @Override
-    public Object getDisplayValue(final Long object) {
+    public Object getDisplayValue(final String object) {
         return policies.getObject().get(object);
     }
 
     @Override
-    public String getIdValue(final Long object, final int index) {
+    public String getIdValue(final String object, final int index) {
         return String.valueOf(object != null ? object : 0L);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
index fabebc8..743d321 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
@@ -101,7 +101,7 @@ public class ReconciliationWidget extends BaseWidget {
 
     private static final int ROWS = 10;
 
-    private final Long reconciliationReportKey;
+    private final String reconciliationReportKey;
 
     private final BaseModal<Any> detailsModal = new BaseModal<>("detailsModal");
 
@@ -292,7 +292,7 @@ public class ReconciliationWidget extends BaseWidget {
             }
         }
 
-        return Pair.of(beans, report);
+        return Pair.of(beans, report == null ? new ReconciliationReport(new Date()) : report);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/widgets/reconciliation/Any.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/reconciliation/Any.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/reconciliation/Any.java
index 5e915b4..f0fde29 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/widgets/reconciliation/Any.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/widgets/reconciliation/Any.java
@@ -28,7 +28,7 @@ public class Any extends AbstractBaseBean {
 
     private String type;
 
-    private long key;
+    private String key;
 
     private String name;
 
@@ -44,11 +44,11 @@ public class Any extends AbstractBaseBean {
         this.type = type;
     }
 
-    public long getKey() {
+    public String getKey() {
         return 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/client/console/src/main/java/org/apache/syncope/client/console/widgets/reconciliation/ReconciliationReportParser.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/reconciliation/ReconciliationReportParser.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/reconciliation/ReconciliationReportParser.java
index 9a795d1..dc86a7b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/widgets/reconciliation/ReconciliationReportParser.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/widgets/reconciliation/ReconciliationReportParser.java
@@ -64,7 +64,7 @@ public final class ReconciliationReportParser {
                     case "user":
                         user = new Any();
                         user.setType(AnyTypeKind.USER.name());
-                        user.setKey(Long.valueOf(streamReader.getAttributeValue("", "key")));
+                        user.setKey(streamReader.getAttributeValue("", "key"));
                         user.setName(streamReader.getAttributeValue("", "username"));
                         report.getUsers().getAnys().add(user);
                         break;
@@ -78,7 +78,7 @@ public final class ReconciliationReportParser {
                     case "group":
                         group = new Any();
                         group.setType(AnyTypeKind.GROUP.name());
-                        group.setKey(Long.valueOf(streamReader.getAttributeValue("", "key")));
+                        group.setKey(streamReader.getAttributeValue("", "key"));
                         group.setName(streamReader.getAttributeValue("", "groupName"));
                         report.getGroups().getAnys().add(group);
                         break;
@@ -94,7 +94,7 @@ public final class ReconciliationReportParser {
                     case "anyObject":
                         anyObject = new Any();
                         anyObject.setType(lastAnyType);
-                        anyObject.setKey(Long.valueOf(streamReader.getAttributeValue("", "key")));
+                        anyObject.setKey(streamReader.getAttributeValue("", "key"));
                         final String anyType = lastAnyType;
                         IterableUtils.find(report.getAnyObjects(), new Predicate<Anys>() {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
index 14fc6c7..b95983e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
@@ -53,7 +53,7 @@ public abstract class AbstractAttrs extends WizardStep {
 
     protected Set<String> getAllAuxClasses() {
         final List<MembershipTO> memberships;
-        final List<Long> dyngroups;
+        final List<String> dyngroups;
         if (entityTO instanceof UserTO) {
             memberships = UserTO.class.cast(entityTO).getMemberships();
             dyngroups = UserTO.class.cast(entityTO).getDynGroups();
@@ -62,7 +62,7 @@ public abstract class AbstractAttrs extends WizardStep {
             dyngroups = AnyObjectTO.class.cast(entityTO).getDynGroups();
         } else {
             memberships = Collections.<MembershipTO>emptyList();
-            dyngroups = Collections.<Long>emptyList();
+            dyngroups = Collections.<String>emptyList();
         }
 
         final List<GroupTO> groups = new ArrayList<>();
@@ -75,10 +75,10 @@ public abstract class AbstractAttrs extends WizardStep {
             }
         }, groups);
 
-        CollectionUtils.collect(dyngroups, new Transformer<Long, GroupTO>() {
+        CollectionUtils.collect(dyngroups, new Transformer<String, GroupTO>() {
 
             @Override
-            public GroupTO transform(final Long input) {
+            public GroupTO transform(final String input) {
                 return groupRestClient.read(input);
             }
         }, groups);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
index 8404b2f..6198ce3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
@@ -52,7 +52,7 @@ public class AnyObjectWizardBuilder extends AnyWizardBuilder<AnyObjectTO> implem
 
         final ProvisioningResult<AnyObjectTO> actual;
 
-        if (inner.getKey() == null || inner.getKey() == 0) {
+        if (inner.getKey() == null) {
             actual = anyObjectRestClient.create(AnyObjectTO.class.cast(inner));
         } else {
             final AnyObjectPatch patch = AnyOperations.diff(inner, getOriginalItem().getInnerObject(), false);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java
index 6fae131..ae5b657 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java
@@ -105,7 +105,7 @@ public abstract class AnyWizardBuilder<T extends AnyTO> extends AjaxWizardBuilde
 
     protected AnyWizardBuilder<T> addOptionalDetailsPanel(
             final AnyHandler<T> modelObject, final WizardModel wizardModel) {
-        if (modelObject.getInnerObject().getKey() != null && modelObject.getInnerObject().getKey() > 0) {
+        if (modelObject.getInnerObject().getKey() != null) {
             wizardModel.add(new Details<>(
                     modelObject, new ListModel<>(Collections.<StatusBean>emptyList()), pageRef, true));
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
index 5115a99..47e6669 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
@@ -57,14 +57,14 @@ public class AuxClasses extends WizardStep {
             fragment = new Fragment("groups", "groupsFragment", this);
 
             final List<MembershipTO> memberships;
-            final List<Long> dyngroups;
+            final List<String> dyngroups;
 
             if (entityTO instanceof GroupableTO) {
                 memberships = GroupableTO.class.cast(entityTO).getMemberships();
                 dyngroups = GroupableTO.class.cast(entityTO).getDynGroups();
             } else {
                 memberships = Collections.<MembershipTO>emptyList();
-                dyngroups = Collections.<Long>emptyList();
+                dyngroups = Collections.<String>emptyList();
             }
 
             final AjaxPalettePanel.Builder<MembershipTO> builder = new AjaxPalettePanel.Builder<MembershipTO>().
@@ -116,9 +116,9 @@ public class AuxClasses extends WizardStep {
                         public MembershipTO transform(final GroupTO input) {
                             final MembershipTO membershipTO = new MembershipTO();
                             membershipTO.setGroupName(input.getName());
-                            membershipTO.setRightKey(input.getKey() == null ? 0L : input.getKey());
+                            membershipTO.setRightKey(input.getKey() == null ? null : input.getKey());
                             membershipTO.setRightType(input.getType());
-                            membershipTO.setLeftKey(entityTO.getKey() == null ? 0L : entityTO.getKey());
+                            membershipTO.setLeftKey(entityTO.getKey() == null ? null : entityTO.getKey());
                             membershipTO.setLeftType(entityTO.getType());
                             return membershipTO;
                         }
@@ -126,12 +126,12 @@ public class AuxClasses extends WizardStep {
                 }
             }).hideLabel().setOutputMarkupId(true));
 
-            final ArrayList<String> dynamics = CollectionUtils.collect(dyngroups, new Transformer<Long, String>() {
+            List<String> dynamics = CollectionUtils.collect(dyngroups, new Transformer<String, String>() {
 
                 @Override
-                public String transform(final Long input) {
+                public String transform(final String input) {
                     final GroupTO groupTO = groupRestClient.read(input);
-                    return String.format("[%d] %s", groupTO.getKey(), groupTO.getName());
+                    return String.format("[%s] %s", groupTO.getKey(), groupTO.getName());
                 }
             }, new ArrayList<String>());
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java
index bb7e03f..b5e8374 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java
@@ -60,8 +60,7 @@ public class DerAttrs extends AbstractAttrs {
             @Override
             protected List<AttrTO> load() {
                 List<String> anyTypeClasses = CollectionUtils.collect(anyTypeClassRestClient.list(getAllAuxClasses()),
-                        EntityTOUtils.<String, AnyTypeClassTO>keyTransformer(),
-                        new ArrayList<>(Arrays.asList(anyTypeClass)));
+                        EntityTOUtils.<AnyTypeClassTO>keyTransformer(), new ArrayList<>(Arrays.asList(anyTypeClass)));
 
                 List<DerSchemaTO> derSchemas = Collections.emptyList();
                 if (!anyTypeClasses.isEmpty()) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
index c77d190..e45afa4 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
@@ -71,7 +71,7 @@ public class GroupWizardBuilder extends AnyWizardBuilder<GroupTO> {
                 ? GroupHandler.class.cast(modelObject).fillDynamicConditions()
                 : modelObject.getInnerObject();
 
-        if (toBeProcessed.getKey() == null || toBeProcessed.getKey() == 0) {
+        if (toBeProcessed.getKey() == null) {
             actual = groupRestClient.create(toBeProcessed);
         } else {
             final GroupPatch patch = AnyOperations.diff(toBeProcessed, getOriginalItem().getInnerObject(), false);
@@ -94,7 +94,7 @@ public class GroupWizardBuilder extends AnyWizardBuilder<GroupTO> {
                 GroupHandler.class.cast(modelObject),
                 new ListModel<>(Collections.<StatusBean>emptyList()),
                 false, pageRef,
-                modelObject.getInnerObject().getKey() != null && modelObject.getInnerObject().getKey() > 0));
+                modelObject.getInnerObject().getKey() != null));
         return this;
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
index 69df4ba..2f0d03e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
@@ -200,7 +200,7 @@ public class Ownership extends WizardStep {
                     if (userTO == null) {
                         return StringUtils.EMPTY;
                     } else {
-                        return String.format("[%d] %s", userTO.getKey(), userTO.getUsername());
+                        return String.format("[%s] %s", userTO.getKey(), userTO.getUsername());
                     }
                 }
             }
@@ -212,7 +212,7 @@ public class Ownership extends WizardStep {
                 } else {
                     final Matcher matcher = owner.matcher(object);
                     if (matcher.matches()) {
-                        groupHandler.getInnerObject().setUserOwner(Long.parseLong(matcher.group(1)));
+                        groupHandler.getInnerObject().setUserOwner(matcher.group(1));
                     }
                 }
             }
@@ -248,7 +248,7 @@ public class Ownership extends WizardStep {
                     if (groupTO == null) {
                         return StringUtils.EMPTY;
                     } else {
-                        return String.format("[%d] %s", groupTO.getKey(), groupTO.getName());
+                        return String.format("[%s] %s", groupTO.getKey(), groupTO.getName());
                     }
                 }
             }
@@ -260,7 +260,7 @@ public class Ownership extends WizardStep {
                 } else {
                     final Matcher matcher = owner.matcher(object);
                     if (matcher.matches()) {
-                        groupHandler.getInnerObject().setGroupOwner(Long.parseLong(matcher.group(1)));
+                        groupHandler.getInnerObject().setGroupOwner(matcher.group(1));
                     }
                 }
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
index 8613d35..6c17cdd 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
@@ -81,8 +81,7 @@ public class PlainAttrs extends AbstractAttrs {
             @Override
             protected List<AttrTO> load() {
                 setPlainSchemas(CollectionUtils.collect(anyTypeClassRestClient.list(getAllAuxClasses()),
-                        EntityTOUtils.<String, AnyTypeClassTO>keyTransformer(),
-                        new ArrayList<>(Arrays.asList(anyTypeClass))));
+                        EntityTOUtils.<AnyTypeClassTO>keyTransformer(), new ArrayList<>(Arrays.asList(anyTypeClass))));
                 setAttrs();
                 return new ArrayList<>(entityTO.getPlainAttrs());
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
index e6c9c89..88b1bc5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
@@ -226,8 +226,7 @@ public class Relationships extends WizardStep {
 
             final ArrayList<String> availableRels = CollectionUtils.collect(
                     SyncopeConsoleSession.get().getService(RelationshipTypeService.class).list(),
-                    EntityTOUtils.<String, RelationshipTypeTO>keyTransformer(),
-                    new ArrayList<String>());
+                    EntityTOUtils.<RelationshipTypeTO>keyTransformer(), new ArrayList<String>());
 
             final AjaxDropDownChoicePanel<String> type = new AjaxDropDownChoicePanel<>(
                     "type", "type", new PropertyModel<String>(rel, "type"));

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
index 96a1157..e014c7b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
@@ -53,7 +53,7 @@ public class Resources extends WizardStep {
                 entityTO.getResources().addAll(object);
             }
         }, new ListModel<>(CollectionUtils.collect(new ResourceRestClient().list(),
-                        EntityTOUtils.<String, ResourceTO>keyTransformer(),
-                        new ArrayList<String>()))).hideLabel().setOutputMarkupId(true));
+                        EntityTOUtils.<ResourceTO>keyTransformer(), new ArrayList<String>()))).
+                hideLabel().setOutputMarkupId(true));
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
index c21d4c0..594ea44 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
@@ -39,8 +39,7 @@ public class Roles extends WizardStep {
         this.setOutputMarkupId(true);
 
         final ArrayList<String> allRoles = CollectionUtils.collect(new RoleRestClient().getAll(),
-                EntityTOUtils.<String, RoleTO>keyTransformer(),
-                new ArrayList<String>());
+                EntityTOUtils.<RoleTO>keyTransformer(), new ArrayList<String>());
 
         add(new AjaxPalettePanel.Builder<String>().build("roles",
                 new PropertyModel<List<String>>(entityTO, "roles"),

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
index c529728..fab7ace 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
@@ -186,7 +186,7 @@ public class StatusPanel extends Panel {
     }
 
     private Pair<ConnObjectTO, ConnObjectTO> getConnObjectTO(
-            final Long anyKey, final String resourceName, final List<Pair<ConnObjectTO, ConnObjectWrapper>> objects) {
+            final String anyKey, final String resourceName, final List<Pair<ConnObjectTO, ConnObjectWrapper>> objects) {
 
         for (Pair<ConnObjectTO, ConnObjectWrapper> object : objects) {
             if (anyKey.equals(object.getRight().getAny().getKey())

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
index c791942..eb1d490 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
@@ -63,7 +63,7 @@ public class UserWizardBuilder extends AnyWizardBuilder<UserTO> {
 
         final UserTO inner = modelObject.getInnerObject();
 
-        if (inner.getKey() == null || inner.getKey() == 0) {
+        if (inner.getKey() == null) {
             actual = userRestClient.create(inner, StringUtils.isNotBlank(inner.getPassword()));
         } else {
             final UserPatch patch = AnyOperations.diff(inner, getOriginalItem().getInnerObject(), false);
@@ -86,9 +86,10 @@ public class UserWizardBuilder extends AnyWizardBuilder<UserTO> {
     @Override
     protected UserWizardBuilder addOptionalDetailsPanel(
             final AnyHandler<UserTO> modelObject, final WizardModel wizardModel) {
+
         wizardModel.add(new UserDetails(
                 modelObject, statusModel, false, false, pageRef,
-                modelObject.getInnerObject().getKey() != null && modelObject.getInnerObject().getKey() > 0));
+                modelObject.getInnerObject().getKey() != null));
         return this;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
index 3589d66..f5dab16 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
@@ -58,8 +58,7 @@ public class VirAttrs extends AbstractAttrs {
             @Override
             protected List<AttrTO> load() {
                 List<String> anyTypeClasses = CollectionUtils.collect(anyTypeClassRestClient.list(getAllAuxClasses()),
-                        EntityTOUtils.<String, AnyTypeClassTO>keyTransformer(),
-                        new ArrayList<>(Arrays.asList(anyTypeClass)));
+                        EntityTOUtils.<AnyTypeClassTO>keyTransformer(), new ArrayList<>(Arrays.asList(anyTypeClass)));
 
                 List<VirSchemaTO> virSchemas = Collections.emptyList();
                 if (!anyTypeClasses.isEmpty()) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java
index 28fda4a..a64705f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java
@@ -73,7 +73,7 @@ public class ConnectorDetailsPanel extends WizardStep {
         }, new ArrayList<String>()));
         bundleName.addRequiredLabel();
         bundleName.setOutputMarkupId(true);
-        bundleName.setEnabled(connInstanceTO.getKey() == null || connInstanceTO.getKey() == 0);
+        bundleName.setEnabled(connInstanceTO.getKey() == null);
         bundleName.getField().setOutputMarkupId(true);
         add(bundleName);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder.java
index 87963db..c5a81bc 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ProvisionWizardBuilder.java
@@ -77,7 +77,7 @@ public class ProvisionWizardBuilder extends AjaxWizardBuilder<ProvisionTO> imple
             final List<String> res = new ArrayList<>();
 
             CollectionUtils.filter(CollectionUtils.collect(new AnyTypeRestClient().list(),
-                    EntityTOUtils.<String, AnyTypeTO>keyTransformer(), res),
+                    EntityTOUtils.<AnyTypeTO>keyTransformer(), res),
                     new Predicate<String>() {
 
                 @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
index b8be9a6..ab200e0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
@@ -96,7 +96,7 @@ public abstract class ResourceConnConfPanel extends AbstractConnConfPanel<Resour
     protected final List<ConnConfProperty> getConnProperties(final ResourceTO resourceTO) {
         List<ConnConfProperty> props = new ArrayList<>();
 
-        if (resourceTO.getConnector() != null && resourceTO.getConnector() > 0) {
+        if (resourceTO.getConnector() != null) {
             for (ConnConfProperty property : restClient.read(resourceTO.getConnector()).getConf()) {
                 if (property.isOverridable()) {
                     props.add(property);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java
index 281b0b7..46f1b4d 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java
@@ -152,7 +152,7 @@ public class ResourceMappingPanel extends Panel {
         this.mappingContainer.setOutputMarkupId(true);
         add(this.mappingContainer);
 
-        if (resourceTO.getConnector() != null && resourceTO.getConnector() > 0) {
+        if (resourceTO.getConnector() != null) {
             schemaNames = getSchemaNames(resourceTO.getConnector(), resourceTO.getConfOverride());
             setEnabled();
         } else {
@@ -469,7 +469,7 @@ public class ResourceMappingPanel extends Panel {
             }
         };
         addMappingBtn.setDefaultFormProcessing(false);
-        addMappingBtn.setEnabled(resourceTO.getConnector() != null && resourceTO.getConnector() > 0);
+        addMappingBtn.setEnabled(resourceTO.getConnector() != null);
         mappingContainer.add(addMappingBtn);
     }
 
@@ -479,9 +479,9 @@ public class ResourceMappingPanel extends Panel {
         passwordLabel.setVisible(AnyTypeKind.USER.name().equals(this.provisionTO.getAnyType()));
     }
 
-    private List<String> getSchemaNames(final Long connectorId, final Set<ConnConfProperty> conf) {
+    private List<String> getSchemaNames(final String connectorKey, final Set<ConnConfProperty> conf) {
         final ConnInstanceTO connInstanceTO = new ConnInstanceTO();
-        connInstanceTO.setKey(connectorId);
+        connInstanceTO.setKey(connectorKey);
         connInstanceTO.getConf().addAll(conf);
 
         // SYNCOPE-156: use provided info to give schema names (and type!) by ObjectClass

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java
index 67aaf9b..a6e4470 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java
@@ -95,7 +95,7 @@ public class ResourceProvisionPanel extends WizardStep {
                     @Override
                     public void onClick(final AjaxRequestTarget target, final ProvisionTO provisionTO) {
                         final ProvisionTO clone = SerializationUtils.clone(provisionTO);
-                        clone.setKey(0L);
+                        clone.setKey(null);
                         clone.setAnyType(null);
                         clone.setObjectClass(null);
                         send(pageRef.getPage(), Broadcast.DEPTH, new AjaxWizard.NewItemActionEvent<>(clone, target));

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.java
index 1661893..f3ff8f5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceSecurityPanel.java
@@ -41,13 +41,13 @@ public class ResourceSecurityPanel extends WizardStep {
 
     private final PolicyRestClient policyRestClient = new PolicyRestClient();
 
-    private final IModel<Map<Long, String>> passwordPolicies = new LoadableDetachableModel<Map<Long, String>>() {
+    private final IModel<Map<String, String>> passwordPolicies = new LoadableDetachableModel<Map<String, String>>() {
 
         private static final long serialVersionUID = 5275935387613157437L;
 
         @Override
-        protected Map<Long, String> load() {
-            Map<Long, String> res = new HashMap<>();
+        protected Map<String, String> load() {
+            Map<String, String> res = new HashMap<>();
             for (AbstractPolicyTO policyTO : policyRestClient.getPolicies(PolicyType.PASSWORD)) {
                 res.put(policyTO.getKey(), policyTO.getDescription());
             }
@@ -55,13 +55,13 @@ public class ResourceSecurityPanel extends WizardStep {
         }
     };
 
-    private final IModel<Map<Long, String>> accountPolicies = new LoadableDetachableModel<Map<Long, String>>() {
+    private final IModel<Map<String, String>> accountPolicies = new LoadableDetachableModel<Map<String, String>>() {
 
         private static final long serialVersionUID = -2012833443695917883L;
 
         @Override
-        protected Map<Long, String> load() {
-            Map<Long, String> res = new HashMap<>();
+        protected Map<String, String> load() {
+            Map<String, String> res = new HashMap<>();
             for (AbstractPolicyTO policyTO : policyRestClient.getPolicies(PolicyType.ACCOUNT)) {
                 res.put(policyTO.getKey(), policyTO.getDescription());
             }
@@ -69,13 +69,13 @@ public class ResourceSecurityPanel extends WizardStep {
         }
     };
 
-    private final IModel<Map<Long, String>> pullPolicies = new LoadableDetachableModel<Map<Long, String>>() {
+    private final IModel<Map<String, String>> pullPolicies = new LoadableDetachableModel<Map<String, String>>() {
 
         private static final long serialVersionUID = -2012833443695917883L;
 
         @Override
-        protected Map<Long, String> load() {
-            Map<Long, String> res = new HashMap<>();
+        protected Map<String, String> load() {
+            Map<String, String> res = new HashMap<>();
             for (AbstractPolicyTO policyTO : policyRestClient.getPolicies(PolicyType.PULL)) {
                 res.put(policyTO.getKey(), policyTO.getDescription());
             }
@@ -95,10 +95,10 @@ public class ResourceSecurityPanel extends WizardStep {
         // -------------------------------
         // Password policy selection
         // -------------------------------
-        AjaxDropDownChoicePanel<Long> passwordPolicy = new AjaxDropDownChoicePanel<>(
+        AjaxDropDownChoicePanel<String> passwordPolicy = new AjaxDropDownChoicePanel<>(
                 "passwordPolicy",
                 new ResourceModel("passwordPolicy", "passwordPolicy").getObject(),
-                new PropertyModel<Long>(resourceTO, "passwordPolicy"),
+                new PropertyModel<String>(resourceTO, "passwordPolicy"),
                 false);
         passwordPolicy.setChoiceRenderer(new PolicyRenderer(passwordPolicies));
         passwordPolicy.setChoices(new ArrayList<>(passwordPolicies.getObject().keySet()));
@@ -109,10 +109,10 @@ public class ResourceSecurityPanel extends WizardStep {
         // -------------------------------
         // Account policy selection
         // -------------------------------
-        AjaxDropDownChoicePanel<Long> accountPolicy = new AjaxDropDownChoicePanel<>(
+        AjaxDropDownChoicePanel<String> accountPolicy = new AjaxDropDownChoicePanel<>(
                 "accountPolicy",
                 new ResourceModel("accountPolicy", "accountPolicy").getObject(),
-                new PropertyModel<Long>(resourceTO, "accountPolicy"),
+                new PropertyModel<String>(resourceTO, "accountPolicy"),
                 false);
         accountPolicy.setChoiceRenderer(new PolicyRenderer(accountPolicies));
         accountPolicy.setChoices(new ArrayList<>(accountPolicies.getObject().keySet()));
@@ -123,10 +123,10 @@ public class ResourceSecurityPanel extends WizardStep {
         // -------------------------------
         // Pull policy selection
         // -------------------------------
-        AjaxDropDownChoicePanel<Long> pullPolicy = new AjaxDropDownChoicePanel<>(
+        AjaxDropDownChoicePanel<String> pullPolicy = new AjaxDropDownChoicePanel<>(
                 "pullPolicy",
                 new ResourceModel("pullPolicy", "pullPolicy").getObject(),
-                new PropertyModel<Long>(resourceTO, "pullPolicy"),
+                new PropertyModel<String>(resourceTO, "pullPolicy"),
                 false);
         pullPolicy.setChoiceRenderer(new PolicyRenderer(pullPolicies));
         pullPolicy.setChoices(new ArrayList<>(pullPolicies.getObject().keySet()));

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
index fb8431a..851ba8e 100644
--- a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
+++ b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
@@ -725,4 +725,8 @@ div#userFilter  #warning{
 
 div#userFilter  #check {
   margin: 1px 0 5px 8px;
+}
+
+.keyColumn {
+  width: 20px;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/resources/console.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/console.properties b/client/console/src/main/resources/console.properties
index 24169f5..c5676a9 100644
--- a/client/console/src/main/resources/console.properties
+++ b/client/console/src/main/resources/console.properties
@@ -30,7 +30,7 @@ rootPath=/syncope/rest/
 
 activitiModelerDirectory=${activiti-modeler.directory}
 
-reconciliationReportKey=1
+reconciliationReportKey=c3520ad9-179f-49e7-b315-d684d216dd97
 
 page.dashboard=org.apache.syncope.client.console.pages.Dashboard
 page.realms=org.apache.syncope.client.console.pages.Realms

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
index b0b812f..6b583cc 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
@@ -42,7 +42,7 @@ dropDownChoiceField.nullValid=Choose one
 DateTimeField$HoursValidator=Hour value must be in range (1, 12)
 error=Error
 generic_error=An error occurred during the operation
-id=Id
+id=Key
 name=Name
 palette.available=Available
 palette.selected=Selected

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
index 0f0b351..0858a0d 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
@@ -41,7 +41,7 @@ dropDownChoiceField.nullValid=Seleziona
 DateTimeField$HoursValidator=L'ora deve essere nell'intervallo (1,12)
 error=Errore
 generic_error=Si \u00e8 verificato un errore durante l'operazione
-id=Id
+id=Chiave
 name=Nome
 palette.available=Opzioni
 palette.selected=Selezione

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
index 005df32..8dd50da 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
@@ -41,7 +41,7 @@ dropDownChoiceField.nullValid=Escolha um
 DateTimeField$HoursValidator=O seu valor precisa estar entre (1, 12)
 error=Erro
 generic_error=Um erro ocorreu durante a opera\u00e7\u00e3o
-id=Id
+id=Key
 name=Nome
 palette.available=Dispon\u00ed\u00advel
 palette.selected=Selecionado

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
index 4b5f41e..1bb9e32 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
@@ -14,110 +14,110 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-# users=Пользователи
+# users=\u00d0\u009f\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b8
 users=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438
-# groups=Группы
+# groups=\u00d0\u0093\u00d1\u0080\u00d1\u0083\u00d0\u00bf\u00d0\u00bf\u00d1\u008b
 groups=\u0413\u0440\u0443\u043f\u043f\u044b
-# configuration=Конфигурация
+# configuration=\u00d0\u009a\u00d0\u00be\u00d0\u00bd\u00d1\u0084\u00d0\u00b8\u00d0\u00b3\u00d1\u0083\u00d1\u0080\u00d0\u00b0\u00d1\u0086\u00d0\u00b8\u00d1\u008f
 configuration=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f
-# resources=Ресурсы
+# resources=\u00d0\u00a0\u00d0\u00b5\u00d1\u0081\u00d1\u0083\u00d1\u0080\u00d1\u0081\u00d1\u008b
 resources=\u0420\u0435\u0441\u0443\u0440\u0441\u044b
-# connectors=Коннекторы
+# connectors=\u00d0\u009a\u00d0\u00be\u00d0\u00bd\u00d0\u00bd\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d1\u0080\u00d1\u008b
 connectors=\u041a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b
-# reports=Отчеты
+# reports=\u00d0\u009e\u00d1\u0082\u00d1\u0087\u00d0\u00b5\u00d1\u0082\u00d1\u008b
 reports=\u041e\u0442\u0447\u0435\u0442\u044b
-# tasks=Задачи
+# tasks=\u00d0\u0097\u00d0\u00b0\u00d0\u00b4\u00d0\u00b0\u00d1\u0087\u00d0\u00b8
 tasks=\u0417\u0430\u0434\u0430\u0447\u0438
-# logout=Выйти
+# logout=\u00d0\u0092\u00d1\u008b\u00d0\u00b9\u00d1\u0082\u00d0\u00b8
 logout=\u0412\u044b\u0439\u0442\u0438
-# schema=Атрибут
+# schema=\u00d0\u0090\u00d1\u0082\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d1\u0083\u00d1\u0082
 schema=\u0410\u0442\u0440\u0438\u0431\u0443\u0442
-# operation_succeeded=Операция выполнена успешно
+# operation_succeeded=\u00d0\u009e\u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b0\u00d1\u0086\u00d0\u00b8\u00d1\u008f \u00d0\u00b2\u00d1\u008b\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00b0 \u00d1\u0083\u00d1\u0081\u00d0\u00bf\u00d0\u00b5\u00d1\u0088\u00d0\u00bd\u00d0\u00be
 operation_succeeded=\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e
-# operation_error=Во время выполнения запроса произошла ошибка
+# operation_error=\u00d0\u0092\u00d0\u00be \u00d0\u00b2\u00d1\u0080\u00d0\u00b5\u00d0\u00bc\u00d1\u008f \u00d0\u00b2\u00d1\u008b\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008f \u00d0\u00b7\u00d0\u00b0\u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d1\u0081\u00d0\u00b0 \u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d0\u00b8\u00d0\u00b7\u00d0\u00be\u00d1\u0088\u00d0\u00bb\u00d0\u00b0 \u00d0\u00be\u00d1\u0088\u00d0\u00b8\u00d0\u00b1\u00d0\u00ba\u00d0\u00b0
 operation_error=\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430
-# alert=Предупреждение:
+# alert=\u00d0\u009f\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d1\u0083\u00d0\u00bf\u00d1\u0080\u00d0\u00b5\u00d0\u00b6\u00d0\u00b4\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5:
 alert=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435:
-# confirmDelete=Вы действительно хотите удалить выбранные объекты?
+# confirmDelete=\u00d0\u0092\u00d1\u008b \u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00be \u00d1\u0085\u00d0\u00be\u00d1\u0082\u00d0\u00b8\u00d1\u0082\u00d0\u00b5 \u00d1\u0083\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d0\u00b2\u00d1\u008b\u00d0\u00b1\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008b\u00d0\u00b5 \u00d0\u00be\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d1\u008b?
 confirmDelete=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b?
-# confirmUnlink=Вы действительно хотите удалить связь между выбранными объектами и ресурсом?
+# confirmUnlink=\u00d0\u0092\u00d1\u008b \u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00be \u00d1\u0085\u00d0\u00be\u00d1\u0082\u00d0\u00b8\u00d1\u0082\u00d0\u00b5 \u00d1\u0083\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d1\u0081\u00d0\u00b2\u00d1\u008f\u00d0\u00b7\u00d1\u008c \u00d0\u00bc\u00d0\u00b5\u00d0\u00b6\u00d0\u00b4\u00d1\u0083 \u00d0\u00b2\u00d1\u008b\u00d0\u00b1\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008b\u00d0\u00bc\u00d0\u00b8 \u00d0\u00be\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00b0\u00d0\u00bc\u00d0\u00b8 \u00d0\u00b8 \u00d1\u0080\u00d0\u00b5\u00d1\u0081\u00d1\u0083\u00d1\u0080\u00d1\u0081\u00d0\u00be\u00d0\u00bc?
 confirmUnlink=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c?
-# confirmUnassign=Вы действительно хотите удалить назначение ресурса для выбранных объектов?
+# confirmUnassign=\u00d0\u0092\u00d1\u008b \u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00be \u00d1\u0085\u00d0\u00be\u00d1\u0082\u00d0\u00b8\u00d1\u0082\u00d0\u00b5 \u00d1\u0083\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d0\u00bd\u00d0\u00b0\u00d0\u00b7\u00d0\u00bd\u00d0\u00b0\u00d1\u0087\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5 \u00d1\u0080\u00d0\u00b5\u00d1\u0081\u00d1\u0083\u00d1\u0080\u00d1\u0081\u00d0\u00b0 \u00d0\u00b4\u00d0\u00bb\u00d1\u008f \u00d0\u00b2\u00d1\u008b\u00d0\u00b1\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008b\u00d1\u0085 \u00d0\u00be\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d0\u00b2?
 confirmUnassign=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0434\u043b\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432?
-# confirmDeprovision=Вы действительно хотите отозвать выбранные объекты?
+# confirmDeprovision=\u00d0\u0092\u00d1\u008b \u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00be \u00d1\u0085\u00d0\u00be\u00d1\u0082\u00d0\u00b8\u00d1\u0082\u00d0\u00b5 \u00d0\u00be\u00d1\u0082\u00d0\u00be\u00d0\u00b7\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d1\u008c \u00d0\u00b2\u00d1\u008b\u00d0\u00b1\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008b\u00d0\u00b5 \u00d0\u00be\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d1\u008b?
 confirmDeprovision=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043e\u0437\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b?
-# confirmProvision=Вы действительно хотите предоставить выбранные объекты?
+# confirmProvision=\u00d0\u0092\u00d1\u008b \u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00be \u00d1\u0085\u00d0\u00be\u00d1\u0082\u00d0\u00b8\u00d1\u0082\u00d0\u00b5 \u00d0\u00bf\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00be\u00d1\u0081\u00d1\u0082\u00d0\u00b0\u00d0\u00b2\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d0\u00b2\u00d1\u008b\u00d0\u00b1\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008b\u00d0\u00b5 \u00d0\u00be\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d1\u008b?
 confirmProvision=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b?
 
-# unauthorizedInstantiationException=Ошибка авторизации
+# unauthorizedInstantiationException=\u00d0\u009e\u00d1\u0088\u00d0\u00b8\u00d0\u00b1\u00d0\u00ba\u00d0\u00b0 \u00d0\u00b0\u00d0\u00b2\u00d1\u0082\u00d0\u00be\u00d1\u0080\u00d0\u00b8\u00d0\u00b7\u00d0\u00b0\u00d1\u0086\u00d0\u00b8\u00d0\u00b8
 unauthorizedInstantiationException=\u041e\u0448\u0438\u0431\u043a\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.
-# accessControlException=Ошибка авторизации при взаимодействии с ядром Syncope
+# accessControlException=\u00d0\u009e\u00d1\u0088\u00d0\u00b8\u00d0\u00b1\u00d0\u00ba\u00d0\u00b0 \u00d0\u00b0\u00d0\u00b2\u00d1\u0082\u00d0\u00be\u00d1\u0080\u00d0\u00b8\u00d0\u00b7\u00d0\u00b0\u00d1\u0086\u00d0\u00b8\u00d0\u00b8 \u00d0\u00bf\u00d1\u0080\u00d0\u00b8 \u00d0\u00b2\u00d0\u00b7\u00d0\u00b0\u00d0\u00b8\u00d0\u00bc\u00d0\u00be\u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d0\u00b8 \u00d1\u0081 \u00d1\u008f\u00d0\u00b4\u00d1\u0080\u00d0\u00be\u00d0\u00bc Syncope
 accessControlException=\u041e\u0448\u0438\u0431\u043a\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0441 \u044f\u0434\u0440\u043e\u043c Syncope.
-# restClientException=Ошибка взаимодействия с ядром Syncope
+# restClientException=\u00d0\u009e\u00d1\u0088\u00d0\u00b8\u00d0\u00b1\u00d0\u00ba\u00d0\u00b0 \u00d0\u00b2\u00d0\u00b7\u00d0\u00b0\u00d0\u00b8\u00d0\u00bc\u00d0\u00be\u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d1\u008f \u00d1\u0081 \u00d1\u008f\u00d0\u00b4\u00d1\u0080\u00d0\u00be\u00d0\u00bc Syncope
 restClientException=\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u044f\u0434\u0440\u043e\u043c Syncope
-# pageExpiredException=Время действия сессии истекло, пожалуйста, выполните повторный вход
+# pageExpiredException=\u00d0\u0092\u00d1\u0080\u00d0\u00b5\u00d0\u00bc\u00d1\u008f \u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d1\u008f \u00d1\u0081\u00d0\u00b5\u00d1\u0081\u00d1\u0081\u00d0\u00b8\u00d0\u00b8 \u00d0\u00b8\u00d1\u0081\u00d1\u0082\u00d0\u00b5\u00d0\u00ba\u00d0\u00bb\u00d0\u00be, \u00d0\u00bf\u00d0\u00be\u00d0\u00b6\u00d0\u00b0\u00d0\u00bb\u00d1\u0083\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b0, \u00d0\u00b2\u00d1\u008b\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d0\u00b5 \u00d0\u00bf\u00d0\u00be\u00d0\u00b2\u00d1\u0082\u00d0\u00be\u00d1\u0080\u00d0\u00bd\u00d1\u008b\u00d0\u00b9 \u00d0\u00b2\u00d1\u0085\u00d0\u00be\u00d0\u00b4
 pageExpiredException=\u0412\u0440\u0435\u043c\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438 \u0438\u0441\u0442\u0435\u043a\u043b\u043e, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0432\u0445\u043e\u0434
-# dropDownChoiceField.nullValid=Выберите значение
+# dropDownChoiceField.nullValid=\u00d0\u0092\u00d1\u008b\u00d0\u00b1\u00d0\u00b5\u00d1\u0080\u00d0\u00b8\u00d1\u0082\u00d0\u00b5 \u00d0\u00b7\u00d0\u00bd\u00d0\u00b0\u00d1\u0087\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
 dropDownChoiceField.nullValid=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435
-# DateTimeField$HoursValidator=Часы должны быть указаны в диапазоне (1, 12)
+# DateTimeField$HoursValidator=\u00d0\u00a7\u00d0\u00b0\u00d1\u0081\u00d1\u008b \u00d0\u00b4\u00d0\u00be\u00d0\u00bb\u00d0\u00b6\u00d0\u00bd\u00d1\u008b \u00d0\u00b1\u00d1\u008b\u00d1\u0082\u00d1\u008c \u00d1\u0083\u00d0\u00ba\u00d0\u00b0\u00d0\u00b7\u00d0\u00b0\u00d0\u00bd\u00d1\u008b \u00d0\u00b2 \u00d0\u00b4\u00d0\u00b8\u00d0\u00b0\u00d0\u00bf\u00d0\u00b0\u00d0\u00b7\u00d0\u00be\u00d0\u00bd\u00d0\u00b5 (1, 12)
 DateTimeField$HoursValidator=\u0427\u0430\u0441\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 (1, 12)
-# error=Ошибка
+# error=\u00d0\u009e\u00d1\u0088\u00d0\u00b8\u00d0\u00b1\u00d0\u00ba\u00d0\u00b0
 error=\u041e\u0448\u0438\u0431\u043a\u0430
-# generic_error=Во время выполнения операции произошла ошибка
+# generic_error=\u00d0\u0092\u00d0\u00be \u00d0\u00b2\u00d1\u0080\u00d0\u00b5\u00d0\u00bc\u00d1\u008f \u00d0\u00b2\u00d1\u008b\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008f \u00d0\u00be\u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b0\u00d1\u0086\u00d0\u00b8\u00d0\u00b8 \u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d0\u00b8\u00d0\u00b7\u00d0\u00be\u00d1\u0088\u00d0\u00bb\u00d0\u00b0 \u00d0\u00be\u00d1\u0088\u00d0\u00b8\u00d0\u00b1\u00d0\u00ba\u00d0\u00b0
 generic_error=\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430
-# id=№
-id=Id
-# name=Название
+# id=\u00e2\u0084\u0096
+id=Key
+# name=\u00d0\u009d\u00d0\u00b0\u00d0\u00b7\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
 name=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435
-# palette.available=Доступно
+# palette.available=\u00d0\u0094\u00d0\u00be\u00d1\u0081\u00d1\u0082\u00d1\u0083\u00d0\u00bf\u00d0\u00bd\u00d0\u00be
 palette.available=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e
-# palette.selected=Выбрано
+# palette.selected=\u00d0\u0092\u00d1\u008b\u00d0\u00b1\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d0\u00be
 palette.selected=\u0412\u044b\u0431\u0440\u0430\u043d\u043e
-# jexl_info=Это поле должно содержать JEXL выражение, например:
+# jexl_info=\u00d0\u00ad\u00d1\u0082\u00d0\u00be \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00b5 \u00d0\u00b4\u00d0\u00be\u00d0\u00bb\u00d0\u00b6\u00d0\u00bd\u00d0\u00be \u00d1\u0081\u00d0\u00be\u00d0\u00b4\u00d0\u00b5\u00d1\u0080\u00d0\u00b6\u00d0\u00b0\u00d1\u0082\u00d1\u008c JEXL \u00d0\u00b2\u00d1\u008b\u00d1\u0080\u00d0\u00b0\u00d0\u00b6\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5, \u00d0\u00bd\u00d0\u00b0\u00d0\u00bf\u00d1\u0080\u00d0\u00b8\u00d0\u00bc\u00d0\u00b5\u00d1\u0080:
 jexl_info=\u042d\u0442\u043e \u043f\u043e\u043b\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c JEXL \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:
 jexl_ex1=surname + ',' + firstname
 jexl_ex2='new.' + surname
-# jexl_syntax_url=Справка по JEXL
+# jexl_syntax_url=\u00d0\u00a1\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00ba\u00d0\u00b0 \u00d0\u00bf\u00d0\u00be JEXL
 jexl_syntax_url=\u0421\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u043e JEXL
-# create=Создать
+# create=\u00d0\u00a1\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d1\u0082\u00d1\u008c
 create=\u0421\u043e\u0437\u0434\u0430\u0442\u044c
-# key=Идентификатор
+# key=\u00d0\u0098\u00d0\u00b4\u00d0\u00b5\u00d0\u00bd\u00d1\u0082\u00d0\u00b8\u00d1\u0084\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0\u00d1\u0082\u00d0\u00be\u00d1\u0080
 key=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440
-# types=Типы объектов
+# types=\u00d0\u00a2\u00d0\u00b8\u00d0\u00bf\u00d1\u008b \u00d0\u00be\u00d0\u00b1\u00d1\u008a\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d0\u00b2
 types=\u0422\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432
-# dashboard=Панель
+# dashboard=\u00d0\u009f\u00d0\u00b0\u00d0\u00bd\u00d0\u00b5\u00d0\u00bb\u00d1\u008c
 dashboard=\u041f\u0430\u043d\u0435\u043b\u044c
-# realms=Области
+# realms=\u00d0\u009e\u00d0\u00b1\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d0\u00b8
 realms=\u041e\u0431\u043b\u0430\u0441\u0442\u0438
-# topology=Топология
+# topology=\u00d0\u00a2\u00d0\u00be\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00be\u00d0\u00b3\u00d0\u00b8\u00d1\u008f
 topology=\u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f
-# roles=Роли
+# roles=\u00d0\u00a0\u00d0\u00be\u00d0\u00bb\u00d0\u00b8
 roles=\u0420\u043e\u043b\u0438
-# policies=Политики
+# policies=\u00d0\u009f\u00d0\u00be\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d0\u00b8\u00d0\u00ba\u00d0\u00b8
 policies=\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0438
-# securityQuestions=Контрольные вопросы
+# securityQuestions=\u00d0\u009a\u00d0\u00be\u00d0\u00bd\u00d1\u0082\u00d1\u0080\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d1\u008b\u00d0\u00b5 \u00d0\u00b2\u00d0\u00be\u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d1\u0081\u00d1\u008b
 securityQuestions=\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b
-# workflow=Процесс согласования
+# workflow=\u00d0\u009f\u00d1\u0080\u00d0\u00be\u00d1\u0086\u00d0\u00b5\u00d1\u0081\u00d1\u0081 \u00d1\u0081\u00d0\u00be\u00d0\u00b3\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
 workflow=\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u044f
-# logs=Логирование
+# logs=\u00d0\u009b\u00d0\u00be\u00d0\u00b3\u00d0\u00b8\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
 logs=\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435
-# layouts=Разметка
+# layouts=\u00d0\u00a0\u00d0\u00b0\u00d0\u00b7\u00d0\u00bc\u00d0\u00b5\u00d1\u0082\u00d0\u00ba\u00d0\u00b0
 layouts=\u0420\u0430\u0437\u043c\u0435\u0442\u043a\u0430
-# notifications=Уведомления
+# notifications=\u00d0\u00a3\u00d0\u00b2\u00d0\u00b5\u00d0\u00b4\u00d0\u00be\u00d0\u00bc\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
 notifications=\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f
-# parameters=Параметры
+# parameters=\u00d0\u009f\u00d0\u00b0\u00d1\u0080\u00d0\u00b0\u00d0\u00bc\u00d0\u00b5\u00d1\u0082\u00d1\u0080\u00d1\u008b
 parameters=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b
-# extensions=Расширения
+# extensions=\u00d0\u00a0\u00d0\u00b0\u00d1\u0081\u00d1\u0088\u00d0\u00b8\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
 extensions=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f
-#NavigatorLabel=Строки ${from}-${to} из ${of}
+#NavigatorLabel=\u00d0\u00a1\u00d1\u0082\u00d1\u0080\u00d0\u00be\u00d0\u00ba\u00d0\u00b8 ${from}-${to} \u00d0\u00b8\u00d0\u00b7 ${of}
 NavigatorLabel=\u0421\u0442\u0440\u043e\u043a\u0438 ${from}-${to} \u0438\u0437 ${of}
-# displayRows=Показать по:
+# displayRows=\u00d0\u009f\u00d0\u00be\u00d0\u00ba\u00d0\u00b0\u00d0\u00b7\u00d0\u00b0\u00d1\u0082\u00d1\u008c \u00d0\u00bf\u00d0\u00be:
 displayRows=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e:
-# OrderByLink.CSS.ascending=сортировка_по_возрастанию sorting_asc
+# OrderByLink.CSS.ascending=\u00d1\u0081\u00d0\u00be\u00d1\u0080\u00d1\u0082\u00d0\u00b8\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00ba\u00d0\u00b0_\u00d0\u00bf\u00d0\u00be_\u00d0\u00b2\u00d0\u00be\u00d0\u00b7\u00d1\u0080\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008e sorting_asc
 OrderByLink.CSS.ascending=\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430_\u043f\u043e_\u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044e
-# OrderByLink.CSS.descending=сортировка_по_убыванию sorting_desc
+# OrderByLink.CSS.descending=\u00d1\u0081\u00d0\u00be\u00d1\u0080\u00d1\u0082\u00d0\u00b8\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00ba\u00d0\u00b0_\u00d0\u00bf\u00d0\u00be_\u00d1\u0083\u00d0\u00b1\u00d1\u008b\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008e sorting_desc
 OrderByLink.CSS.descending=\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430_\u043f\u043e_\u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e
-# OrderByLink.CSS.none=Сортировка
+# OrderByLink.CSS.none=\u00d0\u00a1\u00d0\u00be\u00d1\u0080\u00d1\u0082\u00d0\u00b8\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00ba\u00d0\u00b0
 OrderByLink.CSS.none=\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430
-# entitlements=Полномочия
+# entitlements=\u00d0\u009f\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d0\u00be\u00d0\u00bc\u00d0\u00be\u00d1\u0087\u00d0\u00b8\u00d1\u008f
 entitlements=\u041f\u043e\u043b\u043d\u043e\u043c\u043e\u0447\u0438\u044f

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel.properties
index 76b9809..6f9dee9 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel.properties
@@ -19,10 +19,8 @@ displayRows=Display rows
 mustChangePassword=Must Change Password
 firstname=Firstname
 surname=Surname
-userId=User Id
 edit=Edit
 delete=Delete
-id=Id
 status=Status
 token=Token
 username=Username

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_it.properties
index 85961e3..1087e6c 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_it.properties
@@ -19,13 +19,11 @@ displayRows=display rows
 mustChangePassword=Deve Cambiare Password
 firstname=Nome
 surname=Cognome
-userId=User Id
 edit=Edit
 delete=Rimuovi
-id=Id
 status=Stato
 token=Token
-username=Username
+username=Nome utente
 creationDate=Data Creazione
 tokenValued=Valorizzato
 tokenNotValued=Non valorizzato

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_pt_BR.properties
index 03119f7..4f013dd 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_pt_BR.properties
@@ -19,10 +19,8 @@ displayRows=Mostrar linhas
 mustChangePassword=Must Change Password
 firstname=Nome
 surname=Sobrenome
-userId=Identificador do Usu\u00e1rio
 edit=Alterar
 delete=Excluir
-id=Identificador
 status=Estatus
 token=Token
 username=Nome de Usu\u00e1rio


[24/24] syncope git commit: Adjusting Tomcat local archives

Posted by il...@apache.org.
Adjusting Tomcat local archives


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

Branch: refs/heads/master
Commit: 0df25dfb5c4f74904e79188fa50ace3aaf2982a8
Parents: 550ee4f
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Apr 18 16:05:35 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Apr 19 15:01:19 2016 +0200

----------------------------------------------------------------------
 standalone/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/0df25dfb/standalone/pom.xml
----------------------------------------------------------------------
diff --git a/standalone/pom.xml b/standalone/pom.xml
index 71f1af3..e3c40a0 100644
--- a/standalone/pom.xml
+++ b/standalone/pom.xml
@@ -137,7 +137,7 @@ under the License.
                 <copy file="NOTICE" todir="${work.dir}" />
 
                 <!-- Unzip Tomcat and remove docs and examples from webapps (space saving) -->
-                <unzip src="${settings.localRepository}/org/codehaus/cargo/cargo-container-archives/apache-tomcat-${tomcat.version}.zip" dest="${work.dir}" />
+                <unzip src="${settings.localRepository}/org/codehaus/cargo/cargo-container-archives/tomcat-${tomcat.version}.zip" dest="${work.dir}" />
                 <delete dir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/docs" />
                 <delete dir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/examples" />
 


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

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_ru.properties
index edc3b3a..72f0e33 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/DirectoryPanel_ru.properties
@@ -15,56 +15,52 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-# displayRows=Показать по
+# displayRows=\u00d0\u009f\u00d0\u00be\u00d0\u00ba\u00d0\u00b0\u00d0\u00b7\u00d0\u00b0\u00d1\u0082\u00d1\u008c \u00d0\u00bf\u00d0\u00be
 displayRows=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e
 
-# mustChangePassword=Требуется сменить пароль
+# mustChangePassword=\u00d0\u00a2\u00d1\u0080\u00d0\u00b5\u00d0\u00b1\u00d1\u0083\u00d0\u00b5\u00d1\u0082\u00d1\u0081\u00d1\u008f \u00d1\u0081\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d0\u00bf\u00d0\u00b0\u00d1\u0080\u00d0\u00be\u00d0\u00bb\u00d1\u008c
 mustChangePassword=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c
-# firstname=Имя
+# firstname=\u00d0\u0098\u00d0\u00bc\u00d1\u008f
 firstname=\u0418\u043c\u044f
-# surname=Фамилия
+# surname=\u00d0\u00a4\u00d0\u00b0\u00d0\u00bc\u00d0\u00b8\u00d0\u00bb\u00d0\u00b8\u00d1\u008f
 surname=\u0424\u0430\u043c\u0438\u043b\u0438\u044f
-# userId=Учетная запись пользователя
-userId=\u0423\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
-# edit=Изменить
+# edit=\u00d0\u0098\u00d0\u00b7\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c
 edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c
-# delete=Удалить
+# delete=\u00d0\u00a3\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d1\u008c
 delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
-# id=Id
-id=Id
-# status=Статус
+# status=\u00d0\u00a1\u00d1\u0082\u00d0\u00b0\u00d1\u0082\u00d1\u0083\u00d1\u0081
 status=\u0421\u0442\u0430\u0442\u0443\u0441
-# token=Токен
+# token=\u00d0\u00a2\u00d0\u00be\u00d0\u00ba\u00d0\u00b5\u00d0\u00bd
 token=\u0422\u043e\u043a\u0435\u043d
-# username=Имя пользователя
+# username=\u00d0\u0098\u00d0\u00bc\u00d1\u008f \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008f
 username=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
-# creationDate=Дата создания
+# creationDate=\u00d0\u0094\u00d0\u00b0\u00d1\u0082\u00d0\u00b0 \u00d1\u0081\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
 creationDate=\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f
-# tokenValued=Назначен
+# tokenValued=\u00d0\u009d\u00d0\u00b0\u00d0\u00b7\u00d0\u00bd\u00d0\u00b0\u00d1\u0087\u00d0\u00b5\u00d0\u00bd
 tokenValued=\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d
-# tokenNotValued=Отсутствует
+# tokenNotValued=\u00d0\u009e\u00d1\u0082\u00d1\u0081\u00d1\u0083\u00d1\u0082\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d1\u0083\u00d0\u00b5\u00d1\u0082
 tokenNotValued=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442
 
-# subject=Тема
+# subject=\u00d0\u00a2\u00d0\u00b5\u00d0\u00bc\u00d0\u00b0
 subject=\u0422\u0435\u043c\u0430
-# recipients=Получатели
+# recipients=\u00d0\u009f\u00d0\u00be\u00d0\u00bb\u00d1\u0083\u00d1\u0087\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b8
 recipients=\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438
 
-# any.edit=Изменить ${anyTO.type} ${anyTO.key}
+# any.edit=\u00d0\u0098\u00d0\u00b7\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c ${anyTO.type} ${anyTO.key}
 any.edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c ${anyTO.type} ${anyTO.key}
-# any.new=Создать ${anyTO.type}
+# any.new=\u00d0\u00a1\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d1\u0082\u00d1\u008c ${anyTO.type}
 any.new=\u0421\u043e\u0437\u0434\u0430\u0442\u044c ${anyTO.type}
-# any.finish=Сохранить ${anyTO.type}
+# any.finish=\u00d0\u00a1\u00d0\u00be\u00d1\u0085\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c ${anyTO.type}
 any.finish=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c ${anyTO.type}
-# any.cancel=Отменить ${anyTO.type}
+# any.cancel=\u00d0\u009e\u00d1\u0082\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c ${anyTO.type}
 any.cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c ${anyTO.type}
-# any.attr.display=Показывать атрибуты
+# any.attr.display=\u00d0\u009f\u00d0\u00be\u00d0\u00ba\u00d0\u00b0\u00d0\u00b7\u00d1\u008b\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d1\u008c \u00d0\u00b0\u00d1\u0082\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d1\u0083\u00d1\u0082\u00d1\u008b
 any.attr.display=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-# bulk.action=Массовое действие
+# bulk.action=\u00d0\u009c\u00d0\u00b0\u00d1\u0081\u00d1\u0081\u00d0\u00be\u00d0\u00b2\u00d0\u00be\u00d0\u00b5 \u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d0\u00b5
 bulk.action=\u041c\u0430\u0441\u0441\u043e\u0432\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435
-# any.propagation.tasks=Задачи выполнения действий для ${type} ${key}
+# any.propagation.tasks=\u00d0\u0097\u00d0\u00b0\u00d0\u00b4\u00d0\u00b0\u00d1\u0087\u00d0\u00b8 \u00d0\u00b2\u00d1\u008b\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008f \u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d0\u00b9 \u00d0\u00b4\u00d0\u00bb\u00d1\u008f ${type} ${key}
 any.propagation.tasks=\u0417\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0434\u043b\u044f ${type} ${key}
-# any.notification.tasks=Задачи отправки уведомлений для ${type} ${key}
+# any.notification.tasks=\u00d0\u0097\u00d0\u00b0\u00d0\u00b4\u00d0\u00b0\u00d1\u0087\u00d0\u00b8 \u00d0\u00be\u00d1\u0082\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00ba\u00d0\u00b8 \u00d1\u0083\u00d0\u00b2\u00d0\u00b5\u00d0\u00b4\u00d0\u00be\u00d0\u00bc\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b9 \u00d0\u00b4\u00d0\u00bb\u00d1\u008f ${type} ${key}
 any.notification.tasks=\u0417\u0430\u0434\u0430\u0447\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u0434\u043b\u044f ${type} ${key}
-# notification.tasks=Задачи отправки уведомлений ${key}
+# notification.tasks=\u00d0\u0097\u00d0\u00b0\u00d0\u00b4\u00d0\u00b0\u00d1\u0087\u00d0\u00b8 \u00d0\u00be\u00d1\u0082\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00ba\u00d0\u00b8 \u00d1\u0083\u00d0\u00b2\u00d0\u00b5\u00d0\u00b4\u00d0\u00be\u00d0\u00bc\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b9 ${key}
 notification.tasks=\u0417\u0430\u0434\u0430\u0447\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.properties
index bad8066..0d7b3df 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.properties
@@ -17,8 +17,6 @@
 profile=Profile
 executions=Executions
 title=Task
-
-key=Id
 start=Start date
 end=End date
 latestExecStatus=Last execution status

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel_it.properties
index cba15ec..6ed659d 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel_it.properties
@@ -17,8 +17,6 @@
 profile=Profilo
 executions=Esecuzioni
 title=Task
-
-key=Id
 start=Data di avvio
 end=Data di conclusione
 latestExecStatus=Stato ultima esecuzione

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel_pt_BR.properties
index f3c118a..63f8935 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel_pt_BR.properties
@@ -17,8 +17,6 @@
 profile=Profilo
 executions=Esecuzioni
 title=Task
-
-key=Id
 start=Data inicial
 end=Data Final
 latestExecStatus=Stato ultima esecuzione

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel_ru.properties
index 44ed76a..4edfdb1 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskDirectoryPanel_ru.properties
@@ -15,21 +15,18 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-# profile=Профиль
+# profile=\u00d0\u009f\u00d1\u0080\u00d0\u00be\u00d1\u0084\u00d0\u00b8\u00d0\u00bb\u00d1\u008c
 profile=\u041f\u0440\u043e\u0444\u0438\u043b\u044c
-# executions=Запуски задачи
+# executions=\u00d0\u0097\u00d0\u00b0\u00d0\u00bf\u00d1\u0083\u00d1\u0081\u00d0\u00ba\u00d0\u00b8 \u00d0\u00b7\u00d0\u00b0\u00d0\u00b4\u00d0\u00b0\u00d1\u0087\u00d0\u00b8
 executions=\u0417\u0430\u043f\u0443\u0441\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438
-# title=Задача
+# title=\u00d0\u0097\u00d0\u00b0\u00d0\u00b4\u00d0\u00b0\u00d1\u0087\u00d0\u00b0
 title=\u0417\u0430\u0434\u0430\u0447\u0430
-
-# key=Идентификатор
-key=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440
-# start=Дата начала
+# start=\u00d0\u0094\u00d0\u00b0\u00d1\u0082\u00d0\u00b0 \u00d0\u00bd\u00d0\u00b0\u00d1\u0087\u00d0\u00b0\u00d0\u00bb\u00d0\u00b0
 start=\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430
-# end=Дата окончания
+# end=\u00d0\u0094\u00d0\u00b0\u00d1\u0082\u00d0\u00b0 \u00d0\u00be\u00d0\u00ba\u00d0\u00be\u00d0\u00bd\u00d1\u0087\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
 end=\u0414\u0430\u0442\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f
-# latestExecStatus=Статус предыдущего запуска
+# latestExecStatus=\u00d0\u00a1\u00d1\u0082\u00d0\u00b0\u00d1\u0082\u00d1\u0083\u00d1\u0081 \u00d0\u00bf\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d1\u008b\u00d0\u00b4\u00d1\u0083\u00d1\u0089\u00d0\u00b5\u00d0\u00b3\u00d0\u00be \u00d0\u00b7\u00d0\u00b0\u00d0\u00bf\u00d1\u0083\u00d1\u0081\u00d0\u00ba\u00d0\u00b0
 latestExecStatus=\u0421\u0442\u0430\u0442\u0443\u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430
 
-# task.view=Запуски задачи
+# task.view=\u00d0\u0097\u00d0\u00b0\u00d0\u00bf\u00d1\u0083\u00d1\u0081\u00d0\u00ba\u00d0\u00b8 \u00d0\u00b7\u00d0\u00b0\u00d0\u00b4\u00d0\u00b0\u00d1\u0087\u00d0\u00b8
 task.view=\u0417\u0430\u043f\u0443\u0441\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 '${key}'

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
index b72a127..08bf3dc 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
@@ -37,7 +37,6 @@ import org.apache.syncope.common.lib.patch.PasswordPatch;
 import org.apache.syncope.common.lib.patch.RelationshipPatch;
 import org.apache.syncope.common.lib.patch.AbstractReplacePatchItem;
 import org.apache.syncope.common.lib.patch.BooleanReplacePatchItem;
-import org.apache.syncope.common.lib.patch.LongReplacePatchItem;
 import org.apache.syncope.common.lib.patch.StringPatchItem;
 import org.apache.syncope.common.lib.patch.StringReplacePatchItem;
 import org.apache.syncope.common.lib.patch.UserPatch;
@@ -175,10 +174,10 @@ public final class AnyOperations {
         diff(updated, original, result, incremental);
 
         // 1. relationships
-        Map<Pair<String, Long>, RelationshipTO> updatedRels = updated.getRelationshipMap();
-        Map<Pair<String, Long>, RelationshipTO> originalRels = original.getRelationshipMap();
+        Map<Pair<String, String>, RelationshipTO> updatedRels = updated.getRelationshipMap();
+        Map<Pair<String, String>, RelationshipTO> originalRels = original.getRelationshipMap();
 
-        for (Map.Entry<Pair<String, Long>, RelationshipTO> entry : updatedRels.entrySet()) {
+        for (Map.Entry<Pair<String, String>, RelationshipTO> entry : updatedRels.entrySet()) {
             if (!originalRels.containsKey(entry.getKey())) {
                 result.getRelationships().add(new RelationshipPatch.Builder().
                         operation(PatchOperation.ADD_REPLACE).
@@ -187,7 +186,7 @@ public final class AnyOperations {
         }
 
         if (!incremental) {
-            for (Pair<String, Long> key : CollectionUtils.subtract(originalRels.keySet(), updatedRels.keySet())) {
+            for (Pair<String, String> key : CollectionUtils.subtract(originalRels.keySet(), updatedRels.keySet())) {
                 result.getRelationships().add(new RelationshipPatch.Builder().
                         operation(PatchOperation.DELETE).
                         relationshipTO(originalRels.get(key)).build());
@@ -195,10 +194,10 @@ public final class AnyOperations {
         }
 
         // 2. memberships
-        Map<Long, MembershipTO> updatedMembs = updated.getMembershipMap();
-        Map<Long, MembershipTO> originalMembs = original.getMembershipMap();
+        Map<String, MembershipTO> updatedMembs = updated.getMembershipMap();
+        Map<String, MembershipTO> originalMembs = original.getMembershipMap();
 
-        for (Map.Entry<Long, MembershipTO> entry : updatedMembs.entrySet()) {
+        for (Map.Entry<String, MembershipTO> entry : updatedMembs.entrySet()) {
             if (!originalMembs.containsKey(entry.getKey())) {
                 result.getMemberships().add(new MembershipPatch.Builder().
                         operation(PatchOperation.ADD_REPLACE).membershipTO(entry.getValue()).build());
@@ -206,7 +205,7 @@ public final class AnyOperations {
         }
 
         if (!incremental) {
-            for (Long key : CollectionUtils.subtract(originalMembs.keySet(), updatedMembs.keySet())) {
+            for (String key : CollectionUtils.subtract(originalMembs.keySet(), updatedMembs.keySet())) {
                 result.getMemberships().add(new MembershipPatch.Builder().
                         operation(PatchOperation.DELETE).membershipTO(originalMembs.get(key)).build());
             }
@@ -246,8 +245,8 @@ public final class AnyOperations {
         } else if (!updated.getSecurityQuestion().equals(original.getSecurityQuestion())
                 || StringUtils.isNotBlank(updated.getSecurityAnswer())) {
 
-            result.setSecurityQuestion(
-                    new LongReplacePatchItem.Builder().value(updated.getSecurityQuestion()).build());
+            result.setSecurityQuestion(new StringReplacePatchItem.Builder().
+                    value(updated.getSecurityQuestion()).build());
             result.setSecurityAnswer(
                     new StringReplacePatchItem.Builder().value(updated.getSecurityAnswer()).build());
         }
@@ -269,10 +268,10 @@ public final class AnyOperations {
         }
 
         // 5. relationships
-        Map<Pair<String, Long>, RelationshipTO> updatedRels = updated.getRelationshipMap();
-        Map<Pair<String, Long>, RelationshipTO> originalRels = original.getRelationshipMap();
+        Map<Pair<String, String>, RelationshipTO> updatedRels = updated.getRelationshipMap();
+        Map<Pair<String, String>, RelationshipTO> originalRels = original.getRelationshipMap();
 
-        for (Map.Entry<Pair<String, Long>, RelationshipTO> entry : updatedRels.entrySet()) {
+        for (Map.Entry<Pair<String, String>, RelationshipTO> entry : updatedRels.entrySet()) {
             if (!originalRels.containsKey(entry.getKey())) {
                 result.getRelationships().add(new RelationshipPatch.Builder().
                         operation(PatchOperation.ADD_REPLACE).
@@ -281,7 +280,7 @@ public final class AnyOperations {
         }
 
         if (!incremental) {
-            for (Pair<String, Long> key : CollectionUtils.subtract(originalRels.keySet(), updatedRels.keySet())) {
+            for (Pair<String, String> key : CollectionUtils.subtract(originalRels.keySet(), updatedRels.keySet())) {
                 result.getRelationships().add(new RelationshipPatch.Builder().
                         operation(PatchOperation.DELETE).
                         relationshipTO(originalRels.get(key)).build());
@@ -289,10 +288,10 @@ public final class AnyOperations {
         }
 
         // 6. memberships
-        Map<Long, MembershipTO> updatedMembs = updated.getMembershipMap();
-        Map<Long, MembershipTO> originalMembs = original.getMembershipMap();
+        Map<String, MembershipTO> updatedMembs = updated.getMembershipMap();
+        Map<String, MembershipTO> originalMembs = original.getMembershipMap();
 
-        for (Map.Entry<Long, MembershipTO> entry : updatedMembs.entrySet()) {
+        for (Map.Entry<String, MembershipTO> entry : updatedMembs.entrySet()) {
             if (!originalMembs.containsKey(entry.getKey())) {
                 result.getMemberships().add(new MembershipPatch.Builder().
                         operation(PatchOperation.ADD_REPLACE).membershipTO(entry.getValue()).build());
@@ -300,7 +299,7 @@ public final class AnyOperations {
         }
 
         if (!incremental) {
-            for (Long key : CollectionUtils.subtract(originalMembs.keySet(), updatedMembs.keySet())) {
+            for (String key : CollectionUtils.subtract(originalMembs.keySet(), updatedMembs.keySet())) {
                 result.getMemberships().add(new MembershipPatch.Builder().
                         operation(PatchOperation.DELETE).membershipTO(originalMembs.get(key)).build());
             }
@@ -326,10 +325,10 @@ public final class AnyOperations {
         result.setName(replacePatchItem(updated.getName(), original.getName(), new StringReplacePatchItem()));
 
         // 2. ownership
-        result.setUserOwner(replacePatchItem(
-                updated.getUserOwner(), original.getUserOwner(), new LongReplacePatchItem()));
-        result.setGroupOwner(replacePatchItem(
-                updated.getGroupOwner(), original.getGroupOwner(), new LongReplacePatchItem()));
+        result.setUserOwner(
+                replacePatchItem(updated.getUserOwner(), original.getUserOwner(), new StringReplacePatchItem()));
+        result.setGroupOwner(replacePatchItem(updated.getGroupOwner(), original.getGroupOwner(),
+                new StringReplacePatchItem()));
 
         // 3. dynamic membership
         result.setUDynMembershipCond(updated.getUDynMembershipCond());
@@ -382,7 +381,7 @@ public final class AnyOperations {
 
     private static <T extends AnyTO, K extends AnyPatch> void patch(final T to, final K patch, final T result) {
         // check same key
-        if (to.getKey() == null || to.getKey() != patch.getKey()) {
+        if (to.getKey() == null || !to.getKey().equals(patch.getKey())) {
             throw new IllegalArgumentException(
                     to.getClass().getSimpleName() + " and " + patch.getClass().getSimpleName()
                     + " keys must be the same");

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java b/common/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
index 17123b5..a715992 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
@@ -41,11 +41,11 @@ public final class EntityTOUtils {
         ANY_FIELDS = Collections.unmodifiableList(anyFields);
     }
 
-    public static <KEY, E extends EntityTO<KEY>> Transformer<E, KEY> keyTransformer() {
-        return new Transformer<E, KEY>() {
+    public static <E extends EntityTO> Transformer<E, String> keyTransformer() {
+        return new Transformer<E, String>() {
 
             @Override
-            public KEY transform(final E input) {
+            public String transform(final E input) {
                 return input.getKey();
             }
         };

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java b/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java
index dbce5de..b084eb9 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java
@@ -58,6 +58,10 @@ public final class SyncopeConstants {
             + "@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
             Pattern.CASE_INSENSITIVE);
 
+    public static final String UUID_REGEX = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
+
+    public static final Pattern UUID_PATTERN = Pattern.compile(UUID_REGEX);
+
     private SyncopeConstants() {
         // private constructor for utility class
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AbstractReplacePatchItem.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AbstractReplacePatchItem.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AbstractReplacePatchItem.java
index e8f17f4..8282427 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AbstractReplacePatchItem.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AbstractReplacePatchItem.java
@@ -30,7 +30,7 @@ import org.apache.syncope.common.lib.types.PatchOperation;
  * @param <T> {@code String}, {@code Long} or {@code Boolean}
  */
 @XmlType
-@XmlSeeAlso({ BooleanReplacePatchItem.class, LongReplacePatchItem.class, StringReplacePatchItem.class })
+@XmlSeeAlso({ BooleanReplacePatchItem.class, StringReplacePatchItem.class })
 public abstract class AbstractReplacePatchItem<T> extends AbstractPatchItem<T> {
 
     private static final long serialVersionUID = 2027599764019829563L;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AnyPatch.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AnyPatch.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AnyPatch.java
index 48d7778..3ec141d 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AnyPatch.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AnyPatch.java
@@ -34,7 +34,7 @@ public abstract class AnyPatch extends AbstractBaseBean {
 
     private static final long serialVersionUID = -7445489774552440544L;
 
-    private long key;
+    private String key;
 
     private StringReplacePatchItem realm;
 
@@ -46,12 +46,12 @@ public abstract class AnyPatch extends AbstractBaseBean {
 
     private final Set<StringPatchItem> resources = new HashSet<>();
 
-    public long getKey() {
+    public String getKey() {
         return key;
     }
 
     @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/lib/src/main/java/org/apache/syncope/common/lib/patch/AssociationPatch.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AssociationPatch.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AssociationPatch.java
index 009b30d..56efe7e 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AssociationPatch.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AssociationPatch.java
@@ -29,16 +29,16 @@ public class AssociationPatch extends PasswordPatch {
 
     private static final long serialVersionUID = 6295778399633883767L;
 
-    private long key;
+    private String key;
 
     private ResourceAssociationAction action;
 
-    public long getKey() {
+    public String getKey() {
         return key;
     }
 
     @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/lib/src/main/java/org/apache/syncope/common/lib/patch/DeassociationPatch.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/DeassociationPatch.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/DeassociationPatch.java
index 1067753..e5271e0 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/DeassociationPatch.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/DeassociationPatch.java
@@ -35,18 +35,18 @@ public class DeassociationPatch extends AbstractBaseBean {
 
     private static final long serialVersionUID = 6295778399633883767L;
 
-    private long key;
+    private String key;
 
     private ResourceDeassociationAction action;
 
     private final List<String> resources = new ArrayList<>();
 
-    public long getKey() {
+    public String getKey() {
         return key;
     }
 
     @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/lib/src/main/java/org/apache/syncope/common/lib/patch/GroupPatch.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/GroupPatch.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/GroupPatch.java
index 262d15a..29353ff 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/GroupPatch.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/GroupPatch.java
@@ -42,9 +42,9 @@ public class GroupPatch extends AnyPatch {
 
     private StringReplacePatchItem name;
 
-    private LongReplacePatchItem userOwner;
+    private StringReplacePatchItem userOwner;
 
-    private LongReplacePatchItem groupOwner;
+    private StringReplacePatchItem groupOwner;
 
     private String udynMembershipCond;
 
@@ -62,19 +62,19 @@ public class GroupPatch extends AnyPatch {
         this.name = name;
     }
 
-    public LongReplacePatchItem getUserOwner() {
+    public StringReplacePatchItem getUserOwner() {
         return userOwner;
     }
 
-    public void setUserOwner(final LongReplacePatchItem userOwner) {
+    public void setUserOwner(final StringReplacePatchItem userOwner) {
         this.userOwner = userOwner;
     }
 
-    public LongReplacePatchItem getGroupOwner() {
+    public StringReplacePatchItem getGroupOwner() {
         return groupOwner;
     }
 
-    public void setGroupOwner(final LongReplacePatchItem groupOwner) {
+    public void setGroupOwner(final StringReplacePatchItem groupOwner) {
         this.groupOwner = groupOwner;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/patch/LongReplacePatchItem.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/LongReplacePatchItem.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/LongReplacePatchItem.java
deleted file mode 100644
index 85b0878..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/LongReplacePatchItem.java
+++ /dev/null
@@ -1,37 +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.patch;
-
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
-
-@XmlRootElement(name = "longReplacePatchItem")
-@XmlType
-public class LongReplacePatchItem extends AbstractReplacePatchItem<Long> {
-
-    private static final long serialVersionUID = -2468696387745469136L;
-
-    public static class Builder extends AbstractReplacePatchItem.Builder<Long, LongReplacePatchItem, Builder> {
-
-        @Override
-        protected LongReplacePatchItem newInstance() {
-            return new LongReplacePatchItem();
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/patch/ResourceDeassociationPatch.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/ResourceDeassociationPatch.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/ResourceDeassociationPatch.java
index 9738498..233d5bd 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/ResourceDeassociationPatch.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/ResourceDeassociationPatch.java
@@ -41,7 +41,7 @@ public class ResourceDeassociationPatch extends AbstractBaseBean {
 
     private ResourceDeassociationAction action;
 
-    private final List<Long> anyKyes = new ArrayList<>();
+    private final List<String> anyKyes = new ArrayList<>();
 
     public String getKey() {
         return key;
@@ -73,7 +73,7 @@ public class ResourceDeassociationPatch extends AbstractBaseBean {
     @XmlElementWrapper(name = "anyKyes")
     @XmlElement(name = "key")
     @JsonProperty("anyKyes")
-    public List<Long> getAnyKyes() {
+    public List<String> getAnyKyes() {
         return anyKyes;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/patch/StatusPatch.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/StatusPatch.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/StatusPatch.java
index be299b1..b7d9c1e 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/StatusPatch.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/StatusPatch.java
@@ -32,7 +32,7 @@ public class StatusPatch extends PasswordPatch {
     /**
      * Key of user to for which status update is requested.
      */
-    private long key;
+    private String key;
 
     private StatusPatchType type;
 
@@ -41,12 +41,12 @@ public class StatusPatch extends PasswordPatch {
      */
     private String token;
 
-    public long getKey() {
+    public String getKey() {
         return key;
     }
 
     @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/lib/src/main/java/org/apache/syncope/common/lib/patch/UserPatch.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/UserPatch.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/UserPatch.java
index 3f4e9eb..5dc50f1 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/UserPatch.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/UserPatch.java
@@ -36,7 +36,7 @@ public class UserPatch extends AnyPatch {
 
     private PasswordPatch password;
 
-    private LongReplacePatchItem securityQuestion;
+    private StringReplacePatchItem securityQuestion;
 
     private StringReplacePatchItem securityAnswer;
 
@@ -64,11 +64,11 @@ public class UserPatch extends AnyPatch {
         this.password = password;
     }
 
-    public LongReplacePatchItem getSecurityQuestion() {
+    public StringReplacePatchItem getSecurityQuestion() {
         return securityQuestion;
     }
 
-    public void setSecurityQuestion(final LongReplacePatchItem securityQuestion) {
+    public void setSecurityQuestion(final StringReplacePatchItem securityQuestion) {
         this.securityQuestion = securityQuestion;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/policy/AbstractPolicyTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/AbstractPolicyTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/policy/AbstractPolicyTO.java
index 69564ac..bc41628 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/AbstractPolicyTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/policy/AbstractPolicyTO.java
@@ -29,16 +29,17 @@ import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlSeeAlso;
 import javax.xml.bind.annotation.XmlType;
 import org.apache.syncope.common.lib.AbstractBaseBean;
+import org.apache.syncope.common.lib.to.EntityTO;
 
 @XmlRootElement(name = "abstractPolicy")
 @XmlType
 @XmlSeeAlso({ AccountPolicyTO.class, PasswordPolicyTO.class, PullPolicyTO.class })
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
-public abstract class AbstractPolicyTO extends AbstractBaseBean {
+public abstract class AbstractPolicyTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = -2903888572649721035L;
 
-    private long key;
+    private String key;
 
     private String description;
 
@@ -46,12 +47,14 @@ public abstract class AbstractPolicyTO extends AbstractBaseBean {
 
     private final List<String> usedByRealms = new ArrayList<>();
 
-    public long getKey() {
+    @Override
+    public String getKey() {
         return key;
     }
 
     @PathParam("key")
-    public void setKey(final long key) {
+    @Override
+    public void setKey(final String key) {
         this.key = key;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/search/AnyObjectFiqlSearchConditionBuilder.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/search/AnyObjectFiqlSearchConditionBuilder.java b/common/lib/src/main/java/org/apache/syncope/common/lib/search/AnyObjectFiqlSearchConditionBuilder.java
index a84d9ad..59bcfe3 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/search/AnyObjectFiqlSearchConditionBuilder.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/search/AnyObjectFiqlSearchConditionBuilder.java
@@ -53,25 +53,25 @@ public class AnyObjectFiqlSearchConditionBuilder extends AbstractFiqlSearchCondi
         return newBuilderInstance().is(property);
     }
 
-    public CompleteCondition inGroups(final Long group, final Long... moreGroups) {
+    public CompleteCondition inGroups(final String group, final String... moreGroups) {
         return newBuilderInstance().
                 is(SpecialAttr.GROUPS.toString()).
                 inGroups(group, moreGroups);
     }
 
-    public CompleteCondition notInGroups(final Long group, final Long... moreGroups) {
+    public CompleteCondition notInGroups(final String group, final String... moreGroups) {
         return newBuilderInstance().
                 is(SpecialAttr.GROUPS.toString()).
                 notInGroups(group, moreGroups);
     }
 
-    public CompleteCondition inRelationships(final Long anyType, final Long... moreAnyTypes) {
+    public CompleteCondition inRelationships(final String anyType, final String... moreAnyTypes) {
         return newBuilderInstance().
                 is(SpecialAttr.RELATIONSHIPS.toString()).
                 inRelationships(anyType, moreAnyTypes);
     }
 
-    public CompleteCondition notInRelationships(final Long anyType, final Long... moreAnyTypes) {
+    public CompleteCondition notInRelationships(final String anyType, final String... moreAnyTypes) {
         return newBuilderInstance().
                 is(SpecialAttr.RELATIONSHIPS.toString()).
                 notInRelationships(anyType, moreAnyTypes);
@@ -120,25 +120,25 @@ public class AnyObjectFiqlSearchConditionBuilder extends AbstractFiqlSearchCondi
         }
 
         @Override
-        public CompleteCondition inGroups(final Long group, final Long... moreGroups) {
+        public CompleteCondition inGroups(final String group, final String... moreGroups) {
             this.result = SpecialAttr.GROUPS.toString();
             return condition(FiqlParser.EQ, group, (Object[]) moreGroups);
         }
 
         @Override
-        public CompleteCondition notInGroups(final Long group, final Long... moreGroups) {
+        public CompleteCondition notInGroups(final String group, final String... moreGroups) {
             this.result = SpecialAttr.GROUPS.toString();
             return condition(FiqlParser.NEQ, group, (Object[]) moreGroups);
         }
 
         @Override
-        public CompleteCondition inRelationships(final Long anyObject, final Long... moreAnyObjects) {
+        public CompleteCondition inRelationships(final String anyObject, final String... moreAnyObjects) {
             this.result = SpecialAttr.RELATIONSHIPS.toString();
             return condition(FiqlParser.EQ, anyObject, (Object[]) moreAnyObjects);
         }
 
         @Override
-        public CompleteCondition notInRelationships(final Long group, final Long... moreRelationships) {
+        public CompleteCondition notInRelationships(final String group, final String... moreRelationships) {
             this.result = SpecialAttr.RELATIONSHIPS.toString();
             return condition(FiqlParser.NEQ, group, (Object[]) moreRelationships);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/search/AnyObjectProperty.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/search/AnyObjectProperty.java b/common/lib/src/main/java/org/apache/syncope/common/lib/search/AnyObjectProperty.java
index 55815ea..9d32013 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/search/AnyObjectProperty.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/search/AnyObjectProperty.java
@@ -22,13 +22,13 @@ import org.apache.cxf.jaxrs.ext.search.client.CompleteCondition;
 
 public interface AnyObjectProperty extends SyncopeProperty {
 
-    CompleteCondition inGroups(Long group, Long... moreGroups);
+    CompleteCondition inGroups(String group, String... moreGroups);
 
-    CompleteCondition notInGroups(Long group, Long... moreGroups);
+    CompleteCondition notInGroups(String group, String... moreGroups);
 
-    CompleteCondition inRelationships(Long anyObject, Long... moreAnyObjects);
+    CompleteCondition inRelationships(String anyObject, String... moreAnyObjects);
 
-    CompleteCondition notInRelationships(Long anyObject, Long... moreAnyObjects);
+    CompleteCondition notInRelationships(String anyObject, String... moreAnyObjects);
 
     CompleteCondition inRelationshipTypes(String type, String... moreTypes);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/search/UserFiqlSearchConditionBuilder.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/search/UserFiqlSearchConditionBuilder.java b/common/lib/src/main/java/org/apache/syncope/common/lib/search/UserFiqlSearchConditionBuilder.java
index 30e89dd..4cd5f0d 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/search/UserFiqlSearchConditionBuilder.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/search/UserFiqlSearchConditionBuilder.java
@@ -38,25 +38,25 @@ public class UserFiqlSearchConditionBuilder extends AbstractFiqlSearchConditionB
         return newBuilderInstance().is(property);
     }
 
-    public CompleteCondition inGroups(final Long group, final Long... moreGroups) {
+    public CompleteCondition inGroups(final String group, final String... moreGroups) {
         return newBuilderInstance().
                 is(SpecialAttr.GROUPS.toString()).
                 inGroups(group, moreGroups);
     }
 
-    public CompleteCondition notInGroups(final Long group, final Long... moreGroups) {
+    public CompleteCondition notInGroups(final String group, final String... moreGroups) {
         return newBuilderInstance().
                 is(SpecialAttr.GROUPS.toString()).
                 notInGroups(group, moreGroups);
     }
 
-    public CompleteCondition inRelationships(final Long anyType, final Long... moreAnyTypes) {
+    public CompleteCondition inRelationships(final String anyType, final String... moreAnyTypes) {
         return newBuilderInstance().
                 is(SpecialAttr.RELATIONSHIPS.toString()).
                 inRelationships(anyType, moreAnyTypes);
     }
 
-    public CompleteCondition notInRelationships(final Long anyType, final Long... moreAnyTypes) {
+    public CompleteCondition notInRelationships(final String anyType, final String... moreAnyTypes) {
         return newBuilderInstance().
                 is(SpecialAttr.RELATIONSHIPS.toString()).
                 notInRelationships(anyType, moreAnyTypes);
@@ -117,25 +117,25 @@ public class UserFiqlSearchConditionBuilder extends AbstractFiqlSearchConditionB
         }
 
         @Override
-        public CompleteCondition inGroups(final Long group, final Long... moreGroups) {
+        public CompleteCondition inGroups(final String group, final String... moreGroups) {
             this.result = SpecialAttr.GROUPS.toString();
             return condition(FiqlParser.EQ, group, (Object[]) moreGroups);
         }
 
         @Override
-        public CompleteCondition notInGroups(final Long group, final Long... moreGroups) {
+        public CompleteCondition notInGroups(final String group, final String... moreGroups) {
             this.result = SpecialAttr.GROUPS.toString();
             return condition(FiqlParser.NEQ, group, (Object[]) moreGroups);
         }
 
         @Override
-        public CompleteCondition inRelationships(final Long anyObject, final Long... moreAnyObjects) {
+        public CompleteCondition inRelationships(final String anyObject, final String... moreAnyObjects) {
             this.result = SpecialAttr.RELATIONSHIPS.toString();
             return condition(FiqlParser.EQ, anyObject, (Object[]) moreAnyObjects);
         }
 
         @Override
-        public CompleteCondition notInRelationships(final Long anyObject, final Long... moreAnyObjects) {
+        public CompleteCondition notInRelationships(final String anyObject, final String... moreAnyObjects) {
             this.result = SpecialAttr.RELATIONSHIPS.toString();
             return condition(FiqlParser.NEQ, anyObject, (Object[]) moreAnyObjects);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/search/UserProperty.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/search/UserProperty.java b/common/lib/src/main/java/org/apache/syncope/common/lib/search/UserProperty.java
index 9294ab0..4c717f9 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/search/UserProperty.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/search/UserProperty.java
@@ -22,13 +22,13 @@ import org.apache.cxf.jaxrs.ext.search.client.CompleteCondition;
 
 public interface UserProperty extends SyncopeProperty {
 
-    CompleteCondition inGroups(Long group, Long... moreGroups);
+    CompleteCondition inGroups(String group, String... moreGroups);
 
-    CompleteCondition notInGroups(Long group, Long... moreGroups);
+    CompleteCondition notInGroups(String group, String... moreGroups);
 
-    CompleteCondition inRelationships(Long anyObject, Long... moreAnyObjects);
+    CompleteCondition inRelationships(String anyObject, String... moreAnyObjects);
 
-    CompleteCondition notInRelationships(Long anyObject, Long... moreAnyObjects);
+    CompleteCondition notInRelationships(String anyObject, String... moreAnyObjects);
 
     CompleteCondition inRelationshipTypes(String type, String... moreTypes);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractSchemaTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractSchemaTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractSchemaTO.java
index f6e3536..2917c98 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractSchemaTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractSchemaTO.java
@@ -29,7 +29,7 @@ import org.apache.syncope.common.lib.AbstractBaseBean;
 @XmlType
 @XmlSeeAlso({ PlainSchemaTO.class, DerSchemaTO.class, VirSchemaTO.class })
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
-public abstract class AbstractSchemaTO extends AbstractBaseBean implements EntityTO<String> {
+public abstract class AbstractSchemaTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = 4088388951694301759L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractTaskTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractTaskTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractTaskTO.java
index 0c6356b..65603f7 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractTaskTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractTaskTO.java
@@ -34,24 +34,24 @@ import javax.xml.bind.annotation.XmlType;
 @XmlType
 @XmlSeeAlso({ PropagationTaskTO.class, SchedTaskTO.class, NotificationTaskTO.class })
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
-public abstract class AbstractTaskTO extends AbstractStartEndBean implements EntityTO<Long> {
+public abstract class AbstractTaskTO extends AbstractStartEndBean implements EntityTO {
 
     private static final long serialVersionUID = 386450127003321197L;
 
-    private Long key;
+    private String key;
 
     private String latestExecStatus;
 
     private final List<ExecTO> executions = new ArrayList<>();
 
     @Override
-    public Long getKey() {
+    public String getKey() {
         return key;
     }
 
     @PathParam("key")
     @Override
-    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/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java
index 35b796b..f652d76 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java
@@ -41,7 +41,7 @@ public class AnyObjectTO 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<>();
 
     @XmlElementWrapper(name = "relationships")
     @XmlElement(name = "relationship")
@@ -53,8 +53,8 @@ public class AnyObjectTO 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);
         }
@@ -73,8 +73,8 @@ public class AnyObjectTO 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);
         }
@@ -87,7 +87,7 @@ public class AnyObjectTO 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/AnyTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
index 3a40431..4651835 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
@@ -38,11 +38,11 @@ import javax.xml.bind.annotation.XmlType;
 @XmlType
 @XmlSeeAlso({ UserTO.class, GroupTO.class, AnyObjectTO.class })
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
-public abstract class AnyTO extends ConnObjectTO implements EntityTO<Long> {
+public abstract class AnyTO extends ConnObjectTO implements EntityTO {
 
     private static final long serialVersionUID = -754311920679872084L;
 
-    private Long key;
+    private String key;
 
     private String type;
 
@@ -59,12 +59,12 @@ public abstract class AnyTO extends ConnObjectTO implements EntityTO<Long> {
     private final Set<String> resources = new HashSet<>();
 
     @Override
-    public Long getKey() {
+    public String getKey() {
         return key;
     }
 
     @Override
-    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/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeClassTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeClassTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeClassTO.java
index 1845e06..d68a7fe 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeClassTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeClassTO.java
@@ -30,7 +30,7 @@ import org.apache.syncope.common.lib.AbstractBaseBean;
 
 @XmlRootElement(name = "anyTypeClass")
 @XmlType
-public class AnyTypeClassTO extends AbstractBaseBean implements EntityTO<String> {
+public class AnyTypeClassTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = -591757688607551266L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeTO.java
index 9a4d44a..07827cb 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeTO.java
@@ -31,7 +31,7 @@ import org.apache.syncope.common.lib.types.AnyTypeKind;
 
 @XmlRootElement(name = "anyType")
 @XmlType
-public class AnyTypeTO extends AbstractBaseBean implements EntityTO<String> {
+public class AnyTypeTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = 6771657557616874373L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceTO.java
index f44cb62..4f91355 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceTO.java
@@ -37,11 +37,11 @@ import org.apache.syncope.common.lib.types.ConnectorCapability;
 
 @XmlRootElement(name = "connInstance")
 @XmlType
-public class ConnInstanceTO extends AbstractBaseBean implements EntityTO<Long> {
+public class ConnInstanceTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = 2707778645445168671L;
 
-    private Long key;
+    private String key;
 
     private String location;
 
@@ -62,13 +62,13 @@ public class ConnInstanceTO extends AbstractBaseBean implements EntityTO<Long> {
     private ConnPoolConfTO poolConf;
 
     @Override
-    public Long getKey() {
+    public String getKey() {
         return key;
     }
 
     @PathParam("key")
     @Override
-    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/lib/src/main/java/org/apache/syncope/common/lib/to/DomainTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/DomainTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/DomainTO.java
index faeedce..8994cf8 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/DomainTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/DomainTO.java
@@ -25,7 +25,7 @@ import org.apache.syncope.common.lib.types.CipherAlgorithm;
 
 @XmlRootElement(name = "domain")
 @XmlType
-public class DomainTO extends AbstractBaseBean implements EntityTO<String> {
+public class DomainTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = -7938075259986084934L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/EntityTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/EntityTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/EntityTO.java
index 493753d..c07749f 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/EntityTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/EntityTO.java
@@ -20,9 +20,9 @@ package org.apache.syncope.common.lib.to;
 
 import java.io.Serializable;
 
-public interface EntityTO<KEY> extends Serializable {
+public interface EntityTO extends Serializable {
 
-    KEY getKey();
+    String getKey();
 
-    void setKey(KEY key);
+    void setKey(String key);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/ExecTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ExecTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ExecTO.java
index 2ebe33c..323658e 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ExecTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ExecTO.java
@@ -24,15 +24,15 @@ import org.apache.syncope.common.lib.types.JobType;
 
 @XmlRootElement(name = "exec")
 @XmlType()
-public class ExecTO extends AbstractStartEndBean implements EntityTO<Long> {
+public class ExecTO extends AbstractStartEndBean implements EntityTO {
 
     private static final long serialVersionUID = -4621191979198357081L;
 
-    private Long key;
+    private String key;
 
     private JobType jobType;
 
-    private Long refKey;
+    private String refKey;
 
     private String refDesc;
 
@@ -41,12 +41,12 @@ public class ExecTO extends AbstractStartEndBean implements EntityTO<Long> {
     private String message;
 
     @Override
-    public Long getKey() {
+    public String getKey() {
         return key;
     }
 
     @Override
-    public void setKey(final Long key) {
+    public void setKey(final String key) {
         this.key = key;
     }
 
@@ -58,11 +58,11 @@ public class ExecTO extends AbstractStartEndBean implements EntityTO<Long> {
         this.jobType = jobType;
     }
 
-    public Long getRefKey() {
+    public String getRefKey() {
         return refKey;
     }
 
-    public void setRefKey(final Long refKey) {
+    public void setRefKey(final String refKey) {
         this.refKey = refKey;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java
index ef62280..0ae0885 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java
@@ -42,9 +42,9 @@ public class GroupTO extends AnyTO {
 
     private String name;
 
-    private Long userOwner;
+    private String userOwner;
 
-    private Long groupOwner;
+    private String groupOwner;
 
     private String udynMembershipCond;
 
@@ -72,19 +72,19 @@ public class GroupTO extends AnyTO {
         this.name = name;
     }
 
-    public Long getUserOwner() {
+    public String getUserOwner() {
         return userOwner;
     }
 
-    public void setUserOwner(final Long userOwner) {
+    public void setUserOwner(final String userOwner) {
         this.userOwner = userOwner;
     }
 
-    public Long getGroupOwner() {
+    public String getGroupOwner() {
         return groupOwner;
     }
 
-    public void setGroupOwner(final Long groupOwner) {
+    public void setGroupOwner(final String groupOwner) {
         this.groupOwner = groupOwner;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupableTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupableTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupableTO.java
index 014e897..7b6a824 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupableTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupableTO.java
@@ -23,9 +23,9 @@ import java.util.Map;
 
 public interface GroupableTO {
 
-    Map<Long, MembershipTO> getMembershipMap();
+    Map<String, MembershipTO> getMembershipMap();
 
     List<MembershipTO> getMemberships();
 
-    List<Long> getDynGroups();
+    List<String> getDynGroups();
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/JobTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/JobTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/JobTO.java
index 02930a5..69a339c 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/JobTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/JobTO.java
@@ -32,7 +32,7 @@ public class JobTO extends AbstractBaseBean {
 
     private JobType type;
 
-    private Long refKey;
+    private String refKey;
 
     private String refDesc;
 
@@ -52,11 +52,11 @@ public class JobTO extends AbstractBaseBean {
         this.type = type;
     }
 
-    public Long getRefKey() {
+    public String getRefKey() {
         return refKey;
     }
 
-    public void setRefKey(final Long refKey) {
+    public void setRefKey(final String refKey) {
         this.refKey = refKey;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/MailTemplateTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MailTemplateTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MailTemplateTO.java
index 637a0d5..bf25867 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MailTemplateTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MailTemplateTO.java
@@ -25,7 +25,7 @@ import org.apache.syncope.common.lib.AbstractBaseBean;
 
 @XmlRootElement(name = "mailTemplate")
 @XmlType
-public class MailTemplateTO extends AbstractBaseBean implements EntityTO<String> {
+public class MailTemplateTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = 8389755049666062735L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/MappingItemTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MappingItemTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MappingItemTO.java
index 62e38ed..84ba6fb 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MappingItemTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MappingItemTO.java
@@ -31,11 +31,11 @@ import org.apache.syncope.common.lib.types.MappingPurpose;
 
 @XmlRootElement(name = "mappingItem")
 @XmlType
-public class MappingItemTO extends AbstractBaseBean implements EntityTO<Long> {
+public class MappingItemTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = 2983498836767176862L;
 
-    private Long key;
+    private String key;
 
     /**
      * Attribute schema to be mapped. Consider that we can associate tha same attribute schema more than once, with
@@ -92,12 +92,12 @@ public class MappingItemTO extends AbstractBaseBean implements EntityTO<Long> {
     }
 
     @Override
-    public Long getKey() {
+    public String getKey() {
         return key;
     }
 
     @Override
-    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/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java
index aa68a23..6ded46b 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java
@@ -32,18 +32,18 @@ public class MembershipTO extends RelationshipTO {
 
         private final MembershipTO instance = new MembershipTO();
 
-        public Builder left(final String leftType, final long leftKey) {
+        public Builder left(final String leftType, final String leftKey) {
             instance.setLeftType(leftType);
             instance.setLeftKey(leftKey);
             return this;
         }
 
-        public Builder group(final long groupKey) {
+        public Builder group(final String groupKey) {
             instance.setRightKey(groupKey);
             return this;
         }
 
-        public Builder group(final long groupKey, final String groupName) {
+        public Builder group(final String groupKey, final String groupName) {
             instance.setRightKey(groupKey);
             instance.setGroupName(groupName);
             return this;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java
index 9b241be..6f4a73c 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java
@@ -37,11 +37,11 @@ import org.apache.syncope.common.lib.types.TraceLevel;
 
 @XmlRootElement(name = "notification")
 @XmlType
-public class NotificationTO extends AbstractBaseBean implements EntityTO<Long> {
+public class NotificationTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = -6145117115632592612L;
 
-    private Long key;
+    private String key;
 
     private final List<String> events = new ArrayList<>();
 
@@ -91,13 +91,13 @@ public class NotificationTO extends AbstractBaseBean implements EntityTO<Long> {
     }
 
     @Override
-    public Long getKey() {
+    public String getKey() {
         return key;
     }
 
     @PathParam("key")
     @Override
-    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/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTaskTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTaskTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTaskTO.java
index 4cfbf32..ce74be2 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTaskTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTaskTO.java
@@ -21,7 +21,6 @@ package org.apache.syncope.common.lib.to;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import java.util.HashSet;
 import java.util.Set;
-
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -35,11 +34,11 @@ public class NotificationTaskTO extends AbstractTaskTO {
 
     private static final long serialVersionUID = 371671242591093846L;
 
-    private Long notification;
+    private String notification;
 
     private AnyTypeKind anyTypeKind;
 
-    private Long anyKey;
+    private String anyKey;
 
     private final Set<String> recipients = new HashSet<>();
 
@@ -55,11 +54,11 @@ public class NotificationTaskTO extends AbstractTaskTO {
 
     private TraceLevel traceLevel;
 
-    public Long getNotification() {
+    public String getNotification() {
         return notification;
     }
 
-    public void setNotification(final Long notification) {
+    public void setNotification(final String notification) {
         this.notification = notification;
     }
 
@@ -71,11 +70,11 @@ public class NotificationTaskTO extends AbstractTaskTO {
         this.anyTypeKind = anyTypeKind;
     }
 
-    public Long getAnyKey() {
+    public String getAnyKey() {
         return anyKey;
     }
 
-    public void setAnyKey(final Long anyKey) {
+    public void setAnyKey(final String anyKey) {
         this.anyKey = anyKey;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/ProvisionTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ProvisionTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ProvisionTO.java
index 7a683d5..b7dae9c 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ProvisionTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ProvisionTO.java
@@ -29,11 +29,11 @@ import org.apache.syncope.common.lib.AbstractBaseBean;
 
 @XmlRootElement(name = "provision")
 @XmlType
-public class ProvisionTO extends AbstractBaseBean implements EntityTO<Long> {
+public class ProvisionTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = 8298910216218007927L;
 
-    private Long key;
+    private String key;
 
     private String anyType;
 
@@ -48,12 +48,12 @@ public class ProvisionTO extends AbstractBaseBean implements EntityTO<Long> {
     private final List<String> virSchemas = new ArrayList<>();
 
     @Override
-    public Long getKey() {
+    public String getKey() {
         return key;
     }
 
     @Override
-    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/lib/src/main/java/org/apache/syncope/common/lib/to/RealmTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/RealmTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RealmTO.java
index 6c0853d..c685b4a 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/RealmTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RealmTO.java
@@ -35,21 +35,21 @@ import org.apache.syncope.common.lib.jaxb.XmlGenericMapAdapter;
 
 @XmlRootElement(name = "realm")
 @XmlType
-public class RealmTO extends AbstractBaseBean implements EntityTO<Long> {
+public class RealmTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = 516330662956254391L;
 
-    private Long key;
+    private String key;
 
     private String name;
 
-    private long parent;
+    private String parent;
 
     private String fullPath;
 
-    private Long accountPolicy;
+    private String accountPolicy;
 
-    private Long passwordPolicy;
+    private String passwordPolicy;
 
     private final Set<String> actionsClassNames = new HashSet<>();
 
@@ -58,12 +58,12 @@ public class RealmTO extends AbstractBaseBean implements EntityTO<Long> {
     private final Map<String, AnyTO> templates = new HashMap<>();
 
     @Override
-    public Long getKey() {
+    public String getKey() {
         return key;
     }
 
     @Override
-    public void setKey(final Long key) {
+    public void setKey(final String key) {
         this.key = key;
     }
 
@@ -75,11 +75,11 @@ public class RealmTO extends AbstractBaseBean implements EntityTO<Long> {
         this.name = name;
     }
 
-    public long getParent() {
+    public String getParent() {
         return parent;
     }
 
-    public void setParent(final long parent) {
+    public void setParent(final String parent) {
         this.parent = parent;
     }
 
@@ -92,19 +92,19 @@ public class RealmTO extends AbstractBaseBean implements EntityTO<Long> {
         this.fullPath = fullPath;
     }
 
-    public Long getAccountPolicy() {
+    public String getAccountPolicy() {
         return accountPolicy;
     }
 
-    public void setAccountPolicy(final Long accountPolicy) {
+    public void setAccountPolicy(final String accountPolicy) {
         this.accountPolicy = accountPolicy;
     }
 
-    public Long getPasswordPolicy() {
+    public String getPasswordPolicy() {
         return passwordPolicy;
     }
 
-    public void setPasswordPolicy(final Long passwordPolicy) {
+    public void setPasswordPolicy(final String passwordPolicy) {
         this.passwordPolicy = passwordPolicy;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelatableTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelatableTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelatableTO.java
index 1ff7232..1914c13 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelatableTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelatableTO.java
@@ -24,7 +24,7 @@ import org.apache.commons.lang3.tuple.Pair;
 
 public interface RelatableTO {
 
-    Map<Pair<String, Long>, RelationshipTO> getRelationshipMap();
+    Map<Pair<String, String>, RelationshipTO> getRelationshipMap();
 
     List<RelationshipTO> getRelationships();
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java
index e20621b..29326c2 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java
@@ -37,13 +37,13 @@ public class RelationshipTO extends AbstractBaseBean {
             return this;
         }
 
-        public Builder left(final String leftType, final long leftKey) {
+        public Builder left(final String leftType, final String leftKey) {
             instance.setLeftType(leftType);
             instance.setLeftKey(leftKey);
             return this;
         }
 
-        public Builder right(final String rightType, final long rightKey) {
+        public Builder right(final String rightType, final String rightKey) {
             instance.setRightType(rightType);
             instance.setRightKey(rightKey);
             return this;
@@ -58,11 +58,11 @@ public class RelationshipTO extends AbstractBaseBean {
 
     private String leftType;
 
-    private long leftKey;
+    private String leftKey;
 
     private String rightType;
 
-    private long rightKey;
+    private String rightKey;
 
     public String getType() {
         return type;
@@ -80,11 +80,11 @@ public class RelationshipTO extends AbstractBaseBean {
         this.leftType = leftType;
     }
 
-    public long getLeftKey() {
+    public String getLeftKey() {
         return leftKey;
     }
 
-    public void setLeftKey(final long leftKey) {
+    public void setLeftKey(final String leftKey) {
         this.leftKey = leftKey;
     }
 
@@ -96,11 +96,11 @@ public class RelationshipTO extends AbstractBaseBean {
         this.rightType = rightType;
     }
 
-    public long getRightKey() {
+    public String getRightKey() {
         return rightKey;
     }
 
-    public void setRightKey(final long rightKey) {
+    public void setRightKey(final String rightKey) {
         this.rightKey = rightKey;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTypeTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTypeTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTypeTO.java
index f790255..d5eba40 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTypeTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTypeTO.java
@@ -25,7 +25,7 @@ import org.apache.syncope.common.lib.AbstractBaseBean;
 
 @XmlRootElement(name = "relationshipType")
 @XmlType
-public class RelationshipTypeTO extends AbstractBaseBean implements EntityTO<String> {
+public class RelationshipTypeTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = -1884088415277925817L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReportTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReportTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReportTO.java
index 7260796..73b16f7 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReportTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReportTO.java
@@ -31,11 +31,11 @@ import org.apache.syncope.common.lib.report.AbstractReportletConf;
 
 @XmlRootElement(name = "report")
 @XmlType
-public class ReportTO extends AbstractStartEndBean implements EntityTO<Long> {
+public class ReportTO extends AbstractStartEndBean implements EntityTO {
 
     private static final long serialVersionUID = 5274568072084814410L;
 
-    private Long key;
+    private String key;
 
     private String name;
 
@@ -56,13 +56,13 @@ public class ReportTO extends AbstractStartEndBean implements EntityTO<Long> {
     private String template;
 
     @Override
-    public Long getKey() {
+    public String getKey() {
         return key;
     }
 
     @PathParam("key")
     @Override
-    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/lib/src/main/java/org/apache/syncope/common/lib/to/ReportTemplateTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReportTemplateTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReportTemplateTO.java
index e295f50..1731d4c 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReportTemplateTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReportTemplateTO.java
@@ -25,7 +25,7 @@ import org.apache.syncope.common.lib.AbstractBaseBean;
 
 @XmlRootElement(name = "reportTemplate")
 @XmlType
-public class ReportTemplateTO extends AbstractBaseBean implements EntityTO<String> {
+public class ReportTemplateTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = 7776679004906244896L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
index 0f176c4..c132a7c 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
@@ -32,13 +32,14 @@ import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 import org.apache.commons.collections4.IterableUtils;
 import org.apache.commons.collections4.Predicate;
+import org.apache.syncope.common.lib.AbstractBaseBean;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.syncope.common.lib.types.ConnectorCapability;
 import org.apache.syncope.common.lib.types.TraceLevel;
 
 @XmlRootElement(name = "resource")
 @XmlType
-public class ResourceTO extends AbstractAnnotatedBean implements EntityTO<String> {
+public class ResourceTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = -9193551354041698963L;
 
@@ -47,7 +48,7 @@ public class ResourceTO extends AbstractAnnotatedBean implements EntityTO<String
     /**
      * The resource type is identified by the associated connector.
      */
-    private Long connector;
+    private String connector;
 
     /**
      * Convenience information: display name for the connector id.
@@ -70,11 +71,11 @@ public class ResourceTO extends AbstractAnnotatedBean implements EntityTO<String
 
     private TraceLevel pullTraceLevel = TraceLevel.ALL;
 
-    private Long passwordPolicy;
+    private String passwordPolicy;
 
-    private Long accountPolicy;
+    private String accountPolicy;
 
-    private Long pullPolicy;
+    private String pullPolicy;
 
     private final Set<ConnConfProperty> confOverride = new HashSet<>();
 
@@ -103,11 +104,11 @@ public class ResourceTO extends AbstractAnnotatedBean implements EntityTO<String
         this.enforceMandatoryCondition = enforceMandatoryCondition;
     }
 
-    public Long getConnector() {
+    public String getConnector() {
         return connector;
     }
 
-    public void setConnector(final Long connector) {
+    public void setConnector(final String connector) {
         this.connector = connector;
     }
 
@@ -159,27 +160,27 @@ public class ResourceTO extends AbstractAnnotatedBean implements EntityTO<String
         this.updateTraceLevel = updateTraceLevel;
     }
 
-    public Long getPasswordPolicy() {
+    public String getPasswordPolicy() {
         return passwordPolicy;
     }
 
-    public void setPasswordPolicy(final Long passwordPolicy) {
+    public void setPasswordPolicy(final String passwordPolicy) {
         this.passwordPolicy = passwordPolicy;
     }
 
-    public Long getAccountPolicy() {
+    public String getAccountPolicy() {
         return accountPolicy;
     }
 
-    public void setAccountPolicy(final Long accountPolicy) {
+    public void setAccountPolicy(final String accountPolicy) {
         this.accountPolicy = accountPolicy;
     }
 
-    public Long getPullPolicy() {
+    public String getPullPolicy() {
         return pullPolicy;
     }
 
-    public void setPullPolicy(final Long pullPolicy) {
+    public void setPullPolicy(final String pullPolicy) {
         this.pullPolicy = pullPolicy;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/RoleTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/RoleTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RoleTO.java
index bf59bb5..cbb8784 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/RoleTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RoleTO.java
@@ -32,7 +32,7 @@ import org.apache.syncope.common.lib.AbstractBaseBean;
 
 @XmlRootElement(name = "role")
 @XmlType
-public class RoleTO extends AbstractBaseBean implements EntityTO<String> {
+public class RoleTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = 4560822655754800031L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/common/lib/src/main/java/org/apache/syncope/common/lib/to/SecurityQuestionTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/SecurityQuestionTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/SecurityQuestionTO.java
index aa7e2ce..bf3d221 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/SecurityQuestionTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/SecurityQuestionTO.java
@@ -25,22 +25,22 @@ import org.apache.syncope.common.lib.AbstractBaseBean;
 
 @XmlRootElement(name = "securityQuestion")
 @XmlType
-public class SecurityQuestionTO extends AbstractBaseBean implements EntityTO<Long> {
+public class SecurityQuestionTO extends AbstractBaseBean implements EntityTO {
 
     private static final long serialVersionUID = 5969810939993556530L;
 
-    private Long key;
+    private String key;
 
     private String content;
 
     @Override
-    public Long getKey() {
+    public String getKey() {
         return key;
     }
 
     @PathParam("key")
     @Override
-    public void setKey(final Long key) {
+    public void setKey(final String key) {
         this.key = key;
     }