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 :

Faire du load balancing avec Hibernate ?


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut Faire du load balancing avec Hibernate ?
    Bonjour à tous,

    Nous avons une application web utilisant Struts 2, Spring et Hibernate 3 sous TomCat 5.5 et JDK 1.5.

    Tout fonctionne bien avec un TomCat et une DB (DB2).

    Mais je me pose la question de la montée en charge de cette application (plus de 250 utilisateurs simultanés).

    Nous avons configuré nos mapping Hibernate avec du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <id name="id" column="ID">
    			<generator class="increment" />
    		</id>
    et nous avons déjà vu des problèmes lorqu'une autre petite application insérait dans la même DB un objet. Hibernate de l'application principale ne voyait pas l'insertion par l'autre appli, et donc faisait des ConstraintViolation au prochain insert. Nous avons dû changer le generator pour mettre un custom qui récupère le max id à chaque insert.

    Ma question est la suivante :
    Si je mets 2 serveurs d'applications en clusters pour faire du load balancing, j'aurais donc 2 war, et donc 2 applications qui ne se "voient" pas. Vais-je avoir des problèmes de ConstraintViolation ?

    Avez vous une idée et/ou une solution à cela ?

    J'ai vu des solutions comme Terracotta, mais je me demande si cela est vraiment nécessaire ?

    Merci pour vos conseils.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Ta solution de generator perso à base de max me parait également très foireuse, surtout dans le cas où tu auras deux serveurs.
    Utilise plutôt le generator native, voire sequence qui semble être la méthode supportée par DB2.
    Tu ne devrais plus avoir de problème à l'insertion.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Par défaut
    increment est effectivement une solution à éviter, mais avec db2 c'est identity qu'il faut utiliser (voire native qui revient à utiliser identity) et non pas sequence

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    @ ohanny

    La documentation d'Hibernate indique que DB2 supporte également les séquences.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut
    Effectivement ce serait la solution, mais que faire si on veut rester le plus générique possible pour éventuellement pouvoir passer sur d'autres DB sans changer le code ? (Oracle, ...)

  6. #6
    Membre chevronné Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2003
    Messages : 457
    Par défaut
    Bonjour,

    Tu peux utiliser un id généré aléatoirement. Par exemple, sur le projet sur lequel je travaille, on utilise un UUID :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.util.UUID.randomUUID().toString()
    La proba de générer deux clés identiques est vraiment super faible.

    Et pour avoir l'ordre d'insertion (si tu en as besoin), on a un champ created qui contient la date de création de l'objet (= grosso modo la date d'insertion)

    A+
    Gronono

Discussions similaires

  1. Load balancing avec JBoss et Apache 2
    Par perenono dans le forum Wildfly/JBoss
    Réponses: 18
    Dernier message: 16/09/2018, 22h40
  2. Load balancing avec timeout et débordement
    Par delagoutte dans le forum Apache
    Réponses: 1
    Dernier message: 09/07/2009, 09h21
  3. Load balancing avec 2 wan
    Par beloc dans le forum Réseau
    Réponses: 3
    Dernier message: 04/10/2006, 01h24

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