private void insertReminder( final CreateEntity command, final Authentication authentication, final AsyncCallback<CreateResult> callback) { final ReminderDTO reminder = buildReminderDTO(command.getProperties(), authentication); final RequestManager<CreateResult> requestManager = new RequestManager<CreateResult>(new CreateResult(reminder), callback); final int futureRequest = requestManager.prepareRequest(); final RequestManager<ReminderDTO> objectRequestManager = new RequestManager<ReminderDTO>( reminder, new RequestManagerCallback<CreateResult, ReminderDTO>(requestManager) { @Override public void onRequestSuccess(ReminderDTO result) { reminderAsyncDAO.saveOrUpdate( result, new RequestManagerCallback<CreateResult, ReminderDTO>( requestManager, futureRequest) { @Override public void onRequestSuccess(ReminderDTO result) { // Reminder has been saved successfully. } }); } }); // Retrieves project. final Integer projectId = (Integer) command.getProperties().get(ReminderDTO.PROJECT_ID); projectAsyncDAO.get( projectId, new RequestManagerCallback<ReminderDTO, ProjectDTO>(objectRequestManager) { @Override public void onRequestSuccess(ProjectDTO result) { final Integer remindersListId = result.getRemindersList().getId(); reminder.setParentListId(remindersListId); } }); // Generates a negative ID reminderAsyncDAO.generateNegativeId( new RequestManagerCallback<ReminderDTO, Integer>(objectRequestManager) { @Override public void onRequestSuccess(Integer result) { reminder.setId(result); } }); objectRequestManager.ready(); requestManager.ready(); }