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."); } } }