class ReSendToChainRecoverStrategy 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);

            MessageBus.send(messageClone, chainChoiceStrategy.chooseRecoveryChain(state));
        } catch (ResolutionException | ReadValueException | InvalidArgumentException | ChangeValueException | SendingMessageException
                | SerializeException e) {
            throw new RecoverStrategyExecutionException("Error occurred re-sending a message.", e);
        }
    }

    public  ReSendToChainRecoverStrategy(final IRecoveryChainChoiceStrategy chainChoiceStrategy);

}