Identity Manager supports the Async capabilities described in the following table.
Table 2–3 Async Capabilities|
Capability |
Description |
OperationalAttributes |
|---|---|---|
|
CancelRequest |
Cancels a request, using the request ID. |
None |
|
StatusRequest |
Returns the status of a request, using the request ID. |
None |
The following example performs an asynchronous status request.
String REQUEST_ID = "test-req-id-00000000000001";
String PRE_ASYNC_DELAY = "45";
String POST_ASYNC_DELAY = "15";
SessionAwareSpml2Client client = new
SessionAwareSpml2Client("http://example.com:8080/idm/servlet/openspml2");
ListTargetsResponse loginInfo = client.login("Configurator", "configurator");
PSOIdentifier psoId = new PSOIdentifier("maurelius", null, null);
LookupRequest lookupReq = new LookupRequest();
lookupReq.setPsoID(psoId);
lookupReq.setReturnData(ReturnData.EVERYTHING);
lookupReq.setRequestID(REQUEST_ID);
lookupReq.setExecutionMode(ExecutionMode.ASYNCHRONOUS);
lookupReq.addOpenContentElement(
new OperationalNameValuePair(
com.sun.idm.rpc.spml2.async.AsyncExecutorTask.IDM_BEFORE_ASYNC_DELAY_NAME,
PRE_ASYNC_DELAY
)
);
lookupReq.addOpenContentElement(
new OperationalNameValuePair(
com.sun.idm.rpc.spml2.async.AsyncExecutorTask.IDM_AFTER_ASYNC_DELAY_NAME,
POST_ASYNC_DELAY
)
);
LookupResponse lookupRes = (LookupResponse) client.send(lookupReq);
if (lookupRes.getStatus().equals(StatusCode.SUCCESS)) {
System.out.println("Lookup response is pending.");
}
StatusRequest statusReq = new StatusRequest();
statusReq.setAsyncRequestID(REQUEST_ID);
statusReq.setReturnResults(false);
statusReq.setExecutionMode(ExecutionMode.SYNCHRONOUS);
StatusResponse statusRes = (StatusResponse) client.send(statusReq);
if (lookupRes.getStatus().equals(StatusCode.SUCCESS)) {
System.out.println("Status response received.");
}
java.util.Iterator responseIterator = statusRes.responseIterator();
while (responseIterator.hasNext()) {
Response nestedResponse = (Response) responseIterator.next();
if (nestedResponse instanceof LookupResponse) {
if (nestedResponse.getStatus().equals(StatusCode.SUCCESS)) {
System.out.println("Successfully received nested lookup response.");
}
}
}