class ReSendRestoringSequenceRecoverStrategy implements IRecoverStrategy {

    @Override
    public void reSend(final IObject state) throws RecoverStrategyExecutionException {
        try {
            String sMessage = ((IObject) state.getValue(messageFieldName)).serialize();
            IObject messageClone = IOC.resolve(Keys.getOrAdd(IObject.class.getName()), sMessage);

            IObject checkpointStatus = IOC.resolve(Keys.getOrAdd("info.smart_tools.smartactors.iobject.iobject.IObject"));

            checkpointStatus.setValue(responsibleCheckpointIdFieldName, state.getValue(responsibleCheckpointIdFieldName));
            checkpointStatus.setValue(checkpointEntryIdFieldName, state.getValue(entryIdFieldName));
            checkpointStatus.setValue(prevCheckpointEntryIdFieldName, state.getValue(prevCheckpointEntryIdFieldName));
            checkpointStatus.setValue(prevCheckpointIdFieldName, state.getValue(prevCheckpointIdFieldName));

            messageClone.setValue(checkpointStatusFieldName, checkpointStatus);

            IMessageProcessingSequence sequence = IOC.resolve(Keys.getOrAdd("recover message processing sequence"),
                    state.getValue(sequenceDumpFieldName));

            IMessageProcessor processor = IOC.resolve(Keys.getOrAdd("info.smart_tools.smartactors.message_processing_interfaces.message_processing.IMessageProcessor"),
                    IOC.resolve(Keys.getOrAdd("task_queue")),
                    sequence
                    );

            processor.process(messageClone, IOC.resolve(Keys.getOrAdd("info.smart_tools.smartactors.iobject.iobject.IObject")));
        } catch (ReadValueException | InvalidArgumentException | SerializeException | ResolutionException | ChangeValueException
                | MessageProcessorProcessException e) {
            throw new RecoverStrategyExecutionException("Error occurred re-sending message.", e);
        }
    }

    public  ReSendRestoringSequenceRecoverStrategy();

}