polygene-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From nic...@apache.org
Subject [35/35] polygene-java git commit: Generator compiles. Setting @Ignore on testcase as it is now mostly a matter of getting Docker launching to work. Restored the DOCKER_RULE things in internals/ so branch should build normally.
Date Sun, 28 May 2017 16:10:55 GMT
Generator compiles. Setting @Ignore on testcase as it is now mostly a matter of getting Docker launching to work.
Restored the DOCKER_RULE things in internals/ so branch should build normally.

Signed-off-by: niclas <niclas@hedhman.org>


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

Branch: refs/heads/develop
Commit: a5feec0493f3e2daa7a42a2d68cb25f070f749af
Parents: 35fcff1
Author: niclas <niclas@hedhman.org>
Authored: Sun May 28 22:30:22 2017 +0800
Committer: niclas <niclas@hedhman.org>
Committed: Sun May 28 22:30:22 2017 +0800

----------------------------------------------------------------------
 .../polygene/gradle/code/CodePlugin.groovy      |    2 +-
 .../dependencies/PolygeneExtension.groovy       |   12 +
 .../distributions/DistributionsPlugin.groovy    |    1 +
 .../gradle/structure/docker/DockerPlugin.groovy |  151 ---
 .../internals/InternalDockerPlugin.groovy       |  151 +++
 .../structure/internals/InternalPlugin.groovy   |   33 +
 .../gradle-plugins/polygene-docker.properties   |   18 -
 .../polygene-internal-docker.properties         |   18 +
 .../gradle-plugins/polygene-internal.properties |   18 +
 .../api/configuration/Configuration.java        |  158 +--
 .../configuration/ConfigurationComposite.java   |    2 +-
 .../importer/ServiceInstanceImporter.java       |    7 +-
 .../unitofwork/NoSuchEntityTypeException.java   |    6 +-
 .../layered/LayeredLayerAssembler.java          |   13 +-
 .../runtime/composite/CompositeModel.java       |   36 +-
 .../GenericFragmentInvocationHandler.java       |    2 -
 .../polygene/runtime/service/ServiceModel.java  |   29 +-
 core/testsupport/build.gradle                   |    3 -
 .../polygene/test/docker/DelayChecker.java      |   60 -
 .../apache/polygene/test/docker/DockerRule.java |  156 ---
 .../test/model/assembly/AccessLayer.java        |    5 +-
 .../main/resources/docker/cassandra/Dockerfile  |   16 -
 .../main/resources/docker/memcached/Dockerfile  |   16 -
 .../src/main/resources/docker/mysql/Dockerfile  |   16 -
 .../main/resources/docker/postgres/Dockerfile   |   17 -
 .../resources/docker/postgres/init-test-db.sh   |   29 -
 .../src/main/resources/docker/redis/Dockerfile  |   16 -
 .../src/main/resources/docker/riak/Dockerfile   |   16 -
 .../main/resources/docker/s3server/Dockerfile   |   20 -
 extensions/cache-memcache/build.gradle          |    2 +-
 extensions/entitystore-cassandra/build.gradle   |    2 +-
 extensions/entitystore-jclouds/build.gradle     |    2 +-
 extensions/entitystore-redis/build.gradle       |    2 +-
 extensions/entitystore-riak/build.gradle        |    2 +-
 extensions/entitystore-sql/build.gradle         |    2 +-
 extensions/indexing-sql/build.gradle            |    2 +-
 internals/testsupport-internal/build.gradle     |   31 +
 .../src/main/docker/cassandra/Dockerfile        |   16 +
 .../src/main/docker/memcached/Dockerfile        |   16 +
 .../src/main/docker/mysql/Dockerfile            |   16 +
 .../src/main/docker/postgres/Dockerfile         |   17 +
 .../src/main/docker/postgres/init-test-db.sh    |   29 +
 .../src/main/docker/redis/Dockerfile            |   16 +
 .../src/main/docker/riak/Dockerfile             |   16 +
 .../src/main/docker/s3server/Dockerfile         |   20 +
 .../polygene/test/docker/DelayChecker.java      |   60 +
 .../apache/polygene/test/docker/DockerRule.java |  156 +++
 .../apache/polygene/test/docker/package.html    |   25 +
 settings.gradle                                 |    2 +
 tools/generator-polygene/app/index.js           |    4 +-
 .../IndexingModule/bootstrap.tmpl               |   27 +-
 .../indexing/ds-index-postgresql.properties     |   23 +
 .../indexing/index-rdf.properties               |   57 +
 .../IndexingModule/indexing/solr-schema.xml     |  606 ++++++++++
 .../IndexingModule/indexing/solrconfig.xml      | 1036 ++++++++++++++++++
 .../IndexingModule/module.js                    |   13 +
 .../StorageModule/bootstrap.tmpl                |   19 +-
 .../InfrastructureLayer/StorageModule/module.js |   28 +-
 .../storage/ds-derbysql.properties              |   24 -
 .../storage/ds-es-derbysql.properties           |   24 +
 .../storage/ds-es-h2sql.properties              |   24 +
 .../storage/ds-es-mysql.properties              |   24 +
 .../storage/ds-es-postgresql.properties         |   24 +
 .../storage/ds-es-sqlite.properties             |   24 +
 .../StorageModule/storage/ds-h2sql.properties   |   24 -
 .../StorageModule/storage/ds-mysql.properties   |   24 -
 .../storage/ds-postgresql.properties            |   24 -
 .../StorageModule/storage/ds-sqlite.properties  |   24 -
 .../InfrastructureLayer/bootstrap.tmpl          |    6 +-
 .../RestAPIApplication/bootstrap-test.tmpl      |  141 ++-
 .../app/templates/buildtool/gradle-app.tmpl     |   57 +-
 .../templates/buildtool/gradle-bootstrap.tmpl   |    4 +-
 72 files changed, 2871 insertions(+), 851 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/buildSrc/src/main/groovy/org/apache/polygene/gradle/code/CodePlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/code/CodePlugin.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/code/CodePlugin.groovy
index 4e61247..5653967 100644
--- a/buildSrc/src/main/groovy/org/apache/polygene/gradle/code/CodePlugin.groovy
+++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/code/CodePlugin.groovy
@@ -127,7 +127,7 @@ class CodePlugin implements Plugin<Project>
     // Configuration task to honor disabling Docker when unavailable
     project.tasks.create( 'configureDockerForTest', { Task task ->
       // TODO Untangle docker connectivity check & test task configuration
-        task.dependsOn ':core:testsupport:checkDockerConnectivity'
+      task.dependsOn ':internals:testsupport-internal:checkDockerConnectivity'
       testTasks.each { it.dependsOn task }
       task.inputs.property 'polygeneTestSupportDockerDisabled',
                            { project.findProperty( DOCKER_DISABLED_EXTRA_PROPERTY ) }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/buildSrc/src/main/groovy/org/apache/polygene/gradle/dependencies/PolygeneExtension.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/dependencies/PolygeneExtension.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/dependencies/PolygeneExtension.groovy
index 435f278..e08a4ab 100644
--- a/buildSrc/src/main/groovy/org/apache/polygene/gradle/dependencies/PolygeneExtension.groovy
+++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/dependencies/PolygeneExtension.groovy
@@ -26,11 +26,13 @@ class PolygeneExtension
 {
   private final Project project
   final Core core
+  final Internals internals
 
   PolygeneExtension( Project project )
   {
     this.project = project
     this.core = new Core()
+    this.internals = new Internals()
   }
 
   class Core
@@ -42,6 +44,11 @@ class PolygeneExtension
     Dependency testsupport = core( 'testsupport' )
   }
 
+  class Internals
+  {
+    Dependency testsupport = internal( 'testsupport-internal' )
+  }
+
   private Dependency core( String name )
   {
     return dependency( 'core', name )
@@ -62,6 +69,11 @@ class PolygeneExtension
     return dependency( 'tools', name )
   }
 
+  Dependency internal( String name )
+  {
+    return dependency( 'internals', name )
+  }
+
   private Dependency dependency( String group, String name )
   {
     project.dependencies.project( path: ":$group:$name" )

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/distributions/DistributionsPlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/distributions/DistributionsPlugin.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/distributions/DistributionsPlugin.groovy
index dd9ca5a..f6eee1f 100644
--- a/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/distributions/DistributionsPlugin.groovy
+++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/distributions/DistributionsPlugin.groovy
@@ -134,6 +134,7 @@ class DistributionsPlugin implements Plugin<Project>
       }
       spec.include 'distributions/**'
       spec.include 'reports/**'
+      spec.include 'internals/**'
       spec.include 'release/**'
       spec.include 'manual/**'
       spec.include 'samples/**'

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/docker/DockerPlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/docker/DockerPlugin.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/docker/DockerPlugin.groovy
deleted file mode 100644
index 1934568..0000000
--- a/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/docker/DockerPlugin.groovy
+++ /dev/null
@@ -1,151 +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.structure.docker
-
-import com.bmuschko.gradle.docker.DockerExtension
-import com.bmuschko.gradle.docker.DockerRemoteApiPlugin
-import com.bmuschko.gradle.docker.tasks.DockerVersion
-import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
-import groovy.transform.CompileStatic
-import org.apache.polygene.gradle.BasePlugin
-import org.apache.polygene.gradle.code.CodePlugin
-import org.apache.polygene.gradle.code.PublishNaming
-import org.apache.polygene.gradle.dependencies.DependenciesDeclarationExtension
-import org.apache.polygene.gradle.dependencies.DependenciesPlugin
-import org.apache.tools.ant.filters.ReplaceTokens
-import org.gradle.api.Action
-import org.gradle.api.Plugin
-import org.gradle.api.Project
-import org.gradle.api.Task
-import org.gradle.api.file.CopySpec
-import org.gradle.api.logging.LogLevel
-
-@CompileStatic
-class DockerPlugin implements Plugin<Project>
-{
-  static class TaskNames
-  {
-    static final String CHECK_DOCKER_CONNECTIVITY = 'checkDockerConnectivity'
-  }
-
-  private final String dockerMachineName = System.getenv( 'DOCKER_MACHINE_NAME' )
-  private final String dockerHost = System.getenv( 'DOCKER_HOST' )
-  private final String dockerCertPath = System.getenv( 'DOCKER_CERT_PATH' )
-
-  @Override
-  void apply( Project project )
-  {
-    project.plugins.apply BasePlugin
-    project.plugins.apply DependenciesPlugin
-    applyDockerPlugin( project )
-    applyDockerSwitch( project )
-    applyDockerBuildImage( project )
-  }
-
-  private void applyDockerPlugin( Project project )
-  {
-    project.plugins.apply DockerRemoteApiPlugin
-    def dockerExtension = project.extensions.getByType DockerExtension
-    // TLS support
-    if( dockerCertPath )
-    {
-      dockerExtension.certPath = new File( dockerCertPath )
-    }
-  }
-
-  private void applyDockerSwitch( Project project )
-  {
-    project.tasks.create( TaskNames.CHECK_DOCKER_CONNECTIVITY, DockerVersion, { DockerVersion task ->
-      task.onError = { ex ->
-        // Disable Docker for this build
-        project.rootProject.extensions.extraProperties.set( CodePlugin.DOCKER_DISABLED_EXTRA_PROPERTY, true )
-        if( project.hasProperty( 'skipDocker' ) )
-        {
-            project.logger.lifecycle 'skipDocker property is set, all Docker tasks will be SKIPPED'
-        }
-        else if( project.logger.isEnabled( LogLevel.INFO ) )
-        {
-          project.logger.info 'Unable to connect to Docker, all Docker tasks will be SKIPPED', ex
-        }
-        else
-        {
-          project.logger.lifecycle "Unable to connect to Docker, all Docker tasks will be SKIPPED\n  ${ ( ( Exception ) ex ).message }"
-        }
-      }
-      task.onComplete = {
-        if( project.hasProperty( 'skipDocker' ) )
-        {
-          // Disable Docker for this build
-          project.rootProject.extensions.extraProperties.set( CodePlugin.DOCKER_DISABLED_EXTRA_PROPERTY, true )
-          project.logger.lifecycle 'skipDocker property is set, all Docker tasks will be SKIPPED'
-        }
-      }
-    } as Action<DockerVersion> )
-  }
-
-  private void applyDockerBuildImage( Project project )
-  {
-    def classesTask = project.tasks.getByName 'classes'
-      def dockers = project.file('src/main/resources/docker')
-    def dependencies = project.rootProject.extensions.getByType( DependenciesDeclarationExtension )
-    dockers.eachDir { File dockerDir ->
-      def dockerName = dockerDir.name
-      def buildDockerfileTaskName = "build${ dockerName.capitalize() }Dockerfile"
-      def buildImageTaskName = "build${ dockerName.capitalize() }DockerImage"
-      def tmpDir = project.file "${ project.buildDir }/tmp/docker/${ dockerName }"
-      tmpDir.mkdirs()
-      def buildDockerfileTask = project.tasks.create( buildDockerfileTaskName ) { Task task ->
-        task.description = "Build $dockerName Dockerfile"
-        task.inputs.property 'dockerImagesVersions', dependencies.dockerImagesVersions
-        task.inputs.dir dockerDir
-        task.outputs.dir tmpDir
-        // Filter Dockerfile for image versions from dependencies declaration
-        task.doFirst {
-          project.copy { CopySpec spec ->
-            spec.from( dockerDir ) { CopySpec unfiltered ->
-              unfiltered.exclude 'Dockerfile'
-            }
-            spec.from( dockerDir ) { CopySpec filtered ->
-              filtered.include 'Dockerfile'
-              filtered.filter ReplaceTokens, tokens: dependencies.dockerImagesVersions
-            }
-            spec.into tmpDir
-          }
-        }
-      }
-      def buildImageTask = project.tasks.create( buildImageTaskName, DockerBuildImage, { DockerBuildImage task ->
-        task.description = "Build $dockerName Docker image"
-        task.inputDir = tmpDir
-        task.dockerFile = new File( tmpDir, 'Dockerfile' )
-          task.tag = "org.apache.polygene:${PublishNaming.publishedNameFor ":testsupport:docker-$dockerName"}"
-      } as Action<DockerBuildImage> )
-      [ buildDockerfileTask, buildImageTask ].each { Task task ->
-        task.group = 'docker'
-        task.dependsOn TaskNames.CHECK_DOCKER_CONNECTIVITY
-        task.onlyIf { !project.rootProject.findProperty( CodePlugin.DOCKER_DISABLED_EXTRA_PROPERTY ) }
-        task.inputs.property 'dockerMachineName', dockerMachineName
-        task.inputs.property 'dockerHostEnv', dockerHost
-        task.inputs.property 'dockerCertPath', dockerCertPath
-      }
-      buildImageTask.dependsOn buildDockerfileTask
-      // Ensure that all Docker images are built alongside this project
-      // This is a bit of a stretch but works for now
-      classesTask.dependsOn buildImageTask
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalDockerPlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalDockerPlugin.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalDockerPlugin.groovy
new file mode 100644
index 0000000..ac22b9f
--- /dev/null
+++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalDockerPlugin.groovy
@@ -0,0 +1,151 @@
+/*
+ *  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.structure.internals
+
+import com.bmuschko.gradle.docker.DockerExtension
+import com.bmuschko.gradle.docker.DockerRemoteApiPlugin
+import com.bmuschko.gradle.docker.tasks.DockerVersion
+import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
+import groovy.transform.CompileStatic
+import org.apache.polygene.gradle.BasePlugin
+import org.apache.polygene.gradle.code.CodePlugin
+import org.apache.polygene.gradle.code.PublishNaming
+import org.apache.polygene.gradle.dependencies.DependenciesDeclarationExtension
+import org.apache.polygene.gradle.dependencies.DependenciesPlugin
+import org.apache.tools.ant.filters.ReplaceTokens
+import org.gradle.api.Action
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.api.Task
+import org.gradle.api.file.CopySpec
+import org.gradle.api.logging.LogLevel
+
+@CompileStatic
+class InternalDockerPlugin implements Plugin<Project>
+{
+  static class TaskNames
+  {
+    static final String CHECK_DOCKER_CONNECTIVITY = 'checkDockerConnectivity'
+  }
+
+  private final String dockerMachineName = System.getenv( 'DOCKER_MACHINE_NAME' )
+  private final String dockerHost = System.getenv( 'DOCKER_HOST' )
+  private final String dockerCertPath = System.getenv( 'DOCKER_CERT_PATH' )
+
+  @Override
+  void apply( Project project )
+  {
+    project.plugins.apply BasePlugin
+    project.plugins.apply DependenciesPlugin
+    applyDockerPlugin( project )
+    applyDockerSwitch( project )
+    applyDockerBuildImage( project )
+  }
+
+  private void applyDockerPlugin( Project project )
+  {
+    project.plugins.apply DockerRemoteApiPlugin
+    def dockerExtension = project.extensions.getByType DockerExtension
+    // TLS support
+    if( dockerCertPath )
+    {
+      dockerExtension.certPath = new File( dockerCertPath )
+    }
+  }
+
+  private void applyDockerSwitch( Project project )
+  {
+    project.tasks.create( TaskNames.CHECK_DOCKER_CONNECTIVITY, DockerVersion, { DockerVersion task ->
+      task.onError = { ex ->
+        // Disable Docker for this build
+        project.rootProject.extensions.extraProperties.set( CodePlugin.DOCKER_DISABLED_EXTRA_PROPERTY, true )
+        if( project.hasProperty( 'skipDocker' ) )
+        {
+          project.logger.lifecycle 'skipDocker property is set, all Docker tasks will be SKIPPED'
+        }
+        else if( project.logger.isEnabled( LogLevel.INFO ) )
+        {
+          project.logger.info 'Unable to connect to Docker, all Docker tasks will be SKIPPED', ex
+        }
+        else
+        {
+          project.logger.lifecycle "Unable to connect to Docker, all Docker tasks will be SKIPPED\n  ${ ( ( Exception ) ex ).message }"
+        }
+      }
+      task.onComplete = {
+        if( project.hasProperty( 'skipDocker' ) )
+        {
+          // Disable Docker for this build
+          project.rootProject.extensions.extraProperties.set( CodePlugin.DOCKER_DISABLED_EXTRA_PROPERTY, true )
+          project.logger.lifecycle 'skipDocker property is set, all Docker tasks will be SKIPPED'
+        }
+      }
+    } as Action<DockerVersion> )
+  }
+
+  private void applyDockerBuildImage( Project project )
+  {
+    def classesTask = project.tasks.getByName 'classes'
+    def dockers = project.file( 'src/main/docker' )
+    def dependencies = project.rootProject.extensions.getByType( DependenciesDeclarationExtension )
+    dockers.eachDir { File dockerDir ->
+      def dockerName = dockerDir.name
+      def buildDockerfileTaskName = "build${ dockerName.capitalize() }Dockerfile"
+      def buildImageTaskName = "build${ dockerName.capitalize() }DockerImage"
+      def tmpDir = project.file "${ project.buildDir }/tmp/docker/${ dockerName }"
+      tmpDir.mkdirs()
+      def buildDockerfileTask = project.tasks.create( buildDockerfileTaskName ) { Task task ->
+        task.description = "Build $dockerName Dockerfile"
+        task.inputs.property 'dockerImagesVersions', dependencies.dockerImagesVersions
+        task.inputs.dir dockerDir
+        task.outputs.dir tmpDir
+        // Filter Dockerfile for image versions from dependencies declaration
+        task.doFirst {
+          project.copy { CopySpec spec ->
+            spec.from( dockerDir ) { CopySpec unfiltered ->
+              unfiltered.exclude 'Dockerfile'
+            }
+            spec.from( dockerDir ) { CopySpec filtered ->
+              filtered.include 'Dockerfile'
+              filtered.filter ReplaceTokens, tokens: dependencies.dockerImagesVersions
+            }
+            spec.into tmpDir
+          }
+        }
+      }
+      def buildImageTask = project.tasks.create( buildImageTaskName, DockerBuildImage, { DockerBuildImage task ->
+        task.description = "Build $dockerName Docker image"
+        task.inputDir = tmpDir
+        task.dockerFile = new File( tmpDir, 'Dockerfile' )
+        task.tag = "org.apache.polygene:${ PublishNaming.publishedNameFor ":internals:docker-$dockerName" }"
+      } as Action<DockerBuildImage> )
+      [ buildDockerfileTask, buildImageTask ].each { Task task ->
+        task.group = 'docker'
+        task.dependsOn TaskNames.CHECK_DOCKER_CONNECTIVITY
+        task.onlyIf { !project.rootProject.findProperty( CodePlugin.DOCKER_DISABLED_EXTRA_PROPERTY ) }
+        task.inputs.property 'dockerMachineName', dockerMachineName
+        task.inputs.property 'dockerHostEnv', dockerHost
+        task.inputs.property 'dockerCertPath', dockerCertPath
+      }
+      buildImageTask.dependsOn buildDockerfileTask
+      // Ensure that all Docker images are built alongside this project
+      // This is a bit of a stretch but works for now
+      classesTask.dependsOn buildImageTask
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalPlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalPlugin.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalPlugin.groovy
new file mode 100644
index 0000000..e667eb2
--- /dev/null
+++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalPlugin.groovy
@@ -0,0 +1,33 @@
+/*
+ *  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.structure.internals
+
+import groovy.transform.CompileStatic
+import org.apache.polygene.gradle.code.CodePlugin
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+
+@CompileStatic
+class InternalPlugin implements Plugin<Project>
+{
+    @Override
+    void apply( Project project )
+    {
+        project.plugins.apply CodePlugin
+    }
+}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-docker.properties
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-docker.properties b/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-docker.properties
deleted file mode 100644
index dfe3d41..0000000
--- a/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-docker.properties
+++ /dev/null
@@ -1,18 +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.
-#
-implementation-class=org.apache.polygene.gradle.structure.docker.DockerPlugin

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal-docker.properties
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal-docker.properties b/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal-docker.properties
new file mode 100644
index 0000000..60290a5
--- /dev/null
+++ b/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal-docker.properties
@@ -0,0 +1,18 @@
+#
+#  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.
+#
+implementation-class=org.apache.polygene.gradle.structure.internals.InternalDockerPlugin

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal.properties
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal.properties b/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal.properties
new file mode 100644
index 0000000..8741472
--- /dev/null
+++ b/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal.properties
@@ -0,0 +1,18 @@
+#
+#  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.
+#
+implementation-class=org.apache.polygene.gradle.structure.internals.InternalPlugin
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/api/src/main/java/org/apache/polygene/api/configuration/Configuration.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/configuration/Configuration.java b/core/api/src/main/java/org/apache/polygene/api/configuration/Configuration.java
index a7c4dd1..bc0e0ad 100644
--- a/core/api/src/main/java/org/apache/polygene/api/configuration/Configuration.java
+++ b/core/api/src/main/java/org/apache/polygene/api/configuration/Configuration.java
@@ -23,23 +23,23 @@ package org.apache.polygene.api.configuration;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.util.Objects;
 import org.apache.polygene.api.PolygeneAPI;
 import org.apache.polygene.api.composite.Composite;
 import org.apache.polygene.api.composite.PropertyMapper;
 import org.apache.polygene.api.constraint.ConstraintViolationException;
 import org.apache.polygene.api.entity.EntityBuilder;
+import org.apache.polygene.api.entity.EntityDescriptor;
 import org.apache.polygene.api.identity.HasIdentity;
 import org.apache.polygene.api.identity.Identity;
-import org.apache.polygene.api.injection.scope.Service;
 import org.apache.polygene.api.injection.scope.Structure;
 import org.apache.polygene.api.injection.scope.This;
 import org.apache.polygene.api.mixin.Mixins;
+import org.apache.polygene.api.serialization.Deserializer;
+import org.apache.polygene.api.serialization.Serialization;
 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.service.qualifier.ServiceTags;
-import org.apache.polygene.api.serialization.Deserializer;
-import org.apache.polygene.api.serialization.Serialization;
 import org.apache.polygene.api.structure.Module;
 import org.apache.polygene.api.unitofwork.NoSuchEntityException;
 import org.apache.polygene.api.unitofwork.NoSuchEntityTypeException;
@@ -178,8 +178,8 @@ public interface Configuration<T>
         @Structure
         private UnitOfWorkFactory uowf;
 
-        @Service
-        private Iterable<ServiceReference<Deserializer>> stateDeserializers;
+        @Structure
+        private Module module;
 
         public ConfigurationMixin()
         {
@@ -194,7 +194,9 @@ public interface Configuration<T>
                 uow = uowf.newUnitOfWork( usecase );
                 try
                 {
-                    configuration = this.findConfigurationInstanceFor( me, uow );
+                    ServiceDescriptor serviceModel = api.serviceDescriptorFor( me );
+                    Identity identity = me.identity().get();
+                    configuration = this.findConfigurationInstanceFor( serviceModel, identity, uow );
                 }
                 catch( InstantiationException e )
                 {
@@ -237,51 +239,46 @@ public interface Configuration<T>
         }
 
         @SuppressWarnings( "unchecked" )
-        public <V> V findConfigurationInstanceFor( ServiceComposite serviceComposite, UnitOfWork uow )
+        public <V> V findConfigurationInstanceFor( ServiceDescriptor serviceModel, Identity serviceIdentity, UnitOfWork uow )
             throws InstantiationException
         {
-            ServiceDescriptor serviceModel = api.serviceDescriptorFor( serviceComposite );
-
+            Class<V> configurationType = serviceModel.configurationType();
             V configuration;
             try
             {
-                configuration = uow.get( serviceModel.<V>configurationType(), serviceComposite.identity().get() );
+                configuration = uow.get( configurationType, serviceIdentity );
                 uow.pause();
             }
             catch( NoSuchEntityException | NoSuchEntityTypeException e )
             {
-                return (V) initializeConfigurationInstance( serviceComposite, uow, serviceModel,
-                                                            serviceComposite.identity().get() );
+                EntityDescriptor entityDescriptor = module.typeLookup().lookupEntityModel( configurationType );
+                return (V) initializeConfigurationInstance( entityDescriptor, uow, serviceModel, serviceIdentity );
             }
             return configuration;
         }
 
         @SuppressWarnings( "unchecked" )
-        private <V extends HasIdentity> V initializeConfigurationInstance( ServiceComposite serviceComposite,
+        private <V extends HasIdentity> V initializeConfigurationInstance( EntityDescriptor entityDescriptor,
                                                                            UnitOfWork uow,
                                                                            ServiceDescriptor serviceModel,
                                                                            Identity identity
-        )
+                                                                         )
             throws InstantiationException
         {
-            Module module = api.moduleOf( serviceComposite ).instance();
             Usecase usecase = UsecaseBuilder.newUsecase( "Configuration:" + me.identity().get() );
-            UnitOfWork buildUow = module.unitOfWorkFactory().newUnitOfWork( usecase );
-
-            Class<?> type = api.serviceDescriptorFor( serviceComposite ).types().findFirst().orElse( null );
+            UnitOfWork buildUow = entityDescriptor.module().instance().unitOfWorkFactory().newUnitOfWork( usecase );
             Class<V> configType = serviceModel.configurationType();
-
             // Check for defaults
-            V config = tryLoadPropertiesFile( buildUow, type, configType, identity );
+            V config = tryLoadPropertiesFile( buildUow, entityDescriptor, identity );
             if( config == null )
             {
-                config = tryLoadJsonFile( buildUow, type, configType, identity );
+                config = tryLoadJsonFile( buildUow, entityDescriptor, identity );
                 if( config == null )
                 {
-                    config = tryLoadYamlFile( buildUow, type, configType, identity );
+                    config = tryLoadYamlFile( buildUow, entityDescriptor, identity );
                     if( config == null )
                     {
-                        config = tryLoadXmlFile( buildUow, type, configType, identity );
+                        config = tryLoadXmlFile( buildUow, entityDescriptor, identity );
                         if( config == null )
                         {
                             try
@@ -304,7 +301,7 @@ public interface Configuration<T>
                 buildUow.complete();
 
                 // Try again
-                return (V) findConfigurationInstanceFor( serviceComposite, uow );
+                return (V) findConfigurationInstanceFor( serviceModel, identity, uow );
             }
             catch( Exception e1 )
             {
@@ -316,16 +313,17 @@ public interface Configuration<T>
             }
         }
 
-        private <C, V> V tryLoadPropertiesFile( UnitOfWork buildUow,
-                                                Class<C> compositeType,
-                                                Class<V> configType,
-                                                Identity identity
-        )
+        private <V> V tryLoadPropertiesFile( UnitOfWork buildUow,
+                                             EntityDescriptor configType,
+                                             Identity identity
+                                           )
             throws InstantiationException
         {
-            EntityBuilder<V> configBuilder = buildUow.newEntityBuilder( configType, identity );
+            @SuppressWarnings( "unchecked" )
+            EntityBuilder<V> configBuilder = buildUow.newEntityBuilder( (Class<V>) configType.primaryType(), identity );
+
             String resourceName = identity + ".properties";
-            try( InputStream asStream = getResource( compositeType, resourceName ) )
+            try( InputStream asStream = getResource( configType.primaryType(), resourceName ) )
             {
                 if( asStream != null )
                 {
@@ -360,61 +358,67 @@ public interface Configuration<T>
             return type.getResourceAsStream( resourceName );
         }
 
-        private <C, V extends HasIdentity> V tryLoadJsonFile( UnitOfWork uow,
-                                                              Class<C> compositeType,
-                                                              Class<V> configType,
-                                                              Identity identity
-        )
+        private <V extends HasIdentity> V tryLoadJsonFile( UnitOfWork uow,
+                                                           EntityDescriptor configType,
+                                                           Identity identity
+                                                         )
         {
-            return readConfig( uow, compositeType, configType, identity, Serialization.Format.JSON, ".json" );
+            return readConfig( uow, configType, identity, Serialization.Format.JSON, ".json" );
         }
 
-        private <C, V extends HasIdentity> V tryLoadYamlFile( UnitOfWork uow,
-                                                              Class<C> compositeType,
-                                                              Class<V> configType,
-                                                              Identity identity
-        )
+        private <V extends HasIdentity> V tryLoadYamlFile( UnitOfWork uow,
+                                                           EntityDescriptor configType,
+                                                           Identity identity
+                                                         )
         {
-            return readConfig( uow, compositeType, configType, identity, Serialization.Format.YAML, ".yaml" );
+            return readConfig( uow, configType, identity, Serialization.Format.YAML, ".yaml" );
         }
 
-        private <C, V extends HasIdentity> V tryLoadXmlFile( UnitOfWork uow,
-                                                             Class<C> compositeType,
-                                                             Class<V> configType,
-                                                             Identity identity
-        )
+        private <V extends HasIdentity> V tryLoadXmlFile( UnitOfWork uow,
+                                                          EntityDescriptor configType,
+                                                          Identity identity
+                                                        )
         {
-            return readConfig( uow, compositeType, configType, identity, Serialization.Format.XML, ".xml" );
+            return readConfig( uow, configType, identity, Serialization.Format.XML, ".xml" );
         }
 
-        private <C, V extends HasIdentity> V readConfig( UnitOfWork uow,
-                                                         Class<C> compositeType,
-                                                         Class<V> configType,
-                                                         Identity identity,
-                                                         String format,
-                                                         String extension
-        )
+        private <V extends HasIdentity> V readConfig( UnitOfWork uow,
+                                                      EntityDescriptor configType,
+                                                      Identity identity,
+                                                      String format,
+                                                      String extension
+                                                    )
         {
-            for( ServiceReference<Deserializer> serializerRef : stateDeserializers )
-            {
-                ServiceTags serviceTags = serializerRef.metaInfo( ServiceTags.class );
-                if( serviceTags.hasTag( format ) )
-                {
-                    String resourceName = identity + extension;
-                    try( InputStream asStream = getResource( compositeType, resourceName ) )
-                    {
-                        if( asStream != null )
-                        {
-                            Deserializer deserializer = serializerRef.get();
-                            V configObject = deserializer.deserialize( uow.module(), configType,
-                                                                       new InputStreamReader( asStream, UTF_8 ) );
-                            return uow.toEntity( configType, configObject );
-                        }
-                    }
-                    catch( IOException ignored ) {}
-                }
-            }
-            return null;
+            Module module = configType.module().instance();
+            return module.findServices( Deserializer.class )
+                         .filter( ref ->
+                                  {
+                                      ServiceTags serviceTags = ref.metaInfo( ServiceTags.class );
+                                      return serviceTags.hasTag( format );
+                                  } )
+                         .map( ref ->
+                               {
+                                   String resourceName = identity + extension;
+                                   try( InputStream asStream = getResource( configType.primaryType(), resourceName ) )
+                                   {
+                                       if( asStream != null )
+                                       {
+                                           Deserializer deserializer = ref.get();
+                                           V configObject = deserializer.deserialize( module.descriptor(), configType.valueType(),
+                                                                                      new InputStreamReader( asStream, UTF_8 ) );
+
+                                           @SuppressWarnings( "unchecked" )
+                                           Class<V> primaryType = (Class<V>) configType.primaryType();
+                                           return uow.toEntity( primaryType, configObject );
+                                       }
+                                   }
+                                   catch( IOException ignored )
+                                   {
+                                   }
+                                   return null;
+                               } )
+                         .filter( Objects::nonNull )
+                         .findFirst().orElse( null );
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/api/src/main/java/org/apache/polygene/api/configuration/ConfigurationComposite.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/configuration/ConfigurationComposite.java b/core/api/src/main/java/org/apache/polygene/api/configuration/ConfigurationComposite.java
index 726664f..82729a9 100644
--- a/core/api/src/main/java/org/apache/polygene/api/configuration/ConfigurationComposite.java
+++ b/core/api/src/main/java/org/apache/polygene/api/configuration/ConfigurationComposite.java
@@ -21,8 +21,8 @@
 package org.apache.polygene.api.configuration;
 
 import org.apache.polygene.api.composite.Composite;
-import org.apache.polygene.api.identity.HasIdentity;
 import org.apache.polygene.api.entity.Queryable;
+import org.apache.polygene.api.identity.HasIdentity;
 
 /**
  * Services that want to be configurable should have a ConfigurationComposite that contains all the settings.

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/api/src/main/java/org/apache/polygene/api/service/importer/ServiceInstanceImporter.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/service/importer/ServiceInstanceImporter.java b/core/api/src/main/java/org/apache/polygene/api/service/importer/ServiceInstanceImporter.java
index b0abf1b..321a31b 100644
--- a/core/api/src/main/java/org/apache/polygene/api/service/importer/ServiceInstanceImporter.java
+++ b/core/api/src/main/java/org/apache/polygene/api/service/importer/ServiceInstanceImporter.java
@@ -41,18 +41,17 @@ public class ServiceInstanceImporter<T>
     implements ServiceImporter<T>
 {
     @Structure
-    ServiceFinder finder;
+    private ServiceFinder finder;
 
-    ServiceImporter<T> service;
+    private ServiceImporter<T> service;
 
-    Identity serviceId;
+    private Identity serviceId;
 
     @Override
     public T importService( ImportedServiceDescriptor importedServiceDescriptor )
         throws ServiceImporterException
     {
         serviceId = importedServiceDescriptor.metaInfo( Identity.class );
-
         return serviceImporter().importService( importedServiceDescriptor );
     }
 

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/api/src/main/java/org/apache/polygene/api/unitofwork/NoSuchEntityTypeException.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/unitofwork/NoSuchEntityTypeException.java b/core/api/src/main/java/org/apache/polygene/api/unitofwork/NoSuchEntityTypeException.java
index 632e1b1..d6dbe8d 100644
--- a/core/api/src/main/java/org/apache/polygene/api/unitofwork/NoSuchEntityTypeException.java
+++ b/core/api/src/main/java/org/apache/polygene/api/unitofwork/NoSuchEntityTypeException.java
@@ -39,7 +39,11 @@ public class NoSuchEntityTypeException
     private static String formatVisibleTypes( TypeLookup typeLookup )
     {
         return typeLookup.allEntities()
-                         .map( descriptor -> descriptor.primaryType().getName() )
+                         .map( descriptor -> {
+                             String moduleName = descriptor.module().name();
+                             String entityClassName = descriptor.primaryType().getName();
+                             return entityClassName + " in " + moduleName;
+                         } )
                          .sorted()
                          .distinct()
                          .collect( joining( "\n", "Visible entity types are:\n", "" ) );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/layered/LayeredLayerAssembler.java
----------------------------------------------------------------------
diff --git a/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/layered/LayeredLayerAssembler.java b/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/layered/LayeredLayerAssembler.java
index e9a2c23..9866f89 100644
--- a/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/layered/LayeredLayerAssembler.java
+++ b/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/layered/LayeredLayerAssembler.java
@@ -31,11 +31,16 @@ public abstract class LayeredLayerAssembler
 
     protected ModuleAssembly createModule( LayerAssembly layer, Class<? extends ModuleAssembler> moduleAssemblerClass )
     {
+        return createModule( layer, moduleAssemblerClass, null );
+    }
+
+    protected ModuleAssembly createModule( LayerAssembly layer, Class<? extends ModuleAssembler> moduleAssemblerClass, ModuleAssembly constructorArgumentModule )
+    {
         try
         {
             String moduleName = createModuleName( moduleAssemblerClass );
             ModuleAssembly moduleAssembly = layer.module( moduleName );
-            ModuleAssembler moduleAssembler = instantiateModuleAssembler( moduleAssembly, moduleAssemblerClass );
+            ModuleAssembler moduleAssembler = instantiateModuleAssembler( moduleAssemblerClass, constructorArgumentModule );
             LayeredApplicationAssembler.setNameIfPresent( moduleAssemblerClass, moduleName );
             ModuleAssembly module = layer.module( moduleName );
             assemblers.put( moduleAssemblerClass, moduleAssembler );
@@ -62,8 +67,8 @@ public abstract class LayeredLayerAssembler
         return moduleName;
     }
 
-    protected ModuleAssembler instantiateModuleAssembler( ModuleAssembly module,
-                                                          Class<? extends ModuleAssembler> modulerAssemblerClass
+    protected ModuleAssembler instantiateModuleAssembler( Class<? extends ModuleAssembler> modulerAssemblerClass,
+                                                          ModuleAssembly constructorArgument
                                                         )
         throws InstantiationException, IllegalAccessException, java.lang.reflect.InvocationTargetException, NoSuchMethodException
     {
@@ -72,7 +77,7 @@ public abstract class LayeredLayerAssembler
         {
             Constructor<? extends ModuleAssembler> assemblyConstructor = modulerAssemblerClass.getDeclaredConstructor( ModuleAssembly.class );
             assemblyConstructor.setAccessible( true );
-            moduleAssembler = assemblyConstructor.newInstance( module );
+            moduleAssembler = assemblyConstructor.newInstance( constructorArgument );
         }
         catch( NoSuchMethodException e )
         {

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/runtime/src/main/java/org/apache/polygene/runtime/composite/CompositeModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/CompositeModel.java b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/CompositeModel.java
index a33e243..59ad428 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/CompositeModel.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/CompositeModel.java
@@ -68,7 +68,7 @@ public abstract class CompositeModel
                               final MixinsModel mixinsModel,
                               final StateModel stateModel,
                               final CompositeMethodsModel compositeMethodsModel
-    )
+                            )
     {
         this.module = module;
         this.types = new LinkedHashSet<>( types );
@@ -105,7 +105,6 @@ public abstract class CompositeModel
             } );
     }
 
-    // Model
     @Override
     public Stream<Class<?>> types()
     {
@@ -185,10 +184,10 @@ public abstract class CompositeModel
     }
 
     @SuppressWarnings( { "raw", "unchecked" } )
-    private Class<? extends Composite>  createProxyClass( Class<?> mainType )
+    private Class<? extends Composite> createProxyClass( Class<?> mainType )
         throws ClassNotFoundException, NoSuchMethodException
     {
-        Class<? extends Composite>  proxyClass;
+        Class<? extends Composite> proxyClass;
         if( mainType.isInterface() )
         {
             ClassLoader proxyClassloader = mainType.getClassLoader();
@@ -224,10 +223,34 @@ public abstract class CompositeModel
                                 Object proxy,
                                 Method method,
                                 Object[] args
-    )
+                              )
         throws Throwable
     {
-        return compositeMethodsModel.invoke( mixins, proxy, method, args, module );
+        try
+        {
+            return compositeMethodsModel.invoke( mixins, proxy, method, args, module );
+        }
+        catch( Throwable throwable )
+        {
+            decorateModuleInfo( throwable, method.getName() );
+            throw throwable;
+        }
+    }
+
+    private void decorateModuleInfo( Throwable throwable, String methodName )
+    {
+        StackTraceElement[] trace = throwable.getStackTrace();
+        // Only add originating Module/Layer/
+        if( trace[0].getClassName().startsWith( "method " ))
+        {
+            return;
+        }
+        StackTraceElement[] newTrace = new StackTraceElement[ trace.length + 1 ];
+        String message = "method \"" + methodName + "\" of " + this.toString() + " in module [" + module.name() + "] of layer [" + module.layer().name() + "]";
+        String compositeName = this.toString();
+        newTrace[ 0 ] = new StackTraceElement( message, "", "", 0 );
+        System.arraycopy( trace, 0, newTrace, 1, trace.length );
+        throwable.setStackTrace( newTrace );
     }
 
     @Override
@@ -272,7 +295,6 @@ public abstract class CompositeModel
         throws IllegalArgumentException
     {
 
-//        if (!matchesAny( isAssignableFrom( mixinType ), types ))
         if( !mixinsModel.isImplemented( mixinType ) )
         {
             String message = "Composite " + primaryType().getName() + " does not implement type " + mixinType.getName();

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/runtime/src/main/java/org/apache/polygene/runtime/composite/GenericFragmentInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/GenericFragmentInvocationHandler.java b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/GenericFragmentInvocationHandler.java
index 44259e8..13c0741 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/GenericFragmentInvocationHandler.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/GenericFragmentInvocationHandler.java
@@ -29,8 +29,6 @@ import java.lang.reflect.Method;
 public final class GenericFragmentInvocationHandler
     extends FragmentInvocationHandler
 {
-    // InvocationHandler implementation ------------------------------
-
     @Override
     public Object invoke( Object proxy, Method method, Object[] args )
         throws Throwable

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/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 74dd852..e45f22d 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
@@ -70,7 +70,7 @@ public final class ServiceModel extends CompositeModel
                          CompositeMethodsModel compositeMethodsModel,
                          Identity identity,
                          boolean instantiateOnStartup
-    )
+                       )
     {
         super( module, types, visibility, metaInfo, mixinsModel, stateModel, compositeMethodsModel );
 
@@ -133,16 +133,17 @@ public final class ServiceModel extends CompositeModel
         Object[] mixins = mixinsModel.newMixinHolder();
 
         Map<AccessibleObject, Property<?>> properties = new HashMap<>();
-        stateModel.properties().forEach( propertyModel -> {
-            Object initialValue = propertyModel.resolveInitialValue(module);
-            if( propertyModel.accessor().equals( HasIdentity.IDENTITY_METHOD ) )
-            {
-                initialValue = identity;
-            }
-
-            Property<?> property = new PropertyInstance<>( propertyModel, initialValue );
-            properties.put( propertyModel.accessor(), property );
-        } );
+        stateModel.properties().forEach( propertyModel ->
+                                         {
+                                             Object initialValue = propertyModel.resolveInitialValue( module );
+                                             if( propertyModel.accessor().equals( HasIdentity.IDENTITY_METHOD ) )
+                                             {
+                                                 initialValue = identity;
+                                             }
+
+                                             Property<?> property = new PropertyInstance<>( propertyModel, initialValue );
+                                             properties.put( propertyModel.accessor(), property );
+                                         } );
 
         TransientStateInstance state = new TransientStateInstance( properties );
         ServiceInstance compositeInstance = new ServiceInstance( this, mixins, state );
@@ -170,11 +171,13 @@ public final class ServiceModel extends CompositeModel
     {
         DependencyModel.ScopeSpecification thisSpec = new DependencyModel.ScopeSpecification( This.class );
         Predicate<DependencyModel> configurationCheck = item -> item.rawInjectionType().equals( Configuration.class );
-        return dependencies().filter( thisSpec.and( configurationCheck ) )
+        return dependencies()
+            .filter( thisSpec.and( configurationCheck ) )
             .filter( dependencyModel -> dependencyModel.rawInjectionType().equals( Configuration.class ) )
             .filter( dependencyModel -> dependencyModel.injectionType() instanceof ParameterizedType )
             .map( dependencyModel -> Classes.RAW_CLASS.apply( ( (ParameterizedType) dependencyModel.injectionType() ).getActualTypeArguments()[ 0 ] ) )
-            .reduce( null, ( injectionClass, type ) -> {
+            .reduce( null, ( injectionClass, type ) ->
+            {
                 if( injectionClass == null )
                 {
                     injectionClass = type;

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/testsupport/build.gradle
----------------------------------------------------------------------
diff --git a/core/testsupport/build.gradle b/core/testsupport/build.gradle
index 0a04b66..adfa425 100644
--- a/core/testsupport/build.gradle
+++ b/core/testsupport/build.gradle
@@ -19,7 +19,6 @@
  */
 
 apply plugin: 'polygene-core'
-apply plugin: 'polygene-docker'
 
 jar { manifest { name = "Apache Polygene™ Core Test Support" } }
 
@@ -28,7 +27,5 @@ dependencies {
   api libraries.junit
   api libraries.hamcrest
 
-  implementation libraries.docker_junit
-
   testRuntimeOnly polygene.core.runtime
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/testsupport/src/main/java/org/apache/polygene/test/docker/DelayChecker.java
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/java/org/apache/polygene/test/docker/DelayChecker.java b/core/testsupport/src/main/java/org/apache/polygene/test/docker/DelayChecker.java
deleted file mode 100644
index 36de1ea..0000000
--- a/core/testsupport/src/main/java/org/apache/polygene/test/docker/DelayChecker.java
+++ /dev/null
@@ -1,60 +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.test.docker;
-
-import pl.domzal.junit.docker.rule.wait.StartCondition;
-import pl.domzal.junit.docker.rule.wait.StartConditionCheck;
-
-class DelayChecker
-    implements StartCondition
-{
-
-    private final long millis;
-    private final long doneAt;
-
-    DelayChecker( long millis )
-    {
-        this.millis = millis;
-        this.doneAt = System.currentTimeMillis() + millis;
-    }
-
-    @Override
-    public StartConditionCheck build( pl.domzal.junit.docker.rule.DockerRule currentRule )
-    {
-        return new StartConditionCheck()
-        {
-
-            @Override
-            public boolean check()
-            {
-                return System.currentTimeMillis() > doneAt;
-            }
-
-            @Override
-            public String describe()
-            {
-                return String.format( "delay check %d ms", millis );
-            }
-
-            @Override
-            public void after()
-            {
-            }
-        };
-    }
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/testsupport/src/main/java/org/apache/polygene/test/docker/DockerRule.java
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/java/org/apache/polygene/test/docker/DockerRule.java b/core/testsupport/src/main/java/org/apache/polygene/test/docker/DockerRule.java
deleted file mode 100644
index 18fab0f..0000000
--- a/core/testsupport/src/main/java/org/apache/polygene/test/docker/DockerRule.java
+++ /dev/null
@@ -1,156 +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.test.docker;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import org.junit.rules.TestRule;
-import org.junit.runner.Description;
-import org.junit.runners.model.Statement;
-import pl.domzal.junit.docker.rule.DockerRuleBuilder;
-import pl.domzal.junit.docker.rule.WaitFor;
-import pl.domzal.junit.docker.rule.wait.LineListener;
-import pl.domzal.junit.docker.rule.wait.StartCondition;
-import pl.domzal.junit.docker.rule.wait.StartConditionCheck;
-
-import static java.util.stream.Collectors.joining;
-import static org.junit.Assume.assumeFalse;
-
-public class DockerRule
-    implements TestRule
-{
-    private final boolean dockerDisabled = Boolean.valueOf( System.getProperty( "DOCKER_DISABLED", "false" ) );
-    private final pl.domzal.junit.docker.rule.DockerRule dockerRule;
-
-    public DockerRule( String image, int... portsToWaitFor )
-    {
-        this( image, null, WaitFor.tcpPort( portsToWaitFor ) );
-    }
-
-    public DockerRule( String image, String... logMessageSequenceToWaitFor )
-    {
-        this( image, null, WaitFor.logMessageSequence( logMessageSequenceToWaitFor ) );
-    }
-
-    public DockerRule( String image, Map<String, String> environment, String... logMessageSequnceToWaitFor )
-    {
-        this( image, environment, WaitFor.logMessageSequence( logMessageSequnceToWaitFor ) );
-    }
-
-    public DockerRule( String image, Long delay, int... portsToWaitFor )
-    {
-        this( image, null, new DelayChecker( delay ), WaitFor.tcpPort( portsToWaitFor ), new DelayChecker( delay ) );
-    }
-
-    public DockerRule( String image, Long delay, String... logMessageSequenceToWaitFor )
-    {
-        this( image, null, WaitFor.logMessageSequence( logMessageSequenceToWaitFor ), new DelayChecker( delay ) );
-    }
-
-    public DockerRule( String image, Map<String, String> environment, Long delay, String... logMessageSequnceToWaitFor )
-    {
-        this( image, environment, WaitFor.logMessageSequence( logMessageSequnceToWaitFor ), new DelayChecker( delay ) );
-    }
-
-    public DockerRule( String image, Map<String, String> environment, StartCondition... waitFor )
-    {
-        if( environment == null )
-        {
-            environment = Collections.emptyMap();
-        }
-        if( dockerDisabled )
-        {
-            dockerRule = null;
-        }
-        else
-        {
-            DockerRuleBuilder builder = pl.domzal.junit.docker.rule.DockerRule
-                .builder()
-                .imageName( "org.apache.polygene:org.apache.polygene.internal.docker-" + image )
-                .publishAllPorts( true )
-                .waitForTimeout( 120 )
-                .waitFor( rule -> new AndChecker( rule, waitFor ) );
-            environment.forEach( builder::env );
-            dockerRule = builder.build();
-        }
-    }
-
-    @Override
-    public Statement apply( Statement base, Description description )
-    {
-        assumeFalse( dockerDisabled );
-        return dockerRule.apply( base, description );
-    }
-
-    public String getDockerHost()
-    {
-        return dockerRule.getDockerHost();
-    }
-
-    public int getExposedContainerPort( String containerPort )
-    {
-        return Integer.valueOf( dockerRule.getExposedContainerPort( containerPort ) );
-    }
-
-    public class AndChecker
-        implements StartConditionCheck, LineListener
-    {
-        private List<StartConditionCheck> allOf;
-
-        public AndChecker( pl.domzal.junit.docker.rule.DockerRule rule, StartCondition... allOf )
-        {
-            this.allOf = Arrays.stream( allOf ).map( cond -> cond.build( rule ) ).collect( Collectors.toList() );
-        }
-
-        @Override
-        public boolean check()
-        {
-            return allOf.stream()
-                        .allMatch( StartConditionCheck::check );
-        }
-
-        @Override
-        public String describe()
-        {
-            return allOf.stream()
-                        .map( StartConditionCheck::describe )
-                        .collect( joining( ",", "and(", ")" ) );
-        }
-
-        @Override
-        public void after()
-        {
-            allOf.forEach( StartConditionCheck::after );
-        }
-
-        @Override
-        public void nextLine( String line )
-        {
-            allOf.forEach( listener ->
-                           {
-                               if( listener instanceof LineListener )
-                               {
-                                   ( (LineListener) listener ).nextLine( line );
-                               }
-                           } );
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/testsupport/src/main/java/org/apache/polygene/test/model/assembly/AccessLayer.java
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/java/org/apache/polygene/test/model/assembly/AccessLayer.java b/core/testsupport/src/main/java/org/apache/polygene/test/model/assembly/AccessLayer.java
index 9a20fdc..f84b622 100644
--- a/core/testsupport/src/main/java/org/apache/polygene/test/model/assembly/AccessLayer.java
+++ b/core/testsupport/src/main/java/org/apache/polygene/test/model/assembly/AccessLayer.java
@@ -47,8 +47,7 @@ class AccessLayer extends LayeredLayerAssembler
     }
 
     @Override
-    protected ModuleAssembler instantiateModuleAssembler( ModuleAssembly module,
-                                                          Class<? extends ModuleAssembler> moduleAssemblerClass
+    protected ModuleAssembler instantiateModuleAssembler( Class<? extends ModuleAssembler> moduleAssemblerClass, ModuleAssembly constructorArgument
                                                         )
         throws InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException
     {
@@ -58,7 +57,7 @@ class AccessLayer extends LayeredLayerAssembler
         }
         else
         {
-            return super.instantiateModuleAssembler( module, moduleAssemblerClass );
+            return super.instantiateModuleAssembler( moduleAssemblerClass, constructorArgument );
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/testsupport/src/main/resources/docker/cassandra/Dockerfile
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/resources/docker/cassandra/Dockerfile b/core/testsupport/src/main/resources/docker/cassandra/Dockerfile
deleted file mode 100644
index 11d22b4..0000000
--- a/core/testsupport/src/main/resources/docker/cassandra/Dockerfile
+++ /dev/null
@@ -1,16 +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.
-
-FROM @cassandra@

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/testsupport/src/main/resources/docker/memcached/Dockerfile
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/resources/docker/memcached/Dockerfile b/core/testsupport/src/main/resources/docker/memcached/Dockerfile
deleted file mode 100644
index 0b1a4b2..0000000
--- a/core/testsupport/src/main/resources/docker/memcached/Dockerfile
+++ /dev/null
@@ -1,16 +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.
-
-FROM @memcached@

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/testsupport/src/main/resources/docker/mysql/Dockerfile
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/resources/docker/mysql/Dockerfile b/core/testsupport/src/main/resources/docker/mysql/Dockerfile
deleted file mode 100644
index 967d45d..0000000
--- a/core/testsupport/src/main/resources/docker/mysql/Dockerfile
+++ /dev/null
@@ -1,16 +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.
-
-FROM @mariadb@
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/testsupport/src/main/resources/docker/postgres/Dockerfile
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/resources/docker/postgres/Dockerfile b/core/testsupport/src/main/resources/docker/postgres/Dockerfile
deleted file mode 100644
index d3dad53..0000000
--- a/core/testsupport/src/main/resources/docker/postgres/Dockerfile
+++ /dev/null
@@ -1,17 +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.
-
-FROM @postgres@
-COPY init-test-db.sh /docker-entrypoint-initdb.d/init-test-db.sh

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/testsupport/src/main/resources/docker/postgres/init-test-db.sh
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/resources/docker/postgres/init-test-db.sh b/core/testsupport/src/main/resources/docker/postgres/init-test-db.sh
deleted file mode 100755
index 347d78d..0000000
--- a/core/testsupport/src/main/resources/docker/postgres/init-test-db.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-# 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.
-
-set -e
-
-# Create test user and database
-psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
-    CREATE USER jdbc_test_login;
-    CREATE DATABASE jdbc_test_db;
-    GRANT ALL PRIVILEGES ON DATABASE jdbc_test_db TO jdbc_test_login;
-EOSQL
-
-# Enable ltree extension on test database
-psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" -d jdbc_test_db <<-EOSQL
-    CREATE EXTENSION ltree;
-EOSQL

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/testsupport/src/main/resources/docker/redis/Dockerfile
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/resources/docker/redis/Dockerfile b/core/testsupport/src/main/resources/docker/redis/Dockerfile
deleted file mode 100644
index d0e67fc..0000000
--- a/core/testsupport/src/main/resources/docker/redis/Dockerfile
+++ /dev/null
@@ -1,16 +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.
-
-FROM @redis@

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/testsupport/src/main/resources/docker/riak/Dockerfile
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/resources/docker/riak/Dockerfile b/core/testsupport/src/main/resources/docker/riak/Dockerfile
deleted file mode 100644
index 776d7af..0000000
--- a/core/testsupport/src/main/resources/docker/riak/Dockerfile
+++ /dev/null
@@ -1,16 +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.
-
-FROM @riak@

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/core/testsupport/src/main/resources/docker/s3server/Dockerfile
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/resources/docker/s3server/Dockerfile b/core/testsupport/src/main/resources/docker/s3server/Dockerfile
deleted file mode 100644
index a4bff87..0000000
--- a/core/testsupport/src/main/resources/docker/s3server/Dockerfile
+++ /dev/null
@@ -1,20 +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.
-
-FROM @s3server@
-
-# See https://github.com/scality/S3/blob/master/DOCKER.md
-ENV SCALITY_ACCESS_KEY_ID dummyIdentifier
-ENV SCALITY_SECRET_ACCESS_KEY dummyCredential

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/extensions/cache-memcache/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/cache-memcache/build.gradle b/extensions/cache-memcache/build.gradle
index 97742bb..8aa67a7 100644
--- a/extensions/cache-memcache/build.gradle
+++ b/extensions/cache-memcache/build.gradle
@@ -31,7 +31,7 @@ dependencies {
 
   runtimeOnly polygene.core.runtime
 
-  testImplementation polygene.core.testsupport
+  testImplementation polygene.internals.testsupport
 
   testRuntimeOnly libraries.logback
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/extensions/entitystore-cassandra/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/entitystore-cassandra/build.gradle b/extensions/entitystore-cassandra/build.gradle
index 06dbc40..343b9f9 100644
--- a/extensions/entitystore-cassandra/build.gradle
+++ b/extensions/entitystore-cassandra/build.gradle
@@ -34,7 +34,7 @@ dependencies {
 
   runtimeOnly polygene.core.runtime
 
-  testImplementation polygene.core.testsupport
+  testImplementation polygene.internals.testsupport
 
   testRuntimeOnly libraries.logback
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/extensions/entitystore-jclouds/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/entitystore-jclouds/build.gradle b/extensions/entitystore-jclouds/build.gradle
index 35120b2..8db7d5c 100644
--- a/extensions/entitystore-jclouds/build.gradle
+++ b/extensions/entitystore-jclouds/build.gradle
@@ -36,7 +36,7 @@ dependencies {
   runtimeOnly polygene.core.runtime
   runtimeOnly libraries.jaxb_api
 
-  testImplementation polygene.core.testsupport
+  testImplementation polygene.internals.testsupport
   testImplementation libraries.jclouds_filesystem
 
   testRuntimeOnly libraries.logback

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/extensions/entitystore-redis/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/entitystore-redis/build.gradle b/extensions/entitystore-redis/build.gradle
index 6526ede..da29e7d 100644
--- a/extensions/entitystore-redis/build.gradle
+++ b/extensions/entitystore-redis/build.gradle
@@ -32,7 +32,7 @@ dependencies {
 
   runtimeOnly polygene.core.runtime
 
-  testImplementation polygene.core.testsupport
+  testImplementation polygene.internals.testsupport
 
   testRuntimeOnly libraries.logback
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/extensions/entitystore-riak/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/entitystore-riak/build.gradle b/extensions/entitystore-riak/build.gradle
index 287c4da..98200ac 100644
--- a/extensions/entitystore-riak/build.gradle
+++ b/extensions/entitystore-riak/build.gradle
@@ -33,7 +33,7 @@ dependencies {
 
   runtimeOnly polygene.core.runtime
 
-  testImplementation polygene.core.testsupport
+  testImplementation polygene.internals.testsupport
   testImplementation libraries.awaitility
 
   testRuntimeOnly libraries.logback

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/extensions/entitystore-sql/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/entitystore-sql/build.gradle b/extensions/entitystore-sql/build.gradle
index 694c478..223e85b 100644
--- a/extensions/entitystore-sql/build.gradle
+++ b/extensions/entitystore-sql/build.gradle
@@ -33,7 +33,7 @@ dependencies {
 
   runtimeOnly polygene.core.runtime
 
-  testImplementation polygene.core.testsupport
+  testImplementation polygene.internals.testsupport
   testImplementation polygene.library( 'sql-dbcp' )
   testImplementation libraries.docker_junit
 

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/extensions/indexing-sql/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/indexing-sql/build.gradle b/extensions/indexing-sql/build.gradle
index faac8e8..5d6f71e 100644
--- a/extensions/indexing-sql/build.gradle
+++ b/extensions/indexing-sql/build.gradle
@@ -33,7 +33,7 @@ dependencies {
 
   runtimeOnly polygene.core.runtime
 
-  testImplementation polygene.core.testsupport
+  testImplementation polygene.internals.testsupport
   testImplementation polygene.library( 'sql-dbcp' )
 
   testRuntimeOnly libraries.logback

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/internals/testsupport-internal/build.gradle
----------------------------------------------------------------------
diff --git a/internals/testsupport-internal/build.gradle b/internals/testsupport-internal/build.gradle
new file mode 100644
index 0000000..f04063b
--- /dev/null
+++ b/internals/testsupport-internal/build.gradle
@@ -0,0 +1,31 @@
+/*
+ *  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.
+ */
+
+apply plugin: 'polygene-internal'
+apply plugin: 'polygene-internal-docker'
+
+description = "Apache Polygene™ Internal Test Support"
+
+jar { manifest { name = "Apache Polygene™ Internals - Test Support" } }
+
+dependencies {
+    api polygene.core.testsupport
+
+    implementation libraries.docker_junit
+    runtimeOnly polygene.core.runtime
+}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/internals/testsupport-internal/src/main/docker/cassandra/Dockerfile
----------------------------------------------------------------------
diff --git a/internals/testsupport-internal/src/main/docker/cassandra/Dockerfile b/internals/testsupport-internal/src/main/docker/cassandra/Dockerfile
new file mode 100644
index 0000000..11d22b4
--- /dev/null
+++ b/internals/testsupport-internal/src/main/docker/cassandra/Dockerfile
@@ -0,0 +1,16 @@
+# 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.
+
+FROM @cassandra@


Mime
View raw message