Class JpaCustomizedScheduledJobRepository<D extends JpaScheduledJob>
- java.lang.Object
-
- com.broadleafcommerce.scheduledjob.provider.jpa.repository.JpaCustomizedScheduledJobRepository<D>
-
- All Implemented Interfaces:
CustomizedScheduledJobRepository<D>
public class JpaCustomizedScheduledJobRepository<D extends JpaScheduledJob> extends Object implements CustomizedScheduledJobRepository<D>
- Author:
- Jeff Fischer
-
-
Constructor Summary
Constructors Constructor Description JpaCustomizedScheduledJobRepository(com.broadleafcommerce.common.extension.TypeFactory typeFactory, com.broadleafcommerce.common.jpa.RepositoryEntityTypeManager repositoryEntityTypeManager)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected javax.persistence.criteria.Predicate
buildContextIdFilter(String scheduledJobContextId, javax.persistence.criteria.Root<D> scheduledJobEntity, javax.persistence.criteria.CriteriaBuilder criteriaBuilder, Map<String,Object> parameterValues)
protected javax.persistence.criteria.Predicate
buildExecutedNotFilter(boolean executedNot, javax.persistence.criteria.Root<D> scheduledJobEntity, javax.persistence.criteria.CriteriaBuilder criteriaBuilder, Map<String,Object> parameterValues)
D
establishTriggerStateIfApplicable(String contextId)
Establish theNotificationStateAware
contract forTriggeredJobEventProducer.TYPE
.Optional<D>
findByContextIdIgnoringNarrowing(String contextId)
Retrieves the job whoseScheduledJob#contextId
matches the one supplied.protected ScheduledJobDetailValueConverter
getDetailValueConverter()
protected ScheduledJobRepository<D>
getRepository()
protected com.broadleafcommerce.common.jpa.RepositoryEntityTypeManager
getRepositoryEntityTypeManager()
protected com.broadleafcommerce.common.extension.TypeFactory
getTypeFactory()
protected void
initializeNotificationState(D entity, String notificationStateName, Instant changeTimestamp)
D
markJobAsExecuted(String contextId, TimingType timingType)
Mark a job as executed viaScheduledJob.isExecuted()
.Optional<D>
resetNotificationStateByNameAndJobDetailsContaining(String notificationStateToReset, String detailName, Object detailValue)
Finds the job whoseScheduledJob.details
contains aScheduledJobDetail
with the givenScheduledJobDetail.name
andScheduledJobDetail#value
, and resets the notification state with the matching name.void
setRepository(ScheduledJobRepository<D> repository)
Stream<D>
streamAll(com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Read a stream of all ScheduledJobs in the data store.
-
-
-
Method Detail
-
setRepository
@Autowired @Lazy public void setRepository(ScheduledJobRepository<D> repository)
-
streamAll
@NonNull public Stream<D> streamAll(@Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Description copied from interface:CustomizedScheduledJobRepository
Read a stream of all ScheduledJobs in the data store.- Specified by:
streamAll
in interfaceCustomizedScheduledJobRepository<D extends JpaScheduledJob>
- Parameters:
contextInfo
- context information surrounding multitenant state- Returns:
- a stream of all ScheduledJobs in the data store
-
establishTriggerStateIfApplicable
@Transactional(transactionManager="scheduledJobTransactionManager") public D establishTriggerStateIfApplicable(String contextId)
Description copied from interface:CustomizedScheduledJobRepository
Establish theNotificationStateAware
contract forTriggeredJobEventProducer.TYPE
. This should initialize the basic support for a trigger typeNotificationState
item in theNotificationStateAware.getNotificationStates()
list. This state is generally completed during theCustomizedScheduledJobRepository.markJobAsExecuted(String, TimingType)
lifecycle.- Specified by:
establishTriggerStateIfApplicable
in interfaceCustomizedScheduledJobRepository<D extends JpaScheduledJob>
- Parameters:
contextId
- The tracking identifier for the scheduled job- Returns:
- The initialized entity instance
-
markJobAsExecuted
@Transactional(transactionManager="scheduledJobTransactionManager") @Nullable public D markJobAsExecuted(String contextId, TimingType timingType)
Description copied from interface:CustomizedScheduledJobRepository
Mark a job as executed viaScheduledJob.isExecuted()
. As part of an atomic operation, this method should also set theScheduledJob.getLastExecuted()
field and disable the job viaScheduledJob.isEnabled()
if the job is ofTimingType.TARGET_DATE
. Finally, theNotificationState
of typeTriggeredJobEventProducer.TYPE
should be configured to start the resiliency lifecycle. SeeNotificationState
for more information on the fields there related to messaging resiliency.- Specified by:
markJobAsExecuted
in interfaceCustomizedScheduledJobRepository<D extends JpaScheduledJob>
- Parameters:
contextId
- The tracking identifier for the scheduled jobtimingType
- The type of job (e.g. whether it's recurring cron or single use)- Returns:
- the updated job if found and successfully updated, otherwise
null
. For example, if another process had already updated the record as being executed, this update would not succeed.
-
buildContextIdFilter
protected javax.persistence.criteria.Predicate buildContextIdFilter(String scheduledJobContextId, javax.persistence.criteria.Root<D> scheduledJobEntity, javax.persistence.criteria.CriteriaBuilder criteriaBuilder, Map<String,Object> parameterValues)
-
buildExecutedNotFilter
protected javax.persistence.criteria.Predicate buildExecutedNotFilter(boolean executedNot, javax.persistence.criteria.Root<D> scheduledJobEntity, javax.persistence.criteria.CriteriaBuilder criteriaBuilder, Map<String,Object> parameterValues)
-
initializeNotificationState
protected void initializeNotificationState(D entity, String notificationStateName, Instant changeTimestamp)
-
resetNotificationStateByNameAndJobDetailsContaining
@NonNull @Transactional(transactionManager="scheduledJobTransactionManager") public Optional<D> resetNotificationStateByNameAndJobDetailsContaining(@NonNull String notificationStateToReset, String detailName, Object detailValue)
Description copied from interface:CustomizedScheduledJobRepository
Finds the job whoseScheduledJob.details
contains aScheduledJobDetail
with the givenScheduledJobDetail.name
andScheduledJobDetail#value
, and resets the notification state with the matching name.- Specified by:
resetNotificationStateByNameAndJobDetailsContaining
in interfaceCustomizedScheduledJobRepository<D extends JpaScheduledJob>
detailName
- theScheduledJobDetail.name
that the detail should havedetailValue
- theScheduledJobDetail#value
that the detail should have- Returns:
- an
Optional
containing the updated job if updated,Optional.empty()
otherwise
-
findByContextIdIgnoringNarrowing
@NonNull public Optional<D> findByContextIdIgnoringNarrowing(@NonNull String contextId)
Description copied from interface:CustomizedScheduledJobRepository
Retrieves the job whoseScheduledJob#contextId
matches the one supplied. UnlikeTrackableRepository.findByContextId(String, ContextInfo)
, the results are not filtered by narrowing and thus even previously "deleted" results can be returned by this method.This functionality is useful for
DeploymentJobUnschedulingRequestListener
, which requires access to the deleted record for proper notification behavior.- Specified by:
findByContextIdIgnoringNarrowing
in interfaceCustomizedScheduledJobRepository<D extends JpaScheduledJob>
- Parameters:
contextId
- the context ID of the job to find- Returns:
- an
Optional
containing the job if found,Optional.empty()
otherwise
-
getTypeFactory
protected com.broadleafcommerce.common.extension.TypeFactory getTypeFactory()
-
getRepositoryEntityTypeManager
protected com.broadleafcommerce.common.jpa.RepositoryEntityTypeManager getRepositoryEntityTypeManager()
-
getRepository
protected ScheduledJobRepository<D> getRepository()
-
getDetailValueConverter
protected ScheduledJobDetailValueConverter getDetailValueConverter()
-
-