AnsweredAssumed Answered

Problème de transaction [Résolu]

Question asked by huberd on Jun 10, 2008
Latest reply on Jun 10, 2008 by huberd
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.

Outcomes