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/08/19 12:18:53 UTC

[19/25] zest-java git commit: ZEST-156 - removed Scheduler Library, due to serious bug that is nearly impossible to fix.

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/internal/TaskRunner.java
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/internal/TaskRunner.java b/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/internal/TaskRunner.java
deleted file mode 100644
index 94e25b5..0000000
--- a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/internal/TaskRunner.java
+++ /dev/null
@@ -1,115 +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.zest.library.scheduler.internal;
-
-import java.lang.reflect.UndeclaredThrowableException;
-import java.util.concurrent.locks.ReentrantLock;
-import org.apache.zest.api.injection.scope.Structure;
-import org.apache.zest.api.injection.scope.Uses;
-import org.apache.zest.api.unitofwork.UnitOfWork;
-import org.apache.zest.api.unitofwork.UnitOfWorkFactory;
-import org.apache.zest.api.usecase.UsecaseBuilder;
-import org.apache.zest.library.scheduler.Schedule;
-import org.apache.zest.library.scheduler.Task;
-
-public class TaskRunner
-    implements Runnable
-{
-    private static ReentrantLock lock = new ReentrantLock();
-
-    @Structure
-    private UnitOfWorkFactory uowf;
-
-    @Uses
-    private ScheduleTime schedule;
-
-    @Override
-    public void run()
-    {
-        // TODO: (niclas) I am NOT happy with this implementation, requiring 3 UnitOfWorks to be created. 15-20 milliseconds on my MacBook. If there is a better way to detect overrun, two of those might not be needed.
-        UnitOfWork uow = uowf.newUnitOfWork( UsecaseBuilder.newUsecase( "Task Runner initialize" ) );
-        try
-        {
-            lock.lock();
-            Schedule schedule = uow.get( Schedule.class, this.schedule.scheduleIdentity() );
-            if( !schedule.running().get() )  // check for overrun.
-            {
-                try
-                {
-                    schedule.taskStarting();
-                    schedule.running().set( true );
-                    uow.complete();                     // This completion is needed to detect overrun
-
-                    uow = uowf.newUnitOfWork( UsecaseBuilder.newUsecase( "Task Runner" ) );
-                    schedule = uow.get( schedule );     // re-attach the entity to the new UnitOfWork
-                    Task task = schedule.task().get();
-                    lock.unlock();
-                    task.run();
-                    lock.lock();
-                    uow.complete();
-                    uow = uowf.newUnitOfWork( UsecaseBuilder.newUsecase( "Task Runner conclude" ) );
-                    schedule = uow.get( schedule );     // re-attach the entity to the new UnitOfWork
-                    schedule.running().set( false );
-                    schedule.taskCompletedSuccessfully();
-                    schedule.executionCounter().set( schedule.executionCounter().get() + 1 );
-                }
-                catch( RuntimeException ex )
-                {
-                    schedule.running().set( false );
-                    processException( schedule, ex );
-                }
-            }
-            else
-            {
-                schedule.overrun().set( schedule.overrun().get() + 1 );
-            }
-            uow.complete();
-        }
-        catch( Exception e )
-        {
-            e.printStackTrace();
-            throw new UndeclaredThrowableException( e );
-        }
-        finally
-        {
-            uow.discard();
-            try
-            {
-                lock.unlock();
-            }
-            catch( IllegalMonitorStateException e )
-            {
-                // ignore, as it may happen on certain exceptions.
-            }
-        }
-    }
-
-    private void processException( Schedule schedule, RuntimeException ex )
-    {
-        Throwable exception = ex;
-        while( exception instanceof UndeclaredThrowableException )
-        {
-            exception = ( (UndeclaredThrowableException) ex ).getUndeclaredThrowable();
-        }
-        schedule.taskCompletedWithException( exception );
-        schedule.exceptionCounter().set( schedule.exceptionCounter().get() + 1 );
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/internal/package.html
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/internal/package.html b/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/internal/package.html
deleted file mode 100644
index 8ad4911..0000000
--- a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/internal/package.html
+++ /dev/null
@@ -1,24 +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.
-  ~
-  ~
-  -->
-<html>
-    <body>
-        <h2>Scheduler Internals.</h2>
-    </body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/package.html
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/package.html b/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/package.html
deleted file mode 100644
index 88c9599..0000000
--- a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/package.html
+++ /dev/null
@@ -1,24 +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.
-  ~
-  ~
-  -->
-<html>
-    <body>
-        <h2>Scheduler Library.</h2>
-    </body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/schedule/package.html
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/schedule/package.html b/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/schedule/package.html
deleted file mode 100644
index f65aa12..0000000
--- a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/schedule/package.html
+++ /dev/null
@@ -1,24 +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.
-  ~
-  ~
-  -->
-<html>
-    <body>
-        <h2>Scheduler Schedules.</h2>
-    </body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/Timeline.java
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/Timeline.java b/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/Timeline.java
deleted file mode 100644
index fac381d..0000000
--- a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/Timeline.java
+++ /dev/null
@@ -1,75 +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.zest.library.scheduler.timeline;
-
-import java.time.Instant;
-import java.time.ZonedDateTime;
-import org.apache.zest.api.unitofwork.concern.UnitOfWorkPropagation;
-
-/**
- * Timeline allow to browse in past and future Task runs.
- */
-// START SNIPPET: timeline
-public interface Timeline
-{
-// END SNIPPET: timeline
-
-    /**
-     * @param maxResults Maximum number of TimelineRecord to compute
-     *
-     * @return Last past records
-     */
-    @UnitOfWorkPropagation( UnitOfWorkPropagation.Propagation.MANDATORY )
-// START SNIPPET: timeline
-    Iterable<TimelineRecord> getLastRecords( int maxResults );
-// END SNIPPET: timeline
-
-    /**
-     * @param maxResults Maximum number of TimelineRecord to compute
-     *
-     * @return Next running or future records
-     */
-    @UnitOfWorkPropagation( UnitOfWorkPropagation.Propagation.MANDATORY )
-// START SNIPPET: timeline
-    Iterable<TimelineRecord> getNextRecords( int maxResults );
-// END SNIPPET: timeline
-
-    /**
-     * @param from Lower limit
-     * @param to   Upper limit
-     *
-     * @return Records between the given dates
-     */
-    @UnitOfWorkPropagation( UnitOfWorkPropagation.Propagation.MANDATORY )
-// START SNIPPET: timeline
-    Iterable<TimelineRecord> getRecords( ZonedDateTime from, ZonedDateTime to );
-// END SNIPPET: timeline
-
-    /**
-     * @param from Lower limit
-     * @param to   Upper limit
-     *
-     * @return Records between the given dates
-     */
-    @UnitOfWorkPropagation( UnitOfWorkPropagation.Propagation.MANDATORY )
-// START SNIPPET: timeline
-    Iterable<TimelineRecord> getRecords( Instant from, Instant to );
-}
-// END SNIPPET: timeline

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineForScheduleConcern.java
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineForScheduleConcern.java b/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineForScheduleConcern.java
deleted file mode 100644
index 6c50651..0000000
--- a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineForScheduleConcern.java
+++ /dev/null
@@ -1,93 +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.zest.library.scheduler.timeline;
-
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-import java.time.Instant;
-import java.util.List;
-import org.apache.zest.api.concern.ConcernOf;
-import org.apache.zest.api.injection.scope.Structure;
-import org.apache.zest.api.injection.scope.This;
-import org.apache.zest.api.structure.Module;
-import org.apache.zest.api.value.ValueBuilder;
-import org.apache.zest.library.scheduler.Schedule;
-
-public abstract class TimelineForScheduleConcern
-    extends ConcernOf<Schedule>
-    implements Schedule
-{
-    @This
-    private TimelineScheduleState state;
-
-    @Structure
-    private Module module;
-
-    @Override
-    public void taskStarting()
-    {
-        addRecord( TimelineRecordStep.STARTED, "" );
-        next.taskStarting();
-    }
-
-    @Override
-    public void taskCompletedSuccessfully()
-    {
-        addRecord( TimelineRecordStep.SUCCESS, "" );
-        next.taskCompletedSuccessfully();
-    }
-
-    @Override
-    public void taskCompletedWithException( Throwable ex )
-    {
-        TimelineRecordStep step = TimelineRecordStep.FAILURE;
-        String details = "Exception occurred:" + getStackTrace( ex );
-        addRecord( step, details );
-        next.taskCompletedWithException( ex );
-    }
-
-    private void addRecord( TimelineRecordStep step, String details )
-    {
-        ValueBuilder<TimelineRecord> builder = module.newValueBuilder( TimelineRecord.class );
-        TimelineRecord prototype = builder.prototype();
-        prototype.step().set( step );
-        prototype.taskName().set( task().get().name().get() );
-        List<String> tags = task().get().tags().get();
-        prototype.taskTags().set( tags );
-        prototype.timestamp().set( Instant.now() );
-        prototype.scheduleIdentity().set( this.identity().get() );
-        prototype.details().set( details );
-        TimelineRecord record = builder.newInstance();
-        List<TimelineRecord> timelineRecords = state.history().get();
-        timelineRecords.add( record );
-        state.history().set( timelineRecords );
-    }
-
-    private String getStackTrace( Throwable ex )
-    {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream( 1000 );
-        BufferedOutputStream out = new BufferedOutputStream( baos );
-        PrintStream print = new PrintStream( out );
-        ex.printStackTrace( print );
-        print.flush();
-        return baos.toString();
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineRecord.java
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineRecord.java b/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineRecord.java
deleted file mode 100644
index 39108a9..0000000
--- a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineRecord.java
+++ /dev/null
@@ -1,81 +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.zest.library.scheduler.timeline;
-
-import java.time.Instant;
-import java.util.List;
-import org.apache.zest.api.common.UseDefaults;
-import org.apache.zest.api.entity.Queryable;
-import org.apache.zest.api.mixin.Mixins;
-import org.apache.zest.api.property.Property;
-import org.apache.zest.api.value.ValueComposite;
-import org.apache.zest.library.scheduler.Scheduler;
-
-/**
- * Record in {@link Scheduler}'s {@link Timeline}.
- *
- * {@link TimelineRecord}s are {@link Comparable} regarding their {@link TimelineRecord#timestamp()}.
- */
-@Mixins( TimelineRecord.Mixin.class )
-public interface TimelineRecord
-    extends Comparable<TimelineRecord>, ValueComposite
-{
-    /**
-     * @return Identity of the associated {@link Scheduler}
-     */
-    Property<String> scheduleIdentity();
-
-    /**
-     * @return Timestamp of this record
-     */
-    Property<Instant> timestamp();
-
-    /**
-     * @return Name of the associated {@link org.apache.zest.library.scheduler.Task}
-     */
-    Property<String> taskName();
-
-    /**
-     * @return Tags of the associated {@link org.apache.zest.library.scheduler.Task}
-     */
-    @UseDefaults
-    Property<List<String>> taskTags();
-
-    Property<TimelineRecordStep> step();
-
-    /**
-     * @return Details text of this record
-     */
-    @Queryable( false )
-    @UseDefaults
-    Property<String> details();
-
-    abstract class Mixin
-        implements TimelineRecord
-    {
-
-        @Override
-        public int compareTo( TimelineRecord o )
-        {
-            return timestamp().get().compareTo( o.timestamp().get() );
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineRecordStep.java
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineRecordStep.java b/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineRecordStep.java
deleted file mode 100644
index 583a831..0000000
--- a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineRecordStep.java
+++ /dev/null
@@ -1,28 +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.zest.library.scheduler.timeline;
-
-public enum TimelineRecordStep
-{
-    STARTED,
-    SUCCESS,
-    FAILURE,
-    FUTURE
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineScheduleMixin.java
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineScheduleMixin.java b/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineScheduleMixin.java
deleted file mode 100644
index 9143bcf..0000000
--- a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineScheduleMixin.java
+++ /dev/null
@@ -1,141 +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.zest.library.scheduler.timeline;
-
-import java.time.Instant;
-import java.time.ZonedDateTime;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import org.apache.zest.api.injection.scope.Structure;
-import org.apache.zest.api.injection.scope.This;
-import org.apache.zest.api.structure.Module;
-import org.apache.zest.api.value.ValueBuilder;
-import org.apache.zest.library.scheduler.Schedule;
-
-public class TimelineScheduleMixin
-    implements Timeline
-{
-    @Structure
-    private Module module;
-
-    @This
-    private TimelineScheduleState state;
-
-    @This
-    private Schedule me;
-
-    @Override
-    public Iterable<TimelineRecord> getLastRecords( int maxResults )
-    {
-        List<TimelineRecord> timelineRecords = state.history().get();
-        int size = timelineRecords.size();
-        if( size < maxResults )
-        {
-            return Collections.unmodifiableCollection( timelineRecords );
-        }
-        SortedSet<TimelineRecord> result = new TreeSet<>();
-        for( int i = size - maxResults; i < size; i++ )
-        {
-            result.add( timelineRecords.get( i ) );
-        }
-        return result;
-    }
-
-    @Override
-    public Iterable<TimelineRecord> getNextRecords( int maxResults )
-    {
-        SortedSet<TimelineRecord> result = new TreeSet<>();
-        Instant time = Instant.now();
-        for( int i = 0; i < maxResults; i++ )
-        {
-            time = me.nextRun( time );
-            result.add( createFutureRecord( time ) );
-        }
-        return result;
-    }
-
-    @Override
-    public Iterable<TimelineRecord> getRecords( ZonedDateTime from, ZonedDateTime to )
-    {
-        return getRecords( from.toInstant(), to.toInstant() );
-    }
-
-    @Override
-    public Iterable<TimelineRecord> getRecords( Instant from, Instant to )
-    {
-        Instant now = Instant.now();
-        SortedSet<TimelineRecord> result = new TreeSet<>();
-        result.addAll( getPastRecords( from ) );
-        result.addAll( getFutureRecords( now, to ) );
-        return result;
-    }
-
-    private Collection<? extends TimelineRecord> getPastRecords( Instant from )
-    {
-        SortedSet<TimelineRecord> result = new TreeSet<>();
-        List<TimelineRecord> timelineRecords = state.history().get();
-        for( TimelineRecord record : timelineRecords )
-        {
-            Instant timestamp = record.timestamp().get();
-            if( timestamp.isAfter( from ) )
-            {
-                result.add( record );
-            }
-        }
-        return result;
-    }
-
-    private Collection<? extends TimelineRecord> getFutureRecords( Instant now, Instant to )
-    {
-        if( now.isAfter( to ) )
-        {
-            return Collections.emptyList();
-        }
-
-        SortedSet<TimelineRecord> result = new TreeSet<>();
-        Instant time = Instant.now();
-        while( time.isBefore(to) )
-        {
-            time = me.nextRun( time );
-            if( time.isBefore( to ) )
-            {
-                result.add( createFutureRecord( time ) );
-            }
-        }
-        return result;
-    }
-
-    private TimelineRecord createFutureRecord( Instant when )
-    {
-        ValueBuilder<TimelineRecord> builder = module.newValueBuilder( TimelineRecord.class );
-        TimelineRecord prototype = builder.prototype();
-        prototype.step().set( TimelineRecordStep.FUTURE );
-        prototype.taskName().set( me.task().get().name().get() );
-        List<String> tags = me.task().get().tags().get();
-        prototype.taskTags().set( tags );
-        prototype.timestamp().set( when );
-        prototype.scheduleIdentity().set( me.identity().get() );
-        prototype.details().set( "" );
-        return builder.newInstance();
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineScheduleState.java
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineScheduleState.java b/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineScheduleState.java
deleted file mode 100644
index 981eb68..0000000
--- a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineScheduleState.java
+++ /dev/null
@@ -1,30 +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.zest.library.scheduler.timeline;
-
-import java.util.List;
-import org.apache.zest.api.common.UseDefaults;
-import org.apache.zest.api.property.Property;
-
-public interface TimelineScheduleState
-{
-    @UseDefaults
-    Property<List<TimelineRecord>> history();
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineSchedulerServiceMixin.java
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineSchedulerServiceMixin.java b/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineSchedulerServiceMixin.java
deleted file mode 100644
index 41d5a98..0000000
--- a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/TimelineSchedulerServiceMixin.java
+++ /dev/null
@@ -1,110 +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.zest.library.scheduler.timeline;
-
-import java.time.Instant;
-import java.time.ZonedDateTime;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import org.apache.zest.api.injection.scope.Structure;
-import org.apache.zest.api.injection.scope.This;
-import org.apache.zest.api.service.ServiceComposite;
-import org.apache.zest.api.structure.Module;
-import org.apache.zest.functional.Iterables;
-import org.apache.zest.library.scheduler.SchedulerService;
-import org.apache.zest.library.scheduler.SchedulesHandler;
-import org.apache.zest.library.scheduler.Schedule;
-import org.apache.zest.library.scheduler.internal.Schedules;
-
-/**
- * WARN TimelineService Mixin use SortedSets to keep records ordered and repeatedly search for the next run.
- * Could be greedy with large intervals
- */
-public abstract class TimelineSchedulerServiceMixin
-    implements Timeline, ServiceComposite
-{
-    @Structure
-    private Module module;
-
-    @This
-    private SchedulerService scheduler;
-
-    @This
-    private SchedulesHandler schedulesHandler;
-
-    @Override
-    public Iterable<TimelineRecord> getLastRecords( int maxResults )
-    {
-        SortedSet<TimelineRecord> result = new TreeSet<>();
-
-        Schedules schedules = schedulesHandler.getActiveSchedules();
-        for( Schedule schedule : schedules.schedules() )
-        {
-            Timeline timeline = (Timeline) schedule;
-            Iterable<TimelineRecord> lastRecords = timeline.getLastRecords( maxResults );
-            Iterables.addAll( result, lastRecords );
-        }
-        return Iterables.limit( maxResults, Iterables.reverse( result ) );
-    }
-
-    @Override
-    public Iterable<TimelineRecord> getNextRecords( int maxResults )
-    {
-        SortedSet<TimelineRecord> result = new TreeSet<>();
-        Schedules schedules = schedulesHandler.getActiveSchedules();
-        for( Schedule schedule : schedules.schedules() )
-        {
-            Timeline timeline = (Timeline) schedule;
-            Iterable<TimelineRecord> lastRecords = timeline.getNextRecords( maxResults );
-            Iterables.addAll( result, lastRecords );
-        }
-        return Iterables.limit( maxResults, result );
-    }
-
-    @Override
-    public Iterable<TimelineRecord> getRecords( ZonedDateTime from, ZonedDateTime to )
-    {
-        SortedSet<TimelineRecord> result = new TreeSet<>();
-
-        Schedules schedules = schedulesHandler.getActiveSchedules();
-        for( Schedule schedule : schedules.schedules() )
-        {
-            Timeline timeline = (Timeline) schedule;
-            Iterable<TimelineRecord> lastRecords = timeline.getRecords( from, to );
-            Iterables.addAll( result, lastRecords );
-        }
-        return result;
-    }
-
-    @Override
-    public Iterable<TimelineRecord> getRecords( Instant from, Instant to )
-    {
-        SortedSet<TimelineRecord> result = new TreeSet<>();
-
-        Schedules schedules = schedulesHandler.getActiveSchedules();
-        for( Schedule schedule : schedules.schedules() )
-        {
-            Timeline timeline = (Timeline) schedule;
-            Iterable<TimelineRecord> lastRecords = timeline.getRecords( from, to );
-            Iterables.addAll( result, lastRecords );
-        }
-        return result;
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/package.html
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/package.html b/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/package.html
deleted file mode 100644
index 765cabc..0000000
--- a/libraries/scheduler/src/main/java/org/apache/zest/library/scheduler/timeline/package.html
+++ /dev/null
@@ -1,24 +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.
-  ~
-  ~
-  -->
-<html>
-    <body>
-        <h2>Scheduler Timeline.</h2>
-    </body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/AbstractSchedulerTest.java
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/AbstractSchedulerTest.java b/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/AbstractSchedulerTest.java
deleted file mode 100644
index f1ca8cc..0000000
--- a/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/AbstractSchedulerTest.java
+++ /dev/null
@@ -1,76 +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.zest.library.scheduler;
-
-import org.apache.zest.api.entity.EntityBuilder;
-import org.apache.zest.api.entity.IdentityGenerator;
-import org.apache.zest.api.unitofwork.UnitOfWork;
-import org.apache.zest.api.value.ValueSerialization;
-import org.apache.zest.bootstrap.AssemblyException;
-import org.apache.zest.bootstrap.ModuleAssembly;
-import org.apache.zest.bootstrap.ServiceDeclaration;
-import org.apache.zest.entitystore.memory.MemoryEntityStoreService;
-import org.apache.zest.index.rdf.assembly.RdfMemoryStoreAssembler;
-import org.apache.zest.spi.uuid.UuidIdentityGeneratorService;
-import org.apache.zest.test.AbstractZestTest;
-import org.apache.zest.test.EntityTestAssembler;
-import org.apache.zest.valueserialization.orgjson.OrgJsonValueSerializationService;
-
-public abstract class AbstractSchedulerTest
-    extends AbstractZestTest
-{
-    @Override
-    public final void assemble( ModuleAssembly assembly )
-        throws AssemblyException
-    {
-        assembly.entities( FooTask.class );
-
-        assembly.services( MemoryEntityStoreService.class );
-        assembly.services( UuidIdentityGeneratorService.class).withMixins( CountingIdentityGeneratorService.class );
-        assembly.services( OrgJsonValueSerializationService.class ).taggedWith( ValueSerialization.Formats.JSON );
-        new RdfMemoryStoreAssembler().assemble( assembly );
-
-        onAssembly( assembly );
-    }
-
-    protected abstract void onAssembly( ModuleAssembly module )
-        throws AssemblyException;
-
-    protected final FooTask createFooTask( UnitOfWork uow, String name, String input )
-    {
-        EntityBuilder<FooTask> builder = uow.newEntityBuilder( FooTask.class );
-        FooTask task = builder.instance();
-        task.name().set( name );
-        task.input().set( input );
-        return builder.newInstance();
-    }
-
-    public static class CountingIdentityGeneratorService
-        implements IdentityGenerator
-    {
-        int counter = 0;
-
-        @Override
-        public String generate( Class<?> compositeType )
-        {
-            return compositeType.getSimpleName() + ":" + counter++;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/Constants.java
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/Constants.java b/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/Constants.java
deleted file mode 100644
index db61858..0000000
--- a/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/Constants.java
+++ /dev/null
@@ -1,27 +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.zest.library.scheduler;
-
-// TODO Rename to TestConstants
-public interface Constants
-{
-    String BAR = "bar";
-    String BAZAR = "bazar";
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/CronScheduleTest.java
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/CronScheduleTest.java b/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/CronScheduleTest.java
deleted file mode 100644
index a346f83..0000000
--- a/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/CronScheduleTest.java
+++ /dev/null
@@ -1,78 +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.zest.library.scheduler;
-
-import java.time.Instant;
-import org.apache.zest.api.entity.EntityBuilder;
-import org.apache.zest.api.unitofwork.UnitOfWork;
-import org.apache.zest.bootstrap.AssemblyException;
-import org.apache.zest.bootstrap.ModuleAssembly;
-import org.apache.zest.test.AbstractZestTest;
-import org.apache.zest.test.EntityTestAssembler;
-import org.junit.Test;
-
-import static org.hamcrest.core.IsEqual.equalTo;
-import static org.junit.Assert.assertThat;
-
-public class CronScheduleTest extends AbstractZestTest
-{
-    @Override
-    public void assemble( ModuleAssembly module )
-        throws AssemblyException
-    {
-        new EntityTestAssembler().assemble( module );
-        module.entities( CronSchedule.class );
-        module.entities( Task.class ).withMixins( DummyTask.class );
-    }
-
-    @Test
-    public void given15SecondCronWhenRequestingNextExpectEvery15Seconds()
-        throws Exception
-    {
-
-        UnitOfWork work = unitOfWorkFactory.newUnitOfWork();
-        EntityBuilder<Task> builder1 = work.newEntityBuilder( Task.class );
-        builder1.instance().name().set( "abc" );
-        Task task = builder1.newInstance();
-        EntityBuilder<CronSchedule> builder = work.newEntityBuilder( CronSchedule.class );
-        builder.instance().start().set( Instant.now() );
-        builder.instance().task().set( task );
-        builder.instance().cronExpression().set( "*/15 * * * * *" );
-        CronSchedule schedule = builder.newInstance();
-        Instant nextRun = schedule.nextRun( Instant.now());
-        for( int i = 0; i < 1000; i++ )
-        {
-            Instant previousRun = nextRun;
-            nextRun = schedule.nextRun( previousRun ); 
-            assertThat( "nextRun( previousRun + 1s ) @" + i, nextRun, equalTo( previousRun.plusSeconds( 15 )) );
-        }
-        work.discard();
-    }
-
-    public static abstract class DummyTask implements Task
-    {
-        @Override
-        public void run()
-        {
-            System.out.println( "Dummy" );
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/FooTask.java
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/FooTask.java b/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/FooTask.java
deleted file mode 100644
index 8718dbd..0000000
--- a/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/FooTask.java
+++ /dev/null
@@ -1,77 +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.zest.library.scheduler;
-
-import org.apache.zest.api.common.Optional;
-import org.apache.zest.api.common.UseDefaults;
-import org.apache.zest.api.entity.Identity;
-import org.apache.zest.api.injection.scope.This;
-import org.apache.zest.api.mixin.Mixins;
-import org.apache.zest.api.property.Property;
-import org.apache.zest.api.unitofwork.concern.UnitOfWorkPropagation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.apache.zest.api.unitofwork.concern.UnitOfWorkPropagation.Propagation.REQUIRES_NEW;
-
-@Mixins( FooTask.Mixin.class )
-public interface FooTask
-    extends Task, Identity
-{
-    Property<String> input();
-
-    @Optional
-    Property<String> output();
-
-    @UseDefaults
-    Property<Integer> runCounter();
-
-    abstract class Mixin
-        implements Task
-    {
-        private static final Logger LOGGER = LoggerFactory.getLogger( FooTask.class );
-
-        @This
-        private FooTask me;
-
-        @Override
-        public void run()
-        {
-            LOGGER.info( "FooTask.run({})", me.input().get() );
-            synchronized( this )
-            {
-                me.runCounter().set( me.runCounter().get() + 1 );
-                LOGGER.info( "Identity: " + me.identity().get() );
-                LOGGER.info( " Counter: " + me.runCounter().get() );
-            }
-            if( me.input().get().equals( Constants.BAZAR ) )
-            {
-                if( me.output().get() == null )
-                {
-                    me.output().set( Constants.BAR );
-                }
-                else
-                {
-                    me.output().set( me.output().get() + Constants.BAR );
-                }
-            }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/SchedulerTest.java
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/SchedulerTest.java b/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/SchedulerTest.java
deleted file mode 100644
index 9f3eae6..0000000
--- a/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/SchedulerTest.java
+++ /dev/null
@@ -1,206 +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.zest.library.scheduler;
-
-import java.time.Duration;
-import java.time.ZonedDateTime;
-import java.util.concurrent.Callable;
-import org.apache.zest.api.common.Visibility;
-import org.apache.zest.api.unitofwork.UnitOfWork;
-import org.apache.zest.api.unitofwork.UnitOfWorkCompletionException;
-import org.apache.zest.api.usecase.Usecase;
-import org.apache.zest.api.usecase.UsecaseBuilder;
-import org.apache.zest.bootstrap.AssemblyException;
-import org.apache.zest.bootstrap.ModuleAssembly;
-import org.apache.zest.library.scheduler.bootstrap.SchedulerAssembler;
-import org.apache.zest.library.scheduler.timeline.Timeline;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static com.jayway.awaitility.Awaitility.await;
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.apache.zest.functional.Iterables.count;
-import static org.apache.zest.library.scheduler.Constants.BAR;
-import static org.apache.zest.library.scheduler.Constants.BAZAR;
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsEqual.equalTo;
-import static org.junit.Assert.assertThat;
-
-public class SchedulerTest
-    extends AbstractSchedulerTest
-{
-    private static final Logger LOGGER = LoggerFactory.getLogger( SchedulerTest.class );
-
-    @Override
-    protected void onAssembly( ModuleAssembly testAssembly )
-        throws AssemblyException
-    {
-        @SuppressWarnings( "UnnecessaryLocalVariable" )
-        ModuleAssembly moduleAssembly = testAssembly;
-
-        @SuppressWarnings( "UnnecessaryLocalVariable" )
-        ModuleAssembly configModuleAssembly = testAssembly;
-
-        // START SNIPPET: assembly
-        new SchedulerAssembler().visibleIn( Visibility.application )
-            .withConfig( configModuleAssembly, Visibility.layer )
-            .withTimeline()
-            .assemble( moduleAssembly );
-        // END SNIPPET: assembly
-    }
-
-    @Test
-    public void testTaskWithoutScheduling()
-        throws UnitOfWorkCompletionException
-    {
-        Usecase usecase = UsecaseBuilder.newUsecase( "testTask" );
-        String taskId;
-        try( UnitOfWork uow = unitOfWorkFactory.newUnitOfWork( usecase ) )
-        {
-            FooTask task = createFooTask( uow, "TestTask", BAZAR );
-            taskId = task.identity().get();
-            task.run();
-            uow.complete();
-        }
-        try( UnitOfWork uow = unitOfWorkFactory.newUnitOfWork( usecase ) )
-        {
-            FooTask task = uow.get( FooTask.class, taskId );
-            assertThat( task.runCounter().get(), equalTo( 1 ) );
-            assertThat( task.output().get(), equalTo( BAR ) );
-        }
-    }
-
-    @Test
-    public void testMinutely()
-        throws UnitOfWorkCompletionException
-    {
-        Usecase usecase = UsecaseBuilder.newUsecase( "TestMinutely" );
-        ZonedDateTime start = ZonedDateTime.now();
-        String taskIdentity;
-        long sleepMillis;
-        try( UnitOfWork uow = unitOfWorkFactory.newUnitOfWork( usecase ) )
-        {
-            Scheduler scheduler = serviceFinder.findService( Scheduler.class ).get();
-
-            FooTask task = createFooTask( uow, usecase.name(), BAZAR );
-            taskIdentity = task.identity().get();
-
-            ZonedDateTime expectedRun = start.withNano( 0 ).withSecond( 0 ).plusMinutes( 1 );
-            scheduler.scheduleCron( task, "@minutely" );
-
-            uow.complete();
-
-            sleepMillis = Duration.between( start, expectedRun ).toMillis();
-            LOGGER.info( "Task scheduled on {} to be run at {}", start.toLocalTime(), expectedRun.toLocalTime() );
-        }
-
-        await( usecase.name() )
-            .atMost( sleepMillis + 5000, MILLISECONDS )
-            .until( taskOutput( taskIdentity ), equalTo( 1 ) );
-
-        //noinspection unused
-        try( UnitOfWork uow = unitOfWorkFactory.newUnitOfWork( usecase ) )
-        {
-            Timeline timeline = serviceFinder.findService( Timeline.class ).get();
-            ZonedDateTime now =  ZonedDateTime.now();
-
-            // Queries returning past records
-            assertThat( count( timeline.getLastRecords( 5 ) ),
-                        is( 2L ) );
-            assertThat( count( timeline.getRecords( start.toInstant(), now.toInstant() ) ),
-                        is( 2L ) );
-
-            // Queries returning future records
-            assertThat( count( timeline.getNextRecords( 4 ) ),
-                        is( 4L ) );
-            assertThat( count( timeline.getRecords( now.plusNanos( 100000000L ), now.plusMinutes( 5 )) ),
-                        is( 5L ) );
-
-            // Queries returning mixed past and future records
-            assertThat( count( timeline.getRecords( start, now.plusMinutes( 5 ) ) ),
-                        is( 7L ) );
-        }
-    }
-
-    @Test
-    public void testOnce()
-        throws UnitOfWorkCompletionException, InterruptedException
-    {
-        System.setProperty( "zest.entity.print.state", Boolean.TRUE.toString() );
-        final Usecase usecase = UsecaseBuilder.newUsecase( "TestOnce" );
-        final String taskIdentity;
-        Scheduler scheduler = serviceFinder.findService( Scheduler.class ).get();
-
-        Schedule schedule1;
-        Schedule schedule2;
-        Schedule schedule3;
-        Schedule schedule4;
-        try( UnitOfWork uow = unitOfWorkFactory.newUnitOfWork( usecase ) )
-        {
-            FooTask task = createFooTask( uow, usecase.name(), BAZAR );
-            taskIdentity = task.identity().get();
-
-            schedule1 = scheduler.scheduleOnce( task, 1 );
-            schedule2 = scheduler.scheduleOnce( task, 2 );
-            schedule3 = scheduler.scheduleOnce( task, 3 );
-            schedule4 = scheduler.scheduleOnce( task, 4 );
-
-            uow.complete();
-        }
-        await( usecase.name() )
-            .atMost( 6, SECONDS )
-            .until( taskOutput( taskIdentity ), equalTo( 4 ) );
-
-        try( UnitOfWork uow = unitOfWorkFactory.newUnitOfWork( usecase ) )
-        {
-            schedule1 = uow.get( schedule1 );
-            schedule2 = uow.get( schedule2 );
-            schedule3 = uow.get( schedule3 );
-            schedule4 = uow.get( schedule4 );
-            assertThat(schedule1.cancelled().get(), equalTo( false ));
-            assertThat(schedule2.cancelled().get(), equalTo( false ));
-            assertThat(schedule3.cancelled().get(), equalTo( false ));
-            assertThat(schedule4.cancelled().get(), equalTo( false ));
-            assertThat(schedule1.done().get(), equalTo( true ));
-            assertThat(schedule2.done().get(), equalTo( true ));
-            assertThat(schedule3.done().get(), equalTo( true ));
-            assertThat(schedule4.done().get(), equalTo( true ));
-            assertThat(schedule1.running().get(), equalTo( false ));
-            assertThat(schedule2.running().get(), equalTo( false ));
-            assertThat(schedule3.running().get(), equalTo( false ));
-            assertThat(schedule4.running().get(), equalTo( false ));
-        }
-    }
-
-    private Callable<Integer> taskOutput( final String taskIdentity )
-    {
-        return () -> {
-            try( UnitOfWork uow = unitOfWorkFactory.newUnitOfWork() )
-            {
-                FooTask task = uow.get( FooTask.class, taskIdentity );
-                Integer count = task.runCounter().get();
-                uow.discard();
-                return count;
-            }
-        };
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/docsupport/SchedulerDocs.java
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/docsupport/SchedulerDocs.java b/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/docsupport/SchedulerDocs.java
deleted file mode 100644
index 047e01e..0000000
--- a/libraries/scheduler/src/test/java/org/apache/zest/library/scheduler/docsupport/SchedulerDocs.java
+++ /dev/null
@@ -1,99 +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.zest.library.scheduler.docsupport;
-
-import org.apache.zest.api.association.Association;
-import org.apache.zest.api.injection.scope.Service;
-import org.apache.zest.api.injection.scope.This;
-import org.apache.zest.api.property.Property;
-import org.apache.zest.api.unitofwork.concern.UnitOfWorkDiscardOn;
-import org.apache.zest.api.unitofwork.concern.UnitOfWorkPropagation;
-import org.apache.zest.api.unitofwork.concern.UnitOfWorkRetry;
-import org.apache.zest.library.scheduler.Scheduler;
-import org.apache.zest.library.scheduler.Task;
-import org.apache.zest.library.scheduler.Schedule;
-import org.apache.zest.library.scheduler.timeline.Timeline;
-
-public class SchedulerDocs
-{
-
-    // START SNIPPET: timeline
-    @Service
-    Timeline timeline;
-// END SNIPPET: timeline
-
-    // START SNIPPET: 2
-    @Service
-    Scheduler scheduler;
-
-    public void method()
-    {
-        MyTaskEntity myTask = todo();
-        Schedule schedule = scheduler.scheduleOnce( myTask, 10 );
-        // myTask will be run in 10 seconds from now
-    }
-
-    // END SNIPPET: 2
-    MyTaskEntity todo()
-    {
-        return null;
-    }
-
-    // START SNIPPET: 1
-    interface MyTaskEntity extends Task
-    {
-        Property<String> myTaskState();
-
-        Association<AnotherEntity> anotherEntity();
-    }
-
-    class MyTaskMixin implements Runnable
-    {
-        @This
-        MyTaskEntity me;
-
-        @Override
-        public void run()
-        {
-            me.myTaskState().set( me.anotherEntity().get().doSomeStuff( me.myTaskState().get() ) );
-        }
-    }
-
-    // END SNIPPET: 1
-    interface AnotherEntity
-    {
-        String doSomeStuff( String p );
-    }
-
-    public class MyTask implements Runnable
-    {
-
-        // START SNIPPET: strategy
-        @Override
-        @UnitOfWorkRetry( retries = 3 )
-        @UnitOfWorkDiscardOn( IllegalArgumentException.class )
-        @UnitOfWorkPropagation( value = UnitOfWorkPropagation.Propagation.REQUIRES_NEW, usecase = "Load Data" )
-        public void run()
-        {
-            // END SNIPPET: strategy
-
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/src/test/resources/logback-test.xml
----------------------------------------------------------------------
diff --git a/libraries/scheduler/src/test/resources/logback-test.xml b/libraries/scheduler/src/test/resources/logback-test.xml
deleted file mode 100644
index 41730a9..0000000
--- a/libraries/scheduler/src/test/resources/logback-test.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~  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.
-  ~
-  ~
-  -->
-<configuration>
-
-    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
-        <layout class="ch.qos.logback.classic.PatternLayout">
-            <Pattern>@%-10thread %-5level %logger{20} - %msg%n</Pattern>
-        </layout>
-    </appender>
-
-    <root level="info">
-        <appender-ref ref="stdout" />
-    </root>
-
-    <logger name="org.apache.zest.library.scheduler" level="trace"/>
-
-</configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/libraries/scheduler/test-repeatedly.sh
----------------------------------------------------------------------
diff --git a/libraries/scheduler/test-repeatedly.sh b/libraries/scheduler/test-repeatedly.sh
deleted file mode 100755
index bb7516b..0000000
--- a/libraries/scheduler/test-repeatedly.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/sh
-
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-# http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Run clean test once and test repeatedly
-# Stop on first failure
-# cat build/num-repeats to see how many times it ran
-# Use time run-repeatedly.sh to get a time mesure
-#
-# Written because of milliseconds delays due to multithreading
-
-set -e
-
-../../gradlew clean test -Dversion=2.0-SNAPSHOT
-echo "x "`date` > build/num-repeats
-
-while ( true ) ; do
-	../../gradlew test -Dversion=2.0-SNAPSHOT
-	echo "x "`date` >> build/num-repeats
-done
-
-exit 0

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/manual/src/docs/userguide/libraries.txt
----------------------------------------------------------------------
diff --git a/manual/src/docs/userguide/libraries.txt b/manual/src/docs/userguide/libraries.txt
index fcbace9..5da7c9e 100644
--- a/manual/src/docs/userguide/libraries.txt
+++ b/manual/src/docs/userguide/libraries.txt
@@ -115,10 +115,6 @@ include::../../../../libraries/restlet/src/docs/restlet.txt[]
 
 :leveloffset: 2
 
-include::../../../../libraries/scheduler/src/docs/scheduler.txt[]
-
-:leveloffset: 2
-
 include::../../../../libraries/servlet/src/docs/servlet.txt[]
 
 :leveloffset: 2

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8915dfaa/settings.gradle
----------------------------------------------------------------------
diff --git a/settings.gradle b/settings.gradle
index c865591..7cabe8b 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -48,7 +48,6 @@ include 'core:functional',
         'libraries:rest-common',
         'libraries:rest-server',
         'libraries:restlet',
-        'libraries:scheduler',
         'libraries:scripting',
         'libraries:servlet',
         'libraries:shiro-core',