}
macroExpand = new MacroExpand(log.getChildLogger("macroExpand"), dns);
if (getSpfExecutorType() == SYNCHRONOUS_EXECUTOR) { // synchronous
executor = new SynchronousSPFExecutor(log, dns);
} else if (getSpfExecutorType() == STAGED_EXECUTOR || getSpfExecutorType() == STAGED_EXECUTOR_MULTITHREADED){
executor = new StagedMultipleSPFExecutor(log, new DNSServiceAsynchSimulator(dns, getSpfExecutorType() == STAGED_EXECUTOR_MULTITHREADED));
} else if (getSpfExecutorType() == STAGED_EXECUTOR_DNSJNIO) {
// reset cache between usages of the asynchronous lookuper
LookupAsynch.setDefaultCache(new Cache(), DClass.IN);
// reset cache between usages of the asynchronous lookuper