CdmUserHelper.createAuthorityFor() causes flush of pending transactions
This was observed when testing for regressions related to #8039, the following steps where done in the registration UI
- add "existing name" to registration workingset
- add NameTypeDesignation
- create new "Typified Name"
- Save NameTypeDesignationPopupEditor
during the save operation a PermissionDeniedException occurred:
[reference_int] 12:10:42,124 ERROR [qtp93314457-353][eu.et.va.mv.AbstractPopupEditor] - eu.etaxonomy.cdm.database.PermissionDeniedException: [CREATE] not permitted for 'system-admin' on Registration[uuid:5920ff17-ff73-4930-acb7-3a5d2d906279', toString:'Registration#42<5920ff17-ff73-4930-acb7-3a5d2d906279>']
this was caused by a flush on dirty in the CdmUserHelper.createAuthorityFor() method
#1 Updated by Andreas Kohlbecker 10 months ago
- Description updated (diff)
A forced flush before changing the authentication should help in this case. Other options are to
- do the authority creation in a separate transaction which would involve to use a different transaction isolation level.
- use a temporary sub-session like in
#2 Updated by Andreas Kohlbecker 10 months ago
Using the PROPAGATION_REQUIRES_NEW turned out to be in-appropriate. It was causing LazyInitializationExceptions, the same would be the case with temporary sub-sessions. In both cases it would be needed to reload cdm entity into the new session to avoid the LazyInitializationExceptions
Doing an explicit flush seems to be a good solution to the problem.