Problème de transaction [Résolu]

cancel
Showing results for 
Search instead for 
Did you mean: 
huberd
Member II

Problème de transaction [Résolu]

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.
2 Replies
cleseach
Active Member II

Re: Problème de transaction [Résolu]

Bonjour,

Il me semble plutôt que le problème vienne de la création de la transaction
tx = Repository.getUserTransaction(context, true);

Le second paramètre indique que la transaction est "read-only" (lecture seule).
Votre code doit essayer de créer/modifier/supprimer un objet, ce qui n'est pas possible en lecture seule.

Cordialement,

Charles Le Seac'h
huberd
Member II

Re: Problème de transaction [Résolu]

Bonjour,

Il me semble plutôt que le problème vienne de la création de la transaction
tx = Repository.getUserTransaction(context, true);

Le second paramètre indique que la transaction est "read-only" (lecture seule).
Votre code doit essayer de créer/modifier/supprimer un objet, ce qui n'est pas possible en lecture seule.

Cordialement,

Charles Le Seac'h

Ca marche, merci pour l'info.