if (trace) log.trace("Key " + key + " filtered");
continue;
}
Object tempEntity = null;
InternalMetadata tempMetadata = null;
boolean loaded = false;
/* We need second entity manager because with MySQL we can't do streaming in parallel with other queries
using single connection */
EntityManager emExec = emf.createEntityManager();
try {
EntityTransaction txExec = emExec.getTransaction();
txExec.begin();
try {
do {
try {
tempEntity = fetchValue ? findEntity(emExec, key) : null;
tempMetadata = fetchMetadata ? getMetadata(emExec, key) : null;
} finally {
try {
txExec.commit();
loaded = true;
} catch (Exception e) {
log.trace("Failed to load once", e);
}
}
} while (!loaded);
} finally {
if (txExec != null && txExec.isActive()) {
txExec.rollback();
}
}
} finally {
if (emExec != null) {
emExec.close();
}
}
final Object entity = tempEntity;
final InternalMetadata metadata = tempMetadata;
if (trace) log.trace("Processing " + key + " -> " + entity + "(" + metadata + ")");
if (metadata != null && metadata.isExpired(timeService.wallClockTime())) continue;
eacs.submit(new Callable<Void>() {
@Override
public Void call() throws Exception {
try {
final MarshalledEntry marshalledEntry = marshallerEntryFactory.newMarshalledEntry(key, entity, metadata);