Class RequestQueue

java.lang.Object
com.netscape.cmscore.request.RequestQueue

public class RequestQueue extends Object
This class represents the request queue within the certificate server. This class implements the state engine for processing request objects. There are several queues, such as KRA and CA requests. Each of these request queues has a defined set of policies, a notification service (for request completion) and a service routine. The request queue provides an interface for creating and viewing requests, as well as performing operations on them. !Put state machine description here! This class also provides several accessor functions for setting fields in the request object. These functions are provided for saving and restoring the state in the database. This class also implements the locking operations.
Version:
$Revision$ $Date$
Author:
thayes
  • Field Details

    • logger

      public static org.slf4j.Logger logger
    • REQUEST_VERSION

      public static final String REQUEST_VERSION
      Global request version for tracking request changes.
      See Also:
    • dbSubsystem

      protected DBSubsystem dbSubsystem
    • mBaseDN

      protected String mBaseDN
    • requestRepository

      protected RequestRepository requestRepository
  • Constructor Details

    • RequestQueue

      public RequestQueue(DBSubsystem dbSubsystem, RequestRepository requestRepository, IPolicy policy, IService service, INotify notifier, INotify pendingNotifier) throws EBaseException
      Create a request queue.
      Parameters:
      policy - A policy enforcement module. This object is called to make adjustments to the request, and decide whether it needs agent approval.
      service - The service object. This object actually performs the request after it is finalized and approved.
      notifier - A notifier object (optional). The notify() method of this object is invoked when the request is completed (COMPLETE, REJECTED or CANCELED states).
      pendingNotifier - A notifier object (optional). Like the notifier, except the notification happens if the request is made PENDING. May be the same as the 'n' argument if desired.
      Throws:
      EBaseException - failed to retrieve request queue
  • Method Details

    • getRequestScheduler

      public IRequestScheduler getRequestScheduler()
      Gets request scheduler.
      Returns:
      request scheduler
    • setRequestScheduler

      public void setRequestScheduler(IRequestScheduler scheduler)
      Sets request scheduler.
      Parameters:
      scheduler - request scheduler
    • cloneRequest

      public Request cloneRequest(Request request) throws EBaseException
      Clones a request object. A new request id is assigned and all attributes of the request is copied to cloned request, except for the sourceID of the original request (remote authority's request ID). The cloned request that is returned is LOCKED. The caller MUST release the request object by calling releaseRequest().
      Parameters:
      request - request to be cloned
      Returns:
      cloned request
      Throws:
      EBaseException - failed to clone request
    • findRequest

      public Request findRequest(RequestId id) throws EBaseException
      Throws:
      EBaseException
    • getUserIdentity

      protected String getUserIdentity()
      Get the identity of the current user
    • stateEngine

      protected void stateEngine(Request r) throws EBaseException
      Throws:
      EBaseException
    • markRequestPending

      public void markRequestPending(Request request) throws EBaseException
      Puts a new request into the PENDING state. This call is only valid for requests with status BEGIN. An error is generated for other cases. This call might be used by agent servlets that want to copy a previous request, and resubmit it. By putting it into PENDING state, the normal agent screens can be used for further processing.
      Parameters:
      request - the request to mark PENDING
      Throws:
      EBaseException - failed to mark request as pending
    • cloneAndMarkPending

      public Request cloneAndMarkPending(Request r) throws EBaseException
      Clones a request object and mark it pending. A new request id is assigned and all attributes of the request is copied to cloned request, except for the sourceID of the original request (remote authority's request ID). The cloned request that is returned is LOCKED. The caller MUST release the request object by calling releaseRequest().
      Parameters:
      r - request to be cloned
      Returns:
      cloned request mark PENDING
      Throws:
      EBaseException - failed to clone or mark request
    • cancelRequest

      public void cancelRequest(Request request) throws EBaseException
      Cancels a request. The request must be locked. This call will fail if: the request is not in PENDING state The agent servlet (or other application) may wish to store AgentMessage values to indicate the reason for the action
      Parameters:
      request - the request that is being canceled
      Throws:
      EBaseException - failed to cancel request
    • rejectRequest

      public void rejectRequest(Request request) throws EBaseException
      Rejects a request. The request must be locked. This call will fail if: the request is not in PENDING state The agent servlet (or other application) may wish to store AgentMessage values to indicate the reason for the action
      Parameters:
      request - the request that is being rejected
      Throws:
      EBaseException - failed to reject request
    • approveRequest

      public void approveRequest(Request request) throws EBaseException
      Approves a request. The request must be locked. This call will fail if: the request is not in PENDING state the policy modules do not accept the request If the policy modules reject the request, then the request will remain in the PENDING state. Messages from the policy module can be display to the agent to indicate the source of the problem. The request processing code adds an AgentApproval to this request that contains the authentication id of the agent. This data is retrieved from the Session object (qv).
      Parameters:
      request - the request that is being approved
      Throws:
      EBaseException - failed to approve request
    • markAsServiced

      public void markAsServiced(Request request) throws EBaseException
      Marks as serviced after destination authority has serviced request. Used by connector. Caller must lock request and release request.
      Parameters:
      request - request
      Throws:
      EBaseException
    • findRequestBySourceId

      public RequestId findRequestBySourceId(String id)
      Locates a request from the SourceId.
      Parameters:
      id - a unique identifier for the record that is based on the source of the request, and possibly an identify assigned by the source.
      Returns:
      The requestid corresponding to this source id. null is returned if the source id does not exist.
    • findRequestsBySourceId

      public IRequestList findRequestsBySourceId(String id)
      Locates all requests with a particular SourceId.
      Parameters:
      id - an identifier for the record that is based on the source of the request
      Returns:
      A list of requests corresponding to this source id. null is returned if the source id does not exist.
    • getRawList

      protected Enumeration<RequestId> getRawList()
      Get complete list of RequestId values found in 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. RequestQueue 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.
    • setModificationTime

      protected void setModificationTime(Request request, 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 void setCreationTime(Request request, 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.
    • listRequests

      public IRequestList listRequests()
      Returns an enumerator that lists all RequestIds in the queue. The caller should use the RequestIds to locate each request by calling findRequest(). NOTE: This interface will not be useful for large databases. This needs to be replaced by a VLV (paged) search object. Should be overridden by the specialized class if a more efficient method is available for implementing this operation.
      Returns:
      request list
    • listRequestsByStatus

      public IRequestList listRequestsByStatus(RequestStatus s)
      Returns an enumerator that lists all RequestIds for requests that are in the given status. For example, all the PENDING requests could be listed by specifying RequestStatus.PENDING as the status argument NOTE: This interface will not be useful for large databases. This needs to be replace by a VLV (paged) search object. Should be overridden by the specialized class if a more efficient method is available for implementing this operation.
      Parameters:
      s - request status
      Returns:
      request list
    • recoverWillBlock

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

      public INotify getPendingNotify()
      Retrieves the notifier for pending request.
      Returns:
      notifier for pending request
    • processRequest

      public void processRequest(Request r) throws EBaseException
      Begins processing for this request. This call is valid only on requests with status BEGIN An error is generated for other cases.
      Parameters:
      r - request to be processed
      Throws:
      EBaseException - failed to process request
    • logChange

      protected void logChange(Request request)
      log a change in the request status
    • releaseRequest

      public final void releaseRequest(Request request)
      Releases the LOCK on a request obtained from findRequest() or newRequest()
      Parameters:
      request - request
    • recover

      public void recover()
      Resends requests New non-blocking recover method.