You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2016/10/23 14:24:01 UTC

[20/28] zest-java git commit: ZEST-180, ZEST-186, ZEST-187, ZEST-188 Big Identity refactoring UnitOfWorkFactory is auto added to all modules that doesn't declare one IdentityGenerator is auto-added to all modules that deosn't declare one. Removed DCI/DDD

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/logging/src/main/java/org/apache/zest/library/logging/log/service/LoggingServiceMixin.java
----------------------------------------------------------------------
diff --git a/libraries/logging/src/main/java/org/apache/zest/library/logging/log/service/LoggingServiceMixin.java b/libraries/logging/src/main/java/org/apache/zest/library/logging/log/service/LoggingServiceMixin.java
index 4431865..e11aa58 100644
--- a/libraries/logging/src/main/java/org/apache/zest/library/logging/log/service/LoggingServiceMixin.java
+++ b/libraries/logging/src/main/java/org/apache/zest/library/logging/log/service/LoggingServiceMixin.java
@@ -134,7 +134,7 @@ public abstract class LoggingServiceMixin
             EntityBuilder<ServiceLogRecord> builder = uow.newEntityBuilder( ServiceLogRecord.class );
             ServiceLogRecord state = builder.instance();
             setStandardStuff( type, composite, category, message, state, params );
-            state.source().set( ( (ServiceComposite) composite ).identity().get() );
+            state.source().set( ( (ServiceComposite) composite ).identity().get().toString() );
             ServiceLogRecord slr = builder.newInstance();
         }
         else if( composite instanceof EntityComposite )

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/logging/src/main/java/org/apache/zest/library/logging/trace/service/TraceServiceMixin.java
----------------------------------------------------------------------
diff --git a/libraries/logging/src/main/java/org/apache/zest/library/logging/trace/service/TraceServiceMixin.java b/libraries/logging/src/main/java/org/apache/zest/library/logging/trace/service/TraceServiceMixin.java
index 9d1258b..9afadce 100644
--- a/libraries/logging/src/main/java/org/apache/zest/library/logging/trace/service/TraceServiceMixin.java
+++ b/libraries/logging/src/main/java/org/apache/zest/library/logging/trace/service/TraceServiceMixin.java
@@ -128,12 +128,11 @@ public class TraceServiceMixin
         if( object instanceof EntityComposite )
         {
             EntityComposite entity = (EntityComposite) object;
-            String identity = entity.identity().get();
             EntityComposite source = (EntityComposite) uow.get(
                 ZestAPI.FUNCTION_DESCRIPTOR_FOR.apply( entity )
                     .types()
                     .findFirst()
-                    .orElse( null ), identity );
+                    .orElse( null ), entity.identity().get() );
             EntityBuilder<EntityTraceRecordEntity> builder = uow.newEntityBuilder( EntityTraceRecordEntity.class );
             EntityTraceRecordEntity state = builder.instance();
             setStandardStuff( compositeType, method, args, entryTime, duration, state, exception );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/logging/src/test/java/org/apache/zest/library/logging/DebuggingTest.java
----------------------------------------------------------------------
diff --git a/libraries/logging/src/test/java/org/apache/zest/library/logging/DebuggingTest.java b/libraries/logging/src/test/java/org/apache/zest/library/logging/DebuggingTest.java
index 6a66ba7..b76c3e0 100644
--- a/libraries/logging/src/test/java/org/apache/zest/library/logging/DebuggingTest.java
+++ b/libraries/logging/src/test/java/org/apache/zest/library/logging/DebuggingTest.java
@@ -21,6 +21,7 @@
 package org.apache.zest.library.logging;
 
 import java.util.function.Function;
+import org.apache.zest.api.identity.Identity;
 import org.junit.Test;
 import org.apache.zest.api.injection.scope.This;
 import org.apache.zest.api.mixin.Mixins;
@@ -72,11 +73,11 @@ public class DebuggingTest
 //            QueryBuilder<DebugRecord> builder = module.newQueryBuilder( DebugRecord.class );
 //            Query<DebugRecord> query = builder.newQuery( uow );
 //            assertEquals( 0, query.count() );
-            Some service = (Some) serviceFinder.findService( Some.class ).get();
+            Some service = serviceFinder.findService( Some.class ).get();
             String message = service.doSomething( "World!", 10 );
             assertEquals( message, "Hello!" );
-            EntityStore es = (EntityStore) serviceFinder.findService( EntityStore.class ).get();
-            final String[] result = new String[1];
+            EntityStore es = serviceFinder.findService( EntityStore.class ).get();
+            final Identity[] result = new Identity[1];
             es.entityStates( module ).transferTo( Transforms.map( new Function<EntityState, EntityState>()
                     {
                         public EntityState apply( EntityState entityState )
@@ -84,7 +85,7 @@ public class DebuggingTest
                             if( ServiceDebugRecordEntity.class.getName()
                                     .equals( entityState.entityDescriptor().types().findFirst().get().getName() ) )
                             {
-                                result[0] = entityState.identity().identity();
+                                result[0] = entityState.entityReference().identity();
                             }
 
                             return entityState;

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/osgi/src/main/java/org/apache/zest/library/osgi/OSGiServiceExporter.java
----------------------------------------------------------------------
diff --git a/libraries/osgi/src/main/java/org/apache/zest/library/osgi/OSGiServiceExporter.java b/libraries/osgi/src/main/java/org/apache/zest/library/osgi/OSGiServiceExporter.java
index 14d05c7..74cbdb5 100644
--- a/libraries/osgi/src/main/java/org/apache/zest/library/osgi/OSGiServiceExporter.java
+++ b/libraries/osgi/src/main/java/org/apache/zest/library/osgi/OSGiServiceExporter.java
@@ -95,7 +95,7 @@ public interface OSGiServiceExporter
                 }
                 properties.put( "org.apache.zest.api.service.active", ref.isActive() );
                 properties.put( "org.apache.zest.api.service.available", ref.isAvailable() );
-                properties.put( "org.apache.zest.api.service.identity", ref.identity() );
+                properties.put( "org.apache.zest.api.service.reference", ref.identity() );
 
 
                 String[] interfaceNames = interfacesOf( service.getClass() )

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/osgi/src/test/java/org/apache/zest/library/osgi/OSGiServiceTest.java
----------------------------------------------------------------------
diff --git a/libraries/osgi/src/test/java/org/apache/zest/library/osgi/OSGiServiceTest.java b/libraries/osgi/src/test/java/org/apache/zest/library/osgi/OSGiServiceTest.java
index 1b8ae91..e2bc45e 100644
--- a/libraries/osgi/src/test/java/org/apache/zest/library/osgi/OSGiServiceTest.java
+++ b/libraries/osgi/src/test/java/org/apache/zest/library/osgi/OSGiServiceTest.java
@@ -60,7 +60,7 @@ public class OSGiServiceTest
             "org.apache.zest.library.osgi.OSGiServiceTest$MyService",
             "org.apache.zest.library.osgi.OSGiEnabledService",
             "org.apache.zest.api.service.ServiceComposite",
-            "org.apache.zest.api.entity.Identity",
+            "org.apache.zest.api.identity.HasIdentity",
             "org.apache.zest.api.composite.Composite"
         };
         verify( bundleContext ).registerService( expectedClasses, service, null );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rdf/src/main/java/org/apache/zest/library/rdf/entity/EntityStateSerializer.java
----------------------------------------------------------------------
diff --git a/libraries/rdf/src/main/java/org/apache/zest/library/rdf/entity/EntityStateSerializer.java b/libraries/rdf/src/main/java/org/apache/zest/library/rdf/entity/EntityStateSerializer.java
index 1be4b52..8386bd8 100644
--- a/libraries/rdf/src/main/java/org/apache/zest/library/rdf/entity/EntityStateSerializer.java
+++ b/libraries/rdf/src/main/java/org/apache/zest/library/rdf/entity/EntityStateSerializer.java
@@ -57,9 +57,9 @@ public class EntityStateSerializer
     @Tagged( ValueSerialization.Formats.JSON )
     private ValueSerializer valueSerializer;
 
-    public URI createEntityURI( ValueFactory valueFactory, EntityReference identity )
+    public URI createEntityURI( ValueFactory valueFactory, EntityReference reference )
     {
-        return valueFactory.createURI( identity.toURI() );
+        return valueFactory.createURI( reference.toURI() );
     }
 
     public Iterable<Statement> serialize( final EntityState entityState )
@@ -82,8 +82,8 @@ public class EntityStateSerializer
     )
     {
         ValueFactory values = graph.getValueFactory();
-        EntityReference identity = entityState.identity();
-        URI entityUri = createEntityURI( values, identity );
+        EntityReference reference = entityState.entityReference();
+        URI entityUri = createEntityURI( values, reference );
 
         graph.add( entityUri,
                    Rdfs.TYPE,

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rdf/src/main/java/org/apache/zest/library/rdf/repository/NativeRepositoryService.java
----------------------------------------------------------------------
diff --git a/libraries/rdf/src/main/java/org/apache/zest/library/rdf/repository/NativeRepositoryService.java b/libraries/rdf/src/main/java/org/apache/zest/library/rdf/repository/NativeRepositoryService.java
index fe8adc2..2cf1d7a 100644
--- a/libraries/rdf/src/main/java/org/apache/zest/library/rdf/repository/NativeRepositoryService.java
+++ b/libraries/rdf/src/main/java/org/apache/zest/library/rdf/repository/NativeRepositoryService.java
@@ -109,7 +109,7 @@ public interface NativeRepositoryService extends Repository, ServiceComposite, A
             File dataDirectory;
             if( dataDir == null || "".equals( dataDir ) )
             {
-                String serviceIdentity = configuration.get().identity().get();
+                String serviceIdentity = configuration.get().identity().get().toString();
                 if( fileConfiguration != null )
                 {
                     dataDir = new File( fileConfiguration.dataDirectory(), serviceIdentity ).getAbsolutePath();

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/EntitySerializerTest.java
----------------------------------------------------------------------
diff --git a/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/EntitySerializerTest.java b/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/EntitySerializerTest.java
index 5947683..f57896e 100755
--- a/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/EntitySerializerTest.java
+++ b/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/EntitySerializerTest.java
@@ -22,6 +22,7 @@ package org.apache.zest.library.rdf.entity;
 
 import java.io.PrintWriter;
 import java.time.Instant;
+import org.apache.zest.api.identity.StringIdentity;
 import org.apache.zest.api.time.SystemTime;
 import org.junit.Before;
 import org.junit.Test;
@@ -83,7 +84,7 @@ public class EntitySerializerTest
     public void testEntitySerializer()
         throws RDFHandlerException
     {
-        EntityReference entityReference = new EntityReference( "test2" );
+        EntityReference entityReference = EntityReference.parseEntityReference( "test2" );
         Usecase usecase = UsecaseBuilder.newUsecase( "Test" );
         Instant currentTime = SystemTime.now();
         EntityStoreUnitOfWork unitOfWork = entityStore.newUnitOfWork( module, usecase, currentTime );
@@ -110,14 +111,14 @@ public class EntitySerializerTest
             valueBuilder.prototype().test3().set( valueBuilder2.newInstance() );
             TestValue testValue = valueBuilder.newInstance();
 
-            EntityBuilder<TestEntity> builder = unitOfWork.newEntityBuilder( TestEntity.class, "test1" );
+            EntityBuilder<TestEntity> builder = unitOfWork.newEntityBuilder( TestEntity.class, new StringIdentity( "test1" ) );
             TestEntity rickardTemplate = builder.instance();
             rickardTemplate.name().set( "Rickard" );
             rickardTemplate.title().set( "Mr" );
             rickardTemplate.value().set( testValue );
             TestEntity testEntity = builder.newInstance();
 
-            EntityBuilder<TestEntity> builder2 = unitOfWork.newEntityBuilder( TestEntity.class, "test2" );
+            EntityBuilder<TestEntity> builder2 = unitOfWork.newEntityBuilder( TestEntity.class, new StringIdentity( "test2" ) );
             TestEntity niclasTemplate = builder2.instance();
             niclasTemplate.name().set( "Niclas" );
             niclasTemplate.title().set( "Mr" );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/EntityTypeSerializerTest.java
----------------------------------------------------------------------
diff --git a/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/EntityTypeSerializerTest.java b/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/EntityTypeSerializerTest.java
index c515902..d7154f2 100644
--- a/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/EntityTypeSerializerTest.java
+++ b/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/EntityTypeSerializerTest.java
@@ -20,6 +20,7 @@
 
 package org.apache.zest.library.rdf.entity;
 
+import org.apache.zest.api.identity.StringIdentity;
 import org.junit.Before;
 import org.junit.Test;
 import org.openrdf.model.Statement;
@@ -95,14 +96,14 @@ public class EntityTypeSerializerTest
             valueBuilder.prototype().test3().set( vb2.newInstance() );
             TestValue testValue = valueBuilder.newInstance();
 
-            EntityBuilder<TestEntity> builder = unitOfWork.newEntityBuilder(TestEntity.class, "test1");
+            EntityBuilder<TestEntity> builder = unitOfWork.newEntityBuilder(TestEntity.class, new StringIdentity( "test1") );
             TestEntity rickardTemplate = builder.instance();
             rickardTemplate.name().set( "Rickard" );
             rickardTemplate.title().set( "Mr" );
             rickardTemplate.value().set( testValue );
             TestEntity testEntity = builder.newInstance();
 
-            EntityBuilder<TestEntity> builder2 = unitOfWork.newEntityBuilder(TestEntity.class, "test2");
+            EntityBuilder<TestEntity> builder2 = unitOfWork.newEntityBuilder(TestEntity.class, new StringIdentity( "test2") );
             TestEntity niclasTemplate = builder2.instance();
             niclasTemplate.name().set( "Niclas" );
             niclasTemplate.title().set( "Mr" );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/test.xml
----------------------------------------------------------------------
diff --git a/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/test.xml b/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/test.xml
index 3e4bcc1..3373b7e 100644
--- a/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/test.xml
+++ b/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/test.xml
@@ -37,7 +37,7 @@
   </rdf:Description>
   <rdf:Description rdf:about="urn:zest:entity:test2">
     <value xmlns="urn:zest:persistent:org.apache.zest.library.rdf.entity.TestEntity#"/>
-    <identity xmlns="urn:zest:persistent:org.apache.zest.api.entity.Identity#">test2</identity>
+    <identity xmlns="urn:zest:persistent:org.apache.zest.api.identity.HasIdentity#">test2</identity>
     <name xmlns="urn:zest:persistent:org.apache.zest.library.rdf.entity.TestEntity#">Niclas</name>
     <title xmlns="urn:zest:persistent:org.apache.zest.library.rdf.entity.TestEntity#">Mr</title>
     <association xmlns="urn:zest:persistent:org.apache.zest.library.rdf.entity.TestEntity#" rdf:resource="urn:zest:entity:test1"/>

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/test2.xml
----------------------------------------------------------------------
diff --git a/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/test2.xml b/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/test2.xml
index a21e9a6..3a21393 100644
--- a/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/test2.xml
+++ b/libraries/rdf/src/test/java/org/apache/zest/library/rdf/entity/test2.xml
@@ -26,7 +26,7 @@
   <org.apache.zest.library.rdf.entity.TestEntity xmlns="urn:zest:persistent:Wvgf5vdB2OuC8JfcNmUqJLEPSYM:"
                                           rdf:about="urn:zest:entity:test2">
     <value xmlns="urn:zest:persistent:org.apache.zest.library.rdf.entity.TestEntity#">{test1:5,test2:null,test3:{data:"Habba"}}</value>
-    <identity xmlns="urn:zest:persistent:org.apache.zest.api.entity.Identity#">test2</identity>
+    <identity xmlns="urn:zest:persistent:org.apache.zest.api.identity.HasIdentity#">test2</identity>
     <name xmlns="urn:zest:persistent:org.apache.zest.library.rdf.entity.TestEntity#">Niclas</name>
     <title xmlns="urn:zest:persistent:org.apache.zest.library.rdf.entity.TestEntity#">Mr</title>
     <association xmlns="urn:zest:persistent:org.apache.zest.library.rdf.entity.TestEntity#" rdf:resource="urn:zest:entity:test1"/>

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/api/ContextResource.java
----------------------------------------------------------------------
diff --git a/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/api/ContextResource.java b/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/api/ContextResource.java
index b6d6317..f062fdb 100644
--- a/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/api/ContextResource.java
+++ b/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/api/ContextResource.java
@@ -37,6 +37,7 @@ import org.apache.zest.api.constraint.ConstraintViolation;
 import org.apache.zest.api.constraint.ConstraintViolationException;
 import org.apache.zest.api.constraint.Name;
 import org.apache.zest.api.entity.EntityComposite;
+import org.apache.zest.api.identity.Identity;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.injection.scope.Structure;
 import org.apache.zest.api.injection.scope.Uses;
@@ -204,12 +205,12 @@ public class ContextResource
         restlet.subResource( subResourceClass );
     }
 
-    protected <T> T select( Class<T> entityClass, String id )
+    protected <T> T select( Class<T> entityClass, Identity id )
         throws ResourceException
     {
         try
         {
-            T composite = uowf.currentUnitOfWork().get( entityClass, id );
+            T composite = uowf.currentUnitOfWork().get( entityClass,  id );
             current().select( composite );
             return composite;
         }
@@ -219,10 +220,10 @@ public class ContextResource
         }
     }
 
-    protected <T> T selectFromManyAssociation( ManyAssociation<T> manyAssociation, String id )
+    protected <T> T selectFromManyAssociation( ManyAssociation<T> manyAssociation, Identity id )
         throws ResourceException
     {
-        T entity = (T) uowf.currentUnitOfWork().get( Object.class, id );
+        T entity = (T) uowf.currentUnitOfWork().get( Object.class, id  );
         if( !manyAssociation.contains( entity ) )
         {
             throw new ResourceException( Status.CLIENT_ERROR_NOT_FOUND );
@@ -232,7 +233,7 @@ public class ContextResource
         return entity;
     }
 
-    protected <T> T selectFromNamedAssociation( NamedAssociation<T> namedAssociation, String id )
+    protected <T> T selectFromNamedAssociation( NamedAssociation<T> namedAssociation, Identity id )
         throws ResourceException
     {
         T entity = (T) uowf.currentUnitOfWork().get( Object.class, id );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/api/ResourceValidity.java
----------------------------------------------------------------------
diff --git a/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/api/ResourceValidity.java b/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/api/ResourceValidity.java
index d8d43e0..9fadf1c 100644
--- a/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/api/ResourceValidity.java
+++ b/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/api/ResourceValidity.java
@@ -67,7 +67,7 @@ class ResourceValidity
         if( entity != null )
         {
             EntityState state = spi.entityStateOf( entity );
-            Tag tag = new Tag( state.identity().identity() + "/" + state.version() );
+            Tag tag = new Tag( state.entityReference().identity() + "/" + state.version() );
             response.getEntity().setModificationDate( java.util.Date.from( state.lastModified() ) );
             response.getEntity().setTag( tag );
         }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/restlet/RequestReaderDelegator.java
----------------------------------------------------------------------
diff --git a/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/restlet/RequestReaderDelegator.java b/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/restlet/RequestReaderDelegator.java
index f1104e1..61447d8 100644
--- a/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/restlet/RequestReaderDelegator.java
+++ b/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/restlet/RequestReaderDelegator.java
@@ -24,6 +24,8 @@ import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.ResourceBundle;
+import org.apache.zest.api.identity.Identity;
+import org.apache.zest.api.identity.StringIdentity;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.injection.scope.Structure;
 import org.apache.zest.api.mixin.InitializationException;
@@ -51,11 +53,12 @@ public class RequestReaderDelegator
         throws InitializationException
     {
         Logger logger = LoggerFactory.getLogger( getClass() );
+        Identity requestreaderdelegator = new StringIdentity("requestreaderdelegator");
 
         // Add custom readers first
         for( ServiceReference<RequestReader> requestReader : requestReaderReferences )
         {
-            if( !requestReader.identity().equals( "requestreaderdelegator" ) )
+            if( !requestReader.identity().equals(requestreaderdelegator) )
             {
                 logger.info( "Registered request reader:" + requestReader.identity() );
                 registerRequestReader( requestReader.get() );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/restlet/ResponseWriterDelegator.java
----------------------------------------------------------------------
diff --git a/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/restlet/ResponseWriterDelegator.java b/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/restlet/ResponseWriterDelegator.java
index a486184..66a17d3 100644
--- a/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/restlet/ResponseWriterDelegator.java
+++ b/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/restlet/ResponseWriterDelegator.java
@@ -23,6 +23,8 @@ package org.apache.zest.library.rest.server.restlet;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.ResourceBundle;
+import org.apache.zest.api.identity.Identity;
+import org.apache.zest.api.identity.StringIdentity;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.injection.scope.Structure;
 import org.apache.zest.api.mixin.InitializationException;
@@ -48,11 +50,12 @@ public class ResponseWriterDelegator
         throws InitializationException
     {
         Logger logger = LoggerFactory.getLogger( getClass() );
+        Identity responsewriterdelegator = new StringIdentity( "responsewriterdelegator" );
 
         // Add custom writers first
         for( ServiceReference<ResponseWriter> resultWriter : resultWriters )
         {
-            if( !resultWriter.identity().equals( "responsewriterdelegator" ) )
+            if( !resultWriter.identity().equals(responsewriterdelegator) )
             {
                 logger.info( "Registered result writer:" + resultWriter.identity() );
                 registerResultWriter( resultWriter.get() );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/restlet/requestreader/DefaultRequestReader.java
----------------------------------------------------------------------
diff --git a/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/restlet/requestreader/DefaultRequestReader.java b/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/restlet/requestreader/DefaultRequestReader.java
index 6d4af64..642d1c1 100644
--- a/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/restlet/requestreader/DefaultRequestReader.java
+++ b/libraries/rest-server/src/main/java/org/apache/zest/library/rest/server/restlet/requestreader/DefaultRequestReader.java
@@ -35,6 +35,8 @@ import org.apache.zest.api.association.AssociationDescriptor;
 import org.apache.zest.api.common.Optional;
 import org.apache.zest.api.constraint.Name;
 import org.apache.zest.api.entity.EntityReference;
+import org.apache.zest.api.identity.Identity;
+import org.apache.zest.api.identity.StringIdentity;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.injection.scope.Structure;
 import org.apache.zest.api.property.PropertyDescriptor;
@@ -257,8 +259,8 @@ public class DefaultRequestReader
                         entityAsForm = new Form();
                     }
 
-                    args[0] = uowf.currentUnitOfWork().get( method.getParameterTypes()[0],
-                                                           getValue( "entity", queryAsForm, entityAsForm ) );
+                    Identity entityIdentity = new StringIdentity( getValue( "entity", queryAsForm, entityAsForm ) );
+                    args[0] = uowf.currentUnitOfWork().get( method.getParameterTypes()[0], entityIdentity );
 
                     return args;
                 }
@@ -490,7 +492,7 @@ public class DefaultRequestReader
             }
             else if( parameterType.isInterface() )
             {
-                arg = uowf.currentUnitOfWork().get( parameterType, argString );
+                arg = uowf.currentUnitOfWork().get( parameterType, new StringIdentity( argString ) );
             }
             else
             {

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rest/src/main/java/org/apache/zest/library/rest/admin/EntitiesResource.java
----------------------------------------------------------------------
diff --git a/libraries/rest/src/main/java/org/apache/zest/library/rest/admin/EntitiesResource.java b/libraries/rest/src/main/java/org/apache/zest/library/rest/admin/EntitiesResource.java
index 7b1bd14..22bff3e 100644
--- a/libraries/rest/src/main/java/org/apache/zest/library/rest/admin/EntitiesResource.java
+++ b/libraries/rest/src/main/java/org/apache/zest/library/rest/admin/EntitiesResource.java
@@ -207,7 +207,7 @@ public class EntitiesResource
                 Entry entry = new Entry();
                 entry.setTitle( new Text( MediaType.TEXT_PLAIN, entityReference.toString() ) );
                 Link link = new Link();
-                link.setHref( getRequest().getResourceRef().clone().addSegment( entityReference.identity() ) );
+                link.setHref( getRequest().getResourceRef().clone().addSegment( entityReference.identity().toString() ) );
                 entry.getLinks().add( link );
                 entries.add( entry );
             }
@@ -227,11 +227,11 @@ public class EntitiesResource
         try
         {
             /*
-             * InputStream in = entity.getStream(); ObjectInputStream oin = new ObjectInputStream( in ); String identity
+             * InputStream in = entity.getStream(); ObjectInputStream oin = new ObjectInputStream( in ); String reference
              * = oin.readUTF(); Usecase usecase = (Usecase) oin.readUnshared(); MetaInfo unitofwork = (MetaInfo)
              * oin.readUnshared(); Iterable<UnitOfWorkEvent> events = (Iterable<UnitOfWorkEvent>) oin.readUnshared();
              *
-             * // Store state try { entityStore.apply( identity, events, usecase, unitofwork ).commit(); } catch(
+             * // Store state try { entityStore.apply( reference, events, usecase, unitofwork ).commit(); } catch(
              * ConcurrentEntityStateModificationException e ) { throw new ResourceException(
              * Status.CLIENT_ERROR_CONFLICT ); }
              */

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rest/src/main/java/org/apache/zest/library/rest/admin/EntityResource.java
----------------------------------------------------------------------
diff --git a/libraries/rest/src/main/java/org/apache/zest/library/rest/admin/EntityResource.java b/libraries/rest/src/main/java/org/apache/zest/library/rest/admin/EntityResource.java
index 212678c..bd6d5e0 100755
--- a/libraries/rest/src/main/java/org/apache/zest/library/rest/admin/EntityResource.java
+++ b/libraries/rest/src/main/java/org/apache/zest/library/rest/admin/EntityResource.java
@@ -32,6 +32,8 @@ import java.util.Map;
 import java.util.Set;
 import org.apache.zest.api.entity.EntityDescriptor;
 import org.apache.zest.api.entity.EntityReference;
+import org.apache.zest.api.identity.Identity;
+import org.apache.zest.api.identity.StringIdentity;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.injection.scope.Structure;
 import org.apache.zest.api.injection.scope.Uses;
@@ -85,7 +87,7 @@ public class EntityResource
     @Uses
     private EntityStateSerializer entitySerializer;
 
-    private String identity;
+    private Identity identity;
 
     public EntityResource()
     {
@@ -102,9 +104,9 @@ public class EntityResource
     protected void doInit()
         throws ResourceException
     {
-        // /entity/{identity}
+        // /entity/{reference}
         Map<String, Object> attributes = getRequest().getAttributes();
-        identity = (String) attributes.get( "identity" );
+        identity = new StringIdentity( (String) attributes.get( "reference" ) );
     }
 
     @Override
@@ -115,8 +117,8 @@ public class EntityResource
         EntityStoreUnitOfWork uow = entityStore.newUnitOfWork( module, usecase, SystemTime.now() );
         try
         {
-            EntityReference identityRef = EntityReference.parseEntityReference( identity );
-            uow.entityStateOf( module, identityRef ).remove();
+            EntityReference reference = EntityReference.create( identity );
+            uow.entityStateOf( module, reference ).remove();
             uow.applyChanges().commit();
             getResponse().setStatus( Status.SUCCESS_NO_CONTENT );
         }
@@ -179,7 +181,7 @@ public class EntityResource
         EntityState entityState;
         try
         {
-            EntityReference entityReference = EntityReference.parseEntityReference( identity );
+            EntityReference entityReference = EntityReference.create( identity );
             entityState = unitOfWork.entityStateOf( module, entityReference );
         }
         catch( EntityNotFoundException e )
@@ -208,10 +210,10 @@ public class EntityResource
                 throws IOException
             {
                 PrintWriter out = new PrintWriter( writer );
-                out.println( "<html><head><title>" + entity.identity() + "</title>"
+                out.println( "<html><head><title>" + entity.entityReference() + "</title>"
                              + "<link rel=\"alternate\" type=\"application/rdf+xml\" "
-                             + "href=\"" + entity.identity() + ".rdf\"/></head><body>" );
-                out.println( "<h1>" + entity.identity() + "</h1>" );
+                             + "href=\"" + entity.entityReference() + ".rdf\"/></head><body>" );
+                out.println( "<h1>" + entity.entityReference() + "</h1>" );
 
                 out.println( "<form method=\"post\" action=\"" + getRequest().getResourceRef().getPath() + "\">\n" );
                 out.println( "<fieldset><legend>Properties</legend>\n<table>" );
@@ -255,11 +257,11 @@ public class EntityResource
 
                 out.println( "<fieldset><legend>ManyAssociations</legend>\n<table>" );
                 descriptor.state().manyAssociations().forEach( associationType -> {
-                    ManyAssociationState identities = entity.manyAssociationValueOf( associationType.qualifiedName() );
+                    ManyAssociationState references = entity.manyAssociationValueOf( associationType.qualifiedName() );
                     String value = "";
-                    for( EntityReference identity : identities )
+                    for( EntityReference reference : references )
                     {
-                        value += identity.identity() + "\n";
+                        value += reference.identity() + "\n";
                     }
 
                     out.println( "<tr><td>"
@@ -414,7 +416,7 @@ public class EntityResource
                         int index = 0;
                         while( ( identity = bufferedReader.readLine() ) != null )
                         {
-                            EntityReference reference = new EntityReference( identity );
+                            EntityReference reference = EntityReference.parseEntityReference( identity );
 
                             if( manyAssociation.count() < index && manyAssociation.get( index ).equals( reference ) )
                             {
@@ -473,7 +475,7 @@ public class EntityResource
                                 break;
                             }
                             String identity = line;
-                            EntityReference reference = new EntityReference( identity );
+                            EntityReference reference = EntityReference.parseEntityReference( identity );
                             try
                             {
                                 unitOfWork.entityStateOf( module, reference );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rest/src/main/java/org/apache/zest/library/rest/admin/RestApplication.java
----------------------------------------------------------------------
diff --git a/libraries/rest/src/main/java/org/apache/zest/library/rest/admin/RestApplication.java b/libraries/rest/src/main/java/org/apache/zest/library/rest/admin/RestApplication.java
index 6173672..54f45f8 100644
--- a/libraries/rest/src/main/java/org/apache/zest/library/rest/admin/RestApplication.java
+++ b/libraries/rest/src/main/java/org/apache/zest/library/rest/admin/RestApplication.java
@@ -99,7 +99,7 @@ public class RestApplication
         Router router = new Router( getContext() );
 
         router.attach( "/entity", newFinder( EntitiesResource.class ) );
-        router.attach( "/entity/{identity}", newFinder( EntityResource.class ) );
+        router.attach( "/entity/{reference}", newFinder( EntityResource.class ) );
 
         router.attach( "/query", newFinder( SPARQLResource.class ) );
         router.attach( "/query/sparqlhtml", newFinder( SPARQLResource.class ) );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rest/src/main/resources/org/apache/zest/library/rest/admin/sparqlform.html
----------------------------------------------------------------------
diff --git a/libraries/rest/src/main/resources/org/apache/zest/library/rest/admin/sparqlform.html b/libraries/rest/src/main/resources/org/apache/zest/library/rest/admin/sparqlform.html
index 24200e3..b91eaa7 100644
--- a/libraries/rest/src/main/resources/org/apache/zest/library/rest/admin/sparqlform.html
+++ b/libraries/rest/src/main/resources/org/apache/zest/library/rest/admin/sparqlform.html
@@ -43,7 +43,7 @@
 <body>
 <form method="GET" action="">
     <label>Query:</label><br/>
-    <textarea rows="20" cols="80" name="query">PREFIX ns0: &lt;urn:zest:type:org.apache.zest.api.entity.Identity#&gt;
+    <textarea rows="20" cols="80" name="query">PREFIX ns0: &lt;urn:zest:type:org.apache.zest.api.identity.HasIdentity#&gt;
         PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;
         PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;
         SELECT DISTINCT ?entityType ?identity
@@ -60,7 +60,7 @@
 
 <h3>Get all entities</h3>
 <pre>
-PREFIX ns0: &lt;urn:zest:type:org.apache.zest.api.entity.Identity#&gt;
+PREFIX ns0: &lt;urn:zest:type:org.apache.zest.api.identity.HasIdentity#&gt;
         PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;
         PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;
         SELECT DISTINCT ?entityType ?identity
@@ -73,7 +73,7 @@ PREFIX ns0: &lt;urn:zest:type:org.apache.zest.api.entity.Identity#&gt;
 </pre>
 <h3>Get entities of a given type</h3>
 <pre>
-PREFIX ns0: &lt;urn:zest:type:org.apache.zest.api.entity.Identity#&gt;
+PREFIX ns0: &lt;urn:zest:type:org.apache.zest.api.identity.HasIdentity#&gt;
         PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;
         PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;
         SELECT DISTINCT ?identity
@@ -85,7 +85,7 @@ PREFIX ns0: &lt;urn:zest:type:org.apache.zest.api.entity.Identity#&gt;
 
 <h3>Get entities with a given property value</h3>
 <pre>
-PREFIX ns0: &lt;urn:zest:type:org.apache.zest.api.entity.Identity#&gt;
+PREFIX ns0: &lt;urn:zest:type:org.apache.zest.api.identity.HasIdentity#&gt;
         PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;
         PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;
         SELECT DISTINCT ?identity

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rest/src/test/java/org/apache/zest/library/rest/admin/DummyDataService.java
----------------------------------------------------------------------
diff --git a/libraries/rest/src/test/java/org/apache/zest/library/rest/admin/DummyDataService.java b/libraries/rest/src/test/java/org/apache/zest/library/rest/admin/DummyDataService.java
index 918d3cc..4bb187d 100644
--- a/libraries/rest/src/test/java/org/apache/zest/library/rest/admin/DummyDataService.java
+++ b/libraries/rest/src/test/java/org/apache/zest/library/rest/admin/DummyDataService.java
@@ -24,6 +24,7 @@ import java.util.HashMap;
 import org.apache.zest.api.activation.ActivatorAdapter;
 import org.apache.zest.api.activation.Activators;
 import org.apache.zest.api.entity.EntityBuilder;
+import org.apache.zest.api.identity.StringIdentity;
 import org.apache.zest.api.injection.scope.Structure;
 import org.apache.zest.api.mixin.Mixins;
 import org.apache.zest.api.service.ServiceComposite;
@@ -76,13 +77,13 @@ public interface DummyDataService
                     valueBuilder.prototype().string().set( "Foo bar value" );
                     valueBuilder.prototype().map().set( new HashMap() );
 
-                    EntityBuilder<TestEntity> builder = unitOfWork.newEntityBuilder( TestEntity.class, "test1" );
+                    EntityBuilder<TestEntity> builder = unitOfWork.newEntityBuilder( TestEntity.class, new StringIdentity( "test1" ) );
                     builder.instance().name().set( "Foo bar" );
                     builder.instance().age().set( 42 );
                     builder.instance().value().set( valueBuilder.newInstance() );
                     TestEntity testEntity = builder.newInstance();
 
-                    EntityBuilder<TestEntity> builder2 = unitOfWork.newEntityBuilder( TestEntity.class, "test2" );
+                    EntityBuilder<TestEntity> builder2 = unitOfWork.newEntityBuilder( TestEntity.class, new StringIdentity( "test2" ) );
                     builder2.instance().name().set( "Xyzzy" );
                     builder2.instance().age().set( 12 );
                     builder2.instance().association().set( testEntity );
@@ -97,7 +98,7 @@ public interface DummyDataService
                 }
 
                 {
-                    EntityBuilder<TestEntity2> builder = unitOfWork.newEntityBuilder( TestEntity2.class, "test3" );
+                    EntityBuilder<TestEntity2> builder = unitOfWork.newEntityBuilder( TestEntity2.class, new StringIdentity( "test3" ) );
                     builder.instance().name().set( "Test3" );
                     builder.newInstance();
                 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/rest/src/test/java/org/apache/zest/library/rest/admin/RestTest.java
----------------------------------------------------------------------
diff --git a/libraries/rest/src/test/java/org/apache/zest/library/rest/admin/RestTest.java b/libraries/rest/src/test/java/org/apache/zest/library/rest/admin/RestTest.java
index 651495c..fef807b 100644
--- a/libraries/rest/src/test/java/org/apache/zest/library/rest/admin/RestTest.java
+++ b/libraries/rest/src/test/java/org/apache/zest/library/rest/admin/RestTest.java
@@ -42,6 +42,7 @@ import org.apache.zest.api.common.Optional;
 import org.apache.zest.api.common.Visibility;
 import org.apache.zest.api.entity.EntityBuilder;
 import org.apache.zest.api.entity.EntityComposite;
+import org.apache.zest.api.identity.StringIdentity;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.property.Property;
 import org.apache.zest.api.structure.ApplicationDescriptor;
@@ -125,13 +126,13 @@ public class RestTest extends AbstractZestTest
         UnitOfWork uow = unitOfWorkFactory.newUnitOfWork();
         try
         {
-            EntityBuilder<PersonEntity> builder1 = uow.newEntityBuilder( PersonEntity.class, "P2" );
+            EntityBuilder<PersonEntity> builder1 = uow.newEntityBuilder( PersonEntity.class, new StringIdentity( "P2" ) );
             PersonEntity maryDoe = builder1.instance();
             maryDoe.firstname().set( "Mary" );
             maryDoe.lastname().set( "Doe" );
             maryDoe = builder1.newInstance();
 
-            EntityBuilder<PersonEntity> builder2 = uow.newEntityBuilder( PersonEntity.class, "P1" );
+            EntityBuilder<PersonEntity> builder2 = uow.newEntityBuilder( PersonEntity.class, new StringIdentity( "P1" ) );
             PersonEntity joeDoe = builder2.instance();
             joeDoe.firstname().set( "Joe" );
             joeDoe.lastname().set( "Doe" );
@@ -155,12 +156,12 @@ public class RestTest extends AbstractZestTest
         // System.out.println( rdf.replaceAll( "\n", "\\\\n" ).replaceAll( "\"", "\\\\\"" ) );
         assertThat( "Incorrect RDF produced", rdf, anyOf(
             // Open JDK 8 & Valid
-            equalTo( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rdf:RDF\n\txmlns:zest=\"http://zest.apache.org/rdf/model/1.0/\"\n\txmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n\txmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n<org.apache.zest.library.rest.admin.RestTest-PersonEntity xmlns=\"urn:zest:type:\" rdf:about=\"urn:zest:entity:P1\">\n\t<lastname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Doe</lastname>\n\t<firstname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Joe</firstname>\n\t<identity xmlns=\"urn:zest:type:org.apache.zest.api.entity.Identity#\">P1</identity>\n\t<mother xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\" rdf:resource=\"urn:zest:entity:P2\"/>\n</org.apache.zest.library.rest.admin.RestTest-PersonEntity>\n\n</rdf:RDF>" ),
-            equalTo( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rdf:RDF\n\txmlns:zest=\"http://zest.apache.org/rdf/model/1.0/\"\n\txmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n\txmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n<org.apache.zest.library.rest.admin.RestTest-PersonEntity xmlns=\"urn:zest:type:\" rdf:about=\"urn:zest:entity:P1\">\n\t<identity xmlns=\"urn:zest:type:org.apache.zest.api.entity.Identity#\">P1</identity>\n\t<firstname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Joe</firstname>\n\t<lastname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Doe</lastname>\n\t<mother xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\" rdf:resource=\"urn:zest:entity:P2\"/>\n</org.apache.zest.library.rest.admin.RestTest-PersonEntity>\n\n</rdf:RDF>" ),
+            equalTo( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rdf:RDF\n\txmlns:zest=\"http://zest.apache.org/rdf/model/1.0/\"\n\txmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n\txmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n<org.apache.zest.library.rest.admin.RestTest-PersonEntity xmlns=\"urn:zest:type:\" rdf:about=\"urn:zest:entity:P1\">\n\t<lastname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Doe</lastname>\n\t<firstname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Joe</firstname>\n\t<identity xmlns=\"urn:zest:type:org.apache.zest.api.identity.HasIdentity#\">P1</identity>\n\t<mother xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\" rdf:resource=\"urn:zest:entity:P2\"/>\n</org.apache.zest.library.rest.admin.RestTest-PersonEntity>\n\n</rdf:RDF>" ),
+            equalTo( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rdf:RDF\n\txmlns:zest=\"http://zest.apache.org/rdf/model/1.0/\"\n\txmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n\txmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n<org.apache.zest.library.rest.admin.RestTest-PersonEntity xmlns=\"urn:zest:type:\" rdf:about=\"urn:zest:entity:P1\">\n\t<identity xmlns=\"urn:zest:type:org.apache.zest.api.identity.HasIdentity#\">P1</identity>\n\t<firstname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Joe</firstname>\n\t<lastname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Doe</lastname>\n\t<mother xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\" rdf:resource=\"urn:zest:entity:P2\"/>\n</org.apache.zest.library.rest.admin.RestTest-PersonEntity>\n\n</rdf:RDF>" ),
             // Sun JDK 6 / Oracle JDK 7 & Valid
-            equalTo( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rdf:RDF\n\txmlns:zest=\"http://zest.apache.org/rdf/model/1.0/\"\n\txmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n\txmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n<org.apache.zest.library.rest.admin.RestTest-PersonEntity xmlns=\"urn:zest:type:\" rdf:about=\"urn:zest:entity:P1\">\n\t<firstname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Joe</firstname>\n\t<lastname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Doe</lastname>\n\t<identity xmlns=\"urn:zest:type:org.apache.zest.api.entity.Identity#\">P1</identity>\n\t<mother xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\" rdf:resource=\"urn:zest:entity:P2\"/>\n</org.apache.zest.library.rest.admin.RestTest-PersonEntity>\n\n</rdf:RDF>" ),
+            equalTo( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rdf:RDF\n\txmlns:zest=\"http://zest.apache.org/rdf/model/1.0/\"\n\txmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n\txmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n<org.apache.zest.library.rest.admin.RestTest-PersonEntity xmlns=\"urn:zest:type:\" rdf:about=\"urn:zest:entity:P1\">\n\t<firstname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Joe</firstname>\n\t<lastname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Doe</lastname>\n\t<identity xmlns=\"urn:zest:type:org.apache.zest.api.identity.HasIdentity#\">P1</identity>\n\t<mother xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\" rdf:resource=\"urn:zest:entity:P2\"/>\n</org.apache.zest.library.rest.admin.RestTest-PersonEntity>\n\n</rdf:RDF>" ),
             // IBM JDK 6 & Valid
-            equalTo( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rdf:RDF\n\txmlns:zest=\"http://zest.apache.org/rdf/model/1.0/\"\n\txmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n\txmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n<org.apache.zest.library.rest.admin.RestTest-PersonEntity xmlns=\"urn:zest:type:\" rdf:about=\"urn:zest:entity:P1\">\n\t<identity xmlns=\"urn:zest:type:org.apache.zest.api.entity.Identity#\">P1</identity>\n\t<lastname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Doe</lastname>\n\t<firstname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Joe</firstname>\n\t<mother xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\" rdf:resource=\"urn:zest:entity:P2\"/>\n</org.apache.zest.library.rest.admin.RestTest-PersonEntity>\n\n</rdf:RDF>" ) ) );
+            equalTo( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rdf:RDF\n\txmlns:zest=\"http://zest.apache.org/rdf/model/1.0/\"\n\txmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n\txmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">\n<org.apache.zest.library.rest.admin.RestTest-PersonEntity xmlns=\"urn:zest:type:\" rdf:about=\"urn:zest:entity:P1\">\n\t<identity xmlns=\"urn:zest:type:org.apache.zest.api.identity.HasIdentity#\">P1</identity>\n\t<lastname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Doe</lastname>\n\t<firstname xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\">Joe</firstname>\n\t<mother xmlns=\"urn:zest:type:org.apache.zest.library.rest.admin.RestTest-Person#\" rdf:resource=\"urn:zest:entity:P2\"/>\n</org.apache.zest.library.rest.admin.RestTest-PersonEntity>\n\n</rdf:RDF>" ) ) );
     }
 
     @Test
@@ -169,14 +170,14 @@ public class RestTest extends AbstractZestTest
     {
         RestTester restTester = objectFactory.newObject( RestTester.class );
         Map<String, String> properties = new HashMap<String, String>();
-        properties.put( "identity", "P1" );
+        properties.put( "reference", "P1" );
         properties.put( "firstname", "Jack" );
         properties.put( "lastname", "Doe" );
         restTester.putEntity( "P1", properties );
         UnitOfWork work = unitOfWorkFactory.newUnitOfWork();
         try
         {
-            PersonEntity entity = work.get( PersonEntity.class, "P1" );
+            PersonEntity entity = work.get( PersonEntity.class, new StringIdentity( "P1" ) );
             assertEquals( "FirstName not changed.", "Jack", entity.firstname().get() );
             assertEquals( "LastName not changed.", "Doe", entity.lastname().get() );
             work.complete();
@@ -199,7 +200,7 @@ public class RestTest extends AbstractZestTest
             PersonEntity entity = null;
             try
             {
-                entity = work.get( PersonEntity.class, "P1" );
+                entity = work.get( PersonEntity.class, new StringIdentity( "P1" ) );
             }
             catch( NoSuchEntityException expected )
             {

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZestEntityRestlet.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZestEntityRestlet.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZestEntityRestlet.java
index 977dad2..59c7a8d 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZestEntityRestlet.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZestEntityRestlet.java
@@ -25,7 +25,7 @@ import java.util.List;
 import java.util.function.Consumer;
 import org.apache.zest.api.common.Optional;
 import org.apache.zest.api.entity.EntityComposite;
-import org.apache.zest.api.entity.Identity;
+import org.apache.zest.api.identity.HasIdentity;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.injection.scope.Structure;
 import org.apache.zest.api.injection.scope.Uses;
@@ -57,7 +57,7 @@ import org.restlet.representation.Variant;
 import org.restlet.routing.Router;
 import org.restlet.security.User;
 
-public class ZestEntityRestlet<T extends Identity> extends Restlet
+public class ZestEntityRestlet<T extends HasIdentity> extends Restlet
 {
     /**
      * Creates a new ZestEntityRestlet instance for the given resource and entity classes.
@@ -73,7 +73,7 @@ public class ZestEntityRestlet<T extends Identity> extends Restlet
      *
      * @return The ZestEntityRestlet instance
      */
-    public static <K extends Identity, T extends ServerResource<K>> Restlet newInstance(
+    public static <K extends HasIdentity, T extends ServerResource<K>> Restlet newInstance(
         Module module, Router router, Class<T> resourceClass, Class<K> entityClass
     )
     {

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZrestApplication.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZrestApplication.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZrestApplication.java
index 888b1c8..735533f 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZrestApplication.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZrestApplication.java
@@ -21,7 +21,7 @@ package org.apache.zest.library.restlet;
 
 import java.util.logging.Level;
 import org.apache.zest.api.composite.TransientBuilderFactory;
-import org.apache.zest.api.entity.Identity;
+import org.apache.zest.api.identity.HasIdentity;
 import org.apache.zest.api.object.ObjectFactory;
 import org.apache.zest.api.service.ServiceFinder;
 import org.apache.zest.api.structure.Application;
@@ -213,7 +213,7 @@ public abstract class ZrestApplication extends org.restlet.Application
     protected abstract void addRoutes( Router router );
 
     protected void addResourcePath( String name,
-                                    Class<? extends Identity> type,
+                                    Class<? extends HasIdentity> type,
                                     String basePath
     )
     {
@@ -221,7 +221,7 @@ public abstract class ZrestApplication extends org.restlet.Application
     }
 
     protected void addResourcePath( String name,
-                                    Class<? extends Identity> type,
+                                    Class<? extends HasIdentity> type,
                                     String basePath,
                                     boolean createLink,
                                     boolean rootRoute
@@ -240,8 +240,8 @@ public abstract class ZrestApplication extends org.restlet.Application
         router.attach( basePath + name + "/{id}/{invoke}", newZestRestlet( EntityResource.class, type ) );
     }
 
-    private <K extends Identity, T extends ServerResource<K>> Restlet newZestRestlet( Class<T> resourceClass,
-                                                                                      Class<K> entityClass
+    private <K extends HasIdentity, T extends ServerResource<K>> Restlet newZestRestlet(Class<T> resourceClass,
+                                                                                        Class<K> entityClass
     )
     {
 

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/EntityList.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/EntityList.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/EntityList.java
index 95da91e..0db1c3d 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/EntityList.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/EntityList.java
@@ -21,11 +21,11 @@
 package org.apache.zest.library.restlet.crud;
 
 import java.util.List;
-import org.apache.zest.api.entity.Identity;
+import org.apache.zest.api.identity.HasIdentity;
 import org.apache.zest.api.property.Property;
 import org.apache.zest.library.restlet.Command;
 
-public interface EntityList extends Identity
+public interface EntityList extends HasIdentity
 {
     Property<List<EntityRef>> entities();
 

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/EntityListResource.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/EntityListResource.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/EntityListResource.java
index 605210b..6961ef9 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/EntityListResource.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/EntityListResource.java
@@ -25,7 +25,9 @@ import java.util.Collections;
 import java.util.List;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
-import org.apache.zest.api.entity.Identity;
+import org.apache.zest.api.identity.HasIdentity;
+import org.apache.zest.api.identity.Identity;
+import org.apache.zest.api.identity.StringIdentity;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.injection.scope.Structure;
 import org.apache.zest.api.injection.scope.This;
@@ -46,9 +48,9 @@ import org.restlet.data.Method;
 import org.restlet.data.Reference;
 
 @Mixins( EntityListResource.Mixin.class )
-public interface EntityListResource<T extends Identity> extends ServerResource<EntityList>
+public interface EntityListResource<T extends HasIdentity> extends ServerResource<EntityList>
 {
-    abstract class Mixin<T extends Identity>
+    abstract class Mixin<T extends HasIdentity>
         implements EntityListResource<T>
     {
         @This
@@ -72,7 +74,7 @@ public interface EntityListResource<T extends Identity> extends ServerResource<E
             Property<Request> request = parameters.request();
             Reference base = request.get().getResourceRef();
             String name = "list[" + parameters.entityType().get().getSimpleName() + "]";
-            String identity = identityManager.generate( EntityListResource.class, name );
+            Identity identity = identityManager.generate( EntityListResource.class, name );
             ValueBuilder<EntityList> builder = vbf.newValueBuilder( EntityList.class );
             List<EntityRef> result = getEntityRefs( base );
             EntityList prototype = builder.prototype();
@@ -96,9 +98,9 @@ public interface EntityListResource<T extends Identity> extends ServerResource<E
             //noinspection unchecked
             Class<T> entityType = parameters.entityType().get();
 
-            identityManager.generate( entityType, name );
-            locator.find( entityType ).create( name );
-            return resourceBuilder.createRestLink( name, base, Method.GET );
+            Identity identity = identityManager.generate(entityType, name);
+            locator.find( entityType ).create( identity );
+            return resourceBuilder.createRestLink( identity, base, Method.GET );
         }
 
         @SuppressWarnings( "unchecked" )

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/EntityResource.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/EntityResource.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/EntityResource.java
index d3cf73a..01abb1e 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/EntityResource.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/EntityResource.java
@@ -25,7 +25,9 @@ import java.lang.reflect.Method;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.TemporalAccessor;
 import org.apache.zest.api.common.Optional;
-import org.apache.zest.api.entity.Identity;
+import org.apache.zest.api.identity.HasIdentity;
+import org.apache.zest.api.identity.Identity;
+import org.apache.zest.api.identity.StringIdentity;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.injection.scope.Structure;
 import org.apache.zest.api.injection.scope.This;
@@ -43,7 +45,7 @@ import org.apache.zest.spi.ZestSPI;
 import org.restlet.data.Reference;
 
 @Mixins( EntityResource.Mixin.class )
-public interface EntityResource<T extends Identity> extends ServerResource<T>
+public interface EntityResource<T extends HasIdentity> extends ServerResource<T>
 {
     interface EntityParam
     {
@@ -51,7 +53,7 @@ public interface EntityResource<T extends Identity> extends ServerResource<T>
         Property<String> invoke();
     }
 
-    abstract class Mixin<T extends Identity>
+    abstract class Mixin<T extends HasIdentity>
         implements EntityResource<T>
     {
 
@@ -62,7 +64,7 @@ public interface EntityResource<T extends Identity> extends ServerResource<T>
         private ValueBuilderFactory vbf;
 
         @This
-        private Identity me;
+        private HasIdentity me;
 
         @This
         private Parameters<T> parameters;
@@ -95,8 +97,8 @@ public interface EntityResource<T extends Identity> extends ServerResource<T>
         public void delete()
         {
             Class entityType = parameters.entityType().get();
-            String nameOfEntity = parameters.id().get();
-            locator.find( entityType ).delete( nameOfEntity );
+            String idOfEntity = parameters.id().get();
+            locator.find( entityType ).delete( new StringIdentity( idOfEntity ) );
         }
 
         @Override
@@ -136,7 +138,7 @@ public interface EntityResource<T extends Identity> extends ServerResource<T>
                 throw new RuntimeException( message, e );
             }
             Reference base = parameters.request().get().getResourceRef();
-            return resourceBuilder.createRestLink( "", base, org.restlet.data.Method.GET );
+            return resourceBuilder.createRestLink( new StringIdentity( "" ), base, org.restlet.data.Method.GET );
         }
 
         private Object createParametersComposite( RestForm form, Class argType )

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/HasIdentitySpecification.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/HasIdentitySpecification.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/HasIdentitySpecification.java
new file mode 100644
index 0000000..e54766d
--- /dev/null
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/HasIdentitySpecification.java
@@ -0,0 +1,44 @@
+/*
+ *  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.zest.library.restlet.crud;
+
+import java.util.function.Predicate;
+import org.apache.zest.api.identity.HasIdentity;
+import org.apache.zest.api.identity.Identity;
+import org.apache.zest.api.util.NullArgumentException;
+
+public class HasIdentitySpecification
+    implements Predicate<HasIdentity>
+{
+    private final Identity id;
+
+    public HasIdentitySpecification(Identity identity )
+    {
+        NullArgumentException.validateNotNull( "reference", identity );
+        this.id = identity;
+    }
+
+    @Override
+    public boolean test( HasIdentity item )
+    {
+        return id.equals( item.identity().get() );
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/IdentitySpecification.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/IdentitySpecification.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/IdentitySpecification.java
deleted file mode 100644
index 3f91e3e..0000000
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/crud/IdentitySpecification.java
+++ /dev/null
@@ -1,43 +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.zest.library.restlet.crud;
-
-import java.util.function.Predicate;
-import org.apache.zest.api.entity.Identity;
-import org.apache.zest.api.util.NullArgumentException;
-
-public class IdentitySpecification
-    implements Predicate<Identity>
-{
-    private final String id;
-
-    public IdentitySpecification( String identity )
-    {
-        NullArgumentException.validateNotNull( "identity", identity );
-        this.id = identity;
-    }
-
-    @Override
-    public boolean test( Identity item )
-    {
-        return id.equals( item.identity().get() );
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/identity/CanonicalName.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/identity/CanonicalName.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/identity/CanonicalName.java
index abdee30..e4e29fd 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/identity/CanonicalName.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/identity/CanonicalName.java
@@ -20,7 +20,7 @@
 
 package org.apache.zest.library.restlet.identity;
 
-import org.apache.zest.api.entity.Identity;
+import org.apache.zest.api.identity.HasIdentity;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.injection.scope.This;
 import org.apache.zest.api.mixin.Mixins;
@@ -36,7 +36,7 @@ public interface CanonicalName
         implements CanonicalName
     {
         @This
-        private Identity me;
+        private HasIdentity me;
 
         @Service
         private IdentityManager manager;

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/identity/IdentityManager.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/identity/IdentityManager.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/identity/IdentityManager.java
index 40c5eda..b984459 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/identity/IdentityManager.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/identity/IdentityManager.java
@@ -26,6 +26,8 @@ import java.util.function.Predicate;
 import org.apache.zest.api.common.Optional;
 import org.apache.zest.api.concern.Concerns;
 import org.apache.zest.api.configuration.Configuration;
+import org.apache.zest.api.identity.Identity;
+import org.apache.zest.api.identity.StringIdentity;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.injection.scope.This;
 import org.apache.zest.api.mixin.Mixins;
@@ -45,11 +47,11 @@ public interface IdentityManager
 
     boolean isIdentity( String candidate );
 
-    String generate( Class type, @Optional String canonicalName );
+    Identity generate( Class type, @Optional String canonicalName );
 
-    String extractName( String identity );
+    String extractName( Identity identity );
 
-    Class extractType( String identity );
+    Class extractType( Identity identity );
 
     @UnitOfWorkPropagation
     String findPrefix( Class type );
@@ -72,19 +74,19 @@ public interface IdentityManager
         }
 
         @Override
-        public String generate( Class type, String canonicalName )
+        public Identity generate( Class type, String canonicalName )
         {
             if( canonicalName == null )
             {
-                canonicalName = uuidService.generate( type );
+                canonicalName = uuidService.generate( type ).toString();
             }
             if( isIdentity( canonicalName ) )
             {
                 // This is already an ID, and we simply return it.
-                return canonicalName;
+                return new StringIdentity( canonicalName );
             }
             String prefix = findPrefix( type );
-            return prefix + SEPARATOR + canonicalName;
+            return new StringIdentity( prefix + SEPARATOR + canonicalName );
         }
 
         @Override
@@ -106,33 +108,31 @@ public interface IdentityManager
         }
 
         @Override
-        public String extractName( String identity )
+        public String extractName( Identity identity )
         {
-            if( !isIdentity( identity ) )
-            {
-                return identity;
-            }
-            int pos = identity.indexOf( SEPARATOR );
+            String idString = identity.toString();
+            int pos = idString.indexOf( SEPARATOR );
             if( pos < 1 )
             {
-                throw new InvalidIdentityFormatException( identity );
+                throw new InvalidIdentityFormatException( idString );
             }
-            return identity.substring( pos + 1 );
+            return idString.substring( pos + 1 );
         }
 
         @Override
-        public Class extractType( String identity )
+        public Class extractType( Identity identity )
         {
-            if( !isIdentity( identity ) )
+            String idString = identity.toString();
+            if( !isIdentity( idString ) )
             {
-                throw new IllegalArgumentException( "Given argument '" + identity + "' is not an Identity" );
+                throw new IllegalArgumentException( "Given argument '" + idString + "' is not an Identity" );
             }
-            int pos = identity.indexOf( SEPARATOR );
+            int pos = idString.indexOf( SEPARATOR );
             if( pos < 1 )
             {
-                throw new InvalidIdentityFormatException( identity );
+                throw new InvalidIdentityFormatException( idString );
             }
-            String prefix = identity.substring( 0, pos );
+            String prefix = idString.substring( 0, pos );
             Map.Entry<String, String> found =
                 first(
                     filter(

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/identity/InvalidIdentityFormatException.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/identity/InvalidIdentityFormatException.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/identity/InvalidIdentityFormatException.java
index 876e7d1..76996ad 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/identity/InvalidIdentityFormatException.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/identity/InvalidIdentityFormatException.java
@@ -24,6 +24,6 @@ public class InvalidIdentityFormatException extends RuntimeException
 {
     public InvalidIdentityFormatException( String identity )
     {
-        super( "The given identity wasn't generated by the UrlIdentityManager: " + identity );
+        super( "The given reference wasn't generated by the UrlIdentityManager: " + identity );
     }
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/repository/CrudRepository.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/repository/CrudRepository.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/repository/CrudRepository.java
index c4c5f05..ccc5ddd 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/repository/CrudRepository.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/repository/CrudRepository.java
@@ -22,22 +22,23 @@ package org.apache.zest.library.restlet.repository;
 
 import java.util.function.Predicate;
 import org.apache.zest.api.composite.Composite;
-import org.apache.zest.api.entity.Identity;
+import org.apache.zest.api.identity.HasIdentity;
+import org.apache.zest.api.identity.Identity;
 import org.apache.zest.api.unitofwork.concern.UnitOfWorkPropagation;
 
-public interface CrudRepository<T extends Identity>
+public interface CrudRepository<T extends HasIdentity>
 {
     @UnitOfWorkPropagation
-    void create( @EntityName String nameOfEntity );
+    void create( @EntityName Identity identityOfEntity );
 
     @UnitOfWorkPropagation
-    T get( @EntityName String nameOfEntity );
+    T get( @EntityName Identity identityOfEntity );
 
     @UnitOfWorkPropagation
     void update( T newStateAsValue );
 
     @UnitOfWorkPropagation
-    void delete( @EntityName String nameOfEntity );
+    void delete( @EntityName Identity identityOfEntity );
 
     @UnitOfWorkPropagation
     Iterable<T> findAll();

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/repository/RepositoryLocator.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/repository/RepositoryLocator.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/repository/RepositoryLocator.java
index 57ce091..2001376 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/repository/RepositoryLocator.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/repository/RepositoryLocator.java
@@ -23,7 +23,7 @@ package org.apache.zest.library.restlet.repository;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.stream.StreamSupport;
-import org.apache.zest.api.entity.Identity;
+import org.apache.zest.api.identity.HasIdentity;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.mixin.Mixins;
 import org.apache.zest.api.service.ServiceReference;
@@ -31,7 +31,7 @@ import org.apache.zest.api.service.ServiceReference;
 @Mixins( RepositoryLocator.Mixin.class )
 public interface RepositoryLocator
 {
-    <T extends Identity> CrudRepository<T> find( Class<T> entityType );
+    <T extends HasIdentity> CrudRepository<T> find(Class<T> entityType );
 
     class Mixin
         implements RepositoryLocator
@@ -48,7 +48,7 @@ public interface RepositoryLocator
         }
 
         @Override
-        public <T extends Identity> CrudRepository<T> find( Class<T> entityType )
+        public <T extends HasIdentity> CrudRepository<T> find(Class<T> entityType )
         {
             //noinspection unchecked
             return repositories.get( entityType );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/repository/SmallCrudRepositoryMixin.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/repository/SmallCrudRepositoryMixin.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/repository/SmallCrudRepositoryMixin.java
index 781812c..73f04c0 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/repository/SmallCrudRepositoryMixin.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/repository/SmallCrudRepositoryMixin.java
@@ -23,7 +23,8 @@ package org.apache.zest.library.restlet.repository;
 import java.util.function.Predicate;
 import org.apache.zest.api.ZestAPI;
 import org.apache.zest.api.composite.Composite;
-import org.apache.zest.api.entity.Identity;
+import org.apache.zest.api.identity.HasIdentity;
+import org.apache.zest.api.identity.Identity;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.injection.scope.Structure;
 import org.apache.zest.api.injection.scope.This;
@@ -37,7 +38,7 @@ import org.apache.zest.api.unitofwork.UnitOfWork;
 import org.apache.zest.api.unitofwork.UnitOfWorkFactory;
 import org.apache.zest.library.restlet.identity.IdentityManager;
 
-public class SmallCrudRepositoryMixin<T extends Identity>
+public class SmallCrudRepositoryMixin<T extends HasIdentity>
     implements CrudRepository<T>
 {
     @Structure
@@ -58,17 +59,17 @@ public class SmallCrudRepositoryMixin<T extends Identity>
     }
 
     @Override
-    public void create( String idOrName )
+    public void create( Identity identity )
     {
         UnitOfWork uow = uowf.currentUnitOfWork();
-        uow.newEntity( entityType, identityManager.generate( entityType, idOrName ) );
+        uow.newEntity( entityType, identity );
     }
 
     @Override
-    public T get( String idOrName )
+    public T get( Identity identity )
     {
         UnitOfWork uow = uowf.currentUnitOfWork();
-        return uow.get( entityType, identityManager.generate( entityType, idOrName ) );
+        return uow.get( entityType, identity );
     }
 
     @Override
@@ -77,24 +78,23 @@ public class SmallCrudRepositoryMixin<T extends Identity>
         UnitOfWork uow = uowf.currentUnitOfWork();
 
         @SuppressWarnings( "unchecked" )
-        Class<Identity> type = (Class<Identity>) entityType;
+        Class<HasIdentity> type = (Class<HasIdentity>) entityType;
 
         uow.toEntity( type, newStateAsValue );  //updates the identified entity with the value
     }
 
     @Override
-    public void delete( String idOrName )
+    public void delete( Identity identity )
     {
-        String id = identityManager.generate( entityType, idOrName );
         UnitOfWork uow = uowf.currentUnitOfWork();
         try
         {
-            T entity = uow.get( entityType, id );
+            T entity = uow.get( entityType, identity );
             uow.remove( entity );
         }
         catch( NoSuchEntityException | NoSuchEntityTypeException e )
         {
-            throw new IllegalArgumentException( "Entity  '" + idOrName + "' doesn't exist." );
+            throw new IllegalArgumentException( "Entity  '" + identity + "' doesn't exist." );
         }
     }
 

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/CreationResource.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/CreationResource.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/CreationResource.java
index 45dff20..b51d599 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/CreationResource.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/CreationResource.java
@@ -20,7 +20,8 @@
 
 package org.apache.zest.library.restlet.resource;
 
-import org.apache.zest.api.entity.Identity;
+import org.apache.zest.api.identity.HasIdentity;
+import org.apache.zest.api.identity.Identity;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.injection.scope.Structure;
 import org.apache.zest.api.injection.scope.This;
@@ -38,9 +39,9 @@ import org.apache.zest.library.restlet.repository.RepositoryLocator;
 import org.restlet.data.Method;
 
 @Mixins( CreationResource.Mixin.class )
-public interface CreationResource<T extends Identity> extends ServerResource<T>
+public interface CreationResource<T extends HasIdentity> extends ServerResource<T>
 {
-    abstract class Mixin<T extends Identity>
+    abstract class Mixin<T extends HasIdentity>
         implements CreationResource<T>
     {
         @Structure
@@ -66,13 +67,13 @@ public interface CreationResource<T extends Identity> extends ServerResource<T>
         {
             String name = form.field( "name" ).value().get();
             Class entityType = parameters.entityType().get();
-            String identity = identityManager.generate( entityType, name );
+            Identity identity = identityManager.generate( entityType, name );
             locator.find( entityType ).create( identity );
             doParameterization( form, entityType, identity );
-            return resourceBuilder.createRestLink( name, parameters.request().get().getResourceRef(), Method.GET );
+            return resourceBuilder.createRestLink( identity, parameters.request().get().getResourceRef(), Method.GET );
         }
 
-        private <P> void doParameterization( RestForm form, Class entityType, String identity )
+        private <P> void doParameterization( RestForm form, Class entityType, Identity identity )
         {
             if( !CreationParameterized.class.isAssignableFrom( entityType ) )
             {

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/DefaultResourceFactoryImpl.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/DefaultResourceFactoryImpl.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/DefaultResourceFactoryImpl.java
index 735e97a..c28a1b1 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/DefaultResourceFactoryImpl.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/DefaultResourceFactoryImpl.java
@@ -21,7 +21,7 @@
 package org.apache.zest.library.restlet.resource;
 
 import java.util.Map;
-import org.apache.zest.api.entity.Identity;
+import org.apache.zest.api.identity.HasIdentity;
 import org.apache.zest.api.injection.scope.Structure;
 import org.apache.zest.api.injection.scope.Uses;
 import org.apache.zest.api.property.PropertyDescriptor;
@@ -33,7 +33,7 @@ import org.restlet.Request;
 import org.restlet.Response;
 import org.restlet.routing.Router;
 
-public class DefaultResourceFactoryImpl<K extends Identity, T extends ServerResource<K>>
+public class DefaultResourceFactoryImpl<K extends HasIdentity, T extends ServerResource<K>>
     implements ResourceFactory<K, T>
 {
     @Uses
@@ -81,7 +81,7 @@ public class DefaultResourceFactoryImpl<K extends Identity, T extends ServerReso
     private Object findValue( Map<String, Object> attributes, PropertyDescriptor descriptor )
     {
         String name = descriptor.qualifiedName().name();
-        if( name.equals( "identity" ) )
+        if( name.equals( "reference" ) )
         {
             Object id = attributes.get( "id" );
             if( id == null )

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/EntryPoint.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/EntryPoint.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/EntryPoint.java
index f76a726..c877061 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/EntryPoint.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/EntryPoint.java
@@ -21,11 +21,11 @@
 package org.apache.zest.library.restlet.resource;
 
 import java.util.Map;
-import org.apache.zest.api.entity.Identity;
+import org.apache.zest.api.identity.HasIdentity;
 import org.apache.zest.api.property.Property;
 import org.apache.zest.library.restlet.RestLink;
 
-public interface EntryPoint extends Identity
+public interface EntryPoint extends HasIdentity
 {
     Property<Map<String,RestLink>> api();
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/EntryPointResource.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/EntryPointResource.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/EntryPointResource.java
index 62b6779..e5dda03 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/EntryPointResource.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/EntryPointResource.java
@@ -22,6 +22,7 @@ package org.apache.zest.library.restlet.resource;
 
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.zest.api.identity.StringIdentity;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.injection.scope.Structure;
 import org.apache.zest.api.injection.scope.This;
@@ -79,18 +80,18 @@ public interface EntryPointResource extends ServerResource<EntryPoint>
                         RestLink link;
                         if( route.getDescription() == null )
                         {
-                            link = resourceBuilder.createRestLink( template.getPattern() , hostRef, Method.GET );
+                            link = resourceBuilder.createRestLink( new StringIdentity( template.getPattern() ), hostRef, Method.GET );
                         }
                         else
                         {
-                            link = resourceBuilder.createRestLink( template.getPattern() , hostRef, Method.GET, route.getDescription() );
+                            link = resourceBuilder.createRestLink( new StringIdentity( template.getPattern() ), hostRef, Method.GET, route.getDescription() );
                         }
                         entryPoints.put( route.getName(), link );
                     }
                 }
             }
             ValueBuilder<EntryPoint> builder = vbf.newValueBuilder( EntryPoint.class );
-            builder.prototype().identity().set( "/" );
+            builder.prototype().identity().set( new StringIdentity( "/" ) );
             builder.prototype().api().set( entryPoints );
             return builder.newInstance();
         }