diff --git a/api/src/main/java/org/openmrs/module/patientflags/api/impl/FlagServiceImpl.java b/api/src/main/java/org/openmrs/module/patientflags/api/impl/FlagServiceImpl.java index 743df347..2b75b8a3 100755 --- a/api/src/main/java/org/openmrs/module/patientflags/api/impl/FlagServiceImpl.java +++ b/api/src/main/java/org/openmrs/module/patientflags/api/impl/FlagServiceImpl.java @@ -96,23 +96,28 @@ public List generateFlagsForPatient(Patient patient, Map c * @see org.openmrs.module.patientflags.api.FlagService#generateFlagsForPatient(Patient, Filter, Map) */ public List generateFlagsForPatient(Patient patient, Filter filter, Map context) { - List results = new ArrayList(); - + List results = Collections.synchronizedList(new ArrayList<>()); + // we can get rid of this once onStartup is implemented if (!isInitialized) refreshCache(); - + // test each Flag in the cache against the specific Patient - for (Flag flag : filter.filter(flagCache)) { - // trap bad flags so that they don't hang the system + filter.filter(flagCache).parallelStream().forEach(flag -> { try { - if (flag.eval(patient, context)) + Context.openSession(); + if (flag.eval(patient, context)) { results.add(flag); + } } catch (Exception e) { log.error("Unable to test flag " + flag.getName() + " on patient #" + patient.getId(), e); } - } + finally { + Context.closeSession(); + } + }); + return results; }