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
ConstructorsConstructorDescriptionJpaCustomizedScheduledJobRepository
(com.broadleafcommerce.common.extension.TypeFactory typeFactory, com.broadleafcommerce.common.jpa.RepositoryEntityTypeManager repositoryEntityTypeManager) -
Method Summary
Modifier and TypeMethodDescriptionprotected jakarta.persistence.criteria.Predicate
buildContextIdFilter
(String scheduledJobContextId, jakarta.persistence.criteria.Root<D> scheduledJobEntity, jakarta.persistence.criteria.CriteriaBuilder criteriaBuilder, Map<String, Object> parameterValues) protected jakarta.persistence.criteria.Predicate
buildExecutedNotFilter
(boolean executedNot, jakarta.persistence.criteria.Root<D> scheduledJobEntity, jakarta.persistence.criteria.CriteriaBuilder criteriaBuilder, Map<String, Object> parameterValues) establishTriggerStateIfApplicable
(String contextId) Establish theNotificationStateAware
contract forTriggeredJobEventProducer.TYPE
.findByContextIdIgnoringNarrowing
(String contextId) Retrieves the job whoseScheduledJob#contextId
matches the one supplied.protected ScheduledJobDetailValueConverter
protected ScheduledJobRepository<D>
protected com.broadleafcommerce.common.jpa.RepositoryEntityTypeManager
protected com.broadleafcommerce.common.extension.TypeFactory
protected void
initializeNotificationState
(D entity, String notificationStateName, Instant changeTimestamp) markJobAsExecuted
(String contextId, TimingType timingType) Mark a job as executed viaScheduledJob.isExecuted()
.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) streamAll
(com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Read a stream of all ScheduledJobs in the data store.
-
Constructor Details
-
JpaCustomizedScheduledJobRepository
public JpaCustomizedScheduledJobRepository(com.broadleafcommerce.common.extension.TypeFactory typeFactory, com.broadleafcommerce.common.jpa.RepositoryEntityTypeManager repositoryEntityTypeManager)
-
-
Method Details
-
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
-
buildExecutedNotFilter
-
initializeNotificationState
-
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
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
-
getManagedType
-
getTypeFactory
protected com.broadleafcommerce.common.extension.TypeFactory getTypeFactory() -
getRepositoryEntityTypeManager
protected com.broadleafcommerce.common.jpa.RepositoryEntityTypeManager getRepositoryEntityTypeManager() -
getRepository
-
setRepository
-
getDetailValueConverter
-