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

JDBC Java Discussion :

Isolation des données


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Par défaut Isolation des données
    Bonjour à tous,

    Étant étudiant en alternance, il me manque un peu d'expérience sur certaines architectures...
    Je sollicite donc votre aide.

    Mon problème :

    Nous avons une application lourde en java.
    Cette application est critique car au delà de la sauvegarde des données dans une base de données, elle effectue des traitements dans notre usine : qualification et disqualification de process.

    En choisissant 3 critères, nous créons une table temporaire via d'autres tables.
    Ensuite il est possible de faire des updates, delete sur d'autres tables par rapport aux données qui sont dans cette table temporaire.

    Cependant, il est possible que deux personnes se connectent simultanément sur les 3 mêmes critères (sinon ça ne pose pas de problème).
    Dans ce cas là, si 2 updates, deletes ou ajout d'informations cela nous posent des problèmes d'intégrités (pas de problème coté usine).

    On voudrait, en fait, juste bloquer l'accès lorsqu'une personne essaie de se connecter à l'application avec les 3 mêmes critères qu'une autre personne déja connectée.

    On a pensé à faire un flag en DB : lorsqu'une personne se connecte on met les 3 criteres a false, et lorsqu'elle se deconnecte on remet à true.
    Mais ça risque de poser une problème si par exemple, cette personne se loggue et éteint brutalement son ordi sans passer par la case delogging.

    Peut être est possible uniquement en utilisant l'isolation des données fourni par JDBC, mais je ne suis pas très sur de moi...

    Avez vous des solutions à proposer ?

    Cordialement,
    Nicolas

  2. #2
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Par défaut
    Citation Envoyé par nic2t Voir le message
    On a pensé à faire un flag en DB : lorsqu'une personne se connecte on met les 3 criteres a false, et lorsqu'elle se deconnecte on remet à true.
    Mais ça risque de poser une problème si par exemple, cette personne se loggue et éteint brutalement son ordi sans passer par la case delogging.
    Bonjour,

    Pourquoi ne pas mettre en place un timeout, au bout d'un temps donné, tu déverrouilles.

    Par isolation des données JDBC tu penses aux mutex / verrous?
    C'est probablement le plus propre.

    Cela dit je ne suis pas expert !

  3. #3
    Membre averti
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Par défaut
    Si je mets un timeout, je dois le mettre coté serveur, je pense.
    ça me parait être une bonne idée, mais je vois pas trop comment la mettre en place.

    Et à part un serveur de base de données, on a rien : c'est une application lourde...

    Peut être pourrait on faire tourner un script qui check mais ça parait trop lourd comme solution...

    En parlant d'isolation, je parlais des différents niveau d'isolation pour les accès concurrents, mais je sais pas vraiment s'ils s'appliquent dans ces cas là (il me semble que c'est entre le start transaction et le commit/rollback).

    Le verrous est une bonne idée aussi, mais peut on locker qu'une seule partie de la table... je ne sais pas du tout.
    Et si on arrive à locker une partie de la table, l'application plante pour une raison quelconque, comment la re déverrouiller ?

    Merci pour ton aide.

    Nicolas

  4. #4
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Par défaut
    Citation Envoyé par nic2t Voir le message
    Le verrous est une bonne idée aussi, mais peut on locker qu'une seule partie de la table... je ne sais pas du tout.
    Et si on arrive à locker une partie de la table, l'application plante pour une raison quelconque, comment la re déverrouiller ?

    Merci pour ton aide.

    Nicolas
    Je ne sais pas si on peut verrouiller ligne par ligne dans une table mais c'est fort probable.
    Je pense que la bdd gère un timeout, ou quelque autre mécanisme qui permet de déverrouiller.

    Ce sont uniquement des suppositions, essaie de faire une recherche ou poste dans le forum SGBD concerné.

  5. #5
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    Citation Envoyé par Génoce Voir le message
    Je ne sais pas si on peut verrouiller ligne par ligne dans une table mais c'est fort probable.
    En effet, il suffit d'utiliser une instruction du genre "Select ... For Update".
    Cette instruction n'existe peut etre pas sur toutes les base de données.

    cela permet de locker une ou plusieurs ligne selon le critère.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre averti
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Par défaut
    En y réfléchissant plus sérieusement, je pense que l'on ne peut pas utiliser le blocage de quelques lignes.

    Le soucis vient du fait que les lignes de l'écran n°1 proviennent d'une succession de requêtes qui forment une table temporaire.

    Admettons que deux personnes se connectent au même moment selon les trois critères.
    Elles chargent chacun leur écran de ligne de process via une table temporaire chacune (une par user) (en passant si on pouvait faire une table temporaire par série de 3 critères, le problème serait réglé mais c'est trop couteux en temps je pense...)

    Une fois que toutes les lignes sont chargées, le user A décide de disqualifier un process.
    Si le user B décide lui aussi de disqualifier ce process, cela va poser un problème au niveau de l'usine.

    Cependant même si on lock la table le temps de la transaction du user A.
    Le user B a quand même les mauvaises données car il utilise une table temporaire faite de données qui ne sont plus à jour.

    La solution est de bloquer l'accès complet à la selection de 3 critères.
    C'est la seule que je pense envisageable.

    Du coup, il faut une valeur qui soit toujours à false, et qui passe à true pendant 15 minutes par exemple.
    Mais c'est trés contraignant : la personne ne pourra se logger que 15 minutes ou si le user veut disqualifier un process dangereux et qu'il plante, il faudra attendre 15 minutes pour pouvoir le disqualifier.

    Au delà de la technique, j'ai vraiment du mal à trouver une solution conceptuelle...

Discussions similaires

  1. Isolation des données
    Par bliml dans le forum Oracle
    Réponses: 1
    Dernier message: 01/03/2007, 09h48
  2. cherche module ou langage pour récupérer des données audio..
    Par Ry_Yo dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/05/2003, 17h44
  3. Réponses: 13
    Dernier message: 20/03/2003, 08h11
  4. Structure des données en retour d'un DBExtract ?
    Par mikouts dans le forum XMLRAD
    Réponses: 4
    Dernier message: 24/01/2003, 15h15
  5. Réponses: 2
    Dernier message: 18/12/2002, 10h30

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