Class ARequestQueue
- java.lang.Object
-
- com.netscape.cmscore.request.ARequestQueue
-
- Direct Known Subclasses:
RequestQueue
public abstract class ARequestQueue extends java.lang.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 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 persistently.
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 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(IPolicy policy, IService service, INotify notify, INotify pendingNotify)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract void
approveRequest(IRequest request)
Approves a request.abstract void
cancelRequest(IRequest request)
Cancels a request.IRequest
cloneAndMarkPending(IRequest r)
Clones a request object and mark it pending.abstract IRequest
cloneRequest(IRequest r)
Clones a request object.abstract RequestId
findRequestBySourceId(java.lang.String id)
Locates a request from the SourceId.abstract IRequestList
findRequestsBySourceId(java.lang.String id)
Locates all requests with a particular SourceId.INotify
getPendingNotify()
Retrieves the notifier for pending request.protected abstract java.util.Enumeration<RequestId>
getRawList()
Get complete list of RequestId values found i this queue.IRequestScheduler
getRequestScheduler()
Gets request scheduler.protected java.lang.String
getUserIdentity()
get the identity of the current userIRequestList
listRequests()
Returns an enumerator that lists all RequestIds in the queue.abstract IRequestList
listRequestsByStatus(RequestStatus s)
Returns an enumerator that lists all RequestIds for requests that are in the given status.protected void
logChange(IRequest request)
log a change in the request statusabstract void
markAsServiced(IRequest request)
Marks as serviced after destination authority has serviced request.abstract void
markRequestPending(IRequest request)
Puts a new request into the PENDING state.void
processRequest(IRequest r)
Begins processing for this request.void
recover()
Resends requests New non-blocking recover method.abstract void
recoverWillBlock()
recover from a crash.abstract void
rejectRequest(IRequest request)
Rejects a request.void
releaseRequest(IRequest request)
Releases the LOCK on a request obtained from findRequest() or newRequest()protected void
setCreationTime(IRequest request, java.util.Date date)
protected access for setting the creation time of a request.protected void
setModificationTime(IRequest request, java.util.Date date)
protected access for setting the modification time of a request.void
setRequestScheduler(IRequestScheduler scheduler)
Sets request scheduler.protected void
stateEngine(IRequest r)
abstract void
updateRequest(IRequest r)
Updates the request in the permanent data store.
-
-
-
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
-
-
Method Detail
-
getRawList
protected abstract java.util.Enumeration<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.
-
setModificationTime
protected final void setModificationTime(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(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.
-
cloneRequest
public abstract IRequest cloneRequest(IRequest r) 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:
r
- request to be cloned- Returns:
- cloned request
- Throws:
EBaseException
- failed to clone request
-
setRequestScheduler
public void setRequestScheduler(IRequestScheduler scheduler)
Sets request scheduler.- Parameters:
scheduler
- request scheduler
-
getRequestScheduler
public IRequestScheduler getRequestScheduler()
Gets request scheduler.- Returns:
- request scheduler
-
processRequest
public final void processRequest(IRequest 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
-
markRequestPending
public abstract void markRequestPending(IRequest 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 IRequest cloneAndMarkPending(IRequest 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
-
approveRequest
public abstract void approveRequest(IRequest 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
-
rejectRequest
public abstract void rejectRequest(IRequest 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
-
cancelRequest
public abstract void cancelRequest(IRequest 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
-
markAsServiced
public abstract void markAsServiced(IRequest 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
-
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 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.
- Returns:
- request list
-
listRequestsByStatus
public abstract 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 argumentNOTE: 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
-
findRequestBySourceId
public abstract RequestId findRequestBySourceId(java.lang.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 abstract IRequestList findRequestsBySourceId(java.lang.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.
-
releaseRequest
public final void releaseRequest(IRequest request)
Releases the LOCK on a request obtained from findRequest() or newRequest()- Parameters:
request
- request
-
updateRequest
public abstract void updateRequest(IRequest r) throws EBaseException
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.
- Parameters:
r
- the request that is being updated- Throws:
EBaseException
- failed to update request
-
stateEngine
protected final void stateEngine(IRequest r) throws EBaseException
- Throws:
EBaseException
-
logChange
protected void logChange(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()
Resends requests New non-blocking recover method.
-
recoverWillBlock
public abstract void recoverWillBlock()
recover 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
-
-