Class ARequestQueue

  • All Implemented Interfaces:
    com.netscape.certsrv.request.IRequestQueue
    Direct Known Subclasses:
    RequestQueue

    public abstract class ARequestQueue
    extends java.lang.Object
    implements com.netscape.certsrv.request.IRequestQueue
    The ARequestQueue class is an abstract class that implements most portions of the IRequestQueue interface. This includes the state engine as defined for processing IRequest objects.

    !Put state machine description here!

    This class defines several abstract protected functions that need to be defined by the concrete implementation. In particular, this class does not implement the operations for storing requests persistantly.

    This class also provides several accessor functions for setting fields in the IRequest object. These functions are provided as an aid to saving and restoring the state in the database.

    This class also implements the locking operations specified by the IRequestQueue interface.

    Version:
    $Revision$ $Date$
    Author:
    thayes
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static org.slf4j.Logger logger  
      static java.lang.String REQUEST_VERSION
      global request version for tracking request changes.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected ARequestQueue​(com.netscape.certsrv.request.IPolicy policy, com.netscape.certsrv.request.IService service, com.netscape.certsrv.request.INotify notify, com.netscape.certsrv.request.INotify pendingNotify)  
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      protected abstract void addRequest​(com.netscape.certsrv.request.IRequest request)
      Add the request to the store.
      void approveRequest​(com.netscape.certsrv.request.IRequest r)
      Implements IRequestQueue.approveRequest
      void cancelRequest​(com.netscape.certsrv.request.IRequest r)
      Implments IRequestQueue.cancelRequest
      com.netscape.certsrv.request.IRequest cloneAndMarkPending​(com.netscape.certsrv.request.IRequest r)
      Implements IRequestQueue.cloneAndMarkPending
      com.netscape.certsrv.request.IRequest cloneRequest​(com.netscape.certsrv.request.IRequest r)
      Implements IRequestQueue.cloneRequest
      protected com.netscape.certsrv.request.IRequest createRequest​(com.netscape.certsrv.request.RequestId id, java.lang.String requestType)
      protected access for creating a new Request object
      com.netscape.certsrv.request.IRequest findRequest​(com.netscape.certsrv.request.RequestId id)
      Implements IRequestQueue.findRequest
      com.netscape.certsrv.request.INotify getPendingNotify()
      Retrieves the notifier for pending request.
      protected abstract java.util.Enumeration<com.netscape.certsrv.request.RequestId> getRawList()
      Get complete list of RequestId values found i this queue.
      com.netscape.certsrv.request.IRequestScheduler getRequestScheduler()
      Gets request scheduler.
      protected java.lang.String getUserIdentity()
      get the identity of the current user
      com.netscape.certsrv.request.IRequestList listRequests()
      Implements IRequestQueue.listRequests
      com.netscape.certsrv.request.IRequestList listRequestsByStatus​(com.netscape.certsrv.request.RequestStatus s)
      Implements IRequestQueue.listRequestsByStatus
      protected void logChange​(com.netscape.certsrv.request.IRequest request)
      log a change in the request status
      void markAsServiced​(com.netscape.certsrv.request.IRequest r)
      caller must lock request and release request
      void markRequestPending​(com.netscape.certsrv.request.IRequest r)
      Implements IRequestQueue.markRequestPending
      protected abstract void modifyRequest​(com.netscape.certsrv.request.IRequest request)
      Modify the request in the store.
      protected abstract com.netscape.certsrv.request.RequestId newEphemeralRequestId()
      Create a new synchronous request ID
      com.netscape.certsrv.request.IRequest newRequest​(java.lang.String requestType)
      Creates a new request object.
      com.netscape.certsrv.request.IRequest newRequest​(java.lang.String requestType, boolean ephemeral)
      Implements IRequestQueue.newRequest
      protected abstract com.netscape.certsrv.request.RequestId newRequestId()
      Create a new (unique) RequestId.
      void processRequest​(com.netscape.certsrv.request.IRequest r)
      Implements IRequestQueue.processRequest
      protected abstract com.netscape.certsrv.request.IRequest readRequest​(com.netscape.certsrv.request.RequestId id)
      Read a request from the persistant store.
      void recover()
      New non-blocking recover method.
      void recoverWillBlock()
      recover from a crash.
      void rejectRequest​(com.netscape.certsrv.request.IRequest r)
      Implements IRequestQueue.rejectRequest
      void releaseRequest​(com.netscape.certsrv.request.IRequest request)
      Implements IRequestQueue.releaseRequest
      protected void setCreationTime​(com.netscape.certsrv.request.IRequest request, java.util.Date date)
      protected access for setting the creation time of a request.
      protected void setModificationTime​(com.netscape.certsrv.request.IRequest request, java.util.Date date)
      protected access for setting the modification time of a request.
      void setRequestScheduler​(com.netscape.certsrv.request.IRequestScheduler scheduler)
      Sets request scheduler.
      protected void setRequestStatus​(com.netscape.certsrv.request.IRequest request, com.netscape.certsrv.request.RequestStatus status)
      protected access for setting the current state of a request.
      void updateRequest​(com.netscape.certsrv.request.IRequest r)
      Updates the request in the permanent data store.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface com.netscape.certsrv.request.IRequestQueue

        findRequestBySourceId, findRequestsBySourceId, getLastRequestIdInRange, getPagedRequests, getPagedRequestsByFilter, getPagedRequestsByFilter, getPagedRequestsByFilter, getPublishingStatus, getRequestRepository, listRequestsByFilter, listRequestsByFilter, listRequestsByFilter, removeAllObjects, resetSerialNumber, setPublishingStatus
    • Field Detail

      • logger

        public static org.slf4j.Logger logger
      • REQUEST_VERSION

        public static final java.lang.String REQUEST_VERSION
        global request version for tracking request changes.
        See Also:
        Constant Field Values
    • Constructor Detail

      • ARequestQueue

        protected ARequestQueue​(com.netscape.certsrv.request.IPolicy policy,
                                com.netscape.certsrv.request.IService service,
                                com.netscape.certsrv.request.INotify notify,
                                com.netscape.certsrv.request.INotify pendingNotify)
    • Method Detail

      • newRequestId

        protected abstract com.netscape.certsrv.request.RequestId newRequestId()
                                                                        throws EBaseException
        Create a new (unique) RequestId. (abstract)

        This method must be implemented by the specialized class to generate a new id from data in the persistant store. This id is used to create a new request object.

        Returns:
        a new RequestId object.
        Throws:
        EBaseException - indicates that creation of the new id could not be completed.
        See Also:
        RequestId
      • newEphemeralRequestId

        protected abstract com.netscape.certsrv.request.RequestId newEphemeralRequestId()
        Create a new synchronous request ID
      • addRequest

        protected abstract void addRequest​(com.netscape.certsrv.request.IRequest request)
                                    throws EBaseException
        Add the request to the store. (abstract)

        This function is called when a new request immediately after creating a new request.

        Parameters:
        request - the request to add.
        Throws:
        EBaseException - TODO: this is not implemented yet
      • modifyRequest

        protected abstract void modifyRequest​(com.netscape.certsrv.request.IRequest request)
        Modify the request in the store. (abstract)

        Update the persistant copy of this request with the current values in the object.

        Currently there are no hints for what has changed, so the entire request should be updated.

        Parameters:
        request -
        Throws:
        EBaseException - TODO: this is not implemented yet
      • getRawList

        protected abstract java.util.Enumeration<com.netscape.certsrv.request.RequestId> getRawList()
        Get complete list of RequestId values found i this queue.

        This method can form the basis for creating other types of search/list operations (although there are probably more efficient ways of doing this. ARequestQueue implements default versions of some of the searching by using this method as a basis.

        TODO: return IRequestList -or- just use listRequests as the basic engine.

        Returns:
        an Enumeration that generates RequestId objects.
      • setRequestStatus

        protected final void setRequestStatus​(com.netscape.certsrv.request.IRequest request,
                                              com.netscape.certsrv.request.RequestStatus status)
        protected access for setting the current state of a request.

        Parameters:
        request - The request to be modified.
        status - The new value for the request status.
      • setModificationTime

        protected final void setModificationTime​(com.netscape.certsrv.request.IRequest request,
                                                 java.util.Date date)
        protected access for setting the modification time of a request.

        Parameters:
        request - The request to be modified.
        date - The new value for the time.
      • setCreationTime

        protected final void setCreationTime​(com.netscape.certsrv.request.IRequest request,
                                             java.util.Date date)
        protected access for setting the creation time of a request.

        Parameters:
        request - The request to be modified.
        date - The new value for the time.
      • createRequest

        protected final com.netscape.certsrv.request.IRequest createRequest​(com.netscape.certsrv.request.RequestId id,
                                                                            java.lang.String requestType)
        protected access for creating a new Request object

        Parameters:
        id - The identifier for the new request
        Returns:
        A new request object. The caller should fill in other data values from the datastore.
      • newRequest

        public com.netscape.certsrv.request.IRequest newRequest​(java.lang.String requestType)
                                                         throws EBaseException
        Description copied from interface: com.netscape.certsrv.request.IRequestQueue
        Creates a new request object. A request id is assigned to it - see IRequest.getRequestId, and the status is set to RequestStatus.BEGIN

        The request is LOCKED. The caller MUST release the request object by calling releaseRequest().

        TODO: provide other required values (such as type and sourceId)

        Specified by:
        newRequest in interface com.netscape.certsrv.request.IRequestQueue
        Parameters:
        requestType - request type
        Returns:
        new request
        Throws:
        EBaseException - failed to create new request
      • newRequest

        public com.netscape.certsrv.request.IRequest newRequest​(java.lang.String requestType,
                                                                boolean ephemeral)
                                                         throws EBaseException
        Implements IRequestQueue.newRequest

        Specified by:
        newRequest in interface com.netscape.certsrv.request.IRequestQueue
        Parameters:
        requestType - - request type
        ephemeral - - is the request ephemeral?
        Returns:
        new request
        Throws:
        EBaseException - failed to create new request
        See Also:
        IRequestQueue.newRequest(java.lang.String, boolean)
      • cloneRequest

        public com.netscape.certsrv.request.IRequest cloneRequest​(com.netscape.certsrv.request.IRequest r)
                                                           throws EBaseException
        Implements IRequestQueue.cloneRequest

        Specified by:
        cloneRequest in interface com.netscape.certsrv.request.IRequestQueue
        Parameters:
        r - request to be cloned
        Returns:
        cloned request
        Throws:
        EBaseException - failed to clone request
        See Also:
        IRequestQueue.cloneRequest(com.netscape.certsrv.request.IRequest)
      • findRequest

        public com.netscape.certsrv.request.IRequest findRequest​(com.netscape.certsrv.request.RequestId id)
                                                          throws EBaseException
        Implements IRequestQueue.findRequest

        Specified by:
        findRequest in interface com.netscape.certsrv.request.IRequestQueue
        Parameters:
        id - request id
        Returns:
        found request
        Throws:
        EBaseException - failed to access request queue
        See Also:
        IRequestQueue.findRequest(com.netscape.certsrv.request.RequestId)
      • setRequestScheduler

        public void setRequestScheduler​(com.netscape.certsrv.request.IRequestScheduler scheduler)
        Description copied from interface: com.netscape.certsrv.request.IRequestQueue
        Sets request scheduler.
        Specified by:
        setRequestScheduler in interface com.netscape.certsrv.request.IRequestQueue
        Parameters:
        scheduler - request scheduler
      • getRequestScheduler

        public com.netscape.certsrv.request.IRequestScheduler getRequestScheduler()
        Description copied from interface: com.netscape.certsrv.request.IRequestQueue
        Gets request scheduler.
        Specified by:
        getRequestScheduler in interface com.netscape.certsrv.request.IRequestQueue
        Returns:
        request scheduler
      • processRequest

        public final void processRequest​(com.netscape.certsrv.request.IRequest r)
                                  throws EBaseException
        Implements IRequestQueue.processRequest

        Specified by:
        processRequest in interface com.netscape.certsrv.request.IRequestQueue
        Parameters:
        r - request to be processed
        Throws:
        EBaseException - failed to process request
        See Also:
        IRequestQueue.processRequest(com.netscape.certsrv.request.IRequest)
      • markRequestPending

        public final void markRequestPending​(com.netscape.certsrv.request.IRequest r)
                                      throws EBaseException
        Implements IRequestQueue.markRequestPending

        Specified by:
        markRequestPending in interface com.netscape.certsrv.request.IRequestQueue
        Parameters:
        r - the request to mark PENDING
        Throws:
        EBaseException - failed to mark request as pending
        See Also:
        IRequestQueue.markRequestPending(com.netscape.certsrv.request.IRequest)
      • cloneAndMarkPending

        public com.netscape.certsrv.request.IRequest cloneAndMarkPending​(com.netscape.certsrv.request.IRequest r)
                                                                  throws EBaseException
        Implements IRequestQueue.cloneAndMarkPending

        Specified by:
        cloneAndMarkPending in interface com.netscape.certsrv.request.IRequestQueue
        Parameters:
        r - request to be cloned
        Returns:
        cloned request mark PENDING
        Throws:
        EBaseException - failed to clone or mark request
        See Also:
        IRequestQueue.cloneAndMarkPending(com.netscape.certsrv.request.IRequest)
      • approveRequest

        public final void approveRequest​(com.netscape.certsrv.request.IRequest r)
                                  throws EBaseException
        Implements IRequestQueue.approveRequest

        Specified by:
        approveRequest in interface com.netscape.certsrv.request.IRequestQueue
        Parameters:
        r - the request that is being approved
        Throws:
        EBaseException - failed to approve request
        See Also:
        IRequestQueue.approveRequest(com.netscape.certsrv.request.IRequest)
      • rejectRequest

        public final void rejectRequest​(com.netscape.certsrv.request.IRequest r)
                                 throws EBaseException
        Implements IRequestQueue.rejectRequest

        Specified by:
        rejectRequest in interface com.netscape.certsrv.request.IRequestQueue
        Parameters:
        r - the request that is being rejected
        Throws:
        EBaseException - failed to reject request
        See Also:
        IRequestQueue.rejectRequest(com.netscape.certsrv.request.IRequest)
      • cancelRequest

        public final void cancelRequest​(com.netscape.certsrv.request.IRequest r)
                                 throws EBaseException
        Implments IRequestQueue.cancelRequest

        Specified by:
        cancelRequest in interface com.netscape.certsrv.request.IRequestQueue
        Parameters:
        r - the request that is being canceled
        Throws:
        EBaseException - failed to cancel request
        See Also:
        IRequestQueue.cancelRequest(com.netscape.certsrv.request.IRequest)
      • markAsServiced

        public final void markAsServiced​(com.netscape.certsrv.request.IRequest r)
        caller must lock request and release request
        Specified by:
        markAsServiced in interface com.netscape.certsrv.request.IRequestQueue
        Parameters:
        r - request
      • listRequests

        public com.netscape.certsrv.request.IRequestList listRequests()
        Implements IRequestQueue.listRequests

        Should be overridden by the specialized class if a more efficient method is available for implementing this operation.

        Specified by:
        listRequests in interface com.netscape.certsrv.request.IRequestQueue
        Returns:
        request list
        See Also:
        IRequestQueue.listRequests()
      • listRequestsByStatus

        public com.netscape.certsrv.request.IRequestList listRequestsByStatus​(com.netscape.certsrv.request.RequestStatus s)
        Implements IRequestQueue.listRequestsByStatus

        Should be overridden by the specialized class if a more efficient method is available for implementing this operation.

        Specified by:
        listRequestsByStatus in interface com.netscape.certsrv.request.IRequestQueue
        Parameters:
        s - request status
        Returns:
        request list
        See Also:
        IRequestQueue.listRequestsByStatus(com.netscape.certsrv.request.RequestStatus)
      • releaseRequest

        public final void releaseRequest​(com.netscape.certsrv.request.IRequest request)
        Implements IRequestQueue.releaseRequest

        Specified by:
        releaseRequest in interface com.netscape.certsrv.request.IRequestQueue
        Parameters:
        request - request
        See Also:
        IRequestQueue.releaseRequest(com.netscape.certsrv.request.IRequest)
      • updateRequest

        public void updateRequest​(com.netscape.certsrv.request.IRequest r)
        Description copied from interface: com.netscape.certsrv.request.IRequestQueue
        Updates the request in the permanent data store.

        This call can be made after changing a value like source id or owner, to force the new value to be written.

        The request must be locked to make this call.

        Specified by:
        updateRequest in interface com.netscape.certsrv.request.IRequestQueue
        Parameters:
        r - the request that is being updated
      • logChange

        protected void logChange​(com.netscape.certsrv.request.IRequest request)
        log a change in the request status
      • getUserIdentity

        protected java.lang.String getUserIdentity()
        get the identity of the current user
      • recover

        public void recover()
        New non-blocking recover method.
        Specified by:
        recover in interface com.netscape.certsrv.request.IRequestQueue
      • recoverWillBlock

        public void recoverWillBlock()
        recover from a crash. Resends all requests that are in the APPROVED state.
      • getPendingNotify

        public com.netscape.certsrv.request.INotify getPendingNotify()
        Description copied from interface: com.netscape.certsrv.request.IRequestQueue
        Retrieves the notifier for pending request.
        Specified by:
        getPendingNotify in interface com.netscape.certsrv.request.IRequestQueue
        Returns:
        notifier for pending request