Project

General

Profile

« Previous | Next » 

Revision 4235f40e

Added by Andreas Kohlbecker almost 6 years ago

fix #7274 GrantedAuthorityRevokingRegistrationUpdateLister: closing second session in case of hibernate exceptions and let them bubble up

View differences:

src/main/java/eu/etaxonomy/cdm/persistence/hibernate/GrantedAuthorityRevokingRegistrationUpdateLister.java
255 255
        // -----------------------------------------------------------------------------------------
256 256
        // this needs to be executed in a separate session to avoid concurrent modification problems
257 257
        Session newSession = session.getSessionFactory().openSession();
258
        Transaction txState = newSession.beginTransaction();
259

  
260
        Query userQuery = newSession.createQuery("select u from User u join u.grantedAuthorities ga where ga.authority in (:authorities)");
261
        userQuery.setParameterList("authorities", authorityStrings);
262
        List<User> users = userQuery.list();
263
        for(User user : users){
264
            List<GrantedAuthority> deleteFromUser = user.getGrantedAuthorities().stream().filter(
265
                        ga -> authorityStrings.contains(ga.getAuthority())
266
                    )
267
                    .collect(Collectors.toList());
268
            user.getGrantedAuthorities().removeAll(deleteFromUser);
269
        }
258
        try {
259
            Transaction txState = newSession.beginTransaction();
260

  
261
            Query userQuery = newSession.createQuery("select u from User u join u.grantedAuthorities ga where ga.authority in (:authorities)");
262
            userQuery.setParameterList("authorities", authorityStrings);
263
            List<User> users = userQuery.list();
264
            for(User user : users){
265
                List<GrantedAuthority> deleteFromUser = user.getGrantedAuthorities().stream().filter(
266
                            ga -> authorityStrings.contains(ga.getAuthority())
267
                        )
268
                        .collect(Collectors.toList());
269
                user.getGrantedAuthorities().removeAll(deleteFromUser);
270
            }
270 271

  
271
        Query groupQuery = newSession.createQuery("select g from Group g join g.grantedAuthorities ga where ga.authority in (:authorities)");
272
        groupQuery.setParameterList("authorities", authorityStrings);
273
        List<Group> groups = groupQuery.list();
274
        for(Group group : groups){
275
            List<GrantedAuthority> deleteFromUser = group.getGrantedAuthorities().stream().filter(
276
                        ga -> authorityStrings.contains(ga.getAuthority())
277
                    )
278
                    .collect(Collectors.toList());
279
            group.getGrantedAuthorities().removeAll(deleteFromUser);
272
            Query groupQuery = newSession.createQuery("select g from Group g join g.grantedAuthorities ga where ga.authority in (:authorities)");
273
            groupQuery.setParameterList("authorities", authorityStrings);
274
            List<Group> groups = groupQuery.list();
275
            for(Group group : groups){
276
                List<GrantedAuthority> deleteFromUser = group.getGrantedAuthorities().stream().filter(
277
                            ga -> authorityStrings.contains(ga.getAuthority())
278
                        )
279
                        .collect(Collectors.toList());
280
                group.getGrantedAuthorities().removeAll(deleteFromUser);
281
            }
282
            newSession.flush();
283
            txState.commit();
284
        } finally {
285
            // no catching of the exception, if the session flush fails the transaction should roll back and
286
            // the exception needs to bubble up so that the transaction in enclosing session is also rolled back
287
            newSession.close();
280 288
        }
281

  
282
        newSession.flush();
283
        txState.commit();
284
        newSession.close();
285 289
        // -----------------------------------------------------------------------------------------
286 290

  
287 291
        String hql = "delete from GrantedAuthorityImpl as ga where ga.authority in (:authorities)";

Also available in: Unified diff