Class AbstractWork

    • Field Detail

      • RANDOM

        protected static final Random RANDOM
      • suspending

        protected transient volatile boolean suspending
        Suspend requested by the work manager.
      • suspended

        protected transient volatile boolean suspended
        Suspend acknowledged by the work instance.
      • repositoryName

        protected String repositoryName
        Repository name for the Work instance, if relevant.
      • docId

        protected String docId
        Doc id for the Work instance, if relevant. This describes for the WorkManager a document on which this Work instance will act.

        Either docId or docIds is set. Not both.

      • docIds

        protected List<String> docIds
        Doc ids for the Work instance, if relevant. This describes for the WorkManager the documents on which this Work instance will act.

        Either docId or docIds is set. Not both.

      • isTree

        protected boolean isTree
        If true, the docId is only the root of a set of documents on which this Work instance will act.
      • originatingUsername

        protected String originatingUsername
        The originating username to use when opening the CoreSession.
        Since:
        8.1
      • status

        protected String status
      • schedulingTime

        protected long schedulingTime
      • startTime

        protected long startTime
      • completionTime

        protected long completionTime
      • callerThread

        protected String callerThread
      • GLOBAL_DLQ_COUNT_REGISTRY_NAME

        public static final String GLOBAL_DLQ_COUNT_REGISTRY_NAME
      • traceContext

        protected byte[] traceContext
    • Constructor Detail

      • AbstractWork

        public AbstractWork()
        Constructs a Work instance with a unique id.
      • AbstractWork

        public AbstractWork​(String id)
    • Method Detail

      • getId

        public String getId()
        Description copied from interface: Work
        The work id.

        The id is used for equality comparisons, and as a key in persistent queues.

        Specified by:
        getId in interface Work
        Returns:
        the work id, which must not be null
      • setSchedulePath

        public void setSchedulePath​(WorkSchedulePath path)
        Description copied from interface: Work
        Set the schedule path, internal usage
        Specified by:
        setSchedulePath in interface Work
      • setDocument

        public void setDocument​(String repositoryName,
                                String docId,
                                boolean isTree)
      • setDocument

        public void setDocument​(String repositoryName,
                                String docId)
      • setDocuments

        public void setDocuments​(String repositoryName,
                                 List<String> docIds)
      • setOriginatingUsername

        public void setOriginatingUsername​(String originatingUsername)
        Since:
        8.1
      • setWorkInstanceSuspending

        public void setWorkInstanceSuspending()
        Description copied from interface: Work
        CALLED BY THE WORK MANAGER (not user code) when it requests that this work instance be suspended.
        Specified by:
        setWorkInstanceSuspending in interface Work
      • isSuspending

        public boolean isSuspending()
        Description copied from interface: Work
        Checks if a suspend has been requested for this work instance by the work manager.

        If true, then state should be saved, Work.suspended() should be called, and the Work.work() method should return.

        Specified by:
        isSuspending in interface Work
      • suspended

        public void suspended()
        Description copied from interface: Work
        Must be called by Work implementations to advertise that state saving is done, when Work.isSuspending() returned true. After this is called, the Work.work() method should return.
        Specified by:
        suspended in interface Work
      • isWorkInstanceSuspended

        public boolean isWorkInstanceSuspended()
        Description copied from interface: Work
        CALLED BY THE WORK MANAGER (not user code) to check if this work instance really suspended.
        Specified by:
        isWorkInstanceSuspended in interface Work
      • setWorkInstanceState

        public void setWorkInstanceState​(Work.State state)
        Description copied from interface: Work
        CALLED BY THE WORK MANAGER (not user code) to set this work instance's state.
        Specified by:
        setWorkInstanceState in interface Work
      • getWorkInstanceState

        public Work.State getWorkInstanceState()
        Description copied from interface: Work
        CALLED BY THE WORK MANAGER (not user code) to get this work instance's state.

        Used only to get the final state of a completed instance.

        Specified by:
        getWorkInstanceState in interface Work
      • setProgress

        public void setProgress​(Work.Progress progress)
        Description copied from interface: Work
        This method should be called periodically by the actual work method when it knows of its progress.
        Specified by:
        setProgress in interface Work
        Parameters:
        progress - the progress
        See Also:
        Progress(float), Progress(long, long)
      • getProgress

        public Work.Progress getProgress()
        Description copied from interface: Work
        Gets a progress report for this work instance.
        Specified by:
        getProgress in interface Work
        Returns:
        a progress report, not null
      • setStatus

        public void setStatus​(String status)
        Sets a human-readable status for this work instance.
        Parameters:
        status - the status
      • getStatus

        public String getStatus()
        Description copied from interface: Work
        Gets a human-readable status for this work instance.
        Specified by:
        getStatus in interface Work
        Returns:
        a human-readable status
      • initSession

        @Deprecated
        public CoreSession initSession()
        Deprecated.
        since 8.1. Use openSystemSession().
        May be called by implementing classes to open a session on the repository.
        Returns:
        the session (also available in session field)
      • openSystemSession

        public void openSystemSession()
        May be called by implementing classes to open a System session on the repository.
        Since:
        8.1
      • openUserSession

        public void openUserSession()
        May be called by implementing classes to open a Use session on the repository.

        It uses the set originatingUsername to open the session.

        Since:
        8.1
      • run

        public void run()
        Description copied from interface: Work
        Runs the work instance and does all the transaction management and retry.
        Specified by:
        run in interface Work
      • getSpanFromContext

        protected io.opencensus.trace.Span getSpanFromContext​(byte[] traceContext)
      • buildWorkFailureEventProps

        public Map<String,​Serializable> buildWorkFailureEventProps​(RuntimeException exception)
        Builds failure event properties. Work implementations can override this method to inject more event properties than the default.
        Since:
        10.1
      • workFailed

        public void workFailed​(RuntimeException exception)
        Called when the worker failed to run successfully even after retrying.
        Parameters:
        exception - the exception that occurred
        Since:
        10.1
      • appendWorkToDeadLetterQueue

        protected void appendWorkToDeadLetterQueue()
      • runWorkWithTransaction

        protected void runWorkWithTransaction()
        Does work under a transaction.
        Since:
        5.9.4
      • getRetryCount

        public int getRetryCount()
        Gets the number of times that this Work instance can be retried in case of concurrent update exceptions.
        Returns:
        0 for no retry, or more if some retries are possible
        Since:
        5.8
        See Also:
        work()
      • cleanUp

        public void cleanUp​(boolean ok,
                            Exception e)
        This method is called after work() is done in a finally block, whether work completed normally or was in error or was interrupted.
        Specified by:
        cleanUp in interface Work
        Parameters:
        ok - true if the work completed normally
        e - the exception, if available
      • getOriginatingUsername

        public String getOriginatingUsername()
        Description copied from interface: Work
        Gets the user on behalf of which this work is done.
        Specified by:
        getOriginatingUsername in interface Work
        Returns:
        the originating username, or null
      • getSchedulingTime

        public long getSchedulingTime()
        Description copied from interface: Work
        Gets the time at which this work instance was first scheduled.
        Specified by:
        getSchedulingTime in interface Work
        Returns:
        the scheduling time (milliseconds since epoch)
      • getStartTime

        public long getStartTime()
        Description copied from interface: Work
        Gets the time at which this work instance was first started.
        Specified by:
        getStartTime in interface Work
        Returns:
        the start time (milliseconds since epoch), or 0 if not stated
      • getCompletionTime

        public long getCompletionTime()
        Description copied from interface: Work
        Gets the time at which this work instance was completed, suspended or failed.
        Specified by:
        getCompletionTime in interface Work
        Returns:
        the completion time (milliseconds since epoch), or 0 if not completed
      • setStartTime

        public void setStartTime()
        Description copied from interface: Work
        CALLED BY THE WORK MANAGER (not user code) to set the start time on the work instance.
        Specified by:
        setStartTime in interface Work
      • setCompletionTime

        protected void setCompletionTime()
      • getCategory

        public String getCategory()
        Description copied from interface: Work
        Gets the category for this work.

        Used to choose an execution queue.

        Specified by:
        getCategory in interface Work
        Returns:
        the category, or null for the default
      • getDocument

        public DocumentLocation getDocument()
        Description copied from interface: Work
        Gets the document impacted by the work.

        Returns null if the work isn't about a single document.

        Specified by:
        getDocument in interface Work
        Returns:
        the document, or null. This is always a DocumentLocation with an IdRef
      • getDocuments

        public List<DocumentLocation> getDocuments()
        Description copied from interface: Work
        Gets the documents impacted by the work.

        Returns null if the work isn't about documents.

        Specified by:
        getDocuments in interface Work
        Returns:
        the documents, or an empty list. List elements are always a DocumentLocation with an IdRef
      • isDocumentTree

        public boolean isDocumentTree()
        Description copied from interface: Work
        Returns true if Work.getDocument() is only the root of a set of documents on which this Work instance will act.
        Specified by:
        isDocumentTree in interface Work
        Returns:
        true if a whole tree is impacted
      • commitOrRollbackTransaction

        public void commitOrRollbackTransaction()
        Releases the transaction resources by committing the existing transaction (if any). This is recommended before running a long process.
      • startTransaction

        public boolean startTransaction()
        Starts a new transaction.

        Usually called after commitOrRollbackTransaction(), for instance for saving back the results of a long process.

        Returns:
        true if a new transaction was started
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object
      • getPartitionKey

        public String getPartitionKey()
        Description copied from interface: Work
        Returns a key that can be used by the WorkManager implementation to guarantee that works with the same partition key will be executed in the order they are submitted.
        Specified by:
        getPartitionKey in interface Work