@Override public UserResult createUsers(String instanceId, List<User> users, User requestingUser) { logger.info("Create users for service instance with ID {}.", instanceId); ServiceInstance instance = null; try { instance = instanceDAO.getInstanceById(instanceId); checkInstanceAvailability(instance); final APPlatformController controller = APPlatformControllerFactory.getInstance(instance.getControllerId()); final ProvisioningSettings settings = configService.getProvisioningSettings(instance, UserMapper.toServiceUser(requestingUser)); // Forward request final InstanceStatusUsers status = controller.createUsers(instance.getInstanceId(), settings, mapToServiceUsers(users)); if (status != null) { // get modified users if (status.getChangedUsers() != null) { // merge returned users with existing users mergeServiceUsers(users, status.getChangedUsers()); } // forward call to provisioning service on application instance if (status.isInstanceProvisioningRequested()) { final ProvisioningService provisioning = provisioningFactory.getInstance(instance); final UserResult result = provisioning.createUsers(instanceId, users, requestingUser); if (provResult.isError(result)) { return result; } // Get modified users if (result.getUsers() != null) { users = result.getUsers(); } } // If everything worked well we will save all changed parameters instance.setInstanceParameters(status.getChangedParameters()); } instance.setProvisioningStatus(ProvisioningStatus.WAITING_FOR_USER_CREATION); em.persist(instance); timerService.initTimers(); final UserResult result = provResult.getOKResult(UserResult.class); result.setUsers(users); return result; } catch (Exception e) { logger.warn(e.getMessage(), e); return provResult.getErrorResult( UserResult.class, e, getLocale(requestingUser), instance, instanceId); } }