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

Persistance des données Java Discussion :

Architecture d'un client lourd (Swing) avec Hibernate


Sujet :

Persistance des données Java

  1. #1
    En attente de confirmation mail

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Points : 1 267
    Points
    1 267
    Par défaut Architecture d'un client lourd (Swing) avec Hibernate
    Bonjour,
    Je collabore depuis peu à un projet au travail dans lequel quelque chose me chiffonne.

    Il s'agit d'une appli Swing faisant des accès bdd vers un serveur distant, au moyen tantôt d'hibernate, tantôt de jdbc direct.

    Le problème est que les requêtes complexes faites avec Hibernate sont extrêmement peu performantes, et sont donc remplacées par des requêtes SQL.

    Je n'ai pas regardé en profondeur, mais il apparait clairement que chaque client Swing utilise la session Hibernate sur sa propre JVM.

    Hors pour utiliser les capacités de cache d'hibernate, il apparait logique de mettre hibernate côté serveur, et de faire des appels RMI (ou http) entre le client et le serveur.
    Tel que fait actuellement, si deux personnes utilisent l'application en même temps, ils ne peuvent partager le même cache. Pire, il y aurait des incohérence sur le client avec des requêtes pure jdbc si Hibernate n'a pas flush correctement (je soupçonne en fait le cache d'être tout simplement disabled).

    Est-ce que mon raisonnement semble logique ? Est-ce que l'on a bien là un anti-pattern ?

  2. #2
    Membre actif Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Points : 277
    Points
    277
    Par défaut
    Salut,

    Si j'ai bien compris, les applis Swing client font appel directement au serveur de base de données, il n'y a pas d'application au niveau du serveur qui joue l'interface entre les clients et le serveur de base de donnée, j'avoue que je n'ai pas encore eu l'occasion de faire de l'hibernate, mais si c'est bien le cas, je crois qu'utiliser Hibernate ou du pure JDBC ne changera rien, puisque chaque client à sa propre connexion directe à la base de donnée.

    nicorama dit:
    Hors pour utiliser les capacités de cache d'hibernate, il apparait logique de mettre hibernate côté serveur, et de faire des appels RMI (ou http) entre le client et le serveur.
    C'est exactement ça, quand tu as parlé de RMI et http, il devrait y avoir un serveur d'application au niveau du serveur et qui, lui seul devrait accéder à la base de donnée, c'est lui qui devrait implémenter de l'hibernate ou du JDBC, tous les clients ne se connecteraient que via ce serveur d'application.

    Quand je relis ce que j'ai écrit, je m'aperçois de ne t'avoir rien dit de plus , au minimum, ça up ton problème, en espérant que quelqu'un y voit plus clair.
    Certified SCJP 5.0 / SCWCD 5.0 / SCEA 5.0
    C'est une grande folie de vouloir être sage tout seul.
    Duc de La Rochefoucauld

  3. #3
    Membre du Club Avatar de arafat877
    Inscrit en
    Septembre 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 46
    Points : 46
    Points
    46
    Par défaut
    Salut ;-)
    Supposant que nous sommes entrain d'utiliser un client lourd swing communiquant avec un serveur basé Spring Framwork via Spring RMI, qui se connecte avec une petite base de données Derby via iBatis.

    Pourriez-vous me donner quelques idées sur les accès concurrents, ou bien sur les transactions, et sans oublier que tous les beans implémentes l'interface Serializable, ainsi que toutes les méthodes DAO sont synchronized.

    Je veux dire que notre serveur sera accédé par plusieurs clients et en réseaux !


    Merci d'avance.

    Cordialement !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par nicorama Voir le message
    Bonjour,
    Hors pour utiliser les capacités de cache d'hibernate, il apparait logique de mettre hibernate côté serveur, et de faire des appels RMI (ou http) entre le client et le serveur.
    Bonjour, sauf si vous configuré un cache de second niveau (qui souvent n'aura rien de magique), le cache hibernate est ce qu'on appelle le cache de premier niveau qui correspond à la session hibernate.
    Comme les différents clients n'utilisent pas la même session Hibernate, déporter hibernate coté serveur ne changera rien à vos performances.

    Avant de commencer à regarder ce genrer de chose, a votre place je regarderai a quoi ressemble les requête SQL générées par hibernate (via un showSql=true). Si les requêtes sont trop complexes ou trop nombreuses, cela cache une mauvaise utilisation d'hibernate et le mettre coté serveur ne changera rien.

Discussions similaires

  1. Comparatif swing/eclipse RCP pour faire du client lourd
    Par joseph_p dans le forum AWT/Swing
    Réponses: 25
    Dernier message: 08/08/2019, 02h12
  2. Client lourd Swing et default permissions
    Par herotic dans le forum Langage
    Réponses: 11
    Dernier message: 08/06/2012, 16h04
  3. [EJB3] Problème avec mon client lourd en Swing
    Par bza88 dans le forum Java EE
    Réponses: 3
    Dernier message: 30/01/2012, 10h26
  4. Problème EJB 3.1 et client lourd (Swing)
    Par mimamima dans le forum NetBeans
    Réponses: 1
    Dernier message: 16/05/2011, 12h57
  5. [EJB3] Architecture application client lourd
    Par kristof_machin dans le forum Java EE
    Réponses: 3
    Dernier message: 19/04/2006, 14h36

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