Index: lams_central/src/java/org/lamsfoundation/lams/webservice/SPEnrolmentServlet.java =================================================================== diff -u -r12fb6744f0ae3dd8e31b69d333bfb4e3d44e8cf6 -r0957abe7df0238b85edabcf3a4e37d41d4f0140e --- lams_central/src/java/org/lamsfoundation/lams/webservice/SPEnrolmentServlet.java (.../SPEnrolmentServlet.java) (revision 12fb6744f0ae3dd8e31b69d333bfb4e3d44e8cf6) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/SPEnrolmentServlet.java (.../SPEnrolmentServlet.java) (revision 0957abe7df0238b85edabcf3a4e37d41d4f0140e) @@ -181,9 +181,9 @@ .findByPropertyValues(Organisation.class, "code", allExistingSubOrganisationCodes); // map of course code -> subcourse code -> subcourse - Map> allExistingSubcourses = allExistingSubcourseObjects + Map> allExistingSubcourses = allExistingSubcourseObjects .parallelStream().filter(o -> o.getParentOrganisation() != null) - .collect(Collectors.groupingByConcurrent(o -> o.getParentOrganisation().getCode(), + .collect(Collectors.groupingByConcurrent(o -> o.getParentOrganisation().getOrganisationId(), Collectors.toConcurrentMap(Organisation::getCode, o -> o))); // load all ext courses and subcourses from DB which are present in the output file @@ -259,7 +259,11 @@ } catch (Exception e) { logger.error("Error while provisioning SP enrolments", e); } finally { - HibernateSessionManager.closeSession(); + try { + HibernateSessionManager.closeSession(); + } catch (Exception e) { + logger.error("Error while closing Hibernate session", e); + } } }).start(); @@ -374,15 +378,16 @@ private Set assignUsers(Organisation course, Map>> mappings, ExtServer extServer, Integer creatorId, Set allUsersParsed, Map userIDs, Map>> allExistingRoles, - Map> allExistingSubcourses, + Map> allExistingSubcourses, Map allExistingExtCourses, Map allExistingUsers, boolean isStaffMode, AtomicInteger mappingsProcessed) throws UserInfoValidationException { Set allUsersInSubcourses = new HashSet<>(); String courseCode = course.getCode(); + Integer courseId = course.getOrganisationId(); // go through each subcourse for (Entry> subcourseEntry : mappings.get(courseCode).entrySet()) { String subcourseCode = subcourseEntry.getKey(); - ConcurrentMap existingSubcourses = allExistingSubcourses.get(courseCode); + ConcurrentMap existingSubcourses = allExistingSubcourses.get(courseId); Organisation subcourse = existingSubcourses == null ? null : existingSubcourses.get(subcourseCode); // create subcourse @@ -395,7 +400,7 @@ if (existingSubcourses == null) { existingSubcourses = new ConcurrentHashMap<>(); - allExistingSubcourses.put(course.getCode(), existingSubcourses); + allExistingSubcourses.put(courseId, existingSubcourses); } existingSubcourses.put(subcourse.getCode(), subcourse); allExistingExtCourses.put(extSubOrgMap.getOrganisation().getOrganisationId(), extSubOrgMap);