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 :

Spring + Hibernate + JTA


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Par défaut Spring + Hibernate + JTA
    Bonjour @ tous,

    J'utilise Spring Hibernate dans un contexte JTA.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <bean id="myEmf" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    	<property name="persistenceUnitName" value="myPersistenceUnit" />
    </bean>
    <bean id="myTxManager"
    	class="org.springframework.orm.jpa.JpaTransactionManager">
    	<property name="entityManagerFactory" ref="myEmf" />
    </bean>
    <tx:annotation-driven transaction-manager="myTxManager" />
    Le cas classique :
    Lors de l'utilisation de @Transactional
    Un begin est effectué au début de la méthode
    Un commit est effectué à la sortie de la méthode
    Tout ca est transparent et trés bien géré par Aop

    Par contre comment forcer le commit lors d'un traitement de gros volume de données.
    En effet si au bout du 10000eme éléments, une exception est levée ( sur une contrainte d'intégrité par ex)
    -> alors l'exception est remontée et le rollback sera effectué sur l'ensemble des eléments.

    Il semble que si l'on utilise JTA on ne puisse pas agir de manière programmatique sur les transactions.
    Comment faire ?

    Ps:
    1/
    J'ai testé au travers d'un catch de trapper l'exception et d'utiliser l'option
    @Transactional(noRollbackFor="monexception")
    Le Roolback est toujours effectif
    2/
    J'ai tenter de "piloter" la transaction em.getTransaction().commit();
    Pas le droit !!

    Merci pour vos remarques.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Par défaut
    tu peux pas fonctionner de manière de batch?

    de facon a splitter tes 10000 en packet de 1000?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Par défaut
    Effectivement c'est une solution que j'ai envisagé.
    Mais cela reste assez sale
    J'aimerai bien trouver une solution afin de pouvoir "reprendre la main" sur la transaction en cas de nécessité.
    Mais peut être que dans un contexte JTA cela impose de ne pas pouvoir intervenir sur les transactions. -> Alors je trouverai ça assez réducteur

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Par défaut
    je sais pas si tu pourras intervenir sur la dite txn...

    cfr sqlloader de oracle qui permet ce genre de chose, je pense pas qu'une solution de ce type le permette pr le moment :s

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Par défaut
    Quelqu'un aurait une autre idée ?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 143
    Par défaut
    Pourquoi tu ne peux pas utiliser un TransactionCallback et un TransactionTemplate? Mais le plus simple reste effectivement de faire des transactions déclaratives, avec @Transactionnal.
    Sinon je ne comprends pas pourquoi tu dis qu'avec JTA on ne peut pas agir programmatiquement sur les transaction?
    Et sinon on a toujours Spring Batch pour faire des batchs :-)

Discussions similaires

  1. Configuration Hibernate Spring et JTA
    Par totoranky dans le forum Hibernate
    Réponses: 3
    Dernier message: 28/08/2009, 16h03
  2. [Spring][Hibernate] Transaction déclarative
    Par mauvais_karma dans le forum Hibernate
    Réponses: 13
    Dernier message: 03/07/2008, 17h09
  3. [SPRING][HIBERNATE][MYSQL] insert et valeur des champs.
    Par nikalkal dans le forum Hibernate
    Réponses: 9
    Dernier message: 27/04/2006, 14h07
  4. Réponses: 2
    Dernier message: 16/02/2006, 09h04
  5. Réponses: 5
    Dernier message: 25/05/2005, 21h16

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