package ee.telekom.workflow.executor.producer; import java.lang.invoke.MethodHandles; import java.util.List; import org.apache.commons.lang3.SerializationUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ee.telekom.workflow.core.workunit.WorkUnit; import ee.telekom.workflow.core.workunit.WorkUnitService; import ee.telekom.workflow.executor.queue.WorkQueue; @Service @Transactional public class WorkProducerServiceImpl implements WorkProducerService{ private static final Logger log = LoggerFactory.getLogger( MethodHandles.lookup().lookupClass() ); @Autowired private WorkUnitService workUnitService; @Autowired private WorkQueue queue; @Override public void produceWork( List<WorkUnit> unprocessedWorkUnits, int maxBatchSize ) throws InterruptedException{ List<WorkUnit> batchOfWorkUnits = unprocessedWorkUnits.subList(0, Math.min(maxBatchSize, unprocessedWorkUnits.size())); if( batchOfWorkUnits.size() > 0 ){ workUnitService.lock( batchOfWorkUnits ); for( WorkUnit wu : batchOfWorkUnits ){ log.info( "Adding '{}' to queue", wu ); queue.put( SerializationUtils.clone( wu ) ); } batchOfWorkUnits.clear(); } } }