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/12/17 10:28:39 UTC

[63/81] [abbrv] zest-java git commit: ZEST-195 ; Clean up the mistakes in the rename.

ZEST-195 ; Clean up the mistakes in the rename.


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

Branch: refs/heads/develop
Commit: b02063bd7482c61cead2211dae901cc0d78fe187
Parents: 54b69c4
Author: Niclas Hedhman <ni...@hedhman.org>
Authored: Wed Dec 14 09:38:03 2016 +0800
Committer: Niclas Hedhman <ni...@hedhman.org>
Committed: Wed Dec 14 09:38:07 2016 +0800

----------------------------------------------------------------------
 .../polygene/gradle/PolygeneExtension.groovy    |  79 ++++
 .../apache/polygene/gradle/ZestExtension.groovy |  79 ----
 .../gradle/publish/MavenMetadata.groovy         |   2 +-
 .../org/apache/polygene/api/PolygeneAPI.java    | 188 ++++++++++
 .../java/org/apache/polygene/api/ZestAPI.java   | 188 ----------
 .../DeclareConfigurationDefaultsTest.java       |   2 +-
 .../api/injection/scope/StateFieldTest.java     |   2 +-
 .../decoratorMixin/DecoratorMixinTest.java      |   2 +-
 .../api/property/PropertyErrorTest.java         |   2 +-
 .../api/unitofwork/UnitOfWorkTemplateTest.java  |   2 +-
 .../polygene/bootstrap/PolygeneRuntime.java     |  38 ++
 .../apache/polygene/bootstrap/ZestRuntime.java  |  38 --
 .../polygene/runtime/PolygeneRuntimeImpl.java   | 360 +++++++++++++++++++
 .../polygene/runtime/ZestRuntimeImpl.java       | 360 -------------------
 .../polygene/api/common/OptionalTest.java       |   2 +-
 .../polygene/api/common/PropertyErrorTest.java  |   2 +-
 .../polygene/api/common/PropertyTypeTest.java   |   2 +-
 .../polygene/api/common/ValueCompositeTest.java |   2 +-
 .../regression/qi230/Qi230IssueTest.java        |   2 +-
 ...faceCollisionWithRelatedReturnTypesTest.java |   2 +-
 .../polygene/regression/qi383/Qi383Test.java    |   2 +-
 .../polygene/regression/qi59/IssueTest.java     |   2 +-
 .../polygene/runtime/PolygeneAPITest.java       |  87 +++++
 .../polygene/runtime/PolygeneSPITest.java       | 129 +++++++
 .../apache/polygene/runtime/ZestAPITest.java    |  87 -----
 .../apache/polygene/runtime/ZestSPITest.java    | 129 -------
 .../runtime/appliesto/AppliesToFilterTest.java  |   2 +-
 .../AppliesToOrConditionQI241Test.java          |   2 +-
 .../association/AssociationEqualityTest.java    |   2 +-
 .../DereferenceForBootstrappedConcernsTest.java |   2 +-
 .../runtime/composite/AbstractMixinTest.java    |   2 +-
 .../composite/CompositeFactoryImplTest.java     |   2 +-
 .../runtime/composite/MapOverrideTest.java      |   2 +-
 .../polygene/runtime/composite/QI247Test2.java  |   2 +-
 .../runtime/composite/TransientAsClassTest.java |   2 +-
 .../runtime/concerns/GenericConcernTest.java    |   2 +-
 .../concerns/PropertyInheritanceTest.java       |   2 +-
 .../runtime/constraints/ConstraintsTest.java    |   2 +-
 .../polygene/runtime/entity/AggregatedTest.java |   2 +-
 .../entity/EntityCompositeEqualityTest.java     |   2 +-
 .../runtime/entity/EntityCreationTest.java      |   2 +-
 .../polygene/runtime/entity/EntityTypeTest.java |   2 +-
 .../polygene/runtime/entity/QI273Test.java      |   2 +-
 .../entity/associations/AssociationTest.java    |   2 +-
 .../associations/ImmutableAssociationTest.java  |   2 +-
 .../IllegalUnitOfWorkInjectionTest.java         |   2 +-
 .../runtime/injection/UsesGenericClassTest.java |   2 +-
 .../runtime/injection/UsesGraphTest.java        |   2 +-
 .../ServiceInstantiationTests.java              |   2 +-
 .../runtime/mixin/AssemblyMixinTest.java        |   2 +-
 .../InvokeServiceFromModuleAssemblyTest.java    |   2 +-
 .../mixin/MethodInterceptionMixinTest.java      |   2 +-
 .../runtime/mixin/PrivateMixinTest.java         |   2 +-
 .../polygene/runtime/mixin/Qi228Test.java       |   2 +-
 .../runtime/property/ImmutablePropertyTest.java |   2 +-
 .../property/PropertyStringArrayTest.java       |   2 +-
 .../polygene/runtime/property/PropertyTest.java |   2 +-
 .../query/QueryBuilderFactoryImplTest.java      |   2 +-
 .../runtime/service/ComplexActivatableTest.java |   2 +-
 .../runtime/service/ServiceFinderTest.java      |   2 +-
 .../sideeffects/GenericSideEffectTest.java      |   2 +-
 .../sideeffects/SampleTransientTest.java        |   2 +-
 .../runtime/threaded/ContextCompositeTest.java  |   2 +-
 .../unitofwork/AutoCloseableUoWTest.java        |   2 +-
 .../runtime/value/ValueCompositeBasicsTest.java |   2 +-
 .../service/importer/NewObjectImporterTest.java |   2 +-
 .../importer/ServiceInstanceImporterTest.java   |   2 +-
 .../test/composite/CleanStackTraceTest.java     |   2 +-
 .../org/apache/polygene/spi/PolygeneSPI.java    |  75 ++++
 .../java/org/apache/polygene/spi/ZestSPI.java   |  75 ----
 .../polygene/test/AbstractPolygeneBaseTest.java | 135 +++++++
 .../test/AbstractPolygeneScenarioTest.java      | 142 ++++++++
 .../polygene/test/AbstractPolygeneTest.java     | 120 +++++++
 .../polygene/test/AbstractZestBaseTest.java     | 135 -------
 .../polygene/test/AbstractZestScenarioTest.java | 142 --------
 .../apache/polygene/test/AbstractZestTest.java  | 120 -------
 .../test/cache/AbstractCachePoolTest.java       |   2 +-
 ...AbstractValueCompositeSerializationTest.java |   2 +-
 doap.rdf                                        |   2 +-
 .../entitystore/DocumentationSupport.java       |   2 +-
 .../postgresql/PostgreSQLDBIntegrityTest.java   |   2 +-
 .../library/alarm/AlarmHistoryImplTest.java     |   2 +-
 .../library/alarm/AlarmPointImplTest.java       |   2 +-
 .../library/alarm/SimpleAlarmModelTest.java     |   2 +-
 .../library/alarm/StandardAlarmModelTest.java   |   2 +-
 .../BreaksCircuitOnThrowableTest.java           |   2 +-
 .../library/constraints/ConstraintTest.java     |   2 +-
 .../library/http/AbstractJettyTest.java         |   3 +-
 .../library/http/JettyJMXStatisticsTest.java    |   2 +-
 libraries/http/src/test/resources/logback.xml   |   2 +-
 .../http/src/vhost-test/resources/logback.xml   |   2 +-
 .../polygene/library/jmx/PolygeneMBeans.java    |  39 ++
 .../apache/polygene/library/jmx/ZestMBeans.java |  39 --
 .../library/groovy/GroovyMixinTest.java         |   2 +-
 .../metrics/AbstractTimingCaptureTest.java      |   3 +-
 .../polygene/library/rdf/PolygeneEntity.java    |  39 ++
 .../library/rdf/PolygeneEntityType.java         |  39 ++
 .../polygene/library/rdf/PolygeneRdf.java       |  87 +++++
 .../apache/polygene/library/rdf/ZestEntity.java |  39 --
 .../polygene/library/rdf/ZestEntityType.java    |  39 --
 .../apache/polygene/library/rdf/ZestRdf.java    |  87 -----
 .../rdf/serializer/AbstractSerializer.java      |   2 +-
 .../library/rdf/ApplicationXmlTest.java         |   2 +-
 .../rdf/entity/EntitySerializerTest.java        |   2 +-
 .../rdf/entity/EntityTypeSerializerTest.java    |   2 +-
 .../rdf/repository/MemoryRepositoryTest.java    |   2 +-
 .../rest/client/ContinuousIntegrationTest.java  |   2 +-
 .../library/rest/admin/PolygeneFinder.java      |  45 +++
 .../rest/admin/PolygeneServerServlet.java       |  44 +++
 .../admin/PolygeneServerServletService.java     |  34 ++
 .../polygene/library/rest/admin/ZestFinder.java |  45 ---
 .../library/rest/admin/ZestServerServlet.java   |  44 ---
 .../rest/admin/ZestServerServletService.java    |  34 --
 .../library/restlet/PolygeneEntityRestlet.java  | 311 ++++++++++++++++
 .../library/restlet/PolygeneServerServlet.java  |  51 +++
 .../library/restlet/ZestEntityRestlet.java      | 311 ----------------
 .../library/restlet/ZestServerServlet.java      |  51 ---
 .../serialization/PolygeneConverter.java        | 268 ++++++++++++++
 .../restlet/serialization/ZestConverter.java    | 268 --------------
 .../library/servlet/PolygeneFilter.java         |  51 +++
 .../library/servlet/PolygeneServlet.java        |  56 +++
 .../library/servlet/PolygeneServletSupport.java |  44 +++
 .../polygene/library/servlet/ZestFilter.java    |  51 ---
 .../polygene/library/servlet/ZestServlet.java   |  56 ---
 .../library/servlet/ZestServletSupport.java     |  44 ---
 .../library/shiro/PasswordDomainTest.java       |   4 +-
 .../library/shiro/PermissionsDomainTest.java    |   4 +-
 .../library/shiro/RealmServiceTest.java         |   4 +-
 .../library/shiro/StandaloneShiroTest.java      |   4 +-
 .../library/shiro/web/WebHttpShiroTest.java     |   2 +-
 .../library/shiro/web/WebRealmServiceTest.java  |   2 +-
 .../library/spring/bootstrap/Constants.java     |   2 +-
 .../bootstrap/PolygeneApplicationBootstrap.java |  88 +++++
 .../bootstrap/ZestApplicationBootstrap.java     |  88 -----
 .../internal/PolygeneNamespaceHandler.java      |  34 ++
 .../internal/ZestNamespaceHandler.java          |  34 --
 .../PolygeneApplicationFactoryBean.java         | 119 ++++++
 .../PolygeneBootstrapBeanDefinitionParser.java  | 103 ++++++
 .../application/ZestApplicationFactoryBean.java | 119 ------
 .../ZestBootstrapBeanDefinitionParser.java      | 103 ------
 .../PolygeneServiceBeanDefinitionParser.java    |  55 +++
 .../ZestServiceBeanDefinitionParser.java        |  55 ---
 .../library/spring/MyPolygeneBootstrapper.java  |  50 +++
 .../library/spring/MyZestBootstrapper.java      |  50 ---
 .../bootstrap/PolygeneExportServiceTest.java    |  59 +++
 .../spring/bootstrap/PolygeneTestBootstrap.java |  57 +++
 .../spring/bootstrap/ZestExportServiceTest.java |  59 ---
 .../spring/bootstrap/ZestTestBootstrap.java     |  58 ---
 .../importer/PolygeneImportServiceTest.java     | 118 ++++++
 .../spring/importer/ZestImportServiceTest.java  | 118 ------
 .../sql/datasource/ExternalDataSourceTest.java  |   2 +-
 .../uid/sequence/PersistingSequencingTest.java  |   2 +-
 .../uid/sequence/TransientSequencingTest.java   |   2 +-
 .../library/uid/uuid/UuidServiceTest.java       |   2 +-
 .../src/docs/tutorials/howto-depend-on-zest.txt |  40 +--
 .../docs/tutorials/howto-releasing-apache.txt   |   8 +-
 .../README-for-regression-reporting.txt         |   2 +-
 .../idea/PolygeneApplicationComponent.java      | 133 +++++++
 .../plugin/idea/ZestApplicationComponent.java   | 133 -------
 .../common/inspections/AbstractInspection.java  |   4 +-
 .../ZestStructureAnnotationConstants.java       |   2 +-
 tools/shell/src/dist/bin/zest-boot              |   4 +-
 .../tutorials/cargo/step2/Step2TestCase.java    |   2 +-
 .../polygene/tutorials/hello/HelloTest.java     |   2 +-
 .../polygene/tutorials/hello/HelloTest4.java    |   2 +-
 .../tutorials/services/step2/LibraryTest.java   |   2 +-
 .../tutorials/services/step3/LibraryTest.java   |   2 +-
 .../tutorials/services/step4/LibraryTest.java   |   2 +-
 .../tutorials/services/step6/LibraryTest.java   |   2 +-
 169 files changed, 3409 insertions(+), 3410 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/buildSrc/src/main/groovy/org/apache/polygene/gradle/PolygeneExtension.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/PolygeneExtension.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/PolygeneExtension.groovy
new file mode 100644
index 0000000..41e472a
--- /dev/null
+++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/PolygeneExtension.groovy
@@ -0,0 +1,79 @@
+/*
+ *  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.polygene.gradle
+
+import groovy.transform.CompileStatic
+import org.gradle.api.Project
+import org.gradle.api.artifacts.Dependency
+
+@CompileStatic
+class PolygeneExtension
+{
+  private final Project project
+  final Core core
+
+  PolygeneExtension( Project project )
+  {
+    this.project = project
+    this.core = new Core()
+  }
+
+  boolean isDevelopmentVersion()
+  {
+    return project.version == '0' || project.version.toString().contains( 'SNAPSHOT' )
+  }
+
+  boolean isReleaseVersion()
+  {
+    return !isDevelopmentVersion()
+  }
+
+  class Core
+  {
+    Dependency api = core( 'api' )
+    Dependency spi = core( 'spi' )
+    Dependency runtime = core( 'runtime' )
+    Dependency bootstrap = core( 'bootstrap' )
+    Dependency testsupport = core( 'testsupport' )
+  }
+
+  private Dependency core( String name )
+  {
+    return dependency( 'org.apache.polygene.core', "org.apache.polygene.core.$name" )
+  }
+
+  Dependency library( String name )
+  {
+    return dependency( 'org.apache.polygene.libraries', "org.apache.polygene.library.$name" )
+  }
+
+  Dependency extension( String name )
+  {
+    return dependency( 'org.apache.polygene.extensions', "org.apache.polygene.extension.$name" )
+  }
+
+  Dependency tool( String name )
+  {
+    return dependency( 'org.apache.polygene.tools', "org.apache.polygene.tool.$name" )
+  }
+
+  private Dependency dependency( String group, String name )
+  {
+    project.dependencies.project( path: ":$group:$name" )
+  }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/buildSrc/src/main/groovy/org/apache/polygene/gradle/ZestExtension.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/ZestExtension.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/ZestExtension.groovy
deleted file mode 100644
index 41e472a..0000000
--- a/buildSrc/src/main/groovy/org/apache/polygene/gradle/ZestExtension.groovy
+++ /dev/null
@@ -1,79 +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.polygene.gradle
-
-import groovy.transform.CompileStatic
-import org.gradle.api.Project
-import org.gradle.api.artifacts.Dependency
-
-@CompileStatic
-class PolygeneExtension
-{
-  private final Project project
-  final Core core
-
-  PolygeneExtension( Project project )
-  {
-    this.project = project
-    this.core = new Core()
-  }
-
-  boolean isDevelopmentVersion()
-  {
-    return project.version == '0' || project.version.toString().contains( 'SNAPSHOT' )
-  }
-
-  boolean isReleaseVersion()
-  {
-    return !isDevelopmentVersion()
-  }
-
-  class Core
-  {
-    Dependency api = core( 'api' )
-    Dependency spi = core( 'spi' )
-    Dependency runtime = core( 'runtime' )
-    Dependency bootstrap = core( 'bootstrap' )
-    Dependency testsupport = core( 'testsupport' )
-  }
-
-  private Dependency core( String name )
-  {
-    return dependency( 'org.apache.polygene.core', "org.apache.polygene.core.$name" )
-  }
-
-  Dependency library( String name )
-  {
-    return dependency( 'org.apache.polygene.libraries', "org.apache.polygene.library.$name" )
-  }
-
-  Dependency extension( String name )
-  {
-    return dependency( 'org.apache.polygene.extensions', "org.apache.polygene.extension.$name" )
-  }
-
-  Dependency tool( String name )
-  {
-    return dependency( 'org.apache.polygene.tools', "org.apache.polygene.tool.$name" )
-  }
-
-  private Dependency dependency( String group, String name )
-  {
-    project.dependencies.project( path: ":$group:$name" )
-  }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/buildSrc/src/main/groovy/org/apache/polygene/gradle/publish/MavenMetadata.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/publish/MavenMetadata.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/publish/MavenMetadata.groovy
index 74c5dcf..85f9ebd 100644
--- a/buildSrc/src/main/groovy/org/apache/polygene/gradle/publish/MavenMetadata.groovy
+++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/publish/MavenMetadata.groovy
@@ -33,7 +33,7 @@ class MavenMetadata
         inceptionYear '2007'
         issueManagement {
           system 'jira'
-          url 'https://issues.apache.org/jira/browse/ZEST'
+          url 'https://issues.apache.org/jira/browse/POLYGENE'
         }
         scm {
           url "https://github.com/apache/polygene-java"

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/api/src/main/java/org/apache/polygene/api/PolygeneAPI.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/PolygeneAPI.java b/core/api/src/main/java/org/apache/polygene/api/PolygeneAPI.java
new file mode 100644
index 0000000..ae03999
--- /dev/null
+++ b/core/api/src/main/java/org/apache/polygene/api/PolygeneAPI.java
@@ -0,0 +1,188 @@
+/*
+ *  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.polygene.api;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
+import java.util.function.Function;
+import org.apache.polygene.api.association.AbstractAssociation;
+import org.apache.polygene.api.association.AssociationDescriptor;
+import org.apache.polygene.api.composite.Composite;
+import org.apache.polygene.api.composite.CompositeDescriptor;
+import org.apache.polygene.api.composite.CompositeInstance;
+import org.apache.polygene.api.composite.InvalidCompositeException;
+import org.apache.polygene.api.composite.ModelDescriptor;
+import org.apache.polygene.api.composite.TransientDescriptor;
+import org.apache.polygene.api.entity.EntityDescriptor;
+import org.apache.polygene.api.property.Property;
+import org.apache.polygene.api.property.PropertyDescriptor;
+import org.apache.polygene.api.service.ServiceDescriptor;
+import org.apache.polygene.api.structure.ModuleDescriptor;
+import org.apache.polygene.api.value.ValueDescriptor;
+
+/**
+ * Encapsulation of the Polygene API.
+ */
+public interface PolygeneAPI
+{
+    /**
+     * If a Modifier gets a reference to the Composite using @This,
+     * then that reference must be dereferenced using this method
+     * before handing it out for others to use.
+     *
+     * @param <T>       Parameterized type of the Composite
+     * @param composite instance reference injected in Modified using @This
+     *
+     * @return the dereferenced Composite
+     */
+    <T> T dereference( T composite );
+
+    /**
+     * Returns the Module or UnitOfWork where the Composite belongs.
+     *
+     * @param compositeOrUow The Composite (Service, Value, Entity or Transient) or UnitOfWork to lookup the Module it
+     *                       belongs to.
+     *
+     * @return The Module instance where the Composite or UnitOfWork belongs to.
+     */
+    ModuleDescriptor moduleOf( Object compositeOrUow );
+
+    /**
+     * Returns the ModelDescriptor of the Composite.
+     *
+     * @param compositeOrServiceReference The Composite (Service, Value, Entity or Transient) for which to lookup the
+     *                                    ModelDescriptor
+     *
+     * @return The ModelDescriptor of the Composite
+     */
+    ModelDescriptor modelDescriptorFor( Object compositeOrServiceReference );
+
+    /**
+     * Returns the CompositeDescriptor of the Composite.
+     *
+     * @param compositeOrServiceReference The Composite (Service, Value, Entity or Transient) for which to lookup the
+     *                                    CompositeDescriptor
+     *
+     * @return The CompositeDescriptor of the Composite
+     */
+    CompositeDescriptor compositeDescriptorFor( Object compositeOrServiceReference );
+
+    /**
+     * Returns the TransientDescriptor of the TransientComposite.
+     *
+     * @param transsient The TransientComposite for which to lookup the TransientDescriptor
+     *
+     * @return The TransientDescriptor of the TransientComposite
+     */
+    TransientDescriptor transientDescriptorFor( Object transsient );
+
+    /**
+     * Returns the EntityDescriptor of the EntityComposite.
+     *
+     * @param entity The EntityComposite for which to lookup the EntityDescriptor
+     *
+     * @return The EntityDescriptor of the EntityComposite
+     */
+    EntityDescriptor entityDescriptorFor( Object entity );
+
+    /**
+     * Returns the ValueDescriptor of the ValueComposite.
+     *
+     * @param value The ValueComposite for which to lookup the ValueDescriptor
+     *
+     * @return The ValueDescriptor of the ValueComposite
+     */
+    ValueDescriptor valueDescriptorFor( Object value );
+
+    /**
+     * Returns the ServiceDescriptor of the ServiceComposite.
+     *
+     * @param service The ServiceComposite for which to lookup the ServiceDescriptor
+     *
+     * @return The ServiceDescriptor of the ServiceComposite
+     */
+    ServiceDescriptor serviceDescriptorFor( Object service );
+
+    /**
+     * Returns the PropertyDescriptor of the Property.
+     *
+     * @param property The Property for which to lookup the PropertyDescriptor
+     *
+     * @return The PropertyDescriptor of the Property
+     */
+    PropertyDescriptor propertyDescriptorFor( Property<?> property );
+
+    /**
+     * Returns the AssociationDescriptor of the Association.
+     *
+     * @param association The Association for which to lookup the AssociationDescriptor
+     *
+     * @return The AssociationDescriptor of the Association
+     */
+    AssociationDescriptor associationDescriptorFor( AbstractAssociation association );
+
+    /**
+     * Function that returns the CompositeDescriptor of a Composite.
+     */
+    Function<Composite, CompositeDescriptor> FUNCTION_DESCRIPTOR_FOR = composite -> {
+        if( composite instanceof Proxy )
+        {
+            InvocationHandler invocationHandler = Proxy.getInvocationHandler( composite );
+            return ( (CompositeInstance) invocationHandler ).descriptor();
+        }
+        try
+        {
+            Class<? extends Composite> compositeClass = composite.getClass();
+            Field instanceField = compositeClass.getField( "_instance" );
+            Object instance = instanceField.get( composite );
+            return ( (CompositeInstance) instance ).descriptor();
+        }
+        catch( Exception e )
+        {
+            InvalidCompositeException exception = new InvalidCompositeException( "Could not get _instance field" );
+            exception.initCause( e );
+            throw exception;
+        }
+    };
+
+    /**
+     * Function that returns the CompositeInstance of a Composite.
+     */
+    Function<Composite, CompositeInstance> FUNCTION_COMPOSITE_INSTANCE_OF = composite -> {
+        if( composite instanceof Proxy )
+        {
+            return ( (CompositeInstance) Proxy.getInvocationHandler( composite ) );
+        }
+        try
+        {
+            Class<? extends Composite> compositeClass = composite.getClass();
+            Field instanceField = compositeClass.getField( "_instance" );
+            Object instance = instanceField.get( composite );
+            return (CompositeInstance) instance;
+        }
+        catch( Exception e )
+        {
+            InvalidCompositeException exception = new InvalidCompositeException( "Could not get _instance field" );
+            exception.initCause( e );
+            throw exception;
+        }
+    };
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/api/src/main/java/org/apache/polygene/api/ZestAPI.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/ZestAPI.java b/core/api/src/main/java/org/apache/polygene/api/ZestAPI.java
deleted file mode 100644
index ae03999..0000000
--- a/core/api/src/main/java/org/apache/polygene/api/ZestAPI.java
+++ /dev/null
@@ -1,188 +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.polygene.api;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Proxy;
-import java.util.function.Function;
-import org.apache.polygene.api.association.AbstractAssociation;
-import org.apache.polygene.api.association.AssociationDescriptor;
-import org.apache.polygene.api.composite.Composite;
-import org.apache.polygene.api.composite.CompositeDescriptor;
-import org.apache.polygene.api.composite.CompositeInstance;
-import org.apache.polygene.api.composite.InvalidCompositeException;
-import org.apache.polygene.api.composite.ModelDescriptor;
-import org.apache.polygene.api.composite.TransientDescriptor;
-import org.apache.polygene.api.entity.EntityDescriptor;
-import org.apache.polygene.api.property.Property;
-import org.apache.polygene.api.property.PropertyDescriptor;
-import org.apache.polygene.api.service.ServiceDescriptor;
-import org.apache.polygene.api.structure.ModuleDescriptor;
-import org.apache.polygene.api.value.ValueDescriptor;
-
-/**
- * Encapsulation of the Polygene API.
- */
-public interface PolygeneAPI
-{
-    /**
-     * If a Modifier gets a reference to the Composite using @This,
-     * then that reference must be dereferenced using this method
-     * before handing it out for others to use.
-     *
-     * @param <T>       Parameterized type of the Composite
-     * @param composite instance reference injected in Modified using @This
-     *
-     * @return the dereferenced Composite
-     */
-    <T> T dereference( T composite );
-
-    /**
-     * Returns the Module or UnitOfWork where the Composite belongs.
-     *
-     * @param compositeOrUow The Composite (Service, Value, Entity or Transient) or UnitOfWork to lookup the Module it
-     *                       belongs to.
-     *
-     * @return The Module instance where the Composite or UnitOfWork belongs to.
-     */
-    ModuleDescriptor moduleOf( Object compositeOrUow );
-
-    /**
-     * Returns the ModelDescriptor of the Composite.
-     *
-     * @param compositeOrServiceReference The Composite (Service, Value, Entity or Transient) for which to lookup the
-     *                                    ModelDescriptor
-     *
-     * @return The ModelDescriptor of the Composite
-     */
-    ModelDescriptor modelDescriptorFor( Object compositeOrServiceReference );
-
-    /**
-     * Returns the CompositeDescriptor of the Composite.
-     *
-     * @param compositeOrServiceReference The Composite (Service, Value, Entity or Transient) for which to lookup the
-     *                                    CompositeDescriptor
-     *
-     * @return The CompositeDescriptor of the Composite
-     */
-    CompositeDescriptor compositeDescriptorFor( Object compositeOrServiceReference );
-
-    /**
-     * Returns the TransientDescriptor of the TransientComposite.
-     *
-     * @param transsient The TransientComposite for which to lookup the TransientDescriptor
-     *
-     * @return The TransientDescriptor of the TransientComposite
-     */
-    TransientDescriptor transientDescriptorFor( Object transsient );
-
-    /**
-     * Returns the EntityDescriptor of the EntityComposite.
-     *
-     * @param entity The EntityComposite for which to lookup the EntityDescriptor
-     *
-     * @return The EntityDescriptor of the EntityComposite
-     */
-    EntityDescriptor entityDescriptorFor( Object entity );
-
-    /**
-     * Returns the ValueDescriptor of the ValueComposite.
-     *
-     * @param value The ValueComposite for which to lookup the ValueDescriptor
-     *
-     * @return The ValueDescriptor of the ValueComposite
-     */
-    ValueDescriptor valueDescriptorFor( Object value );
-
-    /**
-     * Returns the ServiceDescriptor of the ServiceComposite.
-     *
-     * @param service The ServiceComposite for which to lookup the ServiceDescriptor
-     *
-     * @return The ServiceDescriptor of the ServiceComposite
-     */
-    ServiceDescriptor serviceDescriptorFor( Object service );
-
-    /**
-     * Returns the PropertyDescriptor of the Property.
-     *
-     * @param property The Property for which to lookup the PropertyDescriptor
-     *
-     * @return The PropertyDescriptor of the Property
-     */
-    PropertyDescriptor propertyDescriptorFor( Property<?> property );
-
-    /**
-     * Returns the AssociationDescriptor of the Association.
-     *
-     * @param association The Association for which to lookup the AssociationDescriptor
-     *
-     * @return The AssociationDescriptor of the Association
-     */
-    AssociationDescriptor associationDescriptorFor( AbstractAssociation association );
-
-    /**
-     * Function that returns the CompositeDescriptor of a Composite.
-     */
-    Function<Composite, CompositeDescriptor> FUNCTION_DESCRIPTOR_FOR = composite -> {
-        if( composite instanceof Proxy )
-        {
-            InvocationHandler invocationHandler = Proxy.getInvocationHandler( composite );
-            return ( (CompositeInstance) invocationHandler ).descriptor();
-        }
-        try
-        {
-            Class<? extends Composite> compositeClass = composite.getClass();
-            Field instanceField = compositeClass.getField( "_instance" );
-            Object instance = instanceField.get( composite );
-            return ( (CompositeInstance) instance ).descriptor();
-        }
-        catch( Exception e )
-        {
-            InvalidCompositeException exception = new InvalidCompositeException( "Could not get _instance field" );
-            exception.initCause( e );
-            throw exception;
-        }
-    };
-
-    /**
-     * Function that returns the CompositeInstance of a Composite.
-     */
-    Function<Composite, CompositeInstance> FUNCTION_COMPOSITE_INSTANCE_OF = composite -> {
-        if( composite instanceof Proxy )
-        {
-            return ( (CompositeInstance) Proxy.getInvocationHandler( composite ) );
-        }
-        try
-        {
-            Class<? extends Composite> compositeClass = composite.getClass();
-            Field instanceField = compositeClass.getField( "_instance" );
-            Object instance = instanceField.get( composite );
-            return (CompositeInstance) instance;
-        }
-        catch( Exception e )
-        {
-            InvalidCompositeException exception = new InvalidCompositeException( "Could not get _instance field" );
-            exception.initCause( e );
-            throw exception;
-        }
-    };
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/api/src/test/java/org/apache/polygene/api/configuration/DeclareConfigurationDefaultsTest.java
----------------------------------------------------------------------
diff --git a/core/api/src/test/java/org/apache/polygene/api/configuration/DeclareConfigurationDefaultsTest.java b/core/api/src/test/java/org/apache/polygene/api/configuration/DeclareConfigurationDefaultsTest.java
index c088df7..d0384a8 100644
--- a/core/api/src/test/java/org/apache/polygene/api/configuration/DeclareConfigurationDefaultsTest.java
+++ b/core/api/src/test/java/org/apache/polygene/api/configuration/DeclareConfigurationDefaultsTest.java
@@ -31,7 +31,7 @@ import org.apache.polygene.test.AbstractPolygeneTest;
 import org.apache.polygene.test.EntityTestAssembler;
 
 public class DeclareConfigurationDefaultsTest
-        extends AbstractPolygeneTest
+    extends AbstractPolygeneTest
 {
 
     @Mixins( FooServiceMixin.class )

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/api/src/test/java/org/apache/polygene/api/injection/scope/StateFieldTest.java
----------------------------------------------------------------------
diff --git a/core/api/src/test/java/org/apache/polygene/api/injection/scope/StateFieldTest.java b/core/api/src/test/java/org/apache/polygene/api/injection/scope/StateFieldTest.java
index 13c6e60..a4b8b30 100644
--- a/core/api/src/test/java/org/apache/polygene/api/injection/scope/StateFieldTest.java
+++ b/core/api/src/test/java/org/apache/polygene/api/injection/scope/StateFieldTest.java
@@ -20,6 +20,7 @@
 
 package org.apache.polygene.api.injection.scope;
 
+import org.apache.polygene.test.AbstractPolygeneTest;
 import org.junit.Assert;
 import org.junit.Test;
 import org.apache.polygene.api.association.Association;
@@ -32,7 +33,6 @@ import org.apache.polygene.api.property.Property;
 import org.apache.polygene.api.unitofwork.UnitOfWork;
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.test.AbstractPolygeneTest;
 import org.apache.polygene.test.EntityTestAssembler;
 
 /**

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/api/src/test/java/org/apache/polygene/api/mixin/decoratorMixin/DecoratorMixinTest.java
----------------------------------------------------------------------
diff --git a/core/api/src/test/java/org/apache/polygene/api/mixin/decoratorMixin/DecoratorMixinTest.java b/core/api/src/test/java/org/apache/polygene/api/mixin/decoratorMixin/DecoratorMixinTest.java
index 4b658e5..40f59d3 100644
--- a/core/api/src/test/java/org/apache/polygene/api/mixin/decoratorMixin/DecoratorMixinTest.java
+++ b/core/api/src/test/java/org/apache/polygene/api/mixin/decoratorMixin/DecoratorMixinTest.java
@@ -21,11 +21,11 @@ package org.apache.polygene.api.mixin.decoratorMixin;
 
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Proxy;
+import org.apache.polygene.test.AbstractPolygeneTest;
 import org.junit.Test;
 import org.apache.polygene.api.composite.TransientBuilder;
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.test.AbstractPolygeneTest;
 
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.assertThat;

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/api/src/test/java/org/apache/polygene/api/property/PropertyErrorTest.java
----------------------------------------------------------------------
diff --git a/core/api/src/test/java/org/apache/polygene/api/property/PropertyErrorTest.java b/core/api/src/test/java/org/apache/polygene/api/property/PropertyErrorTest.java
index f0fe7a1..c299300 100644
--- a/core/api/src/test/java/org/apache/polygene/api/property/PropertyErrorTest.java
+++ b/core/api/src/test/java/org/apache/polygene/api/property/PropertyErrorTest.java
@@ -20,13 +20,13 @@
 
 package org.apache.polygene.api.property;
 
+import org.apache.polygene.test.AbstractPolygeneTest;
 import org.junit.Test;
 import org.apache.polygene.api.constraint.ConstraintViolationException;
 import org.apache.polygene.api.entity.EntityComposite;
 import org.apache.polygene.api.unitofwork.UnitOfWork;
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.test.AbstractPolygeneTest;
 import org.apache.polygene.test.EntityTestAssembler;
 
 /**

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/api/src/test/java/org/apache/polygene/api/unitofwork/UnitOfWorkTemplateTest.java
----------------------------------------------------------------------
diff --git a/core/api/src/test/java/org/apache/polygene/api/unitofwork/UnitOfWorkTemplateTest.java b/core/api/src/test/java/org/apache/polygene/api/unitofwork/UnitOfWorkTemplateTest.java
index 5f4b2ae..43bd5b7 100644
--- a/core/api/src/test/java/org/apache/polygene/api/unitofwork/UnitOfWorkTemplateTest.java
+++ b/core/api/src/test/java/org/apache/polygene/api/unitofwork/UnitOfWorkTemplateTest.java
@@ -19,13 +19,13 @@
  */
 package org.apache.polygene.api.unitofwork;
 
+import org.apache.polygene.test.AbstractPolygeneTest;
 import org.junit.Test;
 import org.apache.polygene.api.entity.EntityBuilderTemplate;
 import org.apache.polygene.api.entity.EntityComposite;
 import org.apache.polygene.api.property.Property;
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.test.AbstractPolygeneTest;
 import org.apache.polygene.test.EntityTestAssembler;
 
 /**

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/PolygeneRuntime.java
----------------------------------------------------------------------
diff --git a/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/PolygeneRuntime.java b/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/PolygeneRuntime.java
new file mode 100644
index 0000000..c5c5386
--- /dev/null
+++ b/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/PolygeneRuntime.java
@@ -0,0 +1,38 @@
+/*
+ *  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.polygene.bootstrap;
+
+import org.apache.polygene.api.PolygeneAPI;
+import org.apache.polygene.spi.PolygeneSPI;
+
+/**
+ * This interface has to be implemented by Polygene runtimes.
+ */
+public interface PolygeneRuntime
+{
+    ApplicationAssemblyFactory applicationAssemblyFactory();
+
+    ApplicationModelFactory applicationModelFactory();
+
+    PolygeneAPI api();
+
+    PolygeneSPI spi();
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/ZestRuntime.java
----------------------------------------------------------------------
diff --git a/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/ZestRuntime.java b/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/ZestRuntime.java
deleted file mode 100644
index c5c5386..0000000
--- a/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/ZestRuntime.java
+++ /dev/null
@@ -1,38 +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.polygene.bootstrap;
-
-import org.apache.polygene.api.PolygeneAPI;
-import org.apache.polygene.spi.PolygeneSPI;
-
-/**
- * This interface has to be implemented by Polygene runtimes.
- */
-public interface PolygeneRuntime
-{
-    ApplicationAssemblyFactory applicationAssemblyFactory();
-
-    ApplicationModelFactory applicationModelFactory();
-
-    PolygeneAPI api();
-
-    PolygeneSPI spi();
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/runtime/src/main/java/org/apache/polygene/runtime/PolygeneRuntimeImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/PolygeneRuntimeImpl.java b/core/runtime/src/main/java/org/apache/polygene/runtime/PolygeneRuntimeImpl.java
new file mode 100644
index 0000000..2a0be69
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/PolygeneRuntimeImpl.java
@@ -0,0 +1,360 @@
+/*
+ *  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.polygene.runtime;
+
+import java.lang.reflect.InvocationHandler;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.stream.Stream;
+import org.apache.polygene.api.PolygeneAPI;
+import org.apache.polygene.api.association.AbstractAssociation;
+import org.apache.polygene.api.association.Association;
+import org.apache.polygene.api.association.AssociationDescriptor;
+import org.apache.polygene.api.association.AssociationStateHolder;
+import org.apache.polygene.api.association.AssociationWrapper;
+import org.apache.polygene.api.association.ManyAssociation;
+import org.apache.polygene.api.association.ManyAssociationWrapper;
+import org.apache.polygene.api.association.NamedAssociation;
+import org.apache.polygene.api.association.NamedAssociationWrapper;
+import org.apache.polygene.api.composite.Composite;
+import org.apache.polygene.api.composite.CompositeDescriptor;
+import org.apache.polygene.api.composite.CompositeInstance;
+import org.apache.polygene.api.composite.ModelDescriptor;
+import org.apache.polygene.api.composite.TransientComposite;
+import org.apache.polygene.api.composite.TransientDescriptor;
+import org.apache.polygene.api.entity.EntityComposite;
+import org.apache.polygene.api.entity.EntityDescriptor;
+import org.apache.polygene.api.entity.EntityReference;
+import org.apache.polygene.api.property.Property;
+import org.apache.polygene.api.property.PropertyDescriptor;
+import org.apache.polygene.api.property.PropertyWrapper;
+import org.apache.polygene.api.property.StateHolder;
+import org.apache.polygene.api.service.ServiceComposite;
+import org.apache.polygene.api.service.ServiceDescriptor;
+import org.apache.polygene.api.service.ServiceReference;
+import org.apache.polygene.api.structure.ModuleDescriptor;
+import org.apache.polygene.api.unitofwork.UnitOfWork;
+import org.apache.polygene.api.value.ValueComposite;
+import org.apache.polygene.api.value.ValueDescriptor;
+import org.apache.polygene.bootstrap.ApplicationAssemblyFactory;
+import org.apache.polygene.bootstrap.ApplicationModelFactory;
+import org.apache.polygene.bootstrap.PolygeneRuntime;
+import org.apache.polygene.runtime.association.AbstractAssociationInstance;
+import org.apache.polygene.runtime.bootstrap.ApplicationAssemblyFactoryImpl;
+import org.apache.polygene.runtime.bootstrap.ApplicationModelFactoryImpl;
+import org.apache.polygene.runtime.composite.ProxyReferenceInvocationHandler;
+import org.apache.polygene.runtime.composite.TransientInstance;
+import org.apache.polygene.runtime.entity.EntityInstance;
+import org.apache.polygene.runtime.property.PropertyInstance;
+import org.apache.polygene.runtime.service.ImportedServiceReferenceInstance;
+import org.apache.polygene.runtime.service.ServiceInstance;
+import org.apache.polygene.runtime.service.ServiceReferenceInstance;
+import org.apache.polygene.runtime.unitofwork.ModuleUnitOfWork;
+import org.apache.polygene.runtime.value.ValueInstance;
+import org.apache.polygene.spi.PolygeneSPI;
+import org.apache.polygene.spi.entity.EntityState;
+
+import static java.lang.reflect.Proxy.getInvocationHandler;
+import static org.apache.polygene.runtime.composite.TransientInstance.compositeInstanceOf;
+
+/**
+ * Incarnation of Polygene.
+ */
+public final class PolygeneRuntimeImpl
+    implements PolygeneSPI, PolygeneRuntime
+{
+    private final ApplicationAssemblyFactory applicationAssemblyFactory;
+    private final ApplicationModelFactory applicationModelFactory;
+
+    public PolygeneRuntimeImpl()
+    {
+        applicationAssemblyFactory = new ApplicationAssemblyFactoryImpl();
+        applicationModelFactory = new ApplicationModelFactoryImpl();
+    }
+
+    @Override
+    public ApplicationAssemblyFactory applicationAssemblyFactory()
+    {
+        return applicationAssemblyFactory;
+    }
+
+    @Override
+    public ApplicationModelFactory applicationModelFactory()
+    {
+        return applicationModelFactory;
+    }
+
+    @Override
+    public PolygeneAPI api()
+    {
+        return this;
+    }
+
+    @Override
+    public PolygeneSPI spi()
+    {
+        return this;
+    }
+
+    // API
+
+    @Override
+    @SuppressWarnings( "unchecked" )
+    public <T> T dereference( T composite )
+    {
+        InvocationHandler handler = getInvocationHandler( composite );
+        if( handler instanceof ProxyReferenceInvocationHandler )
+        {
+            return (T) ( (ProxyReferenceInvocationHandler) handler ).proxy();
+        }
+        if( handler instanceof CompositeInstance )
+        {
+            return composite;
+        }
+        return null;
+    }
+
+    @Override
+    public ModuleDescriptor moduleOf( Object compositeOrServiceReferenceOrUow )
+    {
+        if( compositeOrServiceReferenceOrUow instanceof TransientComposite )
+        {
+            TransientComposite composite = (TransientComposite) compositeOrServiceReferenceOrUow;
+            return TransientInstance.compositeInstanceOf( composite ).module();
+        }
+        else if( compositeOrServiceReferenceOrUow instanceof EntityComposite )
+        {
+            EntityComposite composite = (EntityComposite) compositeOrServiceReferenceOrUow;
+            return EntityInstance.entityInstanceOf( composite ).module();
+        }
+        else if( compositeOrServiceReferenceOrUow instanceof ValueComposite )
+        {
+            ValueComposite composite = (ValueComposite) compositeOrServiceReferenceOrUow;
+            return ValueInstance.valueInstanceOf( composite ).module();
+        }
+        else if( compositeOrServiceReferenceOrUow instanceof ServiceComposite )
+        {
+            ServiceComposite composite = (ServiceComposite) compositeOrServiceReferenceOrUow;
+            InvocationHandler handler = getInvocationHandler( composite );
+            if( handler instanceof ServiceInstance )
+            {
+                return ( (ServiceInstance) handler ).module();
+            }
+            return ( (ServiceReferenceInstance.ServiceInvocationHandler) handler ).module();
+        }
+        else if( compositeOrServiceReferenceOrUow instanceof UnitOfWork )
+        {
+            ModuleUnitOfWork unitOfWork = (ModuleUnitOfWork) compositeOrServiceReferenceOrUow;
+            return unitOfWork.module();
+        }
+        else if( compositeOrServiceReferenceOrUow instanceof ServiceReferenceInstance )
+        {
+            ServiceReferenceInstance<?> reference = (ServiceReferenceInstance<?>) compositeOrServiceReferenceOrUow;
+            return reference.module();
+        }
+        else if( compositeOrServiceReferenceOrUow instanceof ImportedServiceReferenceInstance )
+        {
+            ImportedServiceReferenceInstance<?> importedServiceReference
+                = (ImportedServiceReferenceInstance<?>) compositeOrServiceReferenceOrUow;
+            return importedServiceReference.module();
+        }
+        throw new IllegalArgumentException( "Wrong type. Must be one of "
+                                            + Arrays.asList( TransientComposite.class, ValueComposite.class,
+                                                             ServiceComposite.class, ServiceReference.class,
+                                                             UnitOfWork.class ) );
+    }
+
+    @Override
+    public ModelDescriptor modelDescriptorFor( Object compositeOrServiceReference )
+    {
+        if( compositeOrServiceReference instanceof TransientComposite )
+        {
+            TransientComposite composite = (TransientComposite) compositeOrServiceReference;
+            return TransientInstance.compositeInstanceOf( composite ).descriptor();
+        }
+        else if( compositeOrServiceReference instanceof EntityComposite )
+        {
+            EntityComposite composite = (EntityComposite) compositeOrServiceReference;
+            return EntityInstance.entityInstanceOf( composite ).descriptor();
+        }
+        else if( compositeOrServiceReference instanceof ValueComposite )
+        {
+            ValueComposite composite = (ValueComposite) compositeOrServiceReference;
+            return ValueInstance.valueInstanceOf( composite ).descriptor();
+        }
+        else if( compositeOrServiceReference instanceof ServiceComposite )
+        {
+            ServiceComposite composite = (ServiceComposite) compositeOrServiceReference;
+            InvocationHandler handler = getInvocationHandler( composite );
+            if( handler instanceof ServiceInstance )
+            {
+                return ( (ServiceInstance) handler ).descriptor();
+            }
+            return ( (ServiceReferenceInstance.ServiceInvocationHandler) handler ).descriptor();
+        }
+        else if( compositeOrServiceReference instanceof ServiceReferenceInstance )
+        {
+            ServiceReferenceInstance<?> reference = (ServiceReferenceInstance<?>) compositeOrServiceReference;
+            return reference.serviceDescriptor();
+        }
+        else if( compositeOrServiceReference instanceof ImportedServiceReferenceInstance )
+        {
+            ImportedServiceReferenceInstance<?> importedServiceReference
+                = (ImportedServiceReferenceInstance<?>) compositeOrServiceReference;
+            return importedServiceReference.serviceDescriptor();
+        }
+        throw new IllegalArgumentException( "Wrong type. Must be one of "
+                                            + Arrays.asList( TransientComposite.class, ValueComposite.class,
+                                                             ServiceComposite.class, ServiceReference.class ) );
+    }
+
+    @Override
+    public CompositeDescriptor compositeDescriptorFor( Object compositeOrServiceReference )
+    {
+        return (CompositeDescriptor) modelDescriptorFor( compositeOrServiceReference );
+    }
+
+    // Descriptors
+
+    @Override
+    public TransientDescriptor transientDescriptorFor( Object transsient )
+    {
+        if( transsient instanceof TransientComposite )
+        {
+            TransientInstance transientInstance = compositeInstanceOf( (Composite) transsient );
+            return (TransientDescriptor) transientInstance.descriptor();
+        }
+        throw new IllegalArgumentException( "Wrong type. Must be subtype of " + TransientComposite.class );
+    }
+
+    @Override
+    public StateHolder stateOf( TransientComposite composite )
+    {
+        return TransientInstance.compositeInstanceOf( composite ).state();
+    }
+
+    @Override
+    public EntityDescriptor entityDescriptorFor( Object entity )
+    {
+        if( entity instanceof EntityComposite )
+        {
+            EntityInstance entityInstance = (EntityInstance) getInvocationHandler( entity );
+            return entityInstance.entityModel();
+        }
+        throw new IllegalArgumentException( "Wrong type. Must be subtype of " + EntityComposite.class );
+    }
+
+    @Override
+    public AssociationStateHolder stateOf( EntityComposite composite )
+    {
+        return EntityInstance.entityInstanceOf( composite ).state();
+    }
+
+    @Override
+    public ValueDescriptor valueDescriptorFor( Object value )
+    {
+        if( value instanceof ValueComposite )
+        {
+            ValueInstance valueInstance = ValueInstance.valueInstanceOf( (ValueComposite) value );
+            return valueInstance.descriptor();
+        }
+        throw new IllegalArgumentException( "Wrong type. Must be subtype of " + ValueComposite.class );
+    }
+
+    @Override
+    public AssociationStateHolder stateOf( ValueComposite composite )
+    {
+        return ValueInstance.valueInstanceOf( composite ).state();
+    }
+
+    @Override
+    public ServiceDescriptor serviceDescriptorFor( Object service )
+    {
+        if( service instanceof ServiceReferenceInstance )
+        {
+            ServiceReferenceInstance<?> ref = (ServiceReferenceInstance<?>) service;
+            return ref.serviceDescriptor();
+        }
+        if( service instanceof ServiceComposite )
+        {
+            ServiceComposite composite = (ServiceComposite) service;
+            return (ServiceDescriptor) ServiceInstance.serviceInstanceOf( composite ).descriptor();
+        }
+        throw new IllegalArgumentException( "Wrong type. Must be subtype of "
+                                            + ServiceComposite.class + " or " + ServiceReference.class );
+    }
+
+    @Override
+    public PropertyDescriptor propertyDescriptorFor( Property<?> property )
+    {
+        while( property instanceof PropertyWrapper )
+        {
+            property = ( (PropertyWrapper) property ).next();
+        }
+
+        return (PropertyDescriptor) ( (PropertyInstance<?>) property ).propertyInfo();
+    }
+
+    @Override
+    public AssociationDescriptor associationDescriptorFor( AbstractAssociation association )
+    {
+        while( association instanceof AssociationWrapper )
+        {
+            association = ( (AssociationWrapper) association ).next();
+        }
+
+        while( association instanceof ManyAssociationWrapper )
+        {
+            association = ( (ManyAssociationWrapper) association ).next();
+        }
+
+        while( association instanceof NamedAssociationWrapper )
+        {
+            association = ( (NamedAssociationWrapper) association ).next();
+        }
+
+        return (AssociationDescriptor) ( (AbstractAssociationInstance) association ).associationInfo();
+    }
+
+    // SPI
+    @Override
+    public EntityState entityStateOf( EntityComposite composite )
+    {
+        return EntityInstance.entityInstanceOf( composite ).entityState();
+    }
+
+    @Override
+    public EntityReference entityReferenceOf( Association<?> assoc )
+    {
+        return assoc.reference();
+    }
+
+    @Override
+    public Stream<EntityReference> entityReferencesOf( ManyAssociation<?> assoc )
+    {
+        return assoc.references();
+    }
+
+    @Override
+    public Stream<Map.Entry<String, EntityReference>> entityReferencesOf( NamedAssociation<?> assoc )
+    {
+        return assoc.references();
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/runtime/src/main/java/org/apache/polygene/runtime/ZestRuntimeImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/ZestRuntimeImpl.java b/core/runtime/src/main/java/org/apache/polygene/runtime/ZestRuntimeImpl.java
deleted file mode 100644
index 2a0be69..0000000
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/ZestRuntimeImpl.java
+++ /dev/null
@@ -1,360 +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.polygene.runtime;
-
-import java.lang.reflect.InvocationHandler;
-import java.util.Arrays;
-import java.util.Map;
-import java.util.stream.Stream;
-import org.apache.polygene.api.PolygeneAPI;
-import org.apache.polygene.api.association.AbstractAssociation;
-import org.apache.polygene.api.association.Association;
-import org.apache.polygene.api.association.AssociationDescriptor;
-import org.apache.polygene.api.association.AssociationStateHolder;
-import org.apache.polygene.api.association.AssociationWrapper;
-import org.apache.polygene.api.association.ManyAssociation;
-import org.apache.polygene.api.association.ManyAssociationWrapper;
-import org.apache.polygene.api.association.NamedAssociation;
-import org.apache.polygene.api.association.NamedAssociationWrapper;
-import org.apache.polygene.api.composite.Composite;
-import org.apache.polygene.api.composite.CompositeDescriptor;
-import org.apache.polygene.api.composite.CompositeInstance;
-import org.apache.polygene.api.composite.ModelDescriptor;
-import org.apache.polygene.api.composite.TransientComposite;
-import org.apache.polygene.api.composite.TransientDescriptor;
-import org.apache.polygene.api.entity.EntityComposite;
-import org.apache.polygene.api.entity.EntityDescriptor;
-import org.apache.polygene.api.entity.EntityReference;
-import org.apache.polygene.api.property.Property;
-import org.apache.polygene.api.property.PropertyDescriptor;
-import org.apache.polygene.api.property.PropertyWrapper;
-import org.apache.polygene.api.property.StateHolder;
-import org.apache.polygene.api.service.ServiceComposite;
-import org.apache.polygene.api.service.ServiceDescriptor;
-import org.apache.polygene.api.service.ServiceReference;
-import org.apache.polygene.api.structure.ModuleDescriptor;
-import org.apache.polygene.api.unitofwork.UnitOfWork;
-import org.apache.polygene.api.value.ValueComposite;
-import org.apache.polygene.api.value.ValueDescriptor;
-import org.apache.polygene.bootstrap.ApplicationAssemblyFactory;
-import org.apache.polygene.bootstrap.ApplicationModelFactory;
-import org.apache.polygene.bootstrap.PolygeneRuntime;
-import org.apache.polygene.runtime.association.AbstractAssociationInstance;
-import org.apache.polygene.runtime.bootstrap.ApplicationAssemblyFactoryImpl;
-import org.apache.polygene.runtime.bootstrap.ApplicationModelFactoryImpl;
-import org.apache.polygene.runtime.composite.ProxyReferenceInvocationHandler;
-import org.apache.polygene.runtime.composite.TransientInstance;
-import org.apache.polygene.runtime.entity.EntityInstance;
-import org.apache.polygene.runtime.property.PropertyInstance;
-import org.apache.polygene.runtime.service.ImportedServiceReferenceInstance;
-import org.apache.polygene.runtime.service.ServiceInstance;
-import org.apache.polygene.runtime.service.ServiceReferenceInstance;
-import org.apache.polygene.runtime.unitofwork.ModuleUnitOfWork;
-import org.apache.polygene.runtime.value.ValueInstance;
-import org.apache.polygene.spi.PolygeneSPI;
-import org.apache.polygene.spi.entity.EntityState;
-
-import static java.lang.reflect.Proxy.getInvocationHandler;
-import static org.apache.polygene.runtime.composite.TransientInstance.compositeInstanceOf;
-
-/**
- * Incarnation of Polygene.
- */
-public final class PolygeneRuntimeImpl
-    implements PolygeneSPI, PolygeneRuntime
-{
-    private final ApplicationAssemblyFactory applicationAssemblyFactory;
-    private final ApplicationModelFactory applicationModelFactory;
-
-    public PolygeneRuntimeImpl()
-    {
-        applicationAssemblyFactory = new ApplicationAssemblyFactoryImpl();
-        applicationModelFactory = new ApplicationModelFactoryImpl();
-    }
-
-    @Override
-    public ApplicationAssemblyFactory applicationAssemblyFactory()
-    {
-        return applicationAssemblyFactory;
-    }
-
-    @Override
-    public ApplicationModelFactory applicationModelFactory()
-    {
-        return applicationModelFactory;
-    }
-
-    @Override
-    public PolygeneAPI api()
-    {
-        return this;
-    }
-
-    @Override
-    public PolygeneSPI spi()
-    {
-        return this;
-    }
-
-    // API
-
-    @Override
-    @SuppressWarnings( "unchecked" )
-    public <T> T dereference( T composite )
-    {
-        InvocationHandler handler = getInvocationHandler( composite );
-        if( handler instanceof ProxyReferenceInvocationHandler )
-        {
-            return (T) ( (ProxyReferenceInvocationHandler) handler ).proxy();
-        }
-        if( handler instanceof CompositeInstance )
-        {
-            return composite;
-        }
-        return null;
-    }
-
-    @Override
-    public ModuleDescriptor moduleOf( Object compositeOrServiceReferenceOrUow )
-    {
-        if( compositeOrServiceReferenceOrUow instanceof TransientComposite )
-        {
-            TransientComposite composite = (TransientComposite) compositeOrServiceReferenceOrUow;
-            return TransientInstance.compositeInstanceOf( composite ).module();
-        }
-        else if( compositeOrServiceReferenceOrUow instanceof EntityComposite )
-        {
-            EntityComposite composite = (EntityComposite) compositeOrServiceReferenceOrUow;
-            return EntityInstance.entityInstanceOf( composite ).module();
-        }
-        else if( compositeOrServiceReferenceOrUow instanceof ValueComposite )
-        {
-            ValueComposite composite = (ValueComposite) compositeOrServiceReferenceOrUow;
-            return ValueInstance.valueInstanceOf( composite ).module();
-        }
-        else if( compositeOrServiceReferenceOrUow instanceof ServiceComposite )
-        {
-            ServiceComposite composite = (ServiceComposite) compositeOrServiceReferenceOrUow;
-            InvocationHandler handler = getInvocationHandler( composite );
-            if( handler instanceof ServiceInstance )
-            {
-                return ( (ServiceInstance) handler ).module();
-            }
-            return ( (ServiceReferenceInstance.ServiceInvocationHandler) handler ).module();
-        }
-        else if( compositeOrServiceReferenceOrUow instanceof UnitOfWork )
-        {
-            ModuleUnitOfWork unitOfWork = (ModuleUnitOfWork) compositeOrServiceReferenceOrUow;
-            return unitOfWork.module();
-        }
-        else if( compositeOrServiceReferenceOrUow instanceof ServiceReferenceInstance )
-        {
-            ServiceReferenceInstance<?> reference = (ServiceReferenceInstance<?>) compositeOrServiceReferenceOrUow;
-            return reference.module();
-        }
-        else if( compositeOrServiceReferenceOrUow instanceof ImportedServiceReferenceInstance )
-        {
-            ImportedServiceReferenceInstance<?> importedServiceReference
-                = (ImportedServiceReferenceInstance<?>) compositeOrServiceReferenceOrUow;
-            return importedServiceReference.module();
-        }
-        throw new IllegalArgumentException( "Wrong type. Must be one of "
-                                            + Arrays.asList( TransientComposite.class, ValueComposite.class,
-                                                             ServiceComposite.class, ServiceReference.class,
-                                                             UnitOfWork.class ) );
-    }
-
-    @Override
-    public ModelDescriptor modelDescriptorFor( Object compositeOrServiceReference )
-    {
-        if( compositeOrServiceReference instanceof TransientComposite )
-        {
-            TransientComposite composite = (TransientComposite) compositeOrServiceReference;
-            return TransientInstance.compositeInstanceOf( composite ).descriptor();
-        }
-        else if( compositeOrServiceReference instanceof EntityComposite )
-        {
-            EntityComposite composite = (EntityComposite) compositeOrServiceReference;
-            return EntityInstance.entityInstanceOf( composite ).descriptor();
-        }
-        else if( compositeOrServiceReference instanceof ValueComposite )
-        {
-            ValueComposite composite = (ValueComposite) compositeOrServiceReference;
-            return ValueInstance.valueInstanceOf( composite ).descriptor();
-        }
-        else if( compositeOrServiceReference instanceof ServiceComposite )
-        {
-            ServiceComposite composite = (ServiceComposite) compositeOrServiceReference;
-            InvocationHandler handler = getInvocationHandler( composite );
-            if( handler instanceof ServiceInstance )
-            {
-                return ( (ServiceInstance) handler ).descriptor();
-            }
-            return ( (ServiceReferenceInstance.ServiceInvocationHandler) handler ).descriptor();
-        }
-        else if( compositeOrServiceReference instanceof ServiceReferenceInstance )
-        {
-            ServiceReferenceInstance<?> reference = (ServiceReferenceInstance<?>) compositeOrServiceReference;
-            return reference.serviceDescriptor();
-        }
-        else if( compositeOrServiceReference instanceof ImportedServiceReferenceInstance )
-        {
-            ImportedServiceReferenceInstance<?> importedServiceReference
-                = (ImportedServiceReferenceInstance<?>) compositeOrServiceReference;
-            return importedServiceReference.serviceDescriptor();
-        }
-        throw new IllegalArgumentException( "Wrong type. Must be one of "
-                                            + Arrays.asList( TransientComposite.class, ValueComposite.class,
-                                                             ServiceComposite.class, ServiceReference.class ) );
-    }
-
-    @Override
-    public CompositeDescriptor compositeDescriptorFor( Object compositeOrServiceReference )
-    {
-        return (CompositeDescriptor) modelDescriptorFor( compositeOrServiceReference );
-    }
-
-    // Descriptors
-
-    @Override
-    public TransientDescriptor transientDescriptorFor( Object transsient )
-    {
-        if( transsient instanceof TransientComposite )
-        {
-            TransientInstance transientInstance = compositeInstanceOf( (Composite) transsient );
-            return (TransientDescriptor) transientInstance.descriptor();
-        }
-        throw new IllegalArgumentException( "Wrong type. Must be subtype of " + TransientComposite.class );
-    }
-
-    @Override
-    public StateHolder stateOf( TransientComposite composite )
-    {
-        return TransientInstance.compositeInstanceOf( composite ).state();
-    }
-
-    @Override
-    public EntityDescriptor entityDescriptorFor( Object entity )
-    {
-        if( entity instanceof EntityComposite )
-        {
-            EntityInstance entityInstance = (EntityInstance) getInvocationHandler( entity );
-            return entityInstance.entityModel();
-        }
-        throw new IllegalArgumentException( "Wrong type. Must be subtype of " + EntityComposite.class );
-    }
-
-    @Override
-    public AssociationStateHolder stateOf( EntityComposite composite )
-    {
-        return EntityInstance.entityInstanceOf( composite ).state();
-    }
-
-    @Override
-    public ValueDescriptor valueDescriptorFor( Object value )
-    {
-        if( value instanceof ValueComposite )
-        {
-            ValueInstance valueInstance = ValueInstance.valueInstanceOf( (ValueComposite) value );
-            return valueInstance.descriptor();
-        }
-        throw new IllegalArgumentException( "Wrong type. Must be subtype of " + ValueComposite.class );
-    }
-
-    @Override
-    public AssociationStateHolder stateOf( ValueComposite composite )
-    {
-        return ValueInstance.valueInstanceOf( composite ).state();
-    }
-
-    @Override
-    public ServiceDescriptor serviceDescriptorFor( Object service )
-    {
-        if( service instanceof ServiceReferenceInstance )
-        {
-            ServiceReferenceInstance<?> ref = (ServiceReferenceInstance<?>) service;
-            return ref.serviceDescriptor();
-        }
-        if( service instanceof ServiceComposite )
-        {
-            ServiceComposite composite = (ServiceComposite) service;
-            return (ServiceDescriptor) ServiceInstance.serviceInstanceOf( composite ).descriptor();
-        }
-        throw new IllegalArgumentException( "Wrong type. Must be subtype of "
-                                            + ServiceComposite.class + " or " + ServiceReference.class );
-    }
-
-    @Override
-    public PropertyDescriptor propertyDescriptorFor( Property<?> property )
-    {
-        while( property instanceof PropertyWrapper )
-        {
-            property = ( (PropertyWrapper) property ).next();
-        }
-
-        return (PropertyDescriptor) ( (PropertyInstance<?>) property ).propertyInfo();
-    }
-
-    @Override
-    public AssociationDescriptor associationDescriptorFor( AbstractAssociation association )
-    {
-        while( association instanceof AssociationWrapper )
-        {
-            association = ( (AssociationWrapper) association ).next();
-        }
-
-        while( association instanceof ManyAssociationWrapper )
-        {
-            association = ( (ManyAssociationWrapper) association ).next();
-        }
-
-        while( association instanceof NamedAssociationWrapper )
-        {
-            association = ( (NamedAssociationWrapper) association ).next();
-        }
-
-        return (AssociationDescriptor) ( (AbstractAssociationInstance) association ).associationInfo();
-    }
-
-    // SPI
-    @Override
-    public EntityState entityStateOf( EntityComposite composite )
-    {
-        return EntityInstance.entityInstanceOf( composite ).entityState();
-    }
-
-    @Override
-    public EntityReference entityReferenceOf( Association<?> assoc )
-    {
-        return assoc.reference();
-    }
-
-    @Override
-    public Stream<EntityReference> entityReferencesOf( ManyAssociation<?> assoc )
-    {
-        return assoc.references();
-    }
-
-    @Override
-    public Stream<Map.Entry<String, EntityReference>> entityReferencesOf( NamedAssociation<?> assoc )
-    {
-        return assoc.references();
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/runtime/src/test/java/org/apache/polygene/api/common/OptionalTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/polygene/api/common/OptionalTest.java b/core/runtime/src/test/java/org/apache/polygene/api/common/OptionalTest.java
index 5fc0c31..6a43690 100644
--- a/core/runtime/src/test/java/org/apache/polygene/api/common/OptionalTest.java
+++ b/core/runtime/src/test/java/org/apache/polygene/api/common/OptionalTest.java
@@ -20,6 +20,7 @@
 
 package org.apache.polygene.api.common;
 
+import org.apache.polygene.test.AbstractPolygeneTest;
 import org.junit.Test;
 import org.apache.polygene.api.association.Association;
 import org.apache.polygene.api.composite.TransientBuilder;
@@ -32,7 +33,6 @@ import org.apache.polygene.api.property.Property;
 import org.apache.polygene.api.unitofwork.UnitOfWork;
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.test.AbstractPolygeneTest;
 import org.apache.polygene.test.EntityTestAssembler;
 
 import static org.hamcrest.CoreMatchers.notNullValue;

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/runtime/src/test/java/org/apache/polygene/api/common/PropertyErrorTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/polygene/api/common/PropertyErrorTest.java b/core/runtime/src/test/java/org/apache/polygene/api/common/PropertyErrorTest.java
index 1f85ae5..97aba67 100644
--- a/core/runtime/src/test/java/org/apache/polygene/api/common/PropertyErrorTest.java
+++ b/core/runtime/src/test/java/org/apache/polygene/api/common/PropertyErrorTest.java
@@ -20,6 +20,7 @@
 
 package org.apache.polygene.api.common;
 
+import org.apache.polygene.test.AbstractPolygeneTest;
 import org.junit.Test;
 import org.apache.polygene.api.constraint.ConstraintViolationException;
 import org.apache.polygene.api.entity.EntityComposite;
@@ -27,7 +28,6 @@ import org.apache.polygene.api.property.Property;
 import org.apache.polygene.api.unitofwork.UnitOfWork;
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.test.AbstractPolygeneTest;
 import org.apache.polygene.test.EntityTestAssembler;
 
 /**

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/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 b200422..4f33076 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.test.AbstractPolygeneTest;
 import org.junit.Test;
 import org.apache.polygene.api.composite.TransientBuilder;
 import org.apache.polygene.api.composite.TransientComposite;
@@ -34,7 +35,6 @@ import org.apache.polygene.api.property.Property;
 import org.apache.polygene.api.unitofwork.UnitOfWork;
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.test.AbstractPolygeneTest;
 import org.apache.polygene.test.EntityTestAssembler;
 
 /**

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/runtime/src/test/java/org/apache/polygene/api/common/ValueCompositeTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/polygene/api/common/ValueCompositeTest.java b/core/runtime/src/test/java/org/apache/polygene/api/common/ValueCompositeTest.java
index ef90cea..0a6d1d3 100644
--- a/core/runtime/src/test/java/org/apache/polygene/api/common/ValueCompositeTest.java
+++ b/core/runtime/src/test/java/org/apache/polygene/api/common/ValueCompositeTest.java
@@ -21,6 +21,7 @@
 package org.apache.polygene.api.common;
 
 import java.util.List;
+import org.apache.polygene.test.AbstractPolygeneTest;
 import org.junit.Assert;
 import org.junit.Test;
 import org.apache.polygene.api.constraint.ConstraintViolationException;
@@ -33,7 +34,6 @@ import org.apache.polygene.api.value.ValueBuilder;
 import org.apache.polygene.api.value.ValueComposite;
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.test.AbstractPolygeneTest;
 import org.apache.polygene.test.EntityTestAssembler;
 
 import static org.hamcrest.CoreMatchers.equalTo;

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/runtime/src/test/java/org/apache/polygene/regression/qi230/Qi230IssueTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/polygene/regression/qi230/Qi230IssueTest.java b/core/runtime/src/test/java/org/apache/polygene/regression/qi230/Qi230IssueTest.java
index f2130b4..271147f 100644
--- a/core/runtime/src/test/java/org/apache/polygene/regression/qi230/Qi230IssueTest.java
+++ b/core/runtime/src/test/java/org/apache/polygene/regression/qi230/Qi230IssueTest.java
@@ -20,6 +20,7 @@
 
 package org.apache.polygene.regression.qi230;
 
+import org.apache.polygene.test.AbstractPolygeneTest;
 import org.junit.Test;
 import org.apache.polygene.api.PolygeneAPI;
 import org.apache.polygene.api.composite.Composite;
@@ -33,7 +34,6 @@ import org.apache.polygene.api.mixin.NoopMixin;
 import org.apache.polygene.api.service.ServiceComposite;
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.test.AbstractPolygeneTest;
 
 import static org.junit.Assert.assertEquals;
 

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/runtime/src/test/java/org/apache/polygene/regression/qi377/InterfaceCollisionWithRelatedReturnTypesTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/polygene/regression/qi377/InterfaceCollisionWithRelatedReturnTypesTest.java b/core/runtime/src/test/java/org/apache/polygene/regression/qi377/InterfaceCollisionWithRelatedReturnTypesTest.java
index fd6813d..f766590 100644
--- a/core/runtime/src/test/java/org/apache/polygene/regression/qi377/InterfaceCollisionWithRelatedReturnTypesTest.java
+++ b/core/runtime/src/test/java/org/apache/polygene/regression/qi377/InterfaceCollisionWithRelatedReturnTypesTest.java
@@ -21,6 +21,7 @@ package org.apache.polygene.regression.qi377;
 
 import org.apache.polygene.api.identity.HasIdentity;
 import org.apache.polygene.api.identity.Identity;
+import org.apache.polygene.test.AbstractPolygeneTest;
 import org.junit.Test;
 import org.apache.polygene.api.association.Association;
 import org.apache.polygene.api.association.ManyAssociation;
@@ -30,7 +31,6 @@ import org.apache.polygene.api.unitofwork.UnitOfWork;
 import org.apache.polygene.api.unitofwork.UnitOfWorkCompletionException;
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.test.AbstractPolygeneTest;
 import org.apache.polygene.test.EntityTestAssembler;
 
 import static org.hamcrest.core.IsEqual.equalTo;

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/runtime/src/test/java/org/apache/polygene/regression/qi383/Qi383Test.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/polygene/regression/qi383/Qi383Test.java b/core/runtime/src/test/java/org/apache/polygene/regression/qi383/Qi383Test.java
index c174c58..a44f20a 100644
--- a/core/runtime/src/test/java/org/apache/polygene/regression/qi383/Qi383Test.java
+++ b/core/runtime/src/test/java/org/apache/polygene/regression/qi383/Qi383Test.java
@@ -20,6 +20,7 @@
 package org.apache.polygene.regression.qi383;
 
 import org.apache.polygene.api.identity.StringIdentity;
+import org.apache.polygene.test.AbstractPolygeneTest;
 import org.junit.Test;
 import org.apache.polygene.api.entity.EntityComposite;
 import org.apache.polygene.api.unitofwork.EntityCompositeAlreadyExistsException;
@@ -29,7 +30,6 @@ import org.apache.polygene.api.value.ValueSerialization;
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
 import org.apache.polygene.entitystore.memory.MemoryEntityStoreService;
-import org.apache.polygene.test.AbstractPolygeneTest;
 import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationService;
 
 public class Qi383Test extends AbstractPolygeneTest

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/runtime/src/test/java/org/apache/polygene/regression/qi59/IssueTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/polygene/regression/qi59/IssueTest.java b/core/runtime/src/test/java/org/apache/polygene/regression/qi59/IssueTest.java
index 9790b01..37f0dff 100644
--- a/core/runtime/src/test/java/org/apache/polygene/regression/qi59/IssueTest.java
+++ b/core/runtime/src/test/java/org/apache/polygene/regression/qi59/IssueTest.java
@@ -20,6 +20,7 @@
 
 package org.apache.polygene.regression.qi59;
 
+import org.apache.polygene.test.AbstractPolygeneTest;
 import org.junit.Test;
 import org.apache.polygene.api.entity.EntityComposite;
 import org.apache.polygene.api.property.Property;
@@ -27,7 +28,6 @@ import org.apache.polygene.api.unitofwork.UnitOfWork;
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
 import org.apache.polygene.library.constraints.annotation.NotEmpty;
-import org.apache.polygene.test.AbstractPolygeneTest;
 import org.apache.polygene.test.EntityTestAssembler;
 
 import static org.junit.Assert.fail;

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b02063bd/core/runtime/src/test/java/org/apache/polygene/runtime/PolygeneAPITest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/polygene/runtime/PolygeneAPITest.java b/core/runtime/src/test/java/org/apache/polygene/runtime/PolygeneAPITest.java
new file mode 100644
index 0000000..24419d6
--- /dev/null
+++ b/core/runtime/src/test/java/org/apache/polygene/runtime/PolygeneAPITest.java
@@ -0,0 +1,87 @@
+/*
+ *  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.polygene.runtime;
+
+import org.junit.Test;
+import org.apache.polygene.api.composite.TransientComposite;
+import org.apache.polygene.api.entity.EntityComposite;
+import org.apache.polygene.api.service.ServiceComposite;
+import org.apache.polygene.api.unitofwork.UnitOfWork;
+import org.apache.polygene.api.value.ValueComposite;
+import org.apache.polygene.bootstrap.AssemblyException;
+import org.apache.polygene.bootstrap.ModuleAssembly;
+import org.apache.polygene.test.AbstractPolygeneTest;
+import org.apache.polygene.test.EntityTestAssembler;
+
+/**
+ * JAVADOC
+ */
+public class PolygeneAPITest
+    extends AbstractPolygeneTest
+{
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        new EntityTestAssembler().assemble( module );
+        module.transients( TestTransient.class );
+        module.entities( TestEntity.class );
+        module.values( TestValue.class );
+        module.services( TestService.class );
+    }
+
+    @Test
+    public void testGetModuleOfComposite()
+        throws Exception
+    {
+        UnitOfWork unitOfWork = unitOfWorkFactory.newUnitOfWork();
+        TestEntity testEntity = unitOfWork.newEntity( TestEntity.class );
+
+        api.moduleOf( testEntity );
+
+        unitOfWork.discard();
+
+        api.moduleOf( valueBuilderFactory.newValue( TestValue.class ) );
+
+        api.moduleOf( transientBuilderFactory.newTransient( TestTransient.class ) );
+
+        api.moduleOf( serviceFinder.findService( TestService.class ).get() );
+    }
+
+    public interface TestTransient
+        extends TransientComposite
+    {
+    }
+
+    public interface TestEntity
+        extends EntityComposite
+    {
+    }
+
+    public interface TestValue
+        extends ValueComposite
+    {
+    }
+
+    public interface TestService
+        extends ServiceComposite
+    {
+    }
+}
\ No newline at end of file