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:55 UTC

[79/81] [abbrv] zest-java git commit: ZEST-195, ZEST-201 ; Rename of everything else from zest to polygene.

http://git-wip-us.apache.org/repos/asf/zest-java/blob/e0e1d7d4/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/jdbm/JdbmEntityStorePerformanceTest.java
----------------------------------------------------------------------
diff --git a/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/jdbm/JdbmEntityStorePerformanceTest.java b/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/jdbm/JdbmEntityStorePerformanceTest.java
new file mode 100644
index 0000000..047ffef
--- /dev/null
+++ b/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/jdbm/JdbmEntityStorePerformanceTest.java
@@ -0,0 +1,72 @@
+/*
+ *  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.performance.entitystore.jdbm;
+
+import java.io.File;
+import org.apache.derby.iapi.services.io.FileUtil;
+import org.apache.polygene.api.common.Visibility;
+import org.apache.polygene.bootstrap.Assembler;
+import org.apache.polygene.bootstrap.AssemblyException;
+import org.apache.polygene.bootstrap.ModuleAssembly;
+import org.apache.polygene.cache.ehcache.EhCacheConfiguration;
+import org.apache.polygene.cache.ehcache.EhCachePoolService;
+import org.apache.polygene.entitystore.jdbm.JdbmConfiguration;
+import org.apache.polygene.entitystore.jdbm.assembly.JdbmEntityStoreAssembler;
+import org.apache.polygene.test.EntityTestAssembler;
+import org.apache.polygene.test.performance.entitystore.AbstractEntityStorePerformanceTest;
+import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+
+/**
+ * Performance test for JdbmEntityStoreComposite
+ */
+public class JdbmEntityStorePerformanceTest
+    extends AbstractEntityStorePerformanceTest
+{
+    public JdbmEntityStorePerformanceTest()
+    {
+        super( "JdbmEntityStore", createAssembler() );
+    }
+
+    private static Assembler createAssembler()
+    {
+        return new Assembler()
+        {
+            @Override
+            public void assemble( ModuleAssembly module )
+                throws AssemblyException
+            {
+                new JdbmEntityStoreAssembler().assemble( module );
+                new OrgJsonValueSerializationAssembler().assemble( module );
+                ModuleAssembly configModule = module.layer().module( "Config" );
+                configModule.entities( JdbmConfiguration.class ).visibleIn( Visibility.layer );
+                new EntityTestAssembler().assemble( configModule );
+
+                module.services( EhCachePoolService.class );
+                configModule.entities( EhCacheConfiguration.class ).visibleIn( Visibility.layer );
+            }
+        };
+    }
+
+    @Override
+    public void cleanUp()
+        throws Exception
+    {
+        super.cleanUp();
+        FileUtil.removeDirectory( new File( "build/tmp/jdbm" ) );
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/e0e1d7d4/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/memory/MemoryEntityStorePerformanceTest.java
----------------------------------------------------------------------
diff --git a/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/memory/MemoryEntityStorePerformanceTest.java b/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/memory/MemoryEntityStorePerformanceTest.java
new file mode 100644
index 0000000..bd664e1
--- /dev/null
+++ b/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/memory/MemoryEntityStorePerformanceTest.java
@@ -0,0 +1,60 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.polygene.test.performance.entitystore.memory;
+
+import org.apache.polygene.api.mixin.Mixins;
+import org.apache.polygene.bootstrap.Assembler;
+import org.apache.polygene.bootstrap.AssemblyException;
+import org.apache.polygene.bootstrap.ModuleAssembly;
+import org.apache.polygene.entitystore.memory.assembly.MemoryEntityStoreAssembler;
+import org.apache.polygene.entitystore.memory.MemoryEntityStoreService;
+import org.apache.polygene.spi.entitystore.helpers.MapEntityStoreMixin;
+import org.apache.polygene.test.performance.entitystore.AbstractEntityStorePerformanceTest;
+import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+
+public class MemoryEntityStorePerformanceTest
+    extends AbstractEntityStorePerformanceTest
+{
+
+    public MemoryEntityStorePerformanceTest()
+    {
+        super( "MemoryEntityStore", createAssembler() );
+    }
+
+    private static Assembler createAssembler()
+    {
+        return new Assembler()
+        {
+            @Override
+            public void assemble( ModuleAssembly module )
+                throws AssemblyException
+            {
+                new MemoryEntityStoreAssembler().assemble( module );
+                new OrgJsonValueSerializationAssembler().assemble( module );
+            }
+        };
+    }
+
+    // Alternate variant that uses the standard MapEntityStore
+    @Mixins( MapEntityStoreMixin.class )
+    interface MemoryEntityStoreService2
+        extends MemoryEntityStoreService
+    {
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/e0e1d7d4/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/sql/DerbySQLEntityStorePerformanceTest.java
----------------------------------------------------------------------
diff --git a/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/sql/DerbySQLEntityStorePerformanceTest.java b/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/sql/DerbySQLEntityStorePerformanceTest.java
new file mode 100644
index 0000000..d1ea720
--- /dev/null
+++ b/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/sql/DerbySQLEntityStorePerformanceTest.java
@@ -0,0 +1,126 @@
+/*
+ *  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.performance.entitystore.sql;
+
+import java.sql.Connection;
+import java.sql.Statement;
+import javax.sql.DataSource;
+import org.apache.polygene.api.common.Visibility;
+import org.apache.polygene.api.unitofwork.UnitOfWork;
+import org.apache.polygene.api.usecase.UsecaseBuilder;
+import org.apache.polygene.bootstrap.Assembler;
+import org.apache.polygene.bootstrap.AssemblyException;
+import org.apache.polygene.bootstrap.ModuleAssembly;
+import org.apache.polygene.entitystore.sql.assembly.DerbySQLEntityStoreAssembler;
+import org.apache.polygene.entitystore.sql.internal.SQLs;
+import org.apache.polygene.library.sql.assembly.DataSourceAssembler;
+import org.apache.polygene.library.sql.common.SQLConfiguration;
+import org.apache.polygene.library.sql.common.SQLUtil;
+import org.apache.polygene.library.sql.dbcp.DBCPDataSourceServiceAssembler;
+import org.apache.polygene.test.EntityTestAssembler;
+import org.apache.polygene.test.performance.entitystore.AbstractEntityStorePerformanceTest;
+import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+
+/**
+ * Performance test for DerbySQLEntityStore.
+ */
+public class DerbySQLEntityStorePerformanceTest
+    extends AbstractEntityStorePerformanceTest
+{
+
+    public DerbySQLEntityStorePerformanceTest()
+    {
+        super( "DerbySQLEntityStore", createAssembler() );
+    }
+
+    private static Assembler createAssembler()
+    {
+        return new Assembler()
+        {
+            @Override
+            public void assemble( ModuleAssembly module )
+                throws AssemblyException
+            {
+                ModuleAssembly config = module.layer().module( "config" );
+                new EntityTestAssembler().assemble( config );
+
+                new OrgJsonValueSerializationAssembler().assemble( module );
+
+                // DataSourceService
+                new DBCPDataSourceServiceAssembler().
+                    identifiedBy( "derby-datasource-service" ).
+                    visibleIn( Visibility.module ).
+                    withConfig( config, Visibility.layer ).
+                    assemble( module );
+
+                // DataSource
+                new DataSourceAssembler().
+                    withDataSourceServiceIdentity( "derby-datasource-service" ).
+                    identifiedBy( "derby-datasource" ).
+                    withCircuitBreaker().
+                    assemble( module );
+
+                // SQL EntityStore
+                new DerbySQLEntityStoreAssembler().
+                    withConfig( config, Visibility.layer ).
+                    assemble( module );
+            }
+        };
+    }
+
+    @Override
+    protected void cleanUp()
+        throws Exception
+    {
+        if( uowf == null )
+        {
+            return;
+        }
+        UnitOfWork uow = this.uowf.newUnitOfWork( UsecaseBuilder.newUsecase(
+            "Delete " + getClass().getSimpleName() + " test data" ) );
+        try
+        {
+            SQLConfiguration config = uow.get( SQLConfiguration.class,
+                                               DerbySQLEntityStoreAssembler.DEFAULT_ENTITYSTORE_IDENTITY );
+            Connection connection = serviceFinder.findService( DataSource.class ).get().getConnection();
+            String schemaName = config.schemaName().get();
+            if( schemaName == null )
+            {
+                schemaName = SQLs.DEFAULT_SCHEMA_NAME;
+            }
+
+            Statement stmt = null;
+            try
+            {
+                stmt = connection.createStatement();
+                stmt.execute( String.format( "DELETE FROM %s." + SQLs.TABLE_NAME, schemaName ) );
+                connection.commit();
+            }
+            finally
+            {
+                SQLUtil.closeQuietly( stmt );
+            }
+        }
+        finally
+        {
+            uow.discard();
+            super.cleanUp();
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/e0e1d7d4/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/sql/PostgreSQLEntityStorePerformanceTest.java
----------------------------------------------------------------------
diff --git a/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/sql/PostgreSQLEntityStorePerformanceTest.java b/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/sql/PostgreSQLEntityStorePerformanceTest.java
new file mode 100644
index 0000000..e0c2bcc
--- /dev/null
+++ b/tests/performance/src/perf/java/org/apache/polygene/test/performance/entitystore/sql/PostgreSQLEntityStorePerformanceTest.java
@@ -0,0 +1,154 @@
+/*
+ *  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.performance.entitystore.sql;
+
+import java.sql.Connection;
+import java.sql.Statement;
+import org.junit.Ignore;
+import org.apache.polygene.api.common.Visibility;
+import org.apache.polygene.api.structure.Application;
+import org.apache.polygene.api.structure.Module;
+import org.apache.polygene.api.unitofwork.UnitOfWork;
+import org.apache.polygene.api.unitofwork.UnitOfWorkFactory;
+import org.apache.polygene.bootstrap.ApplicationAssemblerAdapter;
+import org.apache.polygene.bootstrap.Assembler;
+import org.apache.polygene.bootstrap.AssemblyException;
+import org.apache.polygene.bootstrap.Energy4Java;
+import org.apache.polygene.bootstrap.ModuleAssembly;
+import org.apache.polygene.entitystore.memory.MemoryEntityStoreService;
+import org.apache.polygene.entitystore.sql.assembly.PostgreSQLEntityStoreAssembler;
+import org.apache.polygene.entitystore.sql.internal.SQLs;
+import org.apache.polygene.library.sql.assembly.DataSourceAssembler;
+import org.apache.polygene.library.sql.common.SQLConfiguration;
+import org.apache.polygene.library.sql.common.SQLUtil;
+import org.apache.polygene.library.sql.dbcp.DBCPDataSourceServiceAssembler;
+import org.apache.polygene.test.performance.entitystore.AbstractEntityStorePerformanceTest;
+
+/**
+ * Performance test for PostgreSQLEntityStore.
+ * <p>
+ * WARN This test is deactivated on purpose, please do not commit it activated.
+ * </p>
+ * <p>
+ * To run it see PostgreSQLEntityStoreTest.
+ * </p>
+ */
+@Ignore( "WARN Tearing down this test is broken!" )
+public class PostgreSQLEntityStorePerformanceTest
+    extends AbstractEntityStorePerformanceTest
+{
+
+    public PostgreSQLEntityStorePerformanceTest()
+    {
+        super( "PostgreSQLEntityStore", createAssembler() );
+    }
+
+    private static Assembler createAssembler()
+    {
+        return new Assembler()
+        {
+            @Override
+            public void assemble( ModuleAssembly module )
+                throws AssemblyException
+            {
+                ModuleAssembly config = module.layer().module( "config" );
+                config.services( MemoryEntityStoreService.class );
+
+                // DataSourceService
+                new DBCPDataSourceServiceAssembler().
+                    identifiedBy( "postgresql-datasource-service" ).
+                    visibleIn( Visibility.module ).
+                    withConfig( config, Visibility.layer ).
+                    assemble( module );
+
+                // DataSource
+                new DataSourceAssembler().
+                    withDataSourceServiceIdentity( "postgresql-datasource-service" ).
+                    identifiedBy( "postgresql-datasource" ).
+                    withCircuitBreaker().
+                    assemble( module );
+
+                // SQL EntityStore
+                new PostgreSQLEntityStoreAssembler().
+                    withConfig( config, Visibility.layer ).
+                    assemble( module );
+            }
+
+        };
+    }
+
+    @Override
+    protected void cleanUp()
+        throws Exception
+    {
+        try
+        {
+            super.cleanUp();
+        }
+        finally
+        {
+
+            Energy4Java polygene = new Energy4Java();
+            Assembler[][][] assemblers = new Assembler[][][]
+            {
+                {
+                    {
+                        createAssembler()
+                    }
+                }
+            };
+            Application application = polygene.newApplication( new ApplicationAssemblerAdapter( assemblers )
+            {
+            } );
+            application.activate();
+
+            Module moduleInstance = application.findModule( "Layer 1", "config" );
+            UnitOfWorkFactory uowf = moduleInstance.unitOfWorkFactory();
+            UnitOfWork uow = uowf.newUnitOfWork();
+            try
+            {
+                SQLConfiguration config = uow.get( SQLConfiguration.class,
+                                                   PostgreSQLEntityStoreAssembler.DEFAULT_ENTITYSTORE_IDENTITY );
+                // TODO fix AbstractEntityStorePerformanceTest to extend from AbstractPolygeneTest
+                Connection connection = null; // SQLUtil.getConnection( this.serviceLocator );
+                String schemaName = config.schemaName().get();
+                if( schemaName == null )
+                {
+                    schemaName = SQLs.DEFAULT_SCHEMA_NAME;
+                }
+
+                Statement stmt = null;
+                try
+                {
+                    stmt = connection.createStatement();
+                    stmt.execute( String.format( "DELETE FROM %s." + SQLs.TABLE_NAME, schemaName ) );
+                    connection.commit();
+                }
+                finally
+                {
+                    SQLUtil.closeQuietly( stmt );
+                }
+            }
+            finally
+            {
+                uow.discard();
+            }
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/e0e1d7d4/tests/performance/src/perf/java/org/apache/polygene/test/performance/indexing/rdf/QueryPerformanceTest.java
----------------------------------------------------------------------
diff --git a/tests/performance/src/perf/java/org/apache/polygene/test/performance/indexing/rdf/QueryPerformanceTest.java b/tests/performance/src/perf/java/org/apache/polygene/test/performance/indexing/rdf/QueryPerformanceTest.java
new file mode 100644
index 0000000..a8e54ee
--- /dev/null
+++ b/tests/performance/src/perf/java/org/apache/polygene/test/performance/indexing/rdf/QueryPerformanceTest.java
@@ -0,0 +1,399 @@
+/*
+ *  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.performance.indexing.rdf;
+
+import java.io.File;
+import org.apache.derby.iapi.services.io.FileUtil;
+import org.apache.polygene.api.query.QueryBuilderFactory;
+import org.apache.polygene.api.unitofwork.UnitOfWorkFactory;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.apache.polygene.api.common.Visibility;
+import org.apache.polygene.api.entity.EntityBuilder;
+import org.apache.polygene.api.entity.EntityComposite;
+import org.apache.polygene.api.injection.scope.Structure;
+import org.apache.polygene.api.mixin.Mixins;
+import org.apache.polygene.api.property.Property;
+import org.apache.polygene.api.query.Query;
+import org.apache.polygene.api.query.QueryBuilder;
+import org.apache.polygene.api.service.ServiceComposite;
+import org.apache.polygene.api.service.ServiceReference;
+import org.apache.polygene.api.structure.Application;
+import org.apache.polygene.api.structure.Module;
+import org.apache.polygene.api.unitofwork.UnitOfWork;
+import org.apache.polygene.api.unitofwork.UnitOfWorkCompletionException;
+import org.apache.polygene.bootstrap.ApplicationAssembler;
+import org.apache.polygene.bootstrap.ApplicationAssembly;
+import org.apache.polygene.bootstrap.ApplicationAssemblyFactory;
+import org.apache.polygene.bootstrap.AssemblyException;
+import org.apache.polygene.bootstrap.Energy4Java;
+import org.apache.polygene.bootstrap.LayerAssembly;
+import org.apache.polygene.bootstrap.ModuleAssembly;
+import org.apache.polygene.entitystore.memory.assembly.MemoryEntityStoreAssembler;
+import org.apache.polygene.index.rdf.assembly.RdfNativeSesameStoreAssembler;
+import org.apache.polygene.index.rdf.indexing.RdfIndexingService;
+import org.apache.polygene.index.rdf.query.SesameExpressions;
+import org.apache.polygene.library.rdf.repository.NativeConfiguration;
+import org.apache.polygene.test.EntityTestAssembler;
+import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+
+import static org.apache.polygene.api.query.QueryExpressions.eq;
+import static org.apache.polygene.api.query.QueryExpressions.templateFor;
+
+@SuppressWarnings( "ResultOfMethodCallIgnored" )
+public class QueryPerformanceTest
+    implements ApplicationAssembler
+{
+    private static final int NUMBER_OF_ENTITIES = 100000;
+    private static final String LAYER_INFRASTRUCTURE = "LAYER_INFRASTRUCTURE";
+    private static final String MODULE_PERSISTENCE = "MODULE_PERSISTENCE";
+    private static final String LAYER_CONFIGURATION = "CONFIGURATION";
+    private static final String LAYER_DOMAIN = "LAYER_DOMAIN";
+    private static final String MODULE_DOMAIN = "MODULE_DOMAIN";
+    private static final String MODULE_CONFIG = "MODULE_CONFIG";
+
+    private Application application;
+    private Module module;
+    private UnitOfWorkFactory uowf;
+    private static final String QUERY1 = "PREFIX ns0: <urn:polygene:type:org.apache.polygene.api.identity.HasIdentity#> \n"
+                                         + "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> \n"
+                                         + "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n"
+                                         + "PREFIX ns1: <urn:polygene:type:org.apache.polygene.test.performance.indexing.rdf.QueryPerformanceTest-Lead#> \n"
+                                         + "SELECT ?entityType ?reference\n"
+                                         + "WHERE {\n"
+                                         + "?entityType rdfs:subClassOf <urn:polygene:type:org.apache.polygene.test.performance.indexing.rdf.QueryPerformanceTest-Lead>. \n"
+                                         + "?entity rdf:type ?entityType. \n"
+                                         + "?entity ns0:reference ?reference. \n"
+                                         + "?entity ns1:name \"Lead64532\". \n"
+                                         + "}";
+    private static final String QUERY2 = "PREFIX ns0: <urn:polygene:type:org.apache.polygene.api.identity.HasIdentity#> \n"
+                                         + "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> \n"
+                                         + "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n"
+                                         + "PREFIX ns1: <urn:polygene:type:org.apache.polygene.test.performance.indexing.rdf.QueryPerformanceTest-Lead#> \n"
+                                         + "SELECT ?entityType ?reference\n"
+                                         + "WHERE {\n"
+                                         + "?entityType rdfs:subClassOf <urn:polygene:type:org.apache.polygene.test.performance.indexing.rdf.QueryPerformanceTest-Lead>. \n"
+                                         + "?entity rdf:type ?entityType. \n"
+                                         + "?entity ns0:reference ?reference. \n"
+                                         + "?entity ns1:name \"Lead98276\". \n"
+                                         + "}";
+    private static final String QUERY3 = "PREFIX ns0: <urn:polygene:type:org.apache.polygene.api.identity.HasIdentity#> \n"
+                                         + "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> \n"
+                                         + "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n"
+                                         + "PREFIX ns1: <urn:polygene:type:org.apache.polygene.test.performance.indexing.rdf.QueryPerformanceTest-Lead#> \n"
+                                         + "SELECT ?entityType ?reference\n"
+                                         + "WHERE {\n"
+                                         + "?entityType rdfs:subClassOf <urn:polygene:type:org.apache.polygene.test.performance.indexing.rdf.QueryPerformanceTest-Lead>. \n"
+                                         + "?entity rdf:type ?entityType. \n"
+                                         + "?entity ns0:reference ?reference. \n"
+                                         + "?entity ns1:name \"Lead2\". \n"
+                                         + "}";
+    private static final String QUERY4 = "PREFIX ns0: <urn:polygene:type:org.apache.polygene.api.identity.HasIdentity#> \n"
+                                         + "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> \n"
+                                         + "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n"
+                                         + "PREFIX ns1: <urn:polygene:type:org.apache.polygene.test.performance.indexing.rdf.QueryPerformanceTest-Lead#> \n"
+                                         + "SELECT ?entityType ?reference\n"
+                                         + "WHERE {\n"
+                                         + "?entityType rdfs:subClassOf <urn:polygene:type:org.apache.polygene.test.performance.indexing.rdf.QueryPerformanceTest-Lead>. \n"
+                                         + "?entity rdf:type ?entityType. \n"
+                                         + "?entity ns0:reference ?reference. \n"
+                                         + "?entity ns1:name \"Lead14332\". \n"
+                                         + "}";
+    private static final String QUERY5 = "PREFIX ns0: <urn:polygene:type:org.apache.polygene.api.identity.HasIdentity#> \n"
+                                         + "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> \n"
+                                         + "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n"
+                                         + "PREFIX ns1: <urn:polygene:type:org.apache.polygene.test.performance.indexing.rdf.QueryPerformanceTest-Lead#> \n"
+                                         + "SELECT ?entityType ?reference\n"
+                                         + "WHERE {\n"
+                                         + "?entityType rdfs:subClassOf <urn:polygene:type:org.apache.polygene.test.performance.indexing.rdf.QueryPerformanceTest-Lead>. \n"
+                                         + "?entity rdf:type ?entityType. \n"
+                                         + "?entity ns0:reference ?reference. \n"
+                                         + "?entity ns1:name \"Lead632\". \n"
+                                         + "}";
+    private File indexingDataDir;
+
+    @Before
+    public void setup()
+        throws Exception
+    {
+        Energy4Java polygene = new Energy4Java();
+        application = polygene.newApplication( this );
+        module = application.findModule( LAYER_DOMAIN, MODULE_DOMAIN );
+        application.activate();
+        indexingDataDir = module.findService( RdfIndexingService.class ).get().dataDir();
+        uowf = module.unitOfWorkFactory();
+    }
+
+    @After
+    public void tearDown()
+        throws Exception
+    {
+        try
+        {
+            if( application != null )
+            {
+                System.out.println( "Shutting Down test." );
+                application.passivate();
+            }
+        }
+        finally
+        {
+            FileUtil.removeDirectory( indexingDataDir );
+        }
+    }
+
+    @Override
+    public ApplicationAssembly assemble( ApplicationAssemblyFactory applicationFactory )
+        throws AssemblyException
+    {
+        ApplicationAssembly applicationAssembly = applicationFactory.newApplicationAssembly();
+        LayerAssembly infra = createInfrastructureLayer( applicationAssembly );
+        LayerAssembly domain = createDomainLayer( applicationAssembly );
+        LayerAssembly config = createConfigurationLayer( applicationAssembly );
+        infra.uses( config );
+        domain.uses( infra );
+        return applicationAssembly;
+    }
+
+    @Test
+    public void testIndexingFluentQueries()
+        throws Exception
+    {
+        LeadRepository leadRepo = populateEntityStore();
+        measureFluentQuery( leadRepo, "Lead64531" );
+        measureFluentQuery( leadRepo, "Lead98275" );
+        measureFluentQuery( leadRepo, "Lead3" );
+        measureFluentQuery( leadRepo, "Lead14331" );
+        measureFluentQuery( leadRepo, "Lead631" );
+    }
+
+    @Test
+    public void testIndexingNamedQueries()
+        throws Exception
+    {
+        LeadRepository leadRepo = populateEntityStore();
+        measureNamedQuery( leadRepo, QUERY1 );
+        measureNamedQuery( leadRepo, QUERY2 );
+        measureNamedQuery( leadRepo, QUERY3 );
+        measureNamedQuery( leadRepo, QUERY4 );
+        measureNamedQuery( leadRepo, QUERY5 );
+    }
+
+    private LeadRepository populateEntityStore()
+        throws UnitOfWorkCompletionException
+    {
+        UnitOfWork uow = uowf.newUnitOfWork();
+        try
+        {
+            LeadRepository leadRepo = module.findService( LeadRepositoryService.class ).get();
+            if( leadRepo.findByName( "Lead99999" ) == null )
+            {
+                ServiceReference<LeadEntityFactoryService> leadFactoryRef = module.findService( LeadEntityFactoryService.class );
+                LeadEntityFactory leadFactory = leadFactoryRef.get();
+                long start, end;
+                start = System.currentTimeMillis();
+                for( int i = 1; i < NUMBER_OF_ENTITIES; i++ )
+                {
+                    if( ( i % 10000 ) == 0 )
+                    {
+                        System.out.print( "\r" + i );
+                        uow.complete();
+                        uow = uowf.newUnitOfWork();
+                    }
+                    leadFactory.create( "Lead" + i );
+                }
+                System.out.println();
+                uow.complete();
+                end = System.currentTimeMillis();
+                System.out.println( "Population time: " + ( end - start ) );
+            }
+            return leadRepo;
+        }
+        finally
+        {
+            if( uow != null && uow.isOpen() )
+            {
+                uow.discard();
+            }
+        }
+    }
+
+    private void measureFluentQuery( LeadRepository leadRepo, String nameOfEntity )
+        throws Exception
+    {
+        long start;
+        long end;
+        try( UnitOfWork uow = uowf.newUnitOfWork() )
+        {
+            start = System.currentTimeMillis();
+            Lead lead = leadRepo.findByName( nameOfEntity );
+            end = System.currentTimeMillis();
+            if( lead == null )
+            {
+                Assert.fail( "Entity was not found or more than one entity was found." );
+                return;
+            }
+            System.out.println( "Lead: " + lead );
+            System.out.println( "Retrieval time of " + lead.name().get() + " by name: " + ( end - start ) );
+            uow.complete();
+        }
+    }
+
+    private void measureNamedQuery( LeadRepository leadRepo, String queryName )
+        throws Exception
+    {
+        long start;
+        long end;
+        try( UnitOfWork uow = uowf.newUnitOfWork() )
+        {
+            start = System.currentTimeMillis();
+            Lead lead = leadRepo.findByFixedQuery( queryName );
+            end = System.currentTimeMillis();
+            if( lead == null )
+            {
+                Assert.fail( "Entity was not found or more than one entity was found." );
+                return;
+            }
+            System.out.println( "Lead: " + lead );
+            System.out.println( "Retrieval time of " + lead.name().get() + " by name: " + ( end - start ) );
+            uow.complete();
+        }
+    }
+
+    private LayerAssembly createDomainLayer( ApplicationAssembly applicationAssembly )
+        throws AssemblyException
+    {
+        LayerAssembly domainLayer = applicationAssembly.layer( LAYER_DOMAIN );
+        ModuleAssembly domainModule = domainLayer.module( MODULE_DOMAIN );
+        domainModule.addServices( LeadRepositoryService.class );
+        domainModule.addServices( LeadEntityFactoryService.class );
+        domainModule.entities( LeadEntity.class );
+        return domainLayer;
+    }
+
+    private LayerAssembly createInfrastructureLayer( ApplicationAssembly applicationAssembly )
+        throws AssemblyException
+    {
+        LayerAssembly infrastructureLayer = applicationAssembly.layer( LAYER_INFRASTRUCTURE );
+
+        // Persistence module
+        ModuleAssembly persistenceModule = infrastructureLayer.module( MODULE_PERSISTENCE );
+
+        // Indexing
+        new RdfNativeSesameStoreAssembler().assemble( persistenceModule );
+
+        // Entity store
+        new OrgJsonValueSerializationAssembler().assemble( persistenceModule );
+        new MemoryEntityStoreAssembler().visibleIn( Visibility.application ).assemble( persistenceModule );
+
+        return infrastructureLayer;
+    }
+
+    private LayerAssembly createConfigurationLayer( ApplicationAssembly applicationAssembly )
+        throws AssemblyException
+    {
+        LayerAssembly layer = applicationAssembly.layer( LAYER_CONFIGURATION );
+        ModuleAssembly configModule = layer.module( MODULE_CONFIG );
+        configModule.entities( NativeConfiguration.class ).visibleIn( Visibility.application );
+        new EntityTestAssembler().assemble( configModule );
+        return layer;
+    }
+
+    public interface Lead
+    {
+        Property<String> name();
+    }
+
+    public interface LeadEntity
+        extends Lead, EntityComposite
+    {
+    }
+
+    @Mixins( LeadEntityFactoryMixin.class )
+    public interface LeadEntityFactoryService
+        extends LeadEntityFactory, ServiceComposite
+    {
+    }
+
+    public interface LeadEntityFactory
+    {
+        Lead create( String name );
+    }
+
+    public static class LeadEntityFactoryMixin
+        implements LeadEntityFactory
+    {
+        @Structure
+        private UnitOfWorkFactory uowf;
+
+        @Override
+        public Lead create( String name )
+        {
+            UnitOfWork uow = uowf.currentUnitOfWork();
+            EntityBuilder<LeadEntity> builder = uow.newEntityBuilder( LeadEntity.class );
+            Lead prototype = builder.instanceFor( LeadEntity.class );
+            prototype.name().set( name );
+            return builder.newInstance();
+        }
+    }
+
+    public interface LeadRepository
+    {
+        Lead findByFixedQuery( String name );
+
+        Lead findByName( String name );
+    }
+
+    @Mixins( LeadRepositoryMixin.class )
+    public interface LeadRepositoryService
+        extends LeadRepository, ServiceComposite
+    {
+    }
+
+    public static class LeadRepositoryMixin
+        implements LeadRepository
+    {
+        @Structure
+        private QueryBuilderFactory qbf;
+
+        @Structure
+        private UnitOfWorkFactory uowf;
+
+        @Override
+        public Lead findByFixedQuery( String queryString )
+        {
+            UnitOfWork uow = uowf.currentUnitOfWork();
+            Query<Lead> query = uow.newQuery( qbf.newQueryBuilder( Lead.class ).where( SesameExpressions.sparql( queryString ) ) );
+            return query.find();
+        }
+
+        @Override
+        public Lead findByName( String name )
+        {
+            UnitOfWork uow = uowf.currentUnitOfWork();
+            QueryBuilder<Lead> builder = qbf.newQueryBuilder( Lead.class );
+            Lead template = templateFor( Lead.class );
+
+            Query<Lead> query = uow.newQuery( builder.where( eq( template.name(), name ) ) );
+            return query.find();
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/e0e1d7d4/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/composite/CompositeCreationPerformanceTest.java
----------------------------------------------------------------------
diff --git a/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/composite/CompositeCreationPerformanceTest.java b/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/composite/CompositeCreationPerformanceTest.java
new file mode 100644
index 0000000..449ecf4
--- /dev/null
+++ b/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/composite/CompositeCreationPerformanceTest.java
@@ -0,0 +1,287 @@
+/*
+ *  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.performance.runtime.composite;
+
+import org.apache.polygene.api.activation.ActivationException;
+import org.apache.polygene.api.composite.TransientBuilderFactory;
+import org.apache.polygene.api.composite.TransientComposite;
+import org.apache.polygene.api.object.ObjectFactory;
+import org.apache.polygene.api.value.ValueBuilderFactory;
+import org.apache.polygene.api.value.ValueComposite;
+import org.apache.polygene.bootstrap.AssemblyException;
+import org.apache.polygene.bootstrap.ModuleAssembly;
+import org.apache.polygene.bootstrap.SingletonAssembler;
+import org.junit.Test;
+
+/**
+ * Tests performance of new composite creation.
+ */
+public class CompositeCreationPerformanceTest
+{
+    @Test
+    public void newInstanceForRegisteredCompositePerformance()
+        throws ActivationException, AssemblyException, InterruptedException
+    {
+        SingletonAssembler assembler = new SingletonAssembler()
+        {
+            @Override
+            public void assemble( ModuleAssembly module )
+                throws AssemblyException
+            {
+                module.transients( AnyComposite.class );
+                module.objects( AnyObject.class );
+                module.values( AnyValue.class );
+            }
+        };
+        int warmups = 10;
+        int runs = 20;
+        long waitBeforeRun = 1000;
+        long waitBetweenRuns = 500;
+        long timeForJavaObject = 0;
+        {
+            // Warmup
+            for( int i = 0; i < warmups; i++ )
+            {
+                testJavaObjectCreationPerformance( false );
+            }
+            Thread.sleep( waitBeforeRun );
+            // Run
+            for( int i = 0; i < runs; i++ )
+            {
+                timeForJavaObject += testJavaObjectCreationPerformance( true );
+                Thread.sleep( waitBetweenRuns );
+            }
+            timeForJavaObject = timeForJavaObject / runs;
+        }
+        long timeForTransientComposite = 0;
+        {
+            TransientBuilderFactory module = assembler.module();
+            // Warmup
+            for( int i = 0; i < warmups; i++ )
+            {
+                testCompositeCreationPerformance( module, false );
+            }
+            Thread.sleep( waitBeforeRun );
+            // Run
+            for( int i = 0; i < runs; i++ )
+            {
+                timeForTransientComposite += testCompositeCreationPerformance( module, true );
+                Thread.sleep( waitBetweenRuns );
+            }
+            timeForTransientComposite = timeForTransientComposite / runs;
+        }
+        long timeForManagedObject = 0;
+        {
+            ObjectFactory objectFactory = assembler.module();
+            // Warmup
+            for( int i = 0; i < warmups; i++ )
+            {
+                testObjectCreationPerformance( objectFactory, false );
+            }
+            Thread.sleep( waitBeforeRun );
+            // Run
+            for( int i = 0; i < runs; i++ )
+            {
+                timeForManagedObject += testObjectCreationPerformance( objectFactory, true );
+                Thread.sleep( waitBetweenRuns );
+            }
+            timeForManagedObject = timeForManagedObject / runs;
+        }
+        long timeForValueComposite = 0;
+        {
+            ValueBuilderFactory valueBuilderFactory = assembler.module();
+            // Warmup
+            for( int i = 0; i < warmups; i++ )
+            {
+                testValueCreationPerformance( valueBuilderFactory, false );
+            }
+            Thread.sleep( waitBeforeRun );
+            // Run
+            for( int i = 0; i < runs; i++ )
+            {
+                timeForValueComposite += testValueCreationPerformance( valueBuilderFactory, true );
+                Thread.sleep( waitBetweenRuns );
+            }
+            timeForValueComposite = timeForValueComposite / runs;
+        }
+
+        long timeForTransientCompositeBuilder = 0;
+        {
+            TransientBuilderFactory module = assembler.module();
+            // Warmup
+            for( int i = 0; i < warmups; i++ )
+            {
+                testCompositeCreationWithBuilderPerformance( module, false );
+            }
+            Thread.sleep( waitBeforeRun );
+            // Run
+            for( int i = 0; i < runs; i++ )
+            {
+                timeForTransientCompositeBuilder += testCompositeCreationWithBuilderPerformance( module, true );
+                Thread.sleep( waitBetweenRuns );
+            }
+            timeForTransientCompositeBuilder = timeForTransientCompositeBuilder / runs;
+        }
+        long timeForValueCompositeBuilder = 0;
+        {
+            ValueBuilderFactory valueBuilderFactory = assembler.module();
+            // Warmup
+            for( int i = 0; i < warmups; i++ )
+            {
+                testValueCreationWithBuilderPerformance( valueBuilderFactory, false );
+            }
+            Thread.sleep( waitBeforeRun );
+            // Run
+            for( int i = 0; i < runs; i++ )
+            {
+                timeForValueCompositeBuilder += testValueCreationWithBuilderPerformance( valueBuilderFactory, true );
+                Thread.sleep( waitBetweenRuns );
+            }
+            timeForValueCompositeBuilder = timeForValueCompositeBuilder / runs;
+        }
+
+        System.out.println( "----" );
+        System.out.println( "Transient: " + ( timeForTransientComposite / timeForJavaObject ) + "x" );
+        System.out.println( "TransientBuilder: " + ( timeForTransientCompositeBuilder / timeForJavaObject ) + "x" );
+        System.out.println( "Value: " + ( timeForValueComposite / timeForJavaObject ) + "x" );
+        System.out.println( "ValueBuilder: " + ( timeForValueCompositeBuilder / timeForJavaObject ) + "x" );
+        System.out.println( "Object: " + ( timeForManagedObject / timeForJavaObject ) + "x" );
+    }
+
+    private long testCompositeCreationPerformance( TransientBuilderFactory module, boolean run )
+    {
+        long start = System.currentTimeMillis();
+        int iter = 1000000;
+        for( int i = 0; i < iter; i++ )
+        {
+            module.newTransient( AnyComposite.class );
+        }
+
+        long end = System.currentTimeMillis();
+        long time = 1000000L * ( end - start ) / iter;
+        if( run )
+        {
+            System.out.println( "Composite Creation Time:" + time + " nanoseconds per composite" );
+        }
+        return time;
+    }
+
+    private long testCompositeCreationWithBuilderPerformance( TransientBuilderFactory module, boolean run )
+    {
+        long start = System.currentTimeMillis();
+        int iter = 1000000;
+        for( int i = 0; i < iter; i++ )
+        {
+            module.newTransientBuilder( AnyComposite.class ).newInstance();
+        }
+
+        long end = System.currentTimeMillis();
+        long time = 1000000L * ( end - start ) / iter;
+        if( run )
+        {
+            System.out.println( "Composite (builder) Creation Time:" + time + " nanoseconds per composite" );
+        }
+        return time;
+    }
+
+    private long testValueCreationPerformance( ValueBuilderFactory valueBuilderFactory, boolean run )
+    {
+        long start = System.currentTimeMillis();
+        int iter = 1000000;
+        for( int i = 0; i < iter; i++ )
+        {
+            valueBuilderFactory.newValue( AnyValue.class );
+        }
+
+        long end = System.currentTimeMillis();
+        long time = 1000000L * ( end - start ) / iter;
+        if( run )
+        {
+            System.out.println( "Value Creation Time:" + time + " nanoseconds per composite" );
+        }
+        return time;
+    }
+
+    private long testValueCreationWithBuilderPerformance( ValueBuilderFactory valueBuilderFactory, boolean run )
+    {
+        long start = System.currentTimeMillis();
+        int iter = 1000000;
+        for( int i = 0; i < iter; i++ )
+        {
+            valueBuilderFactory.newValueBuilder( AnyValue.class ).newInstance();
+        }
+
+        long end = System.currentTimeMillis();
+        long time = 1000000L * ( end - start ) / iter;
+        if( run )
+        {
+            System.out.println( "Value (builder) Creation Time:" + time + " nanoseconds per composite" );
+        }
+        return time;
+    }
+
+    private long testObjectCreationPerformance( ObjectFactory objectFactory, boolean run )
+    {
+        long start = System.currentTimeMillis();
+        int iter = 1000000;
+        for( int i = 0; i < iter; i++ )
+        {
+            objectFactory.newObject( AnyObject.class );
+        }
+
+        long end = System.currentTimeMillis();
+        long time = 1000000L * ( end - start ) / iter;
+        if( run )
+        {
+            System.out.println( "Polygene Object Creation Time:" + time + " nanoseconds per object" );
+        }
+        return time;
+    }
+
+    private long testJavaObjectCreationPerformance( boolean run )
+    {
+        long start = System.currentTimeMillis();
+        int iter = 1000000;
+        for( int i = 0; i < iter; i++ )
+        {
+            new AnyObject();
+        }
+
+        long end = System.currentTimeMillis();
+        long time = 1000000L * ( end - start ) / iter;
+        if( run )
+        {
+            System.out.println( "Java Object Creation Time:" + time + " nanoseconds per object" );
+        }
+        return time;
+    }
+
+    public interface AnyComposite
+        extends TransientComposite
+    {
+    }
+
+    public interface AnyValue
+        extends ValueComposite
+    {
+    }
+
+    public static class AnyObject
+    {
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/e0e1d7d4/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/composite/InvocationPerformanceTest.java
----------------------------------------------------------------------
diff --git a/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/composite/InvocationPerformanceTest.java b/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/composite/InvocationPerformanceTest.java
new file mode 100644
index 0000000..c63e33a
--- /dev/null
+++ b/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/composite/InvocationPerformanceTest.java
@@ -0,0 +1,204 @@
+/*
+ *  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.performance.runtime.composite;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.text.NumberFormat;
+import org.junit.Test;
+import org.apache.polygene.api.composite.TransientBuilder;
+import org.apache.polygene.api.composite.TransientComposite;
+import org.apache.polygene.api.concern.ConcernOf;
+import org.apache.polygene.api.concern.Concerns;
+import org.apache.polygene.api.mixin.Mixins;
+import org.apache.polygene.bootstrap.AssemblyException;
+import org.apache.polygene.bootstrap.ModuleAssembly;
+import org.apache.polygene.test.AbstractPolygeneTest;
+
+/**
+ * Invocation performance test.
+ * <p>
+ * Don't forget to add VM value "-server" before running this test!
+ * </p>
+ * <p>
+ * These tests are very sensitive to warmup of JVM, hence the duplication. Often the first round
+ * is only for getting the code jitted, and the second round is what you want to look at.
+ * </p>
+ */
+public class InvocationPerformanceTest
+    extends AbstractPolygeneTest
+{
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        module.transients( SimpleComposite.class );
+        module.transients( SimpleWithTypedConcernComposite.class );
+        module.transients( SimpleWithGenericConcernComposite.class );
+    }
+
+    @Test
+    public void testInvokeMixin()
+    {
+        // Create instance
+        TransientBuilder<SimpleComposite> builder = transientBuilderFactory.newTransientBuilder( SimpleComposite.class );
+        Simple simple = builder.newInstance();
+
+        for( int i = 0; i < 60000; i++ )
+        {
+            simple.test();
+        }
+
+        int rounds = 10;
+        for( int i = 0; i < rounds; i++ )
+        {
+            System.gc();
+            performanceCheck( simple );
+        }
+    }
+
+    @Test
+    public void testInvokeMixinWithTypedConcern()
+    {
+        // Create instance
+        Simple simple = transientBuilderFactory.newTransient( SimpleWithTypedConcernComposite.class );
+
+        for( int i = 0; i < 60000; i++ )
+        {
+            simple.test();
+        }
+
+        int rounds = 3;
+        for( int i = 0; i < rounds; i++ )
+        {
+            performanceCheck( simple );
+        }
+    }
+
+    @Test
+    public void testInvokeMixinWithGenericConcern()
+    {
+        // Create instance
+        Simple simple = transientBuilderFactory.newTransient( SimpleWithGenericConcernComposite.class );
+
+        for( int i = 0; i < 60000; i++ )
+        {
+            simple.test();
+        }
+
+        int rounds = 3;
+        for( int i = 0; i < rounds; i++ )
+        {
+            performanceCheck( simple );
+        }
+    }
+
+    @Test
+    public void testInvokeMixin2()
+    {
+        testInvokeMixin();
+    }
+
+    @Test
+    public void testInvokeMixinWithTypedConcern2()
+    {
+        testInvokeMixinWithTypedConcern();
+    }
+
+    @Test
+    public void testInvokeMixinWithGenericConcern2()
+    {
+        testInvokeMixinWithGenericConcern();
+    }
+
+    private void performanceCheck( Simple simple )
+    {
+        long count = 10000000L;
+
+        long start = System.currentTimeMillis();
+        for( long i = 0; i < count; i++ )
+        {
+            simple.test();
+        }
+        long end = System.currentTimeMillis();
+        long time = end - start;
+        long callsPerSecond = ( count / time ) * 1000;
+        System.out.println( "Calls per second: " + NumberFormat.getIntegerInstance().format( callsPerSecond ) );
+    }
+
+    @Mixins( SimpleMixin.class )
+    @Concerns( SimpleTypedConcern.class )
+    public interface SimpleWithTypedConcernComposite
+        extends Simple, TransientComposite
+    {
+    }
+
+    @Mixins( SimpleMixin.class )
+    @Concerns( SimpleGenericConcern.class )
+    public interface SimpleWithGenericConcernComposite
+        extends Simple, TransientComposite
+    {
+    }
+
+    @Mixins( SimpleMixin.class )
+    public interface SimpleComposite
+        extends Simple, TransientComposite
+    {
+    }
+
+    public interface Simple
+    {
+        public void test();
+    }
+
+    public static class SimpleMixin
+        implements Simple
+    {
+        long count = 0;
+
+        @Override
+        public void test()
+        {
+            count++; // Do nothing
+        }
+    }
+
+    public static class SimpleTypedConcern
+        extends ConcernOf<Simple>
+        implements Simple
+    {
+        @Override
+        public void test()
+        {
+            next.test();
+        }
+    }
+
+    public static class SimpleGenericConcern
+        extends ConcernOf<InvocationHandler>
+        implements InvocationHandler
+    {
+        @Override
+        public Object invoke( Object o, Method method, Object[] objects )
+            throws Throwable
+        {
+            return next.invoke( o, method, objects );
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/e0e1d7d4/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/composite/PropertyMixinInvocationPerformanceTest.java
----------------------------------------------------------------------
diff --git a/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/composite/PropertyMixinInvocationPerformanceTest.java b/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/composite/PropertyMixinInvocationPerformanceTest.java
new file mode 100644
index 0000000..7508fe2
--- /dev/null
+++ b/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/composite/PropertyMixinInvocationPerformanceTest.java
@@ -0,0 +1,134 @@
+/*
+ *  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.performance.runtime.composite;
+
+import java.text.NumberFormat;
+import java.util.Locale;
+import org.junit.Test;
+import org.apache.polygene.api.common.Optional;
+import org.apache.polygene.api.composite.TransientBuilder;
+import org.apache.polygene.api.composite.TransientComposite;
+import org.apache.polygene.api.injection.scope.State;
+import org.apache.polygene.api.mixin.Mixins;
+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;
+
+/**
+ * PropertyMixin invocation performance test.
+ * <p>
+ * Don't forget to add VM value "-server" before running this test!
+ * </p>
+ */
+public class PropertyMixinInvocationPerformanceTest
+    extends AbstractPolygeneTest
+{
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        module.transients( SimpleComposite.class );
+        module.transients( SimpleComposite2.class );
+    }
+
+    @Test
+    public void testNewInstance()
+    {
+        {
+            TransientBuilder<SimpleComposite> builder = transientBuilderFactory.newTransientBuilder( SimpleComposite.class );
+            SimpleComposite simple = builder.newInstance();
+
+            int rounds = 1;
+            for( int i = 0; i < rounds; i++ )
+            {
+                performanceCheck( simple );
+            }
+        }
+
+        {
+            TransientBuilder<SimpleComposite> builder = transientBuilderFactory.newTransientBuilder( SimpleComposite.class );
+            SimpleComposite simple = builder.newInstance();
+
+            int rounds = 1;
+            for( int i = 0; i < rounds; i++ )
+            {
+                performanceCheck( simple );
+            }
+        }
+    }
+
+    private void performanceCheck( SimpleComposite simple )
+    {
+        long count = 10000000L;
+
+        {
+            long start = System.currentTimeMillis();
+            for( long i = 0; i < count; i++ )
+            {
+                simple.test();
+            }
+            long end = System.currentTimeMillis();
+            long time = end - start;
+            long callsPerSecond = ( count / time ) * 1000;
+            System.out.println( "Accesses per second: "
+                                + NumberFormat.getIntegerInstance( Locale.US ).format( callsPerSecond ) );
+        }
+
+        {
+            long start = System.currentTimeMillis();
+            for( long i = 0; i < count; i++ )
+            {
+                simple.test().get();
+            }
+            long end = System.currentTimeMillis();
+            long time = end - start;
+            long callsPerSecond = ( count / time ) * 1000;
+            System.out.println( "Gets per second: "
+                                + NumberFormat.getIntegerInstance( Locale.US ).format( callsPerSecond ) );
+        }
+    }
+
+    public interface SimpleComposite
+        extends TransientComposite
+    {
+        @Optional
+        Property<String> test();
+    }
+
+    @Mixins( SimpleMixin.class )
+    public interface SimpleComposite2
+        extends SimpleComposite
+    {
+    }
+
+    public abstract static class SimpleMixin
+        implements SimpleComposite2
+    {
+        @State
+        Property<String> test;
+
+        @Override
+        public Property<String> test()
+        {
+            return test;
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/e0e1d7d4/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/object/ObjectCreationPerformanceTest.java
----------------------------------------------------------------------
diff --git a/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/object/ObjectCreationPerformanceTest.java b/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/object/ObjectCreationPerformanceTest.java
new file mode 100644
index 0000000..b995770
--- /dev/null
+++ b/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/object/ObjectCreationPerformanceTest.java
@@ -0,0 +1,71 @@
+/*
+ *  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.performance.runtime.object;
+
+import org.junit.Test;
+import org.apache.polygene.api.activation.ActivationException;
+import org.apache.polygene.api.object.ObjectFactory;
+import org.apache.polygene.bootstrap.AssemblyException;
+import org.apache.polygene.bootstrap.ModuleAssembly;
+import org.apache.polygene.bootstrap.SingletonAssembler;
+
+/**
+ * Tests performance of new object creation.
+ */
+public class ObjectCreationPerformanceTest
+{
+
+    @Test
+    public void newInstanceForRegisteredObjectPerformance()
+        throws ActivationException, AssemblyException
+    {
+        SingletonAssembler assembler = new SingletonAssembler()
+        {
+            @Override
+            public void assemble( ModuleAssembly module )
+                throws AssemblyException
+            {
+                module.objects( AnyObject.class );
+            }
+        };
+        ObjectFactory objectFactory = assembler.module();
+        for( int i = 0; i < 10; i++ )
+        {
+            testPerformance( objectFactory );
+        }
+    }
+
+    private void testPerformance( ObjectFactory objectFactory )
+    {
+        long start = System.currentTimeMillis();
+        int iter = 1000000;
+        for( int i = 0; i < iter; i++ )
+        {
+            objectFactory.newObject( AnyObject.class );
+        }
+
+        long end = System.currentTimeMillis();
+        System.out.println( end - start );
+    }
+
+    public static final class AnyObject
+    {
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/e0e1d7d4/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/service/ServiceInvocationPerformanceTest.java
----------------------------------------------------------------------
diff --git a/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/service/ServiceInvocationPerformanceTest.java b/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/service/ServiceInvocationPerformanceTest.java
new file mode 100644
index 0000000..c599f6e
--- /dev/null
+++ b/tests/performance/src/perf/java/org/apache/polygene/test/performance/runtime/service/ServiceInvocationPerformanceTest.java
@@ -0,0 +1,113 @@
+/*
+ *  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.performance.runtime.service;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.text.NumberFormat;
+import junit.framework.TestCase;
+import org.apache.polygene.api.injection.scope.Service;
+import org.apache.polygene.api.mixin.Mixins;
+import org.apache.polygene.api.service.ServiceComposite;
+import org.apache.polygene.bootstrap.AssemblyException;
+import org.apache.polygene.bootstrap.ModuleAssembly;
+import org.apache.polygene.bootstrap.SingletonAssembler;
+
+public class ServiceInvocationPerformanceTest
+    extends TestCase
+{
+    @Service
+    ServiceInvocationPerformanceTest.MyService service;
+
+    public void testInjectService()
+        throws Exception
+    {
+        SingletonAssembler assembly = new SingletonAssembler()
+        {
+            @Override
+            public void assemble( ModuleAssembly module )
+                throws AssemblyException
+            {
+                module.services( ServiceInvocationPerformanceTest.MyServiceComposite.class );
+                module.objects( ServiceInvocationPerformanceTest.class );
+            }
+        };
+
+        assembly.module().injectTo( this );
+
+        // Warmup
+        for( int i = 0; i < 60000; i++ )
+        {
+            service.test();
+        }
+
+        int rounds = 5;
+        for( int i = 0; i < rounds; i++ )
+        {
+            performanceCheck( service );
+        }
+    }
+
+    private void performanceCheck( MyService simple )
+    {
+        long count = 10000000L;
+
+        long start = System.currentTimeMillis();
+        for( long i = 0; i < count; i++ )
+        {
+            simple.test();
+        }
+        long end = System.currentTimeMillis();
+        long time = end - start;
+        long callsPerSecond = ( count / time ) * 1000;
+        System.out.println( "Calls per second: " + NumberFormat.getIntegerInstance().format( callsPerSecond ) );
+    }
+
+    @Mixins( NoopMixin.class )
+    public static interface MyServiceComposite
+        extends ServiceInvocationPerformanceTest.MyService, ServiceComposite
+    {
+    }
+
+    public static interface MyService
+    {
+        void test();
+    }
+
+    public static class MyServiceMixin
+        implements ServiceInvocationPerformanceTest.MyService
+    {
+        @Override
+        public void test()
+        {
+        }
+    }
+
+    public final static class NoopMixin
+        implements InvocationHandler
+    {
+        @Override
+        public Object invoke( Object object, Method method, Object[] objects )
+            throws Throwable
+        {
+            return null;
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/e0e1d7d4/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/jdbm/JdbmEntityStorePerformanceTest.java
----------------------------------------------------------------------
diff --git a/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/jdbm/JdbmEntityStorePerformanceTest.java b/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/jdbm/JdbmEntityStorePerformanceTest.java
deleted file mode 100644
index 047ffef..0000000
--- a/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/jdbm/JdbmEntityStorePerformanceTest.java
+++ /dev/null
@@ -1,72 +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.performance.entitystore.jdbm;
-
-import java.io.File;
-import org.apache.derby.iapi.services.io.FileUtil;
-import org.apache.polygene.api.common.Visibility;
-import org.apache.polygene.bootstrap.Assembler;
-import org.apache.polygene.bootstrap.AssemblyException;
-import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.cache.ehcache.EhCacheConfiguration;
-import org.apache.polygene.cache.ehcache.EhCachePoolService;
-import org.apache.polygene.entitystore.jdbm.JdbmConfiguration;
-import org.apache.polygene.entitystore.jdbm.assembly.JdbmEntityStoreAssembler;
-import org.apache.polygene.test.EntityTestAssembler;
-import org.apache.polygene.test.performance.entitystore.AbstractEntityStorePerformanceTest;
-import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
-
-/**
- * Performance test for JdbmEntityStoreComposite
- */
-public class JdbmEntityStorePerformanceTest
-    extends AbstractEntityStorePerformanceTest
-{
-    public JdbmEntityStorePerformanceTest()
-    {
-        super( "JdbmEntityStore", createAssembler() );
-    }
-
-    private static Assembler createAssembler()
-    {
-        return new Assembler()
-        {
-            @Override
-            public void assemble( ModuleAssembly module )
-                throws AssemblyException
-            {
-                new JdbmEntityStoreAssembler().assemble( module );
-                new OrgJsonValueSerializationAssembler().assemble( module );
-                ModuleAssembly configModule = module.layer().module( "Config" );
-                configModule.entities( JdbmConfiguration.class ).visibleIn( Visibility.layer );
-                new EntityTestAssembler().assemble( configModule );
-
-                module.services( EhCachePoolService.class );
-                configModule.entities( EhCacheConfiguration.class ).visibleIn( Visibility.layer );
-            }
-        };
-    }
-
-    @Override
-    public void cleanUp()
-        throws Exception
-    {
-        super.cleanUp();
-        FileUtil.removeDirectory( new File( "build/tmp/jdbm" ) );
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/e0e1d7d4/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/memory/MemoryEntityStorePerformanceTest.java
----------------------------------------------------------------------
diff --git a/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/memory/MemoryEntityStorePerformanceTest.java b/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/memory/MemoryEntityStorePerformanceTest.java
deleted file mode 100644
index bd664e1..0000000
--- a/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/memory/MemoryEntityStorePerformanceTest.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.performance.entitystore.memory;
-
-import org.apache.polygene.api.mixin.Mixins;
-import org.apache.polygene.bootstrap.Assembler;
-import org.apache.polygene.bootstrap.AssemblyException;
-import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.entitystore.memory.assembly.MemoryEntityStoreAssembler;
-import org.apache.polygene.entitystore.memory.MemoryEntityStoreService;
-import org.apache.polygene.spi.entitystore.helpers.MapEntityStoreMixin;
-import org.apache.polygene.test.performance.entitystore.AbstractEntityStorePerformanceTest;
-import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
-
-public class MemoryEntityStorePerformanceTest
-    extends AbstractEntityStorePerformanceTest
-{
-
-    public MemoryEntityStorePerformanceTest()
-    {
-        super( "MemoryEntityStore", createAssembler() );
-    }
-
-    private static Assembler createAssembler()
-    {
-        return new Assembler()
-        {
-            @Override
-            public void assemble( ModuleAssembly module )
-                throws AssemblyException
-            {
-                new MemoryEntityStoreAssembler().assemble( module );
-                new OrgJsonValueSerializationAssembler().assemble( module );
-            }
-        };
-    }
-
-    // Alternate variant that uses the standard MapEntityStore
-    @Mixins( MapEntityStoreMixin.class )
-    interface MemoryEntityStoreService2
-        extends MemoryEntityStoreService
-    {
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/e0e1d7d4/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/sql/DerbySQLEntityStorePerformanceTest.java
----------------------------------------------------------------------
diff --git a/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/sql/DerbySQLEntityStorePerformanceTest.java b/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/sql/DerbySQLEntityStorePerformanceTest.java
deleted file mode 100644
index d1ea720..0000000
--- a/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/sql/DerbySQLEntityStorePerformanceTest.java
+++ /dev/null
@@ -1,126 +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.performance.entitystore.sql;
-
-import java.sql.Connection;
-import java.sql.Statement;
-import javax.sql.DataSource;
-import org.apache.polygene.api.common.Visibility;
-import org.apache.polygene.api.unitofwork.UnitOfWork;
-import org.apache.polygene.api.usecase.UsecaseBuilder;
-import org.apache.polygene.bootstrap.Assembler;
-import org.apache.polygene.bootstrap.AssemblyException;
-import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.entitystore.sql.assembly.DerbySQLEntityStoreAssembler;
-import org.apache.polygene.entitystore.sql.internal.SQLs;
-import org.apache.polygene.library.sql.assembly.DataSourceAssembler;
-import org.apache.polygene.library.sql.common.SQLConfiguration;
-import org.apache.polygene.library.sql.common.SQLUtil;
-import org.apache.polygene.library.sql.dbcp.DBCPDataSourceServiceAssembler;
-import org.apache.polygene.test.EntityTestAssembler;
-import org.apache.polygene.test.performance.entitystore.AbstractEntityStorePerformanceTest;
-import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
-
-/**
- * Performance test for DerbySQLEntityStore.
- */
-public class DerbySQLEntityStorePerformanceTest
-    extends AbstractEntityStorePerformanceTest
-{
-
-    public DerbySQLEntityStorePerformanceTest()
-    {
-        super( "DerbySQLEntityStore", createAssembler() );
-    }
-
-    private static Assembler createAssembler()
-    {
-        return new Assembler()
-        {
-            @Override
-            public void assemble( ModuleAssembly module )
-                throws AssemblyException
-            {
-                ModuleAssembly config = module.layer().module( "config" );
-                new EntityTestAssembler().assemble( config );
-
-                new OrgJsonValueSerializationAssembler().assemble( module );
-
-                // DataSourceService
-                new DBCPDataSourceServiceAssembler().
-                    identifiedBy( "derby-datasource-service" ).
-                    visibleIn( Visibility.module ).
-                    withConfig( config, Visibility.layer ).
-                    assemble( module );
-
-                // DataSource
-                new DataSourceAssembler().
-                    withDataSourceServiceIdentity( "derby-datasource-service" ).
-                    identifiedBy( "derby-datasource" ).
-                    withCircuitBreaker().
-                    assemble( module );
-
-                // SQL EntityStore
-                new DerbySQLEntityStoreAssembler().
-                    withConfig( config, Visibility.layer ).
-                    assemble( module );
-            }
-        };
-    }
-
-    @Override
-    protected void cleanUp()
-        throws Exception
-    {
-        if( uowf == null )
-        {
-            return;
-        }
-        UnitOfWork uow = this.uowf.newUnitOfWork( UsecaseBuilder.newUsecase(
-            "Delete " + getClass().getSimpleName() + " test data" ) );
-        try
-        {
-            SQLConfiguration config = uow.get( SQLConfiguration.class,
-                                               DerbySQLEntityStoreAssembler.DEFAULT_ENTITYSTORE_IDENTITY );
-            Connection connection = serviceFinder.findService( DataSource.class ).get().getConnection();
-            String schemaName = config.schemaName().get();
-            if( schemaName == null )
-            {
-                schemaName = SQLs.DEFAULT_SCHEMA_NAME;
-            }
-
-            Statement stmt = null;
-            try
-            {
-                stmt = connection.createStatement();
-                stmt.execute( String.format( "DELETE FROM %s." + SQLs.TABLE_NAME, schemaName ) );
-                connection.commit();
-            }
-            finally
-            {
-                SQLUtil.closeQuietly( stmt );
-            }
-        }
-        finally
-        {
-            uow.discard();
-            super.cleanUp();
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/e0e1d7d4/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/sql/PostgreSQLEntityStorePerformanceTest.java
----------------------------------------------------------------------
diff --git a/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/sql/PostgreSQLEntityStorePerformanceTest.java b/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/sql/PostgreSQLEntityStorePerformanceTest.java
deleted file mode 100644
index e0c2bcc..0000000
--- a/tests/performance/src/perf/java/org/apache/zest/test/performance/entitystore/sql/PostgreSQLEntityStorePerformanceTest.java
+++ /dev/null
@@ -1,154 +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.performance.entitystore.sql;
-
-import java.sql.Connection;
-import java.sql.Statement;
-import org.junit.Ignore;
-import org.apache.polygene.api.common.Visibility;
-import org.apache.polygene.api.structure.Application;
-import org.apache.polygene.api.structure.Module;
-import org.apache.polygene.api.unitofwork.UnitOfWork;
-import org.apache.polygene.api.unitofwork.UnitOfWorkFactory;
-import org.apache.polygene.bootstrap.ApplicationAssemblerAdapter;
-import org.apache.polygene.bootstrap.Assembler;
-import org.apache.polygene.bootstrap.AssemblyException;
-import org.apache.polygene.bootstrap.Energy4Java;
-import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.entitystore.memory.MemoryEntityStoreService;
-import org.apache.polygene.entitystore.sql.assembly.PostgreSQLEntityStoreAssembler;
-import org.apache.polygene.entitystore.sql.internal.SQLs;
-import org.apache.polygene.library.sql.assembly.DataSourceAssembler;
-import org.apache.polygene.library.sql.common.SQLConfiguration;
-import org.apache.polygene.library.sql.common.SQLUtil;
-import org.apache.polygene.library.sql.dbcp.DBCPDataSourceServiceAssembler;
-import org.apache.polygene.test.performance.entitystore.AbstractEntityStorePerformanceTest;
-
-/**
- * Performance test for PostgreSQLEntityStore.
- * <p>
- * WARN This test is deactivated on purpose, please do not commit it activated.
- * </p>
- * <p>
- * To run it see PostgreSQLEntityStoreTest.
- * </p>
- */
-@Ignore( "WARN Tearing down this test is broken!" )
-public class PostgreSQLEntityStorePerformanceTest
-    extends AbstractEntityStorePerformanceTest
-{
-
-    public PostgreSQLEntityStorePerformanceTest()
-    {
-        super( "PostgreSQLEntityStore", createAssembler() );
-    }
-
-    private static Assembler createAssembler()
-    {
-        return new Assembler()
-        {
-            @Override
-            public void assemble( ModuleAssembly module )
-                throws AssemblyException
-            {
-                ModuleAssembly config = module.layer().module( "config" );
-                config.services( MemoryEntityStoreService.class );
-
-                // DataSourceService
-                new DBCPDataSourceServiceAssembler().
-                    identifiedBy( "postgresql-datasource-service" ).
-                    visibleIn( Visibility.module ).
-                    withConfig( config, Visibility.layer ).
-                    assemble( module );
-
-                // DataSource
-                new DataSourceAssembler().
-                    withDataSourceServiceIdentity( "postgresql-datasource-service" ).
-                    identifiedBy( "postgresql-datasource" ).
-                    withCircuitBreaker().
-                    assemble( module );
-
-                // SQL EntityStore
-                new PostgreSQLEntityStoreAssembler().
-                    withConfig( config, Visibility.layer ).
-                    assemble( module );
-            }
-
-        };
-    }
-
-    @Override
-    protected void cleanUp()
-        throws Exception
-    {
-        try
-        {
-            super.cleanUp();
-        }
-        finally
-        {
-
-            Energy4Java polygene = new Energy4Java();
-            Assembler[][][] assemblers = new Assembler[][][]
-            {
-                {
-                    {
-                        createAssembler()
-                    }
-                }
-            };
-            Application application = polygene.newApplication( new ApplicationAssemblerAdapter( assemblers )
-            {
-            } );
-            application.activate();
-
-            Module moduleInstance = application.findModule( "Layer 1", "config" );
-            UnitOfWorkFactory uowf = moduleInstance.unitOfWorkFactory();
-            UnitOfWork uow = uowf.newUnitOfWork();
-            try
-            {
-                SQLConfiguration config = uow.get( SQLConfiguration.class,
-                                                   PostgreSQLEntityStoreAssembler.DEFAULT_ENTITYSTORE_IDENTITY );
-                // TODO fix AbstractEntityStorePerformanceTest to extend from AbstractPolygeneTest
-                Connection connection = null; // SQLUtil.getConnection( this.serviceLocator );
-                String schemaName = config.schemaName().get();
-                if( schemaName == null )
-                {
-                    schemaName = SQLs.DEFAULT_SCHEMA_NAME;
-                }
-
-                Statement stmt = null;
-                try
-                {
-                    stmt = connection.createStatement();
-                    stmt.execute( String.format( "DELETE FROM %s." + SQLs.TABLE_NAME, schemaName ) );
-                    connection.commit();
-                }
-                finally
-                {
-                    SQLUtil.closeQuietly( stmt );
-                }
-            }
-            finally
-            {
-                uow.discard();
-            }
-        }
-    }
-
-}