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

Spring Java Discussion :

implémentation de openSessionInView


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par défaut implémentation de openSessionInView
    Bonjour,

    Je suis entrain de développer une application Flex/J2EE avec Spring 2.5.5 et Hibernate 3.1.3.
    Mon problème c'est que lorsqu'un utilisateur ouvre l'écran "Information Client" puis affiche les informations d'un client en modification, je veux que l'enregistrement soit verrouillé en base (Pessimistic Lock ou optimistic lock) selon le cas. Et l'enregistrement reste verrouillé jusqu’à l'utilisateur valide les modification (commit()) ou bien il ferme l'écran.

    Sur le net on parle de long conversation (Hibernate), et de openSessionInView pattern. Mais je n'ai pas trouvé un exemple clair.

    L’essentiel c'est de garder la session hibernate ouverte jusqu'à la fin de saisie.
    puis on fait le commit ou le rollback.

    J'ai essayer d'utiliser la classe : "org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor" mais je n'ai pas réussi.
    Je ne sais pas comment la configurer avec Spring.

    J'ai passé trop de temps et ça devient urgent Qui peut m'aider ???

    Merci d'avance.

  2. #2
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par défaut
    Voici les details:

    J'ai ajouté ce code dans web.xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <filter>
    <filter-name>openSessionInViewFilter</filter-name>
    <filter-class>
    org.springframework.orm.hibernate3.support.OpenSes sionInViewFilter
    </filter-class>
    <init-param>
    <param-name>sessionFactoryBeanName</param-name>
    <param-value>sessionFactory</param-value> <!-- This is the default value, in case you have given different name please specify the same. -->
    </init-param>
    </filter>
    Dans applicationContext-service.xml j'ai ajouté ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <bean id="operationManager" parent="txProxyTemplateAgDatasource">
    <property name="target">
    <bean class="com.mycom.services.impl.OperationManagerImp l">
    <property name="dao" ref="operationDAO"/>
    </bean>
    </property>
    <!-- Override default transaction attributes b/c of UserExistsException -->
    <property name="transactionAttributes">
    <props >
    <prop key="insert*">PROPAGATION_REQUIRED</prop>
    <prop key="remove*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="doLock">PROPAGATION_NEVER</prop>
    <prop key="doCommit">PROPAGATION_NEVER</prop>
    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
    </props>
    </property>
    </bean>
    J'ai deux services doLock pour faire le lock et doCommit pour commiter et enlever le lock et j'ai mis le propriété comme PROPAGATION_NEVER.
    Et voici le code java:

    si je clic sur button1 il exécute:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public void dolock(){
     
    TimesheetBO timesheet = null;
     
    Session session = getHibernateTemplate().getSessionFactory().getCurr entSession();
    session.setFlushMode(FlushMode.NEVER);
    Transaction tx = session.getTransaction();
    tx.begin();
    timesheet = (TimesheetBO)session.get("TimesheetBO", "123456", LockMode.UPGRADE_NOWAIT);
     
    FlexContext.getFlexSession().setAttribute("transac tion", tx);
     
    }
    et si je clic sur button2 il exécute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void doCommit(){
    Transaction tx = (Transaction)FlexContext.getFlexSession().getAttri bute("transaction");
    tx.commit();
    }
    Mais lorsqu'il execute tx.commit(); j'ai cette exception: org.hibernate.TransactionException: Transaction not successfully started
    Car la session est closed après doLock().

    Qui a une réponse pour ça ???

Discussions similaires

  1. Réponses: 8
    Dernier message: 09/01/2013, 05h28
  2. Réponses: 8
    Dernier message: 04/06/2004, 09h13
  3. Moteur physique : comment l'implémenter ?
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 17/12/2003, 12h56
  4. Réponses: 2
    Dernier message: 06/07/2002, 12h36
  5. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19

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