Revision 4235f40e
Added by Andreas Kohlbecker almost 6 years ago
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
fix #7274 GrantedAuthorityRevokingRegistrationUpdateLister: closing second session in case of hibernate exceptions and let them bubble up