Bonjour,J'ai créé un bean qui s'authentifie et effectue des opérations en tant que System de la manière suivante.
// Change Current User by SYSTEM User
String currentUser=AuthenticationUtil.getCurrentUserName();
AuthenticationUtil.setSystemUserAsCurrentUser();
try {
// Mon Code
…
} catch (Throwable err) {
// Mon code de gestion d'erreurs
}
// Restore Current User
AuthenticationUtil.setCurrentUser(currentUser);
Le bean se connecte en tant que utilisateur SYSTEM et tous marche.Maintenant je souhaiterai mettre mon code dans une transaction comme ceci :
// Change Current User by SYSTEM User
String currentUser=AuthenticationUtil.getCurrentUserName();
AuthenticationUtil.setSystemUserAsCurrentUser();
FacesContext context = FacesContext.getCurrentInstance();
UserTransaction tx = null;
try {
tx = Repository.getUserTransaction(context, true);
tx.begin();
// Mon Code
…
// commit the transaction
tx.commit();
} catch (Throwable err) {
// Mon code de gestion d'erreurs
try { if (tx != null) {tx.rollback();} } catch (Exception tex) {}
}
// Restore Current User
AuthenticationUtil.setCurrentUser(currentUser);
Lorsque j'utilise maintenant mon bean, il me semble qu'il créé la transaction pour l'utilisateur courrant et non pour l'utilisateur SYSTEM, ce qui me retourne le message d'erreur suivant:Impossible d'annuler la copie de travail du contenu suite à une erreur système :Accès interdit. Le système est actuellement en lecture seule.
Ce qui est normal pour l'utilisateur courant.Comment y remedier pour que la transaction s'applique à l'utilisateur SYSTEM.Merci pour votre aide.