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 2015/08/26 17:45:18 UTC

[15/24] zest-java git commit: ZEST-118; Massive update of removing the Iterable<> use for type manipulation in the runtime internals and all public APIs of that.

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/AbstractSQLStartup.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/AbstractSQLStartup.java b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/AbstractSQLStartup.java
index 8bb35ac..4d44cde 100644
--- a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/AbstractSQLStartup.java
+++ b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/AbstractSQLStartup.java
@@ -37,12 +37,10 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.function.Function;
-import java.util.function.Predicate;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 import javax.sql.DataSource;
-import org.apache.zest.api.association.AssociationDescriptor;
 import org.apache.zest.api.common.Optional;
 import org.apache.zest.api.common.QualifiedName;
 import org.apache.zest.api.composite.CompositeDescriptor;
@@ -72,6 +70,7 @@ import org.apache.zest.index.sql.support.common.RebuildingStrategy;
 import org.apache.zest.index.sql.support.common.ReindexingStrategy;
 import org.apache.zest.library.sql.common.SQLConfiguration;
 import org.apache.zest.library.sql.common.SQLUtil;
+import org.apache.zest.spi.entitystore.EntityStoreException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.sql.generation.api.grammar.builders.definition.TableElementListBuilder;
@@ -93,7 +92,6 @@ import org.sql.generation.api.grammar.modification.InsertStatement;
 import org.sql.generation.api.grammar.query.QueryExpression;
 import org.sql.generation.api.vendor.SQLVendor;
 
-import static org.apache.zest.functional.Iterables.first;
 import static org.apache.zest.index.sql.support.common.DBNames.ALL_QNAMES_TABLE_NAME;
 import static org.apache.zest.index.sql.support.common.DBNames.ALL_QNAMES_TABLE_PK_COLUMN_NAME;
 import static org.apache.zest.index.sql.support.common.DBNames.APP_VERSION_PK_COLUMN_NAME;
@@ -202,11 +200,11 @@ public abstract class AbstractSQLStartup
         LOGGER.debug( "Will use '{}' as schema name", schemaName );
 
         this._state.schemaName().set( schemaName );
-        this._state.entityTypePKs().set( new HashMap<String, Integer>() );
-        this._state.usedClassesPKs().set( new HashMap<CompositeDescriptor, Integer>() );
-        this._state.entityUsedQNames().set( new HashMap<EntityDescriptor, Set<QualifiedName>>() );
-        this._state.qNameInfos().set( new HashMap<QualifiedName, QNameInfo>() );
-        this._state.enumPKs().set( new HashMap<String, Integer>() );
+        this._state.entityTypePKs().set( new HashMap<>() );
+        this._state.usedClassesPKs().set( new HashMap<>() );
+        this._state.entityUsedQNames().set( new HashMap<>() );
+        this._state.qNameInfos().set( new HashMap<>() );
+        this._state.enumPKs().set( new HashMap<>() );
 
         Connection connection = this._dataSource.getConnection();
         try
@@ -314,45 +312,24 @@ public abstract class AbstractSQLStartup
         this._state.javaTypes2SQLTypes().set( jdbcTypes );
 
         this._customizableTypes = new HashMap<>();
-        this._customizableTypes.put( //
-            String.class, //
-            new SQLTypeCustomizer()
-        {
-            @Override
-            public SQLDataType customizeType( Type propertyType, SQLTypeInfo sqlTypeInfo )
-            {
-                return _vendor.getDataTypeFactory().sqlVarChar( sqlTypeInfo.maxLength() );
-            }
-            } //
+        this._customizableTypes.put(
+            String.class,
+            ( propertyType, sqlTypeInfo ) -> _vendor.getDataTypeFactory().sqlVarChar( sqlTypeInfo.maxLength() )
         );
-        this._customizableTypes.put( //
-            BigInteger.class, //
-            new SQLTypeCustomizer()
-        {
-            @Override
-            public SQLDataType customizeType( Type propertyType, SQLTypeInfo sqlTypeInfo )
-            {
-                return _vendor.getDataTypeFactory().decimal( sqlTypeInfo.maxLength() );
-            }
-            } //
+        this._customizableTypes.put(
+            BigInteger.class,
+            ( propertyType, sqlTypeInfo ) -> _vendor.getDataTypeFactory().decimal( sqlTypeInfo.maxLength() )
         );
-        this._customizableTypes.put( //
-            BigDecimal.class, //
-            new SQLTypeCustomizer()
-        {
-            @Override
-            public SQLDataType customizeType( Type propertyType, SQLTypeInfo sqlTypeInfo )
-            {
-                return _vendor.getDataTypeFactory().decimal( sqlTypeInfo.maxLength() );
-            }
-            } //
+        this._customizableTypes.put(
+            BigDecimal.class,
+            ( propertyType, sqlTypeInfo ) -> _vendor.getDataTypeFactory().decimal( sqlTypeInfo.maxLength() )
         );
     }
 
     protected void checkSchemaName( String schemaName )
     {
         // By default, we accept alphanumeric strings with underscores in them
-        if( !Pattern.matches( "^\\p{L}(\\_|\\p{L}|\\p{N})*$", schemaName ) )
+        if( !Pattern.matches( "^\\p{L}(_|\\p{L}|\\p{N})*$", schemaName ) )
         {
             throw new IllegalStateException( "Illegal schema name: " + schemaName + "." );
         }
@@ -427,7 +404,7 @@ public abstract class AbstractSQLStartup
         else
         {
             this.testRequiredCapabilities( connection );
-            this.readAppMetadataFromDB( connection, appInfo.entityDescriptors );
+            this.readAppMetadataFromDB( connection );
             LOGGER.debug( "Application metadata loaded from database" );
         }
 
@@ -494,21 +471,21 @@ public abstract class AbstractSQLStartup
                     .setTableName( t.tableName( schemaName, USED_CLASSES_TABLE_NAME ) )
                     .setTableContentsSource(
                         d.createTableElementListBuilder()
-                        .addTableElement( d.createColumnDefinition( USED_CLASSES_TABLE_PK_COLUMN_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( USED_CLASSES_TABLE_PK_COLUMN_NAME, this._primitiveTypes
                                 .get( Integer.class ), false ) )
-                        .addTableElement( d.createColumnDefinition( USED_CLASSES_TABLE_CLASS_NAME_COLUMN_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( USED_CLASSES_TABLE_CLASS_NAME_COLUMN_NAME, this._primitiveTypes
                                 .get( String.class ), false ) )
-                        .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
-                                .setUniqueness( UniqueSpecification.PRIMARY_KEY )
-                                .addColumns( USED_CLASSES_TABLE_PK_COLUMN_NAME )
-                                .createExpression()
+                            .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
+                                                                                     .setUniqueness( UniqueSpecification.PRIMARY_KEY )
+                                                                                     .addColumns( USED_CLASSES_TABLE_PK_COLUMN_NAME )
+                                                                                     .createExpression()
                             ) )
-                        .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
-                                .setUniqueness( UniqueSpecification.UNIQUE )
-                                .addColumns( USED_CLASSES_TABLE_CLASS_NAME_COLUMN_NAME )
-                                .createExpression()
+                            .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
+                                                                                     .setUniqueness( UniqueSpecification.UNIQUE )
+                                                                                     .addColumns( USED_CLASSES_TABLE_CLASS_NAME_COLUMN_NAME )
+                                                                                     .createExpression()
                             ) )
-                        .createExpression()
+                            .createExpression()
                     )
                     .createExpression()
                 )
@@ -522,21 +499,21 @@ public abstract class AbstractSQLStartup
                     .setTableName( t.tableName( schemaName, ENTITY_TYPES_TABLE_NAME ) )
                     .setTableContentsSource(
                         d.createTableElementListBuilder()
-                        .addTableElement( d.createColumnDefinition( ENTITY_TYPES_TABLE_PK_COLUMN_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( ENTITY_TYPES_TABLE_PK_COLUMN_NAME, this._primitiveTypes
                                 .get( ENTITY_TYPE_PK_TYPE ), false ) )
-                        .addTableElement( d.createColumnDefinition( ENTITY_TYPES_TABLE_TYPE_NAME_COLUMN_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( ENTITY_TYPES_TABLE_TYPE_NAME_COLUMN_NAME, this._primitiveTypes
                                 .get( String.class ), false ) )
-                        .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
-                                .setUniqueness( UniqueSpecification.PRIMARY_KEY )
-                                .addColumns( ENTITY_TYPES_TABLE_PK_COLUMN_NAME )
-                                .createExpression()
+                            .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
+                                                                                     .setUniqueness( UniqueSpecification.PRIMARY_KEY )
+                                                                                     .addColumns( ENTITY_TYPES_TABLE_PK_COLUMN_NAME )
+                                                                                     .createExpression()
                             ) )
-                        .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
-                                .setUniqueness( UniqueSpecification.UNIQUE )
-                                .addColumns( ENTITY_TYPES_TABLE_TYPE_NAME_COLUMN_NAME )
-                                .createExpression()
+                            .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
+                                                                                     .setUniqueness( UniqueSpecification.UNIQUE )
+                                                                                     .addColumns( ENTITY_TYPES_TABLE_TYPE_NAME_COLUMN_NAME )
+                                                                                     .createExpression()
                             ) )
-                        .createExpression()
+                            .createExpression()
                     )
                     .createExpression()
                 )
@@ -550,27 +527,27 @@ public abstract class AbstractSQLStartup
                     .setTableName( t.tableName( schemaName, ENTITY_TABLE_NAME ) )
                     .setTableContentsSource(
                         d.createTableElementListBuilder()
-                        .addTableElement( d.createColumnDefinition( ENTITY_TABLE_PK_COLUMN_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( ENTITY_TABLE_PK_COLUMN_NAME, this._primitiveTypes
                                 .get( ENTITY_PK_TYPE ), false, AutoGenerationPolicy.BY_DEFAULT ) )
-                        .addTableElement( d.createColumnDefinition( ENTITY_TABLE_IDENTITY_COLUMN_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( ENTITY_TABLE_IDENTITY_COLUMN_NAME, this._primitiveTypes
                                 .get( String.class ), false ) )
-                        .addTableElement( d.createColumnDefinition( ENTITY_TABLE_MODIFIED_COLUMN_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( ENTITY_TABLE_MODIFIED_COLUMN_NAME, this._primitiveTypes
                                 .get( Date.class ), false ) )
-                        .addTableElement( d.createColumnDefinition( ENTITY_TABLE_VERSION_COLUMN_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( ENTITY_TABLE_VERSION_COLUMN_NAME, this._primitiveTypes
                                 .get( String.class ), false ) )
-                        .addTableElement( d.createColumnDefinition( ENTITY_TABLE_APPLICATION_VERSION_COLUMN_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( ENTITY_TABLE_APPLICATION_VERSION_COLUMN_NAME, this._primitiveTypes
                                 .get( String.class ), false ) )
-                        .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
-                                .setUniqueness( UniqueSpecification.PRIMARY_KEY )
-                                .addColumns( ENTITY_TABLE_PK_COLUMN_NAME )
-                                .createExpression()
+                            .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
+                                                                                     .setUniqueness( UniqueSpecification.PRIMARY_KEY )
+                                                                                     .addColumns( ENTITY_TABLE_PK_COLUMN_NAME )
+                                                                                     .createExpression()
                             ) )
-                        .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
-                                .setUniqueness( UniqueSpecification.UNIQUE )
-                                .addColumns( ENTITY_TABLE_IDENTITY_COLUMN_NAME )
-                                .createExpression()
+                            .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
+                                                                                     .setUniqueness( UniqueSpecification.UNIQUE )
+                                                                                     .addColumns( ENTITY_TABLE_IDENTITY_COLUMN_NAME )
+                                                                                     .createExpression()
                             ) )
-                        .createExpression()
+                            .createExpression()
                     )
                     .createExpression()
                 )
@@ -582,31 +559,31 @@ public abstract class AbstractSQLStartup
                 .setTableName( t.tableName( schemaName, ENTITY_TYPES_JOIN_TABLE_NAME ) )
                 .setTableContentsSource(
                     d.createTableElementListBuilder()
-                    .addTableElement( d.createColumnDefinition( ENTITY_TABLE_PK_COLUMN_NAME, this._primitiveTypes
+                        .addTableElement( d.createColumnDefinition( ENTITY_TABLE_PK_COLUMN_NAME, this._primitiveTypes
                             .get( ENTITY_PK_TYPE ), false ) )
-                    .addTableElement( d.createColumnDefinition( ENTITY_TYPES_TABLE_PK_COLUMN_NAME, this._primitiveTypes
+                        .addTableElement( d.createColumnDefinition( ENTITY_TYPES_TABLE_PK_COLUMN_NAME, this._primitiveTypes
                             .get( ENTITY_TYPE_PK_TYPE ), false ) )
-                    .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
-                            .setUniqueness( UniqueSpecification.PRIMARY_KEY )
-                            .addColumns( ENTITY_TABLE_PK_COLUMN_NAME, ENTITY_TYPES_TABLE_PK_COLUMN_NAME )
-                            .createExpression()
+                        .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
+                                                                                 .setUniqueness( UniqueSpecification.PRIMARY_KEY )
+                                                                                 .addColumns( ENTITY_TABLE_PK_COLUMN_NAME, ENTITY_TYPES_TABLE_PK_COLUMN_NAME )
+                                                                                 .createExpression()
                         ) )
-                    .addTableElement( d.createTableConstraintDefinition( d.createForeignKeyConstraintBuilder()
-                            .addSourceColumns( ENTITY_TABLE_PK_COLUMN_NAME )
-                            .setTargetTableName( t.tableName( schemaName, ENTITY_TABLE_NAME ) )
-                            .addTargetColumns( ENTITY_TABLE_PK_COLUMN_NAME )
-                            .setOnDelete( ReferentialAction.CASCADE )
-                            .setOnUpdate( ReferentialAction.CASCADE )
-                            .createExpression(), ConstraintCharacteristics.INITIALLY_DEFERRED_DEFERRABLE
+                        .addTableElement( d.createTableConstraintDefinition( d.createForeignKeyConstraintBuilder()
+                                                                                 .addSourceColumns( ENTITY_TABLE_PK_COLUMN_NAME )
+                                                                                 .setTargetTableName( t.tableName( schemaName, ENTITY_TABLE_NAME ) )
+                                                                                 .addTargetColumns( ENTITY_TABLE_PK_COLUMN_NAME )
+                                                                                 .setOnDelete( ReferentialAction.CASCADE )
+                                                                                 .setOnUpdate( ReferentialAction.CASCADE )
+                                                                                 .createExpression(), ConstraintCharacteristics.INITIALLY_DEFERRED_DEFERRABLE
                         ) )
-                    .addTableElement( d.createTableConstraintDefinition( d.createForeignKeyConstraintBuilder()
-                            .addSourceColumns( ENTITY_TYPES_TABLE_PK_COLUMN_NAME )
-                            .setTargetTableName( t.tableName( schemaName, ENTITY_TYPES_TABLE_NAME ) )
-                            .addTargetColumns( ENTITY_TYPES_TABLE_PK_COLUMN_NAME )
-                            .setOnDelete( ReferentialAction.RESTRICT )
-                            .setOnDelete( ReferentialAction.CASCADE )
-                            .createExpression(), ConstraintCharacteristics.NOT_DEFERRABLE ) )
-                    .createExpression()
+                        .addTableElement( d.createTableConstraintDefinition( d.createForeignKeyConstraintBuilder()
+                                                                                 .addSourceColumns( ENTITY_TYPES_TABLE_PK_COLUMN_NAME )
+                                                                                 .setTargetTableName( t.tableName( schemaName, ENTITY_TYPES_TABLE_NAME ) )
+                                                                                 .addTargetColumns( ENTITY_TYPES_TABLE_PK_COLUMN_NAME )
+                                                                                 .setOnDelete( ReferentialAction.RESTRICT )
+                                                                                 .setOnDelete( ReferentialAction.CASCADE )
+                                                                                 .createExpression(), ConstraintCharacteristics.NOT_DEFERRABLE ) )
+                        .createExpression()
                 ).createExpression()
                 .toString()
             );
@@ -617,16 +594,16 @@ public abstract class AbstractSQLStartup
                     .setTableName( t.tableName( schemaName, ENUM_LOOKUP_TABLE_NAME ) )
                     .setTableContentsSource(
                         d.createTableElementListBuilder()
-                        .addTableElement( d.createColumnDefinition( ENUM_LOOKUP_TABLE_PK_COLUMN_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( ENUM_LOOKUP_TABLE_PK_COLUMN_NAME, this._primitiveTypes
                                 .get( Integer.class ), false ) )
-                        .addTableElement( d.createColumnDefinition( ENUM_LOOKUP_TABLE_ENUM_VALUE_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( ENUM_LOOKUP_TABLE_ENUM_VALUE_NAME, this._primitiveTypes
                                 .get( String.class ), false ) )
-                        .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
-                                .setUniqueness( UniqueSpecification.PRIMARY_KEY )
-                                .addColumns( ENUM_LOOKUP_TABLE_PK_COLUMN_NAME )
-                                .createExpression()
+                            .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
+                                                                                     .setUniqueness( UniqueSpecification.PRIMARY_KEY )
+                                                                                     .addColumns( ENUM_LOOKUP_TABLE_PK_COLUMN_NAME )
+                                                                                     .createExpression()
                             ) )
-                        .createExpression()
+                            .createExpression()
                     )
                     .createExpression()
                 )
@@ -640,16 +617,16 @@ public abstract class AbstractSQLStartup
                     .setTableName( t.tableName( schemaName, USED_QNAMES_TABLE_NAME ) )
                     .setTableContentsSource(
                         d.createTableElementListBuilder()
-                        .addTableElement( d.createColumnDefinition( USED_QNAMES_TABLE_QNAME_COLUMN_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( USED_QNAMES_TABLE_QNAME_COLUMN_NAME, this._primitiveTypes
                                 .get( String.class ), false ) )
-                        .addTableElement( d.createColumnDefinition( USED_QNAMES_TABLE_TABLE_NAME_COLUMN_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( USED_QNAMES_TABLE_TABLE_NAME_COLUMN_NAME, this._primitiveTypes
                                 .get( String.class ), false ) )
-                        .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
-                                .setUniqueness( UniqueSpecification.PRIMARY_KEY )
-                                .addColumns( USED_QNAMES_TABLE_QNAME_COLUMN_NAME, USED_QNAMES_TABLE_TABLE_NAME_COLUMN_NAME )
-                                .createExpression()
+                            .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
+                                                                                     .setUniqueness( UniqueSpecification.PRIMARY_KEY )
+                                                                                     .addColumns( USED_QNAMES_TABLE_QNAME_COLUMN_NAME, USED_QNAMES_TABLE_TABLE_NAME_COLUMN_NAME )
+                                                                                     .createExpression()
                             ) )
-                        .createExpression()
+                            .createExpression()
                     )
                     .createExpression()
                 )
@@ -661,24 +638,26 @@ public abstract class AbstractSQLStartup
                     .setTableName( t.tableName( schemaName, ALL_QNAMES_TABLE_NAME ) )
                     .setTableContentsSource(
                         d.createTableElementListBuilder()
-                        .addTableElement( d.createColumnDefinition( ALL_QNAMES_TABLE_PK_COLUMN_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( ALL_QNAMES_TABLE_PK_COLUMN_NAME, this._primitiveTypes
                                 .get( Integer.class ), false ) )
-                        .addTableElement( d.createColumnDefinition( ENTITY_TABLE_PK_COLUMN_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( ENTITY_TABLE_PK_COLUMN_NAME, this._primitiveTypes
                                 .get( ENTITY_PK_TYPE ), false ) )
-                        .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
-                                .setUniqueness( UniqueSpecification.PRIMARY_KEY )
-                                .addColumns( ALL_QNAMES_TABLE_PK_COLUMN_NAME, ENTITY_TABLE_PK_COLUMN_NAME )
-                                .createExpression()
+                            .addTableElement( d.createTableConstraintDefinition(
+                                d.createUniqueConstraintBuilder()
+                                    .setUniqueness( UniqueSpecification.PRIMARY_KEY )
+                                    .addColumns( ALL_QNAMES_TABLE_PK_COLUMN_NAME, ENTITY_TABLE_PK_COLUMN_NAME )
+                                    .createExpression()
                             ) )
-                        .addTableElement( d.createTableConstraintDefinition( d.createForeignKeyConstraintBuilder()
-                                .addSourceColumns( ENTITY_TABLE_PK_COLUMN_NAME )
-                                .setTargetTableName( t.tableName( schemaName, ENTITY_TABLE_NAME ) )
-                                .addTargetColumns( ENTITY_TABLE_PK_COLUMN_NAME )
-                                .setOnUpdate( ReferentialAction.CASCADE )
-                                .setOnDelete( ReferentialAction.CASCADE )
-                                .createExpression(), ConstraintCharacteristics.INITIALLY_DEFERRED_DEFERRABLE
+                            .addTableElement( d.createTableConstraintDefinition(
+                                d.createForeignKeyConstraintBuilder()
+                                    .addSourceColumns( ENTITY_TABLE_PK_COLUMN_NAME )
+                                    .setTargetTableName( t.tableName( schemaName, ENTITY_TABLE_NAME ) )
+                                    .addTargetColumns( ENTITY_TABLE_PK_COLUMN_NAME )
+                                    .setOnUpdate( ReferentialAction.CASCADE )
+                                    .setOnDelete( ReferentialAction.CASCADE )
+                                    .createExpression(), ConstraintCharacteristics.INITIALLY_DEFERRED_DEFERRABLE
                             ) )
-                        .createExpression()
+                            .createExpression()
                     )
                     .createExpression()
                 )
@@ -692,14 +671,14 @@ public abstract class AbstractSQLStartup
                     .setTableName( t.tableName( schemaName, APP_VERSION_TABLE_NAME ) )
                     .setTableContentsSource(
                         d.createTableElementListBuilder()
-                        .addTableElement( d.createColumnDefinition( APP_VERSION_PK_COLUMN_NAME, this._primitiveTypes
+                            .addTableElement( d.createColumnDefinition( APP_VERSION_PK_COLUMN_NAME, this._primitiveTypes
                                 .get( String.class ), false ) )
-                        .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
-                                .setUniqueness( UniqueSpecification.PRIMARY_KEY )
-                                .addColumns( APP_VERSION_PK_COLUMN_NAME )
-                                .createExpression()
+                            .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder()
+                                                                                     .setUniqueness( UniqueSpecification.PRIMARY_KEY )
+                                                                                     .addColumns( APP_VERSION_PK_COLUMN_NAME )
+                                                                                     .createExpression()
                             ) )
-                        .createExpression()
+                            .createExpression()
                     )
                     .createExpression()
                 )
@@ -713,8 +692,8 @@ public abstract class AbstractSQLStartup
                     .setTableName( t.tableName( schemaName, APP_VERSION_TABLE_NAME ) )
                     .setColumnSource(
                         m.columnSourceByValues()
-                        .addValues( vendor.getLiteralFactory().param() )
-                        .createExpression()
+                            .addValues( vendor.getLiteralFactory().param() )
+                            .createExpression()
                     )
                     .createExpression()
                 )
@@ -764,8 +743,7 @@ public abstract class AbstractSQLStartup
         LOGGER.info( "Reindexing complete." );
     }
 
-    private void readAppMetadataFromDB( Connection connection,
-                                        Map<String, EntityDescriptor> entityDescriptors )
+    private void readAppMetadataFromDB( Connection connection )
         throws SQLException
     {
 
@@ -901,13 +879,13 @@ public abstract class AbstractSQLStartup
         LiteralFactory l = vendor.getLiteralFactory();
 
         // @formatter:off
-        PreparedStatement ps = connection.prepareStatement(
+        final PreparedStatement st = connection.prepareStatement(
             vendor.toString(
                 m.insert()
                 .setTableName( t.tableName( schemaName, ENTITY_TYPES_TABLE_NAME ) )
                 .setColumnSource( m.columnSourceByValues()
-                    .addValues( l.param(), l.param() )
-                    .createExpression()
+                                      .addValues( l.param(), l.param() )
+                                      .createExpression()
                 )
                 .createExpression()
             )
@@ -918,36 +896,45 @@ public abstract class AbstractSQLStartup
             Set<String> insertedTypeNames = new HashSet<>();
             for( EntityDescriptor descriptor : appInfo.entityDescriptors.values() )
             {
-                for( Class<?> entityType : descriptor.types() )
+                descriptor.types().forEach( entityType ->
                 {
                     String entityTypeName = entityType.getName();
                     if( !insertedTypeNames.contains( entityTypeName ) )
                     {
                         long pk = tablePKs.get( ENTITY_TYPES_TABLE_NAME );
-                        ps.setInt( 1, (int) pk );
-                        ps.setString( 2, entityTypeName );
-                        ps.executeUpdate();
+                        try
+                        {
+                            st.setInt( 1, (int) pk );
+                            st.setString( 2, entityTypeName );
+                            st.executeUpdate();
+                        }
+                        catch( SQLException e )
+                        {
+                            throw new EntityStoreException( "Underlying exception when setting " + pk, e );
+                        }
                         this._state.entityTypePKs().get().put( entityTypeName, (int) pk );
 //                      this._state.entityTypeInfos().get().put( entityTypeName, new EntityTypeInfo( descriptor, (int) pk ) );
                         tablePKs.put( ENTITY_TYPES_TABLE_NAME, pk + 1 );
+                        insertedTypeNames.add( entityTypeName );
                     }
-                }
+                } );
             }
         }
         finally
         {
-            SQLUtil.closeQuietly( ps );
+            SQLUtil.closeQuietly( st );
         }
 
-        ps = connection.prepareStatement(
+        PreparedStatement ps = connection.prepareStatement(
             vendor.toString(
                 m.insert()
-                .setTableName( t.tableName( schemaName, USED_CLASSES_TABLE_NAME ) )
-                .setColumnSource( m.columnSourceByValues()
-                    .addValues( l.param(), l.param() )
+                    .setTableName( t.tableName( schemaName, USED_CLASSES_TABLE_NAME ) )
+                    .setColumnSource(
+                        m.columnSourceByValues()
+                            .addValues( l.param(), l.param() )
+                            .createExpression()
+                    )
                     .createExpression()
-                )
-                .createExpression()
             )
         );
 
@@ -974,8 +961,8 @@ public abstract class AbstractSQLStartup
                 m.insert()
                 .setTableName( t.tableName( schemaName, ENUM_LOOKUP_TABLE_NAME ) )
                 .setColumnSource( m.columnSourceByValues()
-                    .addValues( l.param(), l.param() )
-                    .createExpression()
+                                      .addValues( l.param(), l.param() )
+                                      .createExpression()
                 )
                 .createExpression()
             )
@@ -1000,7 +987,7 @@ public abstract class AbstractSQLStartup
 
         Statement stmt = connection.createStatement();
         ps = connection.prepareStatement(
-            this.createInsertStatementForQNameInfo( connection, schemaName, vendor ).toString()
+            this.createInsertStatementForQNameInfo( schemaName, vendor ).toString()
         );
 
         try
@@ -1119,8 +1106,7 @@ public abstract class AbstractSQLStartup
         // @formatter:off
     }
 
-    private InsertStatement createInsertStatementForQNameInfo( Connection connection,
-                                                               String schemaName, SQLVendor vendor )
+    private InsertStatement createInsertStatementForQNameInfo( String schemaName, SQLVendor vendor )
     {
         ModificationFactory m = vendor.getModificationFactory();
         TableReferenceFactory t = vendor.getTableReferenceFactory();
@@ -1143,7 +1129,7 @@ public abstract class AbstractSQLStartup
             finalType = ( (ParameterizedType) finalType ).getRawType();
         }
         Class<?> finalClass = (Class<?>) finalType;
-        SQLDataType sqlType = null;
+        SQLDataType sqlType;
         String valueRefTableName = null;
         String valueRefTablePKColumnName = null;
         if( qNameInfo.isFinalTypePrimitive() )
@@ -1198,15 +1184,15 @@ public abstract class AbstractSQLStartup
                     .createExpression()
                 ) );
 
-        if( valueRefTableName != null && valueRefTablePKColumnName != null )
+        if( valueRefTableName != null /* && valueRefTablePKColumnName != null  is always true if valueRefTableName!=null */ )
         {
             builder
                 .addTableElement( d.createTableConstraintDefinition( d
                         .createForeignKeyConstraintBuilder()
                         .addSourceColumns( QNAME_TABLE_VALUE_COLUMN_NAME )
                         .setTargetTableName( t.tableName( this._state
-                                .schemaName()
-                                .get(), valueRefTableName ) )
+                                                              .schemaName()
+                                                              .get(), valueRefTableName ) )
                         .addTargetColumns( valueRefTablePKColumnName )
                         .setOnUpdate( ReferentialAction.CASCADE )
                         .setOnDelete( ReferentialAction.RESTRICT )
@@ -1215,99 +1201,98 @@ public abstract class AbstractSQLStartup
         }
     }
 
-    protected Long getNextPK( Statement stmt, String schemaName, String columnName,
-                              String tableName, Long defaultPK
-    )
-        throws SQLException
-    {
-        ResultSet rs = null;
-        Long result = defaultPK;
-        try
-        {
-            SQLVendor vendor = this._vendor;
-            QueryFactory q = vendor.getQueryFactory();
-            // Let's cheat a bit on SQL functions, so we won't need to use heavy query builder.
-            // Also, currently there are no arithmetic statements
-            rs
-            = stmt.executeQuery(
-                vendor
-                .toString(
-                    q.simpleQueryBuilder()
-                    .select( "COUNT(" + columnName + ")", "MAX(" + columnName + ") + 1" )
-                    .from(
-                        vendor.getTableReferenceFactory().tableName( schemaName, tableName ) )
-                    .createExpression()
-                )
-            );
-            if( rs.next() )
-            {
-                Long count = rs.getLong( 1 );
-                if( count > 0 )
-                {
-                    result = rs.getLong( 2 );
-                }
-            }
-        }
-        finally
-        {
-            SQLUtil.closeQuietly( rs );
-        }
-
-        return result;
-    }
-
-    // This method assume that the schema exists
-    private Boolean isReindexingNeeded( Connection connection )
-        throws SQLException
-    {
-        Boolean result = true;
-        String schemaName = this._state.schemaName().get();
-        Statement stmt = connection.createStatement();
-        try
-        {
-            QueryExpression getAppVersionQuery
-                            = this._vendor
-                .getQueryFactory()
-                .simpleQueryBuilder()
-                .select( APP_VERSION_PK_COLUMN_NAME )
-                .from(
-                    this._vendor.getTableReferenceFactory().tableName( schemaName,
-                                                                       APP_VERSION_TABLE_NAME ) )
-                .createExpression();
-            ResultSet rs = null;
-            try
-            {
-                rs = stmt.executeQuery( this._vendor.toString( getAppVersionQuery ) );
-            }
-            catch( SQLException sqle )
-            {
-                // Sometimes meta data claims table exists, even when it really doesn't exist
-            }
-
-            if( rs != null )
-            {
-                result = !rs.next();
-
-                if( !result )
-                {
-
-                    String dbAppVersion = rs.getString( 1 );
-                    if( this._reindexingStrategy != null )
-                    {
-                        result
-                        = this._reindexingStrategy.reindexingNeeded( dbAppVersion,
-                                                                     this._app.version() );
-                    }
-                }
-            }
-        }
-        finally
-        {
-            SQLUtil.closeQuietly( stmt );
-        }
-
-        return result;
-    }
+//    protected Long getNextPK( Statement stmt, String schemaName, String columnName,
+//                              String tableName, Long defaultPK
+//    )
+//        throws SQLException
+//    {
+//        ResultSet rs = null;
+//        Long result = defaultPK;
+//        try
+//        {
+//            SQLVendor vendor = this._vendor;
+//            QueryFactory q = vendor.getQueryFactory();
+//            // Let's cheat a bit on SQL functions, so we won't need to use heavy query builder.
+//            // Also, currently there are no arithmetic statements
+//            rs = stmt.executeQuery(
+//                vendor
+//                    .toString(
+//                        q.simpleQueryBuilder()
+//                            .select( "COUNT(" + columnName + ")", "MAX(" + columnName + ") + 1" )
+//                            .from(
+//                                vendor.getTableReferenceFactory().tableName( schemaName, tableName ) )
+//                            .createExpression()
+//                    )
+//            );
+//            if( rs.next() )
+//            {
+//                Long count = rs.getLong( 1 );
+//                if( count > 0 )
+//                {
+//                    result = rs.getLong( 2 );
+//                }
+//            }
+//        }
+//        finally
+//        {
+//            SQLUtil.closeQuietly( rs );
+//        }
+//
+//        return result;
+//    }
+
+//    // This method assume that the schema exists
+//    private Boolean isReindexingNeeded( Connection connection )
+//        throws SQLException
+//    {
+//        Boolean result = true;
+//        String schemaName = this._state.schemaName().get();
+//        Statement stmt = connection.createStatement();
+//        try
+//        {
+//            QueryExpression getAppVersionQuery
+//                            = this._vendor
+//                .getQueryFactory()
+//                .simpleQueryBuilder()
+//                .select( APP_VERSION_PK_COLUMN_NAME )
+//                .from(
+//                    this._vendor.getTableReferenceFactory().tableName( schemaName,
+//                                                                       APP_VERSION_TABLE_NAME ) )
+//                .createExpression();
+//            ResultSet rs = null;
+//            try
+//            {
+//                rs = stmt.executeQuery( this._vendor.toString( getAppVersionQuery ) );
+//            }
+//            catch( SQLException sqle )
+//            {
+//                // Sometimes meta data claims table exists, even when it really doesn't exist
+//            }
+//
+//            if( rs != null )
+//            {
+//                result = !rs.next();
+//
+//                if( !result )
+//                {
+//
+//                    String dbAppVersion = rs.getString( 1 );
+//                    if( this._reindexingStrategy != null )
+//                    {
+//                        result
+//                        = this._reindexingStrategy.reindexingNeeded( dbAppVersion,
+//                                                                     this._app.version() );
+//                    }
+//                }
+//            }
+//        }
+//        finally
+//        {
+//            SQLUtil.closeQuietly( stmt );
+//        }
+//
+//        return result;
+//    }
 
     private String readAppVersionFromDB( Connection connection, String schemaName )
         throws SQLException
@@ -1352,27 +1337,27 @@ public abstract class AbstractSQLStartup
         return result;
     }
 
-    private static void clearSchema( Connection connection, String schemaName, SQLVendor vendor )
-        throws SQLException
-    {
-        ModificationFactory m = vendor.getModificationFactory();
-        Statement stmt = null;
-        try
-        {
-            connection.setReadOnly( false );
-            stmt = connection.createStatement();
-            stmt.execute( m.deleteBySearch().setTargetTable( m.createTargetTable(
-                vendor.getTableReferenceFactory().tableName( schemaName, DBNames.ENTITY_TABLE_NAME ) ) )
-                .createExpression().toString()
-            );
-            connection.commit();
-        }
-        finally
-        {
-            SQLUtil.closeQuietly( stmt );
-        }
-    }
-
+//    private static void clearSchema( Connection connection, String schemaName, SQLVendor vendor )
+//        throws SQLException
+//    {
+//        ModificationFactory m = vendor.getModificationFactory();
+//        Statement stmt = null;
+//        try
+//        {
+//            connection.setReadOnly( false );
+//            stmt = connection.createStatement();
+//            stmt.execute( m.deleteBySearch().setTargetTable( m.createTargetTable(
+//                vendor.getTableReferenceFactory().tableName( schemaName, DBNames.ENTITY_TABLE_NAME ) ) )
+//                .createExpression().toString()
+//            );
+//            connection.commit();
+//        }
+//        finally
+//        {
+//            SQLUtil.closeQuietly( stmt );
+//        }
+//    }
+//
     private void destroyNeededSchemaTables( Connection connection, String schemaName, int maxQNameUsed )
         throws SQLException
     {
@@ -1426,8 +1411,8 @@ public abstract class AbstractSQLStartup
                             if( entityDescriptor.queryable() )
                             {
                                 LOGGER.debug( "THIS ONE WORKS: {}", entityDescriptor );
-                                appInfo.entityDescriptors.put( first( entityDescriptor.types() )
-                                    .getName(), entityDescriptor );
+                                appInfo.entityDescriptors.put(
+                                    entityDescriptor.types().findFirst().get().getName(), entityDescriptor );
                             }
                         }
                         else
@@ -1519,17 +1504,9 @@ public abstract class AbstractSQLStartup
                             // TODO this doesn't understand, say, Map<String, String>, or indeed,
                             // any
                             // other Serializable
-                            if( Iterables.matchesAny( new Predicate<Class<?>>()
+                            if( vDesc.types().anyMatch( vTypeClass::isAssignableFrom ) )
                             {
-                                @Override
-                                public boolean test( Class<?> item )
-                                {
-                                    return vTypeClass.isAssignableFrom( item );
-                                }
-                            }, vDesc.types() ) )
-                            {
-                                for( PropertyDescriptor subPDesc : vDesc.state().properties() )
-                                {
+                                vDesc.state().properties().forEach( subPDesc -> {
                                     this.processPropertyTypeForQNames( //
                                         subPDesc, //
                                         qNameInfos, //
@@ -1538,7 +1515,7 @@ public abstract class AbstractSQLStartup
                                         enumValues, //
                                         setQNameTableNameToNull //
                                     );
-                                }
+                                } );
                             }
                         }
                     }
@@ -1563,7 +1540,7 @@ public abstract class AbstractSQLStartup
                                         Boolean setQNameTableNameToNull
     )
     {
-        for( PropertyDescriptor pDesc : entityDesc.state().properties() )
+        entityDesc.state().properties().forEach( pDesc ->
         {
             if( SQLSkeletonUtil.isQueryable( pDesc.accessor() ) )
             {
@@ -1576,7 +1553,7 @@ public abstract class AbstractSQLStartup
                     setQNameTableNameToNull //
                 );
             }
-        }
+        });
     }
 
     private void extractAssociationQNames( EntityDescriptor entityDesc,
@@ -1584,7 +1561,7 @@ public abstract class AbstractSQLStartup
                                            Set<QualifiedName> newQNames, Boolean setQNameTableNameToNull
     )
     {
-        for( AssociationDescriptor assoDesc : entityDesc.state().associations() )
+        entityDesc.state().associations().forEach( assoDesc ->
         {
             if( SQLSkeletonUtil.isQueryable( assoDesc.accessor() ) )
             {
@@ -1603,7 +1580,7 @@ public abstract class AbstractSQLStartup
                     newQNames.add( qName );
                 }
             }
-        }
+        });
     }
 
     private void extractManyAssociationQNames( EntityDescriptor entityDesc,
@@ -1612,7 +1589,7 @@ public abstract class AbstractSQLStartup
                                                Boolean setQNameTableNameToNull
     )
     {
-        for( AssociationDescriptor mAssoDesc : entityDesc.state().manyAssociations() )
+        entityDesc.state().manyAssociations().forEach( mAssoDesc ->
         {
             QualifiedName qName = mAssoDesc.qualifiedName();
             if( SQLSkeletonUtil.isQueryable( mAssoDesc.accessor() ) )
@@ -1624,15 +1601,14 @@ public abstract class AbstractSQLStartup
                         QNameInfo.fromManyAssociation( //
                         qName, //
                         setQNameTableNameToNull ? null
-                        : ( QNAME_TABLE_NAME_PREFIX + extractedQNames
-                           .size() ), //
+                        : ( QNAME_TABLE_NAME_PREFIX + extractedQNames.size() ), //
                         mAssoDesc //
                     ) //
                     );
                     newQNames.add( qName );
                 }
             }
-        }
+        });
     }
 
     protected abstract void testRequiredCapabilities( Connection connection )
@@ -1651,8 +1627,8 @@ public abstract class AbstractSQLStartup
             stmt.execute( this._vendor.toString( this._vendor.getManipulationFactory()
                 .createDropTableOrViewStatement(
                     this._vendor
-                    .getTableReferenceFactory()
-                    .tableName( schemaName, tableName ), ObjectType.TABLE,
+                        .getTableReferenceFactory()
+                        .tableName( schemaName, tableName ), ObjectType.TABLE,
                     DropBehaviour.CASCADE
                 ) ) );
             result = true;
@@ -1686,14 +1662,8 @@ public abstract class AbstractSQLStartup
                + DESCRIPTOR_COMPONENT_SEPARATOR_END + DESCRIPTOR_COMPONENT_SEPARATOR_START
                + module.name() + DESCRIPTOR_COMPONENT_SEPARATOR_END
                + DESCRIPTOR_COMPONENT_SEPARATOR_START
-               + Iterables.toString( descriptor.types(), new Function<Class<?>, String>()
-        {
-            @Override
-            public String apply( Class<?> item )
-            {
-                return item.getName();
-            }
-        }, DESCRIPTOR_TYPE_SEPARATOR ) + DESCRIPTOR_COMPONENT_SEPARATOR_END;
+               + descriptor.types().map( Object::toString ).collect( Collectors.joining( DESCRIPTOR_TYPE_SEPARATOR ) )
+               + DESCRIPTOR_COMPONENT_SEPARATOR_END;
     }
 
     protected static <TCompositeDescriptor extends CompositeDescriptor> TCompositeDescriptor
@@ -1734,15 +1704,8 @@ public abstract class AbstractSQLStartup
                 else if( descriptorClass.isAssignableFrom( visited.getClass() ) )
                 {
                     CompositeDescriptor desc = (CompositeDescriptor) visited;
-                    if( classNames.equals( new HashSet<>( Iterables.toList( Iterables.map(
-                        new Function<Class<?>, String>()
-                        {
-                            @Override
-                            public String apply( Class<?> from )
-                            {
-                                return from.getName();
-                            }
-                        }, desc.types() ) ) ) ) )
+                    Set<String> names = desc.types().map( Class::getName ).collect( Collectors.toSet() );
+                    if( classNames.equals( names ) )
                     {
                         result[0] = desc;
                         thisResult = false;
@@ -1758,6 +1721,7 @@ public abstract class AbstractSQLStartup
             }
         } );
 
+        //noinspection unchecked
         return (TCompositeDescriptor) result[0];
     }
 

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
index 5c8789f..1bbae97 100644
--- a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
+++ b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
@@ -19,6 +19,7 @@ package org.apache.zest.index.sql.support.skeletons;
 
 import java.util.function.Function;
 import java.util.function.Predicate;
+import java.util.stream.Stream;
 import org.apache.zest.api.association.AssociationDescriptor;
 import org.apache.zest.api.association.AssociationStateDescriptor;
 import org.apache.zest.api.common.QualifiedName;
@@ -29,7 +30,6 @@ import org.apache.zest.api.property.PropertyDescriptor;
 import org.apache.zest.api.type.CollectionType;
 import org.apache.zest.api.type.ValueCompositeType;
 import org.apache.zest.api.type.ValueType;
-import org.apache.zest.functional.Iterables;
 import org.apache.zest.spi.entity.EntityState;
 import org.apache.zest.spi.entity.EntityStatus;
 import org.apache.zest.spi.entity.ManyAssociationState;
@@ -48,15 +48,8 @@ import org.slf4j.LoggerFactory;
 {
     private static final Logger LOGGER = LoggerFactory.getLogger( SQLCompatEntityStateWrapper.class.getName() );
 
-    /* package */ static final Function<EntityState, EntityState> WRAP = new Function<EntityState, EntityState>()
-    {
+    /* package */ static final Function<EntityState, EntityState> WRAP = SQLCompatEntityStateWrapper::new;
 
-        @Override
-        public EntityState apply( EntityState from )
-        {
-            return new SQLCompatEntityStateWrapper( from );
-        }
-    };
     private static final Predicate<PropertyDescriptor> PROPERTY_SPEC = new Predicate<PropertyDescriptor>()
     {
 
@@ -219,7 +212,7 @@ import org.slf4j.LoggerFactory;
         }
 
         @Override
-        public Iterable<Class<?>> mixinTypes()
+        public Stream<Class<?>> mixinTypes()
         {
             return wrappedEntityDescriptor.mixinTypes();
         }
@@ -237,7 +230,7 @@ import org.slf4j.LoggerFactory;
         }
 
         @Override
-        public Iterable<Class<?>> types()
+        public Stream<Class<?>> types()
         {
             return wrappedEntityDescriptor.types();
         }
@@ -315,19 +308,19 @@ import org.slf4j.LoggerFactory;
         }
 
         @Override
-        public Iterable<? extends AssociationDescriptor> associations()
+        public Stream<? extends AssociationDescriptor> associations()
         {
             return wrappedAssociationStateDescriptor.associations();
         }
 
         @Override
-        public Iterable<? extends AssociationDescriptor> manyAssociations()
+        public Stream<? extends AssociationDescriptor> manyAssociations()
         {
             return wrappedAssociationStateDescriptor.manyAssociations();
         }
 
         @Override
-        public Iterable<? extends AssociationDescriptor> namedAssociations()
+        public Stream<? extends AssociationDescriptor> namedAssociations()
         {
             return wrappedAssociationStateDescriptor.namedAssociations();
         }
@@ -347,9 +340,9 @@ import org.slf4j.LoggerFactory;
         }
 
         @Override
-        public Iterable<? extends PropertyDescriptor> properties()
+        public Stream<? extends PropertyDescriptor> properties()
         {
-            return Iterables.filter( PROPERTY_SPEC, wrappedAssociationStateDescriptor.properties() );
+            return wrappedAssociationStateDescriptor.properties().filter( PROPERTY_SPEC );
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/libraries/circuitbreaker/src/main/java/org/apache/zest/library/circuitbreaker/CircuitBreaker.java
----------------------------------------------------------------------
diff --git a/libraries/circuitbreaker/src/main/java/org/apache/zest/library/circuitbreaker/CircuitBreaker.java b/libraries/circuitbreaker/src/main/java/org/apache/zest/library/circuitbreaker/CircuitBreaker.java
index 3cb08f4..379b6c3 100644
--- a/libraries/circuitbreaker/src/main/java/org/apache/zest/library/circuitbreaker/CircuitBreaker.java
+++ b/libraries/circuitbreaker/src/main/java/org/apache/zest/library/circuitbreaker/CircuitBreaker.java
@@ -23,9 +23,6 @@ import java.beans.VetoableChangeListener;
 import java.beans.VetoableChangeSupport;
 import java.util.Date;
 import java.util.function.Predicate;
-import org.apache.zest.functional.Specifications;
-
-import static org.apache.zest.functional.Specifications.not;
 
 /**
  * Implementation of CircuitBreaker pattern
@@ -63,7 +60,7 @@ public class CircuitBreaker
 
     public CircuitBreaker( int threshold, long timeout )
     {
-        this( threshold, timeout, not( Specifications.<Throwable>TRUE() ) ); // Trip on all exceptions as default
+        this( threshold, timeout, ( (Predicate<Throwable>) trip -> true ).negate() ); // Trip on all exceptions as default
     }
 
     public CircuitBreaker()