IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

TransactionAttributes et contexte de persistence


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Par défaut TransactionAttributes et contexte de persistence
    Bonjour à tous,

    J'ai un problème sur hibernate que je ne comprend pas :

    J'ai une méthode A en transactionAttribute NotSuppored qui appelle une méthode B du même bean qui est en Required. Cette méthode B récupère ensuite une entité à partir d'un autre bean (qui fait un EntityManager.find).

    Mon problème est que l'entité récupéré n'est plus dans le contexte de persistence mais je ne comprend pas pourquoi....

    Quelqu'un a une idée?

    Merci d'avance !

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    c'est plus un problème d'ejb que d'hibernate. Ta méthode A n'a pas de transaction (not supported!). Elle appel B, qui requiert une transaction. La transaction est donc crée, B appelé et ensuite la transaction est terminée. Ce qui explique que ton objet retourné n'a plus de session hibernate associé.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Par défaut
    Je me suis mal exprimé : mon entité récupérée n'est même plus managée au sein de la méthode B... donc lorsque la transaction est censée être encore ouverte....

    Une autre idée?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Par défaut
    Je vais un peu rendre ça plus claire avec un peu de pseudo-code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Bean1 {
      @TransactionAttribute(NotSupported)
       a() {
            b();
       }
     
       @TransactionAttribute(Required)
       b() {
            EntiteX entiteX = bean2.getEntiteX();
            // ici entiteX n'est plus managé ! mais pourquoi?
       }
    }
    Et mon autre bean qui me permet de récupérer une entité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Bean2 {
         @TransactionAttribute(Required)
         EntiteX getEntiteX() {
            return entityManager.find(....)
        }
    }
    Sachez en tout cas que si ma méthode Bean1.a() est en Required, l'entité que je récupère dans la méthode b() est managée... mais pour d'autres raisons la méthode a() doit absolument être en NotSupported.

    Quelqu'un a une idée?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Par défaut
    J'ai trouvé deux manières de résoudre mon problème :
    - Déplacer la méthode b() dans un autre bean
    - Faire un lookup du bean1 dans la méthode a() afin d'appeler la méthode b()

    Je pense qu'en fait lorsqu'on fait un premier appel sur un bean donné, celui ci hérite du transactionAttribute de sa méthode qui est appelée (dans mon exemple, la méthode a).

    Si on veut par la suite appeler une méthode du même bean mais dans un contexte transactionnel différent, il faut donc faire un nouveau lookup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/10/2012, 21h27
  2. Réponses: 2
    Dernier message: 28/10/2011, 20h48
  3. Réponses: 5
    Dernier message: 26/10/2010, 19h37
  4. Réponses: 9
    Dernier message: 06/04/2010, 15h56
  5. Réponses: 2
    Dernier message: 01/08/2008, 10h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo