I’m on Wildfly 30.0.1.Final.
I have a @Singleton
bean with no @ConcurrencyManagement
annotation (i.e. container-managed). One of its methods is annotated with @Schedule(hour="*", minute="*", second="*/10", persistent=false)
(yes, every 10s) and @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
.
Everytime the timer expires, the function invokes another piece of code which:
- selects 55 items from a MySQL table
- For each record:
- Either creates a new document in a MongoDB collection or updates an existing one
- Deletes the record
The select query is perfomed via jakarta.persistence.criteria
objects and the delete query is performed via jakarta.persistence.EntityManager.remove(Object entity)
As you can guess from the combination between 10s and 55 items, we are aiming at a frequent and quick processing.
Everything works flawlessly in my local environment (Wildfly on my Windows machine, MySQL on a local Docker container, MongoDB on a host on my network).
As soon I move to the test environment (AWS machines, Wildfly in a Linux container, MySQL-compatible Aurora Serverless, Atlas-hosted MongoDB), only few executions of the timer work correctly. Most of them return the following exception as soon as the select query is attempted:
13:40:10,402 WARN [org.visiontech.commons.commerce.impl.ComputationExportBatchlet] (TimerScheduler - 3) A problem occurred in the SQL executor : Error advancing (next) ResultSet position [Operation not a
llowed after ResultSet closed]: org.hibernate.sql.exec.ExecutionException: A problem occurred in the SQL executor : Error advancing (next) ResultSet position [Operation not allowed after ResultSet closed]
at [email protected]//org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.makeExecutionException(JdbcValuesResultSetImpl.java:300)
at [email protected]//org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.advanceNext(JdbcValuesResultSetImpl.java:257)
at [email protected]//org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.processNext(JdbcValuesResultSetImpl.java:134)
at [email protected]//org.hibernate.sql.results.jdbc.internal.AbstractJdbcValues.next(AbstractJdbcValues.java:19)
at [email protected]//org.hibernate.sql.results.internal.RowProcessingStateStandardImpl.next(RowProcessingStateStandardImpl.java:66)
at [email protected]//org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:184)
at [email protected]//org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:33)
at [email protected]//org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:361)
at [email protected]//org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:168)
at [email protected]//org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.list(JdbcSelectExecutorStandardImpl.java:93)
at [email protected]//org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:31)
at [email protected]//org.hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:146)
at [email protected]//org.hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:118)
at [email protected]//org.hibernate.loader.ast.internal.SingleIdEntityLoaderStandardImpl.load(SingleIdEntityLoaderStandardImpl.java:73)
at [email protected]//org.hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:3521)
at [email protected]//org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3511)
at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:581)
at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.loadFromCacheOrDatasource(DefaultLoadEventListener.java:567)
at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:536)
at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:529)
at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:202)
at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:241)
at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:106)
at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:78)
at [email protected]//org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:138)
at [email protected]//org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1231)
at [email protected]//org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1075)
at [email protected]//org.hibernate.sql.results.graph.entity.internal.EntitySelectFetchInitializer.initializeInstance(EntitySelectFetchInitializer.java:197)
at [email protected]//org.hibernate.sql.results.internal.InitializersList.initializeInstance(InitializersList.java:70)
at [email protected]//org.hibernate.sql.results.internal.StandardRowReader.coordinateInitializers(StandardRowReader.java:111)
at [email protected]//org.hibernate.sql.results.internal.StandardRowReader.readRow(StandardRowReader.java:87)
at [email protected]//org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:199)
at [email protected]//org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:33)
at [email protected]//org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:361)
at [email protected]//org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:168)
at [email protected]//org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.list(JdbcSelectExecutorStandardImpl.java:93)
at [email protected]//org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:31)
at [email protected]//org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.lambda$new$0(ConcreteSqmSelectQueryPlan.java:110)
at [email protected]//org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:303)
at [email protected]//org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:244)
at [email protected]//org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:518)
at [email protected]//org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:367)
at [email protected]//org.hibernate.query.Query.getResultList(Query.java:119)
at deployment.o.ear//org.visiontech.commons.persistence.impl.store.AbstractIdentifiableEntityStore.performQuery(AbstractIdentifiableEntityStore.java:106)
at deployment.o.ear//org.visiontech.commons.persistence.impl.store.AbstractIdentifiableEntityStore.find(AbstractIdentifiableEntityStore.java:95)
at deployment.o.ear//org.visiontech.commons.persistence.impl.store.AbstractIdentifiableEntityStore.find(AbstractIdentifiableEntityStore.java:82)
at deployment.o.ear//org.visiontech.commons.persistence.impl.store.AbstractIdentifiableEntityStore.find(AbstractIdentifiableEntityStore.java:78)
at deployment.o.ear//org.visiontech.commons.commerce.impl.store.TokenConsumptionsQueueEntryStoreImpl$Proxy$_$$_WeldClientProxy.find(Unknown Source)
at deployment.o.ear//org.visiontech.commons.commerce.impl.ComputationExportBatchlet.oneByOneProcess(ComputationExportBatchlet.java:66)
at deployment.o.ear//org.visiontech.commons.batch.impl.AbstractOneByOneBatchlet.process(AbstractOneByOneBatchlet.java:17)
at deployment.o.ear.w//TokenExporter.programmaticTimeout(TokenExporter.java:52)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at [email protected]//org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:35)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:50)
at [email protected]//org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:44)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
at [email protected]//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.delegateInterception(Jsr299BindingsInterceptor.java:62)
at [email protected]//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:72)
at [email protected]//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:87)
at [email protected]//org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:44)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:50)
at [email protected]//org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:44)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:26)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:28)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:40)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at [email protected]//org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:35)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.as.ejb3.component.singleton.SingletonComponentInstanceAssociationInterceptor.processInvocation(SingletonComponentInstanceAssociationInterceptor.java:36)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:39)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:237)
at [email protected]//org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:399)
at [email protected]//org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:145)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
at [email protected]//org.jboss.weld.module.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:87)
at [email protected]//org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:72)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:24)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.as.ejb3.security.IdentityOutflowInterceptor.processInvocation(IdentityOutflowInterceptor.java:56)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.as.ejb3.security.SecurityDomainInterceptor.processInvocation(SecurityDomainInterceptor.java:27)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
at [email protected]//org.jboss.as.ejb3.component.singleton.ContainerManagedConcurrencyInterceptor.processInvocation(ContainerManagedConcurrencyInterceptor.java:89)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:47)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:33)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:60)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:438)
at [email protected]//org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:633)
at [email protected]//org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:57)
at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at [email protected]//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at [email protected]//org.jboss.as.ejb3.timerservice.TimedObjectInvokerImpl.invoke(TimedObjectInvokerImpl.java:85)
at [email protected]//org.jboss.as.ejb3.timerservice.TimedObjectInvokerImpl.callTimeout(TimedObjectInvokerImpl.java:63)
at [email protected]//org.jboss.as.ejb3.timerservice.distributable.DistributableTimer.invoke(DistributableTimer.java:96)
at [email protected]//org.jboss.as.ejb3.timerservice.distributable.DistributableTimeoutListener.invoke(DistributableTimeoutListener.java:57)
at [email protected]//org.jboss.as.ejb3.timerservice.distributable.DistributableTimeoutListener.timeout(DistributableTimeoutListener.java:48)
at [email protected]//org.wildfly.clustering.ejb.infinispan.timer.InfinispanTimer.invoke(InfinispanTimer.java:76)
at [email protected]//org.wildfly.clustering.ejb.infinispan.timer.TimerScheduler$InvokeTask$1.call(TimerScheduler.java:160)
at [email protected]//org.wildfly.clustering.ejb.infinispan.timer.TimerScheduler$InvokeTask$1.call(TimerScheduler.java:124)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at [email protected]//org.wildfly.clustering.context.ContextReferenceExecutor.execute(ContextReferenceExecutor.java:32)
at [email protected]//org.wildfly.clustering.context.ContextualExecutor$1.run(ContextualExecutor.java:61)
at java.base/java.lang.Thread.run(Thread.java:840)
at [email protected]//org.jboss.threads.JBossThread.run(JBossThread.java:513)
Caused by: org.hibernate.exception.GenericJDBCException: Error advancing (next) ResultSet position [Operation not allowed after ResultSet closed] [n/a]
at [email protected]//org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:61)
at [email protected]//org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108)
at [email protected]//org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94)
... 125 more
Caused by: java.sql.SQLException: Operation not allowed after ResultSet closed
at [email protected]//com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at [email protected]//com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at [email protected]//com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
at [email protected]//com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
at [email protected]//com.mysql.cj.jdbc.result.ResultSetImpl.checkClosed(ResultSetImpl.java:485)
at [email protected]//com.mysql.cj.jdbc.result.ResultSetImpl.next(ResultSetImpl.java:1802)
at [email protected]//org.jboss.jca.adapters.jdbc.WrappedResultSet.next(WrappedResultSet.java:2689)
at [email protected]//org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.advanceNext(JdbcValuesResultSetImpl.java:254)
... 123 more
I’m having a hard time figuring out what might be happening:
- I’m not doing any manual Transaction/Session/ResultSet handling;
- The timer expiration handler often fails also at its very first execution, so its not a matter of subsequent handlers stepping onto each other
I’m providing you with the code, for the sake of completeness:
The bean with the timer:
//imports
@Singleton
public class TokenExporter extends AbstractClusterSingleton implements ClusterSingleton {
@Inject
@ConfigProperty(name="computation.export.interval", defaultValue="10000")
private Long interval;
@Inject
@ConfigProperty(name="computation.export.active", defaultValue="false")
private Boolean active;
@Inject
private ComputationExportWorker computationExportWorker;
@Inject
private Logger logger;
@Override
protected void init(String key) {
if (ObjectUtils.allNotNull(active) && active) {
logger.info("TokenExporter active");
if (logger.isInfoEnabled()) {
logger.info("Scheduled first TokenExporter execution");
}
}
else {
logger.info("TokenExporter not active");
}
}
@Schedule(hour="*", minute="*", second="*/10", persistent=false)
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void programmaticTimeout() {
logger.info("TokenExporter scheduled execution start");
if (ObjectUtils.allNotNull(active) && active) {
try {
computationExportWorker.process();
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
} finally {
logger.info("TokenExporter scheduled execution end");
}
} else {
logger.info("TokenExporter not active");
logger.info("TokenExporter scheduled execution end");
}
}
}
This is the ancestor of ComputationExportWorker
, which ensure no multiple executions of the same code are performed:
package org.visiontech.commons.batch.impl;
//imports
public abstract class AbstractOneByOneWorker extends AbstractJobWorker {
private static final AtomicInteger semaphore = new AtomicInteger();
@Override
public final String process() throws Exception {
if (semaphore.getAndIncrement() > 0) {
semaphore.getAndDecrement();
return BatchStatus.ABANDONED.toString();
} else {
try {
oneByOneProcess();
} finally {
semaphore.getAndDecrement();
}
return BatchStatus.COMPLETED.toString();
}
}
public abstract void oneByOneProcess() throws Exception;
}
Finally, this is ComputationExportWorker
, implementing the oneByOneProcess() method:
package org.visiontech.commons.commerce.impl;
// imports
public class ComputationExportWorker extends AbstractOneByOneWorker {
@Inject
@ConfigProperty(name="computation.export.readbatchsize", defaultValue="55")
private Integer readBatchSize;
@Inject
private JobQueueEntryStore jqeStore;
@Inject
private TokenConsumptionsQueueEntryStore tcsqeStore;
@Inject
private JobDocumentStore jobDocumentStore;
@Inject
private TokenConsumptionsDocumentStore tokenConsumptionsDocumentStore;
@Inject
private Logger logger;
@Override
public void oneByOneProcess() throws Exception {
try {
if (logger.isInfoEnabled())
logger.info("ComputationExportWorker - Start processing");
SimpleFindOrder<TokenConsumptionsQueueEntry, Date> tcsqeOrderByCreation = new SimpleFindOrder<>();
tcsqeOrderByCreation.setField(CreatableEntity_.CREATION);
FindResult<TokenConsumptionsQueueEntry> tcsqeResults = tcsqeStore.find(
Arrays.asList(CriteriaUtils.getSimpleInstance(new TokenConsumptionsQueueEntry())),
Arrays.asList(tcsqeOrderByCreation),
readBatchSize, 0
);
SimpleFindOrder<JobQueueEntry, Date> jqeOrderByCreation = new SimpleFindOrder<>();
jqeOrderByCreation.setField(CreatableEntity_.CREATION);
FindResult<JobQueueEntry> jqeResults = jqeStore.find(
Arrays.asList(CriteriaUtils.getSimpleInstance(new JobQueueEntry())),
Arrays.asList(jqeOrderByCreation),
readBatchSize, 0
);
if (tcsqeResults.getCount() > 0) {
if (logger.isInfoEnabled())
logger.info("ComputationExportWorker - found " + tcsqeResults.getResults().size() + " TokenConsumptions queue entries. Min creation: " + tcsqeResults.getResults().stream().findFirst().get().getCreation() + ", max creation: " + tcsqeResults.getResults().stream().map(tcsqe -> tcsqe.getCreation()).reduce((first, second) -> second).orElse(null));
tcsqeResults.getResults().stream().forEach(
ThrowingConsumer.transform(
tcsqe -> {
//Operations on MongoDB
tcsqeStore.delete(Arrays.asList(tcsqe));
logger.info("ComputationExportWorker - TokenConsumptionsQueueEntry deleted");
}
)
);
} else {
if (logger.isInfoEnabled())
logger.info("ComputationExportWorker - No TokenConsumptions queue entries found");
}
if (jqeResults.getCount() > 0) {
if (logger.isInfoEnabled())
logger.info("ComputationExportWorker - found " + jqeResults.getResults().size() + " Job queue entries. Min creation: " + jqeResults.getResults().stream().findFirst().get().getTokenConsumption().getCreation() + ", max creation: " + jqeResults.getResults().stream().reduce((first, second) -> second).orElse(null).getTokenConsumption().getCreation());
jqeResults.getResults().stream().forEach(
ThrowingConsumer.transform(
jqe -> {
//Operations on MongoDB
jqeStore.delete(Arrays.asList(jqe));
logger.info("ComputationExportWorker - JobQueueEntry deleted");
}
)
);
} else {
if (logger.isInfoEnabled()) {
logger.info("ComputationExportWorker - No Job queue entries found");
}
}
if (logger.isInfoEnabled())
logger.info("ComputationExportWorker - End processing");
} catch (Exception ex) {
logger.warn(ex.getMessage(), ex);
logger.info("ComputationExportWorker - Erroneous processing");
}
}
}