POLYGENE-226 - Start on the Initial Value Provider stuff. Not trivial, and need 
to make a partial commit which is not complete and not working yet.


Project: http://git-wip-us.apache.org/repos/asf/polygene-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/polygene-java/commit/8e8ac22c
Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/8e8ac22c
Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/8e8ac22c

Branch: refs/heads/develop
Commit: 8e8ac22cbf46498874f0093814f8023e2a276ea1
Parents: 7410895
Author: niclas <[email protected]>
Authored: Tue Feb 14 12:53:11 2017 +0800
Committer: niclas <[email protected]>
Committed: Tue Feb 14 12:53:11 2017 +0800

----------------------------------------------------------------------
 .../polygene/api/entity/EntityReference.java    |   2 +-
 .../api/property/InitialValueProvider.java      |   8 +
 .../api/property/PropertyDescriptor.java        |   5 +-
 .../polygene/bootstrap/MetaInfoDeclaration.java |   8 +
 .../polygene/bootstrap/MixinDeclaration.java    |   4 +
 .../bootstrap/CompositeAssemblyImpl.java        |  10 +-
 .../runtime/composite/TransientInstance.java    |   1 -
 .../polygene/runtime/entity/EntityInstance.java |   1 -
 .../polygene/runtime/entity/EntityModel.java    |   2 +-
 .../runtime/property/PropertyModel.java         | 151 ++++++++++++-------
 .../ImportedServiceReferenceInstance.java       |   9 +-
 .../runtime/service/ServiceInstance.java        |   6 +-
 .../polygene/runtime/service/ServiceModel.java  |   2 +-
 .../service/ServiceReferenceInstance.java       |  15 +-
 .../runtime/structure/ModuleInstance.java       | 123 ++++++++-------
 .../polygene/runtime/value/ValueInstance.java   |   5 +-
 .../polygene/api/common/PropertyTypeTest.java   |   1 +
 .../polygene/test/entity/CanRemoveAll.java      |   7 +
 .../prefs/PreferencesEntityStoreMixin.java      |  20 +--
 .../entitystore/sql/SQLEntityStoreMixin.java    |   2 +-
 .../skeletons/SQLCompatEntityStateWrapper.java  |   2 +
 .../polygene/migration/MigrationService.java    |   2 +
 .../migration/assembly/MigrationBuilder.java    |  10 +-
 .../migration/assembly/MigrationRules.java      |  10 +-
 .../constraints/NotEmptyStringConstraint.java   |   4 -
 .../rest/server/api/ContextResource.java        |   2 +-
 .../ValueDescriptorResponseWriter.java          |   2 +-
 27 files changed, 235 insertions(+), 179 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/api/src/main/java/org/apache/polygene/api/entity/EntityReference.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/polygene/api/entity/EntityReference.java 
b/core/api/src/main/java/org/apache/polygene/api/entity/EntityReference.java
index 731d3c3..fcfcb0e 100644
--- a/core/api/src/main/java/org/apache/polygene/api/entity/EntityReference.java
+++ b/core/api/src/main/java/org/apache/polygene/api/entity/EntityReference.java
@@ -35,7 +35,7 @@ public final class EntityReference
         implements Serializable
 {
     /**
-     * Parse an Entity reference to an EntityReference.
+     * Parse an Entity reference string to an EntityReference.
      *
      * @param identityString the EntityReference reference
      * @return the EntityReference represented by the given reference

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/api/src/main/java/org/apache/polygene/api/property/InitialValueProvider.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/polygene/api/property/InitialValueProvider.java
 
b/core/api/src/main/java/org/apache/polygene/api/property/InitialValueProvider.java
new file mode 100644
index 0000000..7fd6cc3
--- /dev/null
+++ 
b/core/api/src/main/java/org/apache/polygene/api/property/InitialValueProvider.java
@@ -0,0 +1,8 @@
+package org.apache.polygene.api.property;
+
+import java.util.function.BiFunction;
+import org.apache.polygene.api.structure.Module;
+
+public interface InitialValueProvider extends BiFunction<Module, 
PropertyDescriptor, Object>
+{
+}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/api/src/main/java/org/apache/polygene/api/property/PropertyDescriptor.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/polygene/api/property/PropertyDescriptor.java
 
b/core/api/src/main/java/org/apache/polygene/api/property/PropertyDescriptor.java
index 52b217c..2f5e641 100644
--- 
a/core/api/src/main/java/org/apache/polygene/api/property/PropertyDescriptor.java
+++ 
b/core/api/src/main/java/org/apache/polygene/api/property/PropertyDescriptor.java
@@ -24,6 +24,7 @@ import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Type;
 import org.apache.polygene.api.common.QualifiedName;
 import org.apache.polygene.api.structure.MetaInfoHolder;
+import org.apache.polygene.api.structure.Module;
 import org.apache.polygene.api.structure.ModuleDescriptor;
 import org.apache.polygene.api.type.ValueType;
 
@@ -54,7 +55,9 @@ public interface PropertyDescriptor extends MetaInfoHolder
 
     AccessibleObject accessor();
 
-    Object initialValue( ModuleDescriptor module );
+    InitialValueProvider initialValueProvider();
+
+    Object resolveInitialValue(ModuleDescriptor moduleDescriptor);
 
     ValueType valueType();
 

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/MetaInfoDeclaration.java
----------------------------------------------------------------------
diff --git 
a/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/MetaInfoDeclaration.java
 
b/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/MetaInfoDeclaration.java
index 2967fe5..348ac10 100644
--- 
a/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/MetaInfoDeclaration.java
+++ 
b/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/MetaInfoDeclaration.java
@@ -29,6 +29,7 @@ import java.lang.reflect.Proxy;
 import java.util.HashMap;
 import java.util.Map;
 import org.apache.polygene.api.common.MetaInfo;
+import org.apache.polygene.api.property.InitialValueProvider;
 import org.apache.polygene.api.property.Property;
 
 /**
@@ -217,5 +218,12 @@ public final class MetaInfoDeclaration
             metaInfo.set( info );
             return this;
         }
+
+        @Override
+        public MixinDeclaration<T> 
declareInitialValueProvider(InitialValueProvider provider)
+        {
+            metaInfo.add( InitialValueProvider.class, provider);
+            return this;
+        }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/MixinDeclaration.java
----------------------------------------------------------------------
diff --git 
a/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/MixinDeclaration.java
 
b/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/MixinDeclaration.java
index 90e22f4..a50f305 100644
--- 
a/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/MixinDeclaration.java
+++ 
b/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/MixinDeclaration.java
@@ -20,6 +20,8 @@
 
 package org.apache.polygene.bootstrap;
 
+import org.apache.polygene.api.property.InitialValueProvider;
+
 /**
  * Fluent API for declaring information about properties
  *
@@ -30,4 +32,6 @@ public interface MixinDeclaration<T>
     T declareDefaults();
 
     MixinDeclaration<T> setMetaInfo( Object info );
+
+    MixinDeclaration<T> declareInitialValueProvider(InitialValueProvider 
provider);
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/runtime/src/main/java/org/apache/polygene/runtime/bootstrap/CompositeAssemblyImpl.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/bootstrap/CompositeAssemblyImpl.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/bootstrap/CompositeAssemblyImpl.java
index 3158cff..709f614 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/bootstrap/CompositeAssemblyImpl.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/bootstrap/CompositeAssemblyImpl.java
@@ -61,6 +61,7 @@ import org.apache.polygene.api.mixin.Initializable;
 import org.apache.polygene.api.mixin.Mixins;
 import org.apache.polygene.api.property.GenericPropertyInfo;
 import org.apache.polygene.api.property.Immutable;
+import org.apache.polygene.api.property.InitialValueProvider;
 import org.apache.polygene.api.property.Property;
 import org.apache.polygene.api.sideeffect.SideEffects;
 import org.apache.polygene.api.type.HasTypes;
@@ -465,13 +466,15 @@ public abstract class CompositeAssemblyImpl
         }
         boolean useDefaults = useDefaultsDeclaration != null || 
stateDeclarations.useDefaults( accessor );
         boolean immutable = this.immutable || metaInfo.get( Immutable.class ) 
!= null;
+        InitialValueProvider initialValueProvider = 
metaInfo.get(InitialValueProvider.class);
         return new PropertyModel(
             accessor,
             immutable,
             useDefaults,
             valueConstraintsInstance,
             metaInfo,
-            initialValue
+            initialValue,
+            initialValueProvider
         );
     }
 
@@ -492,8 +495,9 @@ public abstract class CompositeAssemblyImpl
                                                .findFirst().orElse( null );
             String name = nameAnnotation == null ? "param" + ( i + 1 ) : 
nameAnnotation.value();
 
-            boolean optional = Stream.of( parameterAnnotation ).filter( 
isType( Optional.class ) )
-                                     .findFirst().isPresent();
+            boolean optional = Stream.of( parameterAnnotation )
+                    .filter( isType( Optional.class ) )
+                    .findFirst().isPresent();
             ValueConstraintsModel parameterConstraintsModel = constraintsFor(
                 Arrays.stream( parameterAnnotation ),
                 parameterTypes[ i ],

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/runtime/src/main/java/org/apache/polygene/runtime/composite/TransientInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/TransientInstance.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/TransientInstance.java
index a251349..edc1a8b 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/TransientInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/TransientInstance.java
@@ -57,7 +57,6 @@ public class TransientInstance
         this.compositeModel = compositeModel;
         this.mixins = mixins;
         this.state = state;
-
         proxy = compositeModel.newProxy( this );
     }
 

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntityInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntityInstance.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntityInstance.java
index a58cee9..22432ec 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntityInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntityInstance.java
@@ -157,7 +157,6 @@ public final class EntityInstance
         {
             initState();
         }
-
         return state;
     }
 

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntityModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntityModel.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntityModel.java
index 4fd073d..b468be6 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntityModel.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntityModel.java
@@ -132,7 +132,7 @@ public final class EntityModel extends CompositeModel
     {
         // Set new properties to default value
         state().properties().forEach( propertyDescriptor -> {
-            entityState.setPropertyValue( propertyDescriptor.qualifiedName(), 
propertyDescriptor.initialValue( module ) );
+            entityState.setPropertyValue( propertyDescriptor.qualifiedName(), 
propertyDescriptor.resolveInitialValue(module) );
         } );
 
         // Set new associations to null

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/runtime/src/main/java/org/apache/polygene/runtime/property/PropertyModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/property/PropertyModel.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/property/PropertyModel.java
index 6aa5041..565b218 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/property/PropertyModel.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/property/PropertyModel.java
@@ -35,10 +35,12 @@ import 
org.apache.polygene.api.constraint.ConstraintViolationException;
 import org.apache.polygene.api.entity.Queryable;
 import org.apache.polygene.api.property.DefaultValues;
 import org.apache.polygene.api.property.GenericPropertyInfo;
+import org.apache.polygene.api.property.InitialValueProvider;
 import org.apache.polygene.api.property.InvalidPropertyTypeException;
 import org.apache.polygene.api.property.Property;
 import org.apache.polygene.api.property.PropertyDescriptor;
 import org.apache.polygene.api.service.NoSuchServiceException;
+import org.apache.polygene.api.structure.Module;
 import org.apache.polygene.api.structure.ModuleDescriptor;
 import org.apache.polygene.api.type.Serialization;
 import org.apache.polygene.api.type.ValueCompositeType;
@@ -63,7 +65,6 @@ public class PropertyModel
     implements PropertyDescriptor, PropertyInfo, Binder, 
Visitable<PropertyModel>
 {
     private Type type;
-
     private transient AccessibleObject accessor; // Interface accessor
 
     private final QualifiedName qualifiedName;
@@ -72,9 +73,7 @@ public class PropertyModel
 
     protected final MetaInfo metaInfo;
 
-    private final Object initialValue;
-
-    private final boolean useDefaults;
+    private final InitialValueProvider initialValueProvider;
 
     private final boolean immutable;
 
@@ -89,7 +88,8 @@ public class PropertyModel
                           boolean useDefaults,
                           ValueConstraintsInstance constraints,
                           MetaInfo metaInfo,
-                          Object initialValue
+                          Object initialValue,
+                          InitialValueProvider initialValueProvider
     )
     {
         if( accessor instanceof Method )
@@ -105,13 +105,15 @@ public class PropertyModel
         type = GenericPropertyInfo.propertyTypeOf( accessor );
         this.accessor = accessor;
         qualifiedName = QualifiedName.fromAccessor( accessor );
-
-        this.useDefaults = useDefaults;
-
-        this.initialValue = initialValue;
-
+        if( initialValueProvider != null )
+        {
+            this.initialValueProvider = initialValueProvider;
+        }
+        else
+        {
+            this.initialValueProvider = new 
DefaultInitialValueProvider(useDefaults, initialValue);
+        }
         this.constraints = constraints;
-
         final Queryable queryable = accessor.getAnnotation( Queryable.class );
         this.queryable = queryable == null || queryable.value();
     }
@@ -169,53 +171,18 @@ public class PropertyModel
     }
 
     @Override
-    public Object initialValue( ModuleDescriptor module )
+    public InitialValueProvider initialValueProvider()
     {
-        // Use supplied value from assembly
-        Object value = initialValue;
+        return initialValueProvider;
+    }
 
-        // Check for @UseDefaults annotation
-        if( useDefaults )
-        {
-            if( value == null || ( ( value instanceof String ) && ( (String) 
value ).length() == 0 ) )
-            {
-                if( valueType instanceof ValueCompositeType )
-                {
-                    Class<?> propertyType = 
valueType().types().findFirst().orElse( null );
-                    value = module.instance().newValue( propertyType );
-                }
-                else
-                {
-                    value = DefaultValues.getDefaultValueOf( type );
-                }
-            }
-            else
-            {
-                Class<?> propertyType = 
valueType().types().findFirst().orElse( null );
-                if( value instanceof String && !propertyType.equals( 
String.class ) )
-                {
-                    try
-                    {
-                        // here we could possibly deserialize json to other 
types...
-                        ValueDeserializer deserializer = module.instance()
-                            .serviceFinder()
-                            .findService( ValueDeserializer.class )
-                            .get();
-                        if( deserializer != null )
-                        {
-                            value = deserializer.deserialize( module, 
propertyType ).apply( (String) value );
-                        }
-                    }
-                    catch( NoSuchServiceException e )
-                    {
-                        throw new MissingValueSerializationException( 
"@UseDefaults with initialization value requires that there is a visible 
ValueDeserializer service available.", e);
-                    }
-                }
-            }
-        }
-        return value;
+    @Override
+    public Object resolveInitialValue(ModuleDescriptor moduleDescriptor)
+    {
+        return initialValueProvider.apply(moduleDescriptor.instance(), this);
     }
 
+
     @Override
     public void bind( Resolution resolution )
         throws BindingException
@@ -335,4 +302,80 @@ public class PropertyModel
             }
         }
     }
+
+    private static class NullInitialValueProvider
+        implements InitialValueProvider
+    {
+        @Override
+        public Object apply(Module module, PropertyDescriptor property)
+        {
+            return null;
+        }
+    }
+
+    private class DefaultInitialValueProvider
+        implements InitialValueProvider
+    {
+        private final boolean useDefaults;
+        private final Object initialValue;
+
+        private DefaultInitialValueProvider(boolean useDefaults, Object 
initialValue)
+        {
+            this.useDefaults = useDefaults;
+            this.initialValue = initialValue;
+        }
+
+        @Override
+        public Object apply(Module module, PropertyDescriptor property)
+        {
+            return initialValue(module.descriptor(), initialValue, 
useDefaults);
+        }
+
+        private Object initialValue( ModuleDescriptor module, Object 
initialValue, boolean useDefaults )
+        {
+            // Use supplied value from assembly
+            Object value = initialValue;
+
+            // Check for @UseDefaults annotation
+            if( useDefaults )
+            {
+                if( value == null || ( ( value instanceof String ) && ( 
(String) value ).length() == 0 ) )
+                {
+                    if( valueType instanceof ValueCompositeType )
+                    {
+                        Class<?> propertyType = 
valueType().types().findFirst().orElse( null );
+                        value = module.instance().newValue( propertyType );
+                    }
+                    else
+                    {
+                        value = DefaultValues.getDefaultValueOf( type );
+                    }
+                }
+                else
+                {
+                    Class<?> propertyType = 
valueType().types().findFirst().orElse( null );
+                    if( value instanceof String && !propertyType.equals( 
String.class ) )
+                    {
+                        try
+                        {
+                            // here we could possibly deserialize json to 
other types...
+                            ValueDeserializer deserializer = module.instance()
+                                    .serviceFinder()
+                                    .findService( ValueDeserializer.class )
+                                    .get();
+                            if( deserializer != null )
+                            {
+                                value = deserializer.deserialize( module, 
propertyType ).apply( (String) value );
+                            }
+                        }
+                        catch( NoSuchServiceException e )
+                        {
+                            throw new MissingValueSerializationException( 
"@UseDefaults with initialization value requires that there is a visible 
ValueDeserializer service available.", e);
+                        }
+                    }
+                }
+            }
+            return value;
+        }
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServiceReferenceInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServiceReferenceInstance.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServiceReferenceInstance.java
index cf13122..697d12c 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServiceReferenceInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServiceReferenceInstance.java
@@ -156,23 +156,22 @@ public final class ImportedServiceReferenceInstance<T>
             {
                 if( serviceInstance == null )
                 {
-                    serviceInstance = serviceModel.importInstance( module );
-                    instance = serviceInstance.instance();
-
+                    ImportedServiceInstance<T> newServiceInstance = 
serviceModel.importInstance( module );
                     try
                     {
                         activation.activate(
                             serviceModel.newActivatorsInstance( module ),
-                            serviceInstance, () -> {
+                            newServiceInstance, () -> {
                                 active = true;
                             }
                         );
                     }
                     catch( Exception e )
                     {
-                        serviceInstance = null;
                         throw new ServiceUnavailableException( "Could not 
activate service " + serviceModel.identity(), e );
                     }
+                    serviceInstance = newServiceInstance;
+                    instance = newServiceInstance.instance();
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServiceInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServiceInstance.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServiceInstance.java
index da40e1f..cae9e4b 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServiceInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServiceInstance.java
@@ -35,8 +35,7 @@ import 
org.apache.polygene.runtime.composite.TransientStateInstance;
 /**
  * JAVADOC
  */
-public class ServiceInstance
-    extends TransientInstance
+public class ServiceInstance extends TransientInstance
     implements Activation
 {
     public static TransientInstance serviceInstanceOf( ServiceComposite 
composite )
@@ -54,8 +53,7 @@ public class ServiceInstance
     {
         super( compositeModel, mixins, state );
 
-        implementsServiceAvailable =
-            Classes.assignableTypeSpecification( Availability.class ).test( 
descriptor() );
+        implementsServiceAvailable = Classes.assignableTypeSpecification( 
Availability.class ).test( descriptor() );
         hasEnabledConfiguration = compositeModel.configurationType() != null
                                   && Enabled.class.isAssignableFrom( 
compositeModel.configurationType() );
     }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServiceModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServiceModel.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServiceModel.java
index abbe40b..74dd852 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServiceModel.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServiceModel.java
@@ -134,7 +134,7 @@ public final class ServiceModel extends CompositeModel
 
         Map<AccessibleObject, Property<?>> properties = new HashMap<>();
         stateModel.properties().forEach( propertyModel -> {
-            Object initialValue = propertyModel.initialValue( module );
+            Object initialValue = propertyModel.resolveInitialValue(module);
             if( propertyModel.accessor().equals( HasIdentity.IDENTITY_METHOD ) 
)
             {
                 initialValue = identity;

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServiceReferenceInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServiceReferenceInstance.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServiceReferenceInstance.java
index e6e53bd..8cf7a1c 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServiceReferenceInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServiceReferenceInstance.java
@@ -149,19 +149,19 @@ public final class ServiceReferenceInstance<T>
             {
                 if( instance == null )
                 {
-                    instance = serviceModel.newInstance( module );
+                    ServiceInstance newInstance = serviceModel.newInstance( 
module );
 
                     try
                     {
                         activation.activate( 
serviceModel.newActivatorsInstance( module ),
-                                             instance,
+                                             newInstance,
                                              () -> active = true );
                     }
                     catch( Exception e )
                     {
-                        instance = null;
                         throw new ServiceUnavailableException( "Could not 
activate service " + serviceModel.identity(), e );
                     }
+                    instance = newInstance;
                 }
             }
         }
@@ -262,16 +262,7 @@ public final class ServiceReferenceInstance<T>
                         return serviceModel.toString().hashCode();
                 }
             }
-
             ServiceInstance instance = getInstance();
-
-/*
-            if (!instance.isAvailable())
-            {
-                throw new ServiceUnavailableException("Service is currently 
not available");
-            }
-
-*/
             return instance.invoke( object, method, objects );
         }
 

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/runtime/src/main/java/org/apache/polygene/runtime/structure/ModuleInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/structure/ModuleInstance.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/structure/ModuleInstance.java
index 4eb9ac1..3735130 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/structure/ModuleInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/structure/ModuleInstance.java
@@ -216,8 +216,9 @@ public class ModuleInstance
         model.state().properties().forEach(
             propertyModel ->
             {
+                Object initialValue = propertyModel.resolveInitialValue( 
model.module() );
                 Property<?> property = new PropertyInstance<>( ( 
(PropertyModel) propertyModel ).getBuilderInfo(),
-                                                               
propertyModel.initialValue( model.module() ) );
+                                                               initialValue );
                 properties.put( propertyModel.accessor(), property );
             } );
 
@@ -296,7 +297,7 @@ public class ModuleInstance
         @Override
         public Object getPropertyState( PropertyDescriptor propertyDescriptor )
         {
-            return propertyDescriptor.initialValue( module );
+            return propertyDescriptor.resolveInitialValue(module);
         }
 
         @Override
@@ -468,18 +469,21 @@ public class ModuleInstance
 
     public EntityStore entityStore()
     {
-        synchronized( this )
+        if( store == null )
         {
-            if( store == null )
+            synchronized( this )
             {
-                try
+                if( store == null )
                 {
-                    ServiceReference<EntityStore> service = findService( 
EntityStore.class );
-                    store = service.get();
-                }
-                catch( NoSuchServiceException e )
-                {
-                    throw new UnitOfWorkException( "No EntityStore service 
available in module " + name() );
+                    try
+                    {
+                        ServiceReference<EntityStore> service = findService( 
EntityStore.class );
+                        store = service.get();
+                    }
+                    catch( NoSuchServiceException e )
+                    {
+                        throw new UnitOfWorkException( "No EntityStore service 
available in module " + name() );
+                    }
                 }
             }
         }
@@ -488,18 +492,21 @@ public class ModuleInstance
 
     public UnitOfWorkFactory unitOfWorkFactory()
     {
-        synchronized( this )
+        if( uowf == null )
         {
-            if( uowf == null )
+            synchronized( this )
             {
-                try
-                {
-                    ServiceReference<UnitOfWorkFactory> service = findService( 
UnitOfWorkFactory.class );
-                    uowf = service.get();
-                }
-                catch( NoSuchServiceException e )
+                if( uowf == null )
                 {
-                    throw new UnitOfWorkException( "No UnitOfWorkFactory 
service available in module " + name() );
+                    try
+                    {
+                        ServiceReference<UnitOfWorkFactory> service = 
findService( UnitOfWorkFactory.class );
+                        uowf = service.get();
+                    }
+                    catch( NoSuchServiceException e )
+                    {
+                        throw new UnitOfWorkException( "No UnitOfWorkFactory 
service available in module " + name() );
+                    }
                 }
             }
         }
@@ -532,31 +539,37 @@ public class ModuleInstance
 
     public IdentityGenerator identityGenerator()
     {
-        synchronized( this )
+        if( generator == null )
         {
-            if( generator == null )
+            synchronized( this )
             {
-                ServiceReference<IdentityGenerator> service = findService( 
IdentityGenerator.class );
-                generator = service.get();
+                if( generator == null )
+                {
+                    ServiceReference<IdentityGenerator> service = findService( 
IdentityGenerator.class );
+                    generator = service.get();
+                }
             }
-            return generator;
         }
+        return generator;
     }
 
     public ValueSerialization valueSerialization()
     {
-        synchronized( this )
+        if( valueSerialization == null )
         {
-            if( valueSerialization == null )
+            synchronized( this )
             {
-                try
+                if( valueSerialization == null )
                 {
-                    ServiceReference<ValueSerialization> service = 
findService( ValueSerialization.class );
-                    valueSerialization = service.get();
-                }
-                catch( NoSuchServiceException e )
-                {
-                    throw new ValueSerializationException( "No 
ValueSeriaservice available in module " + name() );
+                    try
+                    {
+                        ServiceReference<ValueSerialization> service = 
findService( ValueSerialization.class );
+                        valueSerialization = service.get();
+                    }
+                    catch( NoSuchServiceException e )
+                    {
+                        throw new ValueSerializationException( "No 
ValueSeriaservice available in module " + name() );
+                    }
                 }
             }
         }
@@ -565,42 +578,24 @@ public class ModuleInstance
 
     public MetricsProvider metricsProvider()
     {
-        synchronized( this )
+        if( metrics == null )
         {
-            if( metrics == null )
+            synchronized( this )
             {
-                try
+                if( metrics == null )
                 {
-                    ServiceReference<MetricsProvider> service = findService( 
MetricsProvider.class );
-                    metrics = service.get();
-                }
-                catch( NoSuchServiceException e )
-                {
-                    metrics = new MetricsProviderAdapter();
+                    try
+                    {
+                        ServiceReference<MetricsProvider> service = 
findService( MetricsProvider.class );
+                        metrics = service.get();
+                    }
+                    catch( NoSuchServiceException e )
+                    {
+                        metrics = new MetricsProviderAdapter();
+                    }
                 }
             }
         }
         return metrics;
     }
-
-//    public Stream<ServiceReference<?>> visibleServices( Visibility 
visibility )
-//    {
-//        return concat( services.visibleServices( visibility ),
-//                       importedServices.visibleServices( visibility ) );
-//    }
-//
-//
-//
-//    public Stream<ServiceReference<?>> findVisibleServiceTypes()
-//    {
-//        return concat( visibleServices( Visibility.module ),
-//                       concat(
-//                           layer().visibleServices( Visibility.layer ),
-//                           concat(
-//                               layer().visibleServices( 
Visibility.application ),
-//                               layer().usedLayers().layers().flatMap( layer 
-> layer.visibleServices(Visibility.application) )
-//                           )
-//                       )
-//        );
-//    }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValueInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValueInstance.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValueInstance.java
index 12ba7d9..573d659 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValueInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValueInstance.java
@@ -39,10 +39,7 @@ public final class ValueInstance
         return (ValueInstance) Proxy.getInvocationHandler( composite );
     }
 
-    public ValueInstance( ValueModel compositeModel,
-                          Object[] mixins,
-                          ValueStateInstance state
-    )
+    public ValueInstance( ValueModel compositeModel, Object[] mixins, 
ValueStateInstance state )
     {
         super( compositeModel, mixins, state );
     }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/runtime/src/test/java/org/apache/polygene/api/common/PropertyTypeTest.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/test/java/org/apache/polygene/api/common/PropertyTypeTest.java
 
b/core/runtime/src/test/java/org/apache/polygene/api/common/PropertyTypeTest.java
index 4f33076..79349ae 100644
--- 
a/core/runtime/src/test/java/org/apache/polygene/api/common/PropertyTypeTest.java
+++ 
b/core/runtime/src/test/java/org/apache/polygene/api/common/PropertyTypeTest.java
@@ -22,6 +22,7 @@ package org.apache.polygene.api.common;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import org.apache.polygene.api.injection.scope.Invocation;
 import org.apache.polygene.test.AbstractPolygeneTest;
 import org.junit.Test;
 import org.apache.polygene.api.composite.TransientBuilder;

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/core/testsupport/src/main/java/org/apache/polygene/test/entity/CanRemoveAll.java
----------------------------------------------------------------------
diff --git 
a/core/testsupport/src/main/java/org/apache/polygene/test/entity/CanRemoveAll.java
 
b/core/testsupport/src/main/java/org/apache/polygene/test/entity/CanRemoveAll.java
new file mode 100644
index 0000000..80b0a55
--- /dev/null
+++ 
b/core/testsupport/src/main/java/org/apache/polygene/test/entity/CanRemoveAll.java
@@ -0,0 +1,7 @@
+package org.apache.polygene.test.entity;
+
+
+public interface CanRemoveAll
+{
+    void removeAll();
+}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/extensions/entitystore-preferences/src/main/java/org/apache/polygene/entitystore/prefs/PreferencesEntityStoreMixin.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-preferences/src/main/java/org/apache/polygene/entitystore/prefs/PreferencesEntityStoreMixin.java
 
b/extensions/entitystore-preferences/src/main/java/org/apache/polygene/entitystore/prefs/PreferencesEntityStoreMixin.java
index 72f4298..3198347 100644
--- 
a/extensions/entitystore-preferences/src/main/java/org/apache/polygene/entitystore/prefs/PreferencesEntityStoreMixin.java
+++ 
b/extensions/entitystore-preferences/src/main/java/org/apache/polygene/entitystore/prefs/PreferencesEntityStoreMixin.java
@@ -243,22 +243,22 @@ public class PreferencesEntityStoreMixin
                             if( primaryType.equals( Long.class ) )
                             {
                                 properties.put( 
persistentPropertyDescriptor.qualifiedName(),
-                                                this.getNumber( propsPrefs, 
persistentPropertyDescriptor, LONG_PARSER ) );
+                                                this.getNumber( propsPrefs, 
module, persistentPropertyDescriptor, LONG_PARSER ) );
                             }
                             else if( primaryType.equals( Integer.class ) )
                             {
                                 properties.put( 
persistentPropertyDescriptor.qualifiedName(),
-                                                this.getNumber( propsPrefs, 
persistentPropertyDescriptor, INT_PARSER ) );
+                                                this.getNumber( propsPrefs, 
module, persistentPropertyDescriptor, INT_PARSER ) );
                             }
                             else if( primaryType.equals( Double.class ) )
                             {
                                 properties.put( 
persistentPropertyDescriptor.qualifiedName(),
-                                                this.getNumber( propsPrefs, 
persistentPropertyDescriptor, DOUBLE_PARSER ) );
+                                                this.getNumber( propsPrefs, 
module, persistentPropertyDescriptor, DOUBLE_PARSER ) );
                             }
                             else if( primaryType.equals( Float.class ) )
                             {
                                 properties.put( 
persistentPropertyDescriptor.qualifiedName(),
-                                                this.getNumber( propsPrefs, 
persistentPropertyDescriptor, FLOAT_PARSER ) );
+                                                this.getNumber( propsPrefs, 
module, persistentPropertyDescriptor, FLOAT_PARSER ) );
                             }
                             else
                             {
@@ -279,7 +279,7 @@ public class PreferencesEntityStoreMixin
                         }
                         else if( primaryType.equals( Boolean.class ) )
                         {
-                            Boolean initialValue = (Boolean) 
persistentPropertyDescriptor.initialValue( module );
+                            Boolean initialValue = (Boolean) 
persistentPropertyDescriptor.resolveInitialValue(module);
                             properties.put( 
persistentPropertyDescriptor.qualifiedName(),
                                             propsPrefs.getBoolean( 
persistentPropertyDescriptor.qualifiedName().name(),
                                                                    
initialValue == null ? false : initialValue ) );
@@ -306,10 +306,10 @@ public class PreferencesEntityStoreMixin
                             String json = propsPrefs.get( 
persistentPropertyDescriptor.qualifiedName().name(), null );
                             if( json == null )
                             {
-                                if( persistentPropertyDescriptor.initialValue( 
module ) != null )
+                                if( 
persistentPropertyDescriptor.resolveInitialValue( module ) != null )
                                 {
-                                    properties.put( 
persistentPropertyDescriptor.qualifiedName(), persistentPropertyDescriptor
-                                        .initialValue( module ) );
+                                    properties.put( 
persistentPropertyDescriptor.qualifiedName(),
+                                            
persistentPropertyDescriptor.resolveInitialValue( module ) );
                                 }
                                 else
                                 {
@@ -640,9 +640,9 @@ public class PreferencesEntityStoreMixin
 
     private static final NumberParser<Float> FLOAT_PARSER = Float::parseFloat;
 
-    private <T> T getNumber( Preferences prefs, PropertyDescriptor pDesc, 
NumberParser<T> parser )
+    private <T> T getNumber( Preferences prefs, ModuleDescriptor module, 
PropertyDescriptor pDesc, NumberParser<T> parser )
     {
-        Object initialValue = pDesc.initialValue( null );
+        Object initialValue = pDesc.resolveInitialValue( module );
         String str = prefs.get( pDesc.qualifiedName().name(), initialValue == 
null ? null : initialValue.toString() );
         T result = null;
         if( str != null )

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/SQLEntityStoreMixin.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/SQLEntityStoreMixin.java
 
b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/SQLEntityStoreMixin.java
index d3e3f3f..123a613 100644
--- 
a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/SQLEntityStoreMixin.java
+++ 
b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/SQLEntityStoreMixin.java
@@ -389,7 +389,7 @@ public class SQLEntityStoreMixin
                     catch( JSONException e )
                     {
                         // Value not found, default it
-                        Object initialValue = propertyDescriptor.initialValue( 
module );
+                        Object initialValue = 
propertyDescriptor.resolveInitialValue( module );
                         properties.put( propertyDescriptor.qualifiedName(), 
initialValue );
                         status[ 0 ] = EntityStatus.UPDATED;
                     }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/extensions/indexing-sql/src/main/java/org/apache/polygene/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-sql/src/main/java/org/apache/polygene/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
 
b/extensions/indexing-sql/src/main/java/org/apache/polygene/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
index b3c7621..6648590 100644
--- 
a/extensions/indexing-sql/src/main/java/org/apache/polygene/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
+++ 
b/extensions/indexing-sql/src/main/java/org/apache/polygene/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
@@ -29,6 +29,7 @@ import org.apache.polygene.api.common.QualifiedName;
 import org.apache.polygene.api.common.Visibility;
 import org.apache.polygene.api.entity.EntityDescriptor;
 import org.apache.polygene.api.entity.EntityReference;
+import org.apache.polygene.api.identity.Identity;
 import org.apache.polygene.api.property.PropertyDescriptor;
 import org.apache.polygene.api.structure.ModuleDescriptor;
 import org.apache.polygene.api.type.CollectionType;
@@ -81,6 +82,7 @@ class SQLCompatEntityStateWrapper
                    || Character.class.isAssignableFrom( primaryType )
                    || Enum.class.isAssignableFrom( primaryType )
                    || String.class.isAssignableFrom( primaryType )
+                   || Identity.class.isAssignableFrom( primaryType )
                    // || Date.class.isAssignableFrom( primaryType )
                    // || DateTime.class.isAssignableFrom( primaryType )
                    // || LocalDateTime.class.isAssignableFrom( primaryType )

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/extensions/migration/src/main/java/org/apache/polygene/migration/MigrationService.java
----------------------------------------------------------------------
diff --git 
a/extensions/migration/src/main/java/org/apache/polygene/migration/MigrationService.java
 
b/extensions/migration/src/main/java/org/apache/polygene/migration/MigrationService.java
index 9f700d7..09b4663 100644
--- 
a/extensions/migration/src/main/java/org/apache/polygene/migration/MigrationService.java
+++ 
b/extensions/migration/src/main/java/org/apache/polygene/migration/MigrationService.java
@@ -94,8 +94,10 @@ public interface MigrationService
 
         @Service
         StateStore store;
+
         @Service
         EntityStore entityStore;
+
         @Structure
         UnitOfWorkFactory uowf;
 

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/extensions/migration/src/main/java/org/apache/polygene/migration/assembly/MigrationBuilder.java
----------------------------------------------------------------------
diff --git 
a/extensions/migration/src/main/java/org/apache/polygene/migration/assembly/MigrationBuilder.java
 
b/extensions/migration/src/main/java/org/apache/polygene/migration/assembly/MigrationBuilder.java
index e7d0c83..1b02746 100644
--- 
a/extensions/migration/src/main/java/org/apache/polygene/migration/assembly/MigrationBuilder.java
+++ 
b/extensions/migration/src/main/java/org/apache/polygene/migration/assembly/MigrationBuilder.java
@@ -25,15 +25,15 @@ package org.apache.polygene.migration.assembly;
  */
 public class MigrationBuilder
 {
-    MigrationRules<EntityMigrationRule> entityRules;
-    MigrationRules<MigrationRule> rules;
+    private MigrationRules<EntityMigrationRule> entityRules;
+    private MigrationRules<MigrationRule> rules;
 
-    String fromVersion;
+    private String fromVersion;
 
     public MigrationBuilder( String fromVersion )
     {
-        this.entityRules = new MigrationRules<EntityMigrationRule>();
-        this.rules = new MigrationRules<MigrationRule>();
+        this.entityRules = new MigrationRules<>();
+        this.rules = new MigrationRules<>();
         this.fromVersion = fromVersion;
     }
 

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/extensions/migration/src/main/java/org/apache/polygene/migration/assembly/MigrationRules.java
----------------------------------------------------------------------
diff --git 
a/extensions/migration/src/main/java/org/apache/polygene/migration/assembly/MigrationRules.java
 
b/extensions/migration/src/main/java/org/apache/polygene/migration/assembly/MigrationRules.java
index f407cde..920e3de 100644
--- 
a/extensions/migration/src/main/java/org/apache/polygene/migration/assembly/MigrationRules.java
+++ 
b/extensions/migration/src/main/java/org/apache/polygene/migration/assembly/MigrationRules.java
@@ -31,10 +31,10 @@ import org.apache.polygene.api.util.ListMap;
 public class MigrationRules<T extends AbstractMigrationRule>
 {
     // to-version -> List of from-versions
-    ListMap<String, String> versionChanges = new ListMap<String, String>();
+    private ListMap<String, String> versionChanges = new ListMap<>();
 
     // key=fromversion->toversion value=list of rules for that transition
-    ListMap<String, T> rules = new ListMap<String, T>();
+    private ListMap<String, T> rules = new ListMap<>();
 
     public void addRule( T migrationRule )
     {
@@ -70,7 +70,7 @@ public class MigrationRules<T extends AbstractMigrationRule>
             if( fromVersion.equals( possibleFromVersion ) )
             {
                 // We found the end of the version transitions - return rules, 
but filter on entity type
-                return new ArrayList<T>( getRulesForTransition( fromVersion, 
toVersion ) );
+                return new ArrayList<>( getRulesForTransition( fromVersion, 
toVersion ) );
             }
             else
             {
@@ -99,8 +99,8 @@ public class MigrationRules<T extends AbstractMigrationRule>
     {
         if( versionChanges.get( toVersion ) == null )
         {
-            List<String> toVersions = new ArrayList<String>( 
versionChanges.keySet() );
-            Collections.sort( toVersions, Collections.reverseOrder() );
+            List<String> toVersions = new ArrayList<>(versionChanges.keySet());
+            toVersions.sort(Collections.reverseOrder());
             for( String version : toVersions )
             {
                 if( version.compareTo( toVersion ) <= 0 )

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/libraries/constraints/src/main/java/org/apache/polygene/library/constraints/NotEmptyStringConstraint.java
----------------------------------------------------------------------
diff --git 
a/libraries/constraints/src/main/java/org/apache/polygene/library/constraints/NotEmptyStringConstraint.java
 
b/libraries/constraints/src/main/java/org/apache/polygene/library/constraints/NotEmptyStringConstraint.java
index dd1b9df..f00ef26 100644
--- 
a/libraries/constraints/src/main/java/org/apache/polygene/library/constraints/NotEmptyStringConstraint.java
+++ 
b/libraries/constraints/src/main/java/org/apache/polygene/library/constraints/NotEmptyStringConstraint.java
@@ -28,13 +28,9 @@ import 
org.apache.polygene.library.constraints.annotation.NotEmpty;
 public class NotEmptyStringConstraint
     implements Constraint<NotEmpty, String>
 {
-
-    private static final long serialVersionUID = 1L;
-
     @Override
     public boolean isValid( NotEmpty annotation, String value )
     {
         return value.trim().length() > 0;
     }
-
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/api/ContextResource.java
----------------------------------------------------------------------
diff --git 
a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/api/ContextResource.java
 
b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/api/ContextResource.java
index d66a8a8..a50f29c 100644
--- 
a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/api/ContextResource.java
+++ 
b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/api/ContextResource.java
@@ -880,7 +880,7 @@ public class ContextResource
                 String value = getValue( 
propertyDescriptor.qualifiedName().name(), queryAsForm, entityAsForm );
                 if( value == null )
                 {
-                    Object initialValue = propertyDescriptor.initialValue( 
module.descriptor() );
+                    Object initialValue = 
propertyDescriptor.resolveInitialValue(module.descriptor());
                     if( initialValue != null )
                     {
                         value = initialValue.toString();

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/8e8ac22c/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/ValueDescriptorResponseWriter.java
----------------------------------------------------------------------
diff --git 
a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/ValueDescriptorResponseWriter.java
 
b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/ValueDescriptorResponseWriter.java
index 5bf1d1b..7ff8a84 100644
--- 
a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/ValueDescriptorResponseWriter.java
+++ 
b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/ValueDescriptorResponseWriter.java
@@ -68,7 +68,7 @@ public class ValueDescriptorResponseWriter extends 
AbstractResponseWriter
                 vd.state().properties().forEach( propertyDescriptor -> {
                     try
                     {
-                        Object o = propertyDescriptor.initialValue( module );
+                        Object o = 
propertyDescriptor.resolveInitialValue(module);
                         if( o == null )
                         {
                             json.put( 
propertyDescriptor.qualifiedName().name(), JSONObject.NULL );

Reply via email to