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

Bases de données Delphi Discussion :

DATASNAP connexion paramétrable


Sujet :

Bases de données Delphi

  1. #1
    Membre averti
    Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Par défaut DATASNAP connexion paramétrable
    Bonjour,

    Dans une architecture multi-niveaux, Datasnap Serveur, DataSnap Client, est-il possible d'avoir une connexion aux base de données dans le DataSnap Serveur paramétrable.

    Exemple :
    En fonction d'un utilisateur défini par le DataSnap Client, le DataSnap Serveur se connecte à une base de donnée différente.

    Si cela est possible, pourriez vous m'aiguiller sur la manière de procéder ?

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 096
    Par défaut
    Soit c'est le client qu'utilise un autre Serveur DataSnap, soit via un autre Port ou une autre IP

    Si tu veux conserver le même Serveur DataSnap qui dispatche vers plusieurs DB, lors de la connexion, le client appel une méthode qui indique la DB cible (celle configurée) et dans ton Serveur, tu dois gérer un Multiton de TSQLConnection où le facteur de la fabrique est le nom de la DB Cible

    Tu dois indiquer le bon SQLConnection a tes Query ... un code orienté Pattern avec des instanciations dynamiques par des Fabrique sera préférable à un code abusant des DataModule
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre averti
    Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Par défaut Merci
    C'est exatement ça :

    le même Serveur DataSnap qui dispatche vers plusieurs DB
    Sans pour autant que ce soit le client qui indique la DB cible, mais plutôt comme un choix de plusieurs DB cible, en fonction d'un login ...

    Pour l'instant, je découvre l'utilisation d'un Client et Serveur DATASNAP, et c'est plutôt bien.

    Je vais essayé de comprendre vos indices : Multiton, Pattern.

    Précision :
    Le Serveur Datasnap dispatch vers plusieurs DB, mais chaque client Datasnap sera "relié" au travers du serveur Datasnap à une seule une seule DB cible.
    Dans ce cas, est-il toujours nécessaire de se diriger vers une solution "Codage Multiton" ?

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 096
    Par défaut
    Citation Envoyé par foucoudav Voir le message
    Précision :
    Le Serveur Datasnap dispatch vers plusieurs DB, mais chaque client Datasnap sera "relié" au travers du serveur Datasnap à une seule une seule DB cible.
    Dans ce cas, est-il toujours nécessaire de se diriger vers une solution "Codage Multiton" ?
    Je n'ai pas bien compris ta précision

    Si tu n'as qu'une seule DB Cible, le TSQLConnection peut être un Singleton.
    Et dans ce cas, un TDataModule sera approprié, d'ailleurs, dans un Serveur DataSnap, il y a un Module par défaut, utilise le !
    Inutile de faire un code complexe pour rien !

    Le Multiton c'est l'évolution du Singleton qui gère une instance selon un contexte donné !
    le contexte pouvant être le login de client ou l'id d'un thread, c'est un concept, le développeur peut prévoir ce qu'il veut comme contexte (ou facteur)

    Pense aussi au Multithread, si tu as plusieurs clients, j'ignore comment gère DataSnap ses requêtes ?
    Je n'ai pas eu l'opportunité de l'utiliser, c'est mon responsable qui a tout fait, j'étais encore en version DCOM qui a une gestion du thread fort particulière
    Est-ce que chaque client a un thread (ou un pool de thread) ou un thread gérant une FIFO des demandes (peu probable)

    Il te faut autant d'objet TSQLConnection que de DB
    Soit tu les as sur un TDataModule, et tu les utilises selon le besoin
    Soit tu fais un Multiton avec le nom de la DB comme facteur de fabrique

    Si tu es plutôt un amateur de "Builder" profite de la puissance du RAD avec les TDataModule
    Si tu es plutôt un amateur de POO et d'optimisation ... un Multiton permettra de faire du LazyLoading pour n'instancier les objets et ouvrir les connexions qu'à partir du moment où cela est utile !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre averti
    Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Par défaut
    Précisions sur ma précision pas claire

    Le serveur de base de données possède par exemple 5 bdd.

    Le serveur Datasnap pourrai se connecter sur l'une des 5 bdd en fonction d'un paramètre envoyé par le client.

    Le client, une fois qu'il a communique son paramètre, est connecté à une des 5 bdd, mais toujours à la même.


    ---------

    Je suis plus "Builder" que POO.
    Mais lorsqu'il le faut, je sors de mes sentiers connus.

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 096
    Par défaut
    Ah OK, oui j'avais même pensé que c'est comme cela, une connexion définitive défini une seule fois dès le début, c'est ce que je voulais dire dans ma 1ère réponse :

    lors de la connexion, le client appel une méthode qui indique la DB cible
    Tu peux faire un simple tableau associatif <DBName, TSQLConnection> via un TObjectDictionary ou TStringList.Objects[]
    C'est ça ton Multiton (il contient le tableau + la gestion de l'instanciation)

    Tout dépend de la gestion du Multithread, Il me semble qu'il ne faut pas lancer deux TSQLQuery partageant la même TSQLConnection dans deux threads différents !
    En tout cas, j'avais géré des Mutex pour éviter cela lorsqu'il était difficile d'identifier le Thread (fourni par le DCOM par exemple)
    Sinon, une TSQLConnection dédiée si le thread est connu (un objet TThread dans mon module)

    Il nous faudrait un expert en Serveur DataSnap pour savoir comment fonctionne les Session Client et comment gérer propre les connexions DB !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. DataSnap, Requête paramétrée et sécurité
    Par micheln dans le forum Web & réseau
    Réponses: 0
    Dernier message: 31/05/2008, 19h28
  2. Réponses: 1
    Dernier message: 30/05/2006, 17h22
  3. tranferts de paramètre de connexion outlook express
    Par dirty_boy dans le forum Outlook Express / Windows Mail
    Réponses: 2
    Dernier message: 05/12/2005, 11h43
  4. [CR9][RAS] Publication d'états,paramètre et connexion BD
    Par youl dans le forum Connectivité
    Réponses: 4
    Dernier message: 10/01/2005, 10h20
  5. Paramétrer le nombre de connexion sur mon serveur Mysql
    Par Zerga dans le forum Installation
    Réponses: 2
    Dernier message: 12/12/2003, 19h21

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