public static Optional<EfestoOutputDrlMap> execute(BaseEfestoInput<EfestoMapInputDTO> toEvaluate, EfestoRuntimeContext context) {
        KieSession kieSession;
        try {
            kieSession = loadKieSession(toEvaluate.getModelLocalUriId(), context);
        } catch (Exception e) {
            logger.warn("{} can not execute {}",
                        DrlRuntimeHelper.class.getName(),
                        toEvaluate.getModelLocalUriId());
            return Optional.empty();
        }
        if (kieSession == null) {
            return Optional.empty();
        }
        try {
            MapInputSessionUtils.Builder builder = MapInputSessionUtils.builder(kieSession, toEvaluate.getInputData());
            final MapInputSessionUtils mapInputSessionUtils = builder.build();
            long identifier = kieSession.getIdentifier();
            mapInputSessionUtils.fireAllRules();
            LocalComponentIdDrlSession modelLocalUriId = new EfestoAppRoot()
                    .get(KieDrlComponentRoot.class)
                    .get(DrlSessionIdFactory.class)
                    .get(toEvaluate.getModelLocalUriId().basePath(), identifier);
            return Optional.of(new EfestoOutputDrlMap(modelLocalUriId, null));
        } catch (Exception e) {
            throw new KieRuntimeServiceException(String.format("%s failed to execute %s",
                                                               DrlRuntimeHelper.class.getName(),
                                                               toEvaluate.getModelLocalUriId()), e);
        }
    }
@Test
    void execute() {
        List<Object> inserts = new ArrayList<>();

        inserts.add(new LoanApplication("ABC10001", new Applicant("John", 45), 2000, 1000));
        inserts.add(new LoanApplication("ABC10002", new Applicant("Paul", 25), 5000, 100));
        inserts.add(new LoanApplication("ABC10015", new Applicant("George", 12), 1000, 100));

        List<LoanApplication> approvedApplications = new ArrayList<>();
        final Map<String, Object> globals = new HashMap<>();
        globals.put("approvedApplications", approvedApplications);
        globals.put("maxAmount", 5000);

        EfestoMapInputDTO darMapInputDTO = new EfestoMapInputDTO(inserts, globals, Collections.emptyMap(), Collections.emptyMap(), "modelname", "packageName");
        EfestoInputDrlMap darInputDrlMap =
                new EfestoInputDrlMap(new ModelLocalUriId(LocalUri.parse("/drl/" + basePath)), darMapInputDTO);

        EfestoRuntimeContext context = EfestoRuntimeContextUtils.buildWithParentClassLoader(Thread.currentThread().getContextClassLoader());
        Optional<EfestoOutputDrlMap> retrieved = DrlRuntimeHelper.execute(darInputDrlMap, context);
        assertThat(retrieved).isNotNull().isPresent();
        assertThat(approvedApplications).hasSize(1);
        LoanApplication approvedApplication = approvedApplications.get(0);
        assertThat(approvedApplication).isEqualTo(inserts.get(0));
    }