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

Java Discussion :

Generation de code a partir de SQL


Sujet :

Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Generation de code a partir de SQL
    Je travaille sur un projet de simulateur. Toutes les données de la simulation sont stockées dans une base SQL.

    Je chercher à générer du code Java à partir des données de la base. Le simulateur ensuite compilé pourra tourner sans la base, seulement grâce au code généré (le simulateur est censé être embarqué sur un ordi ou la base de données ne sera pas présente ...).

    Avez vous des idées, outils, méthodes pour générer une telle application de génération de code ?
    Merci

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Au pire tu peusser passer par un base de données embarquée en java comme hsqldb ou derby...
    Tu devras juste effectuer une migration des données, et ton code ne vaireras pas énormément (juste le driver à changer si tu as fait ça de manière propre ^^)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    En gros, on me demande d'utiliser la base de données pour connaître les données de la simulation et d' ensuite générer un executable tournant independamment de la base.
    Alors j aurais bien aimé garder la base ou la transférer vers une base de donnée "légère" mais ... pas le choix malheureusement.

  4. #4
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Tu peux créer des fichiers .java (encodage UTF-16) à partir de tes requêtes SQL, et les placer dans un répertoire du -classpath : puis les charger en mémoire avec "Class.forName()"...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Je ne comprends pas très bien ... Tu peux m'expliquer d'avantage ?

    Mon idée de départ était de parser la base de données et d'écrire dans un fichier .java la création de chaque objet un par un (utilisant des boucles ... ). Les classes représentant les tables de la base seraient préalablement définies. Les objets seraient alors stockés dans une structure de données adequate (arbre ou liste). Ensuite, lors de l éxécution, tous les objets sont créés et la base se retrouve en mémoire.

    Je n ai pas encore trouvé d'autres solutions. Mais je reste très ouvert à vos propositions!

  6. #6
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Tu pourrais générer un fichier xml (interessant si tu veux garder une structure dans tes données) contenant l'ensemble des données necessaire à la simulation. Ce fichier serait genéré dans l'arborescence de tes classes pour qu'il soit accessible à coup via le classpath.
    Au moment du lancement de ton programme, dans un bloc static, tu pourrais parser ce fichier et créer les objets en les decorant des données récupérées depuis le fichier.

    Toutes tes données serait accessible en mémoire via l'ensemble des tes objets.

    C'est une idée je pense plus simple à mettre en oeuvre plutot que de passer par de la génération de code...

    J'espère que celà t'aidera, si tu as des questions n'hesite pas!

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Je suis en effet d'accord, ce serait plus simple. Malheureusement j ai qqes contraintes de la part du responsable de projet et la génération de code semble inévitable...

    Je pense créer un générateur de simulateur, indépendant du simulateur lui même, qui récupère les données de la base par des requêtes et fait un println(...) dans un fichier java. Le printout écrirait l'instanciation les classes représentant les tables de ma base.

    Ensuite le fichier .java créé peut être compilé avec le reste du simulateur (classes de communication, IHM ...). Lors de l' exécution tous les objets représentant les données de la base sont créés (oui il y en aura beaucoup). Tout peut tourner alors sans la base.

    Ce n 'est sûrement pas la méthode la plus élégante mais vu la relative petite dimension du projet, je voudrais faire tout assez simplement en utilisant au maximum les librairies sun sans passer par la grosse artillerie d'outils de génération code utilisant patterns, fichiers de grammaire ...

    Salutations

  8. #8
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Si contrainte il y a... je comprend!

    Si tu dois obligatoirement générer du code,
    Tu pourrais générer la creation d'un Objet de type Hashmap (enfin une collection contenant des couples clefs valeurs) qui s'initialiserai avec l'ensemble des données nécessaires à la simulation.
    Ensuite tu pourrais manipuler cette HashMap pour acceder aux données par l'intermédiaire des clefs.

    Cela te permettrai de générer un code assez simple (creation et initialisation de la collection) et dans l'ensemble de ton projet manipuler une interface.

    Je ne sais pas si je suis très clair!

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    ça me semble en effet une bonne idée.
    le code généré ressemblerait a qqchose comme ça (ce n'est peut être pas très explicite pour vous, désolé ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
     
    /**
    *       Class générée automatiquement depuis la base SQL ou autre
    *       Peut être un thread éventuellement
    *
    *
    */
    import java.util.*;
     
     
    public class Simulator{
     
    	private HashMap tests;
    	private Config conf; // tel que ATP, QT, mode Single ou random ....
    	private Communication comm;
    	private WorkingMode wm;
     
     
    	/**
            *       Constructeur, 
            *       on récupère la config
            *       on initialise les tests
            *
            */
    	public Simulator(Config conf, Communication comm){
    		this.conf = conf;
    		this.comm = comm;
    		wm = new WorkingModeSingle(); // par défault
    		tests = new HashMap();
    		init();
    		wm.add(tests);
    	}
     
     
     
    	/**
            *       Créé grâce à des requête sur la base
            *       On remplit l'ArrayList tests pour stocker toute la base en mémoire
            */
    	public void init(){
     
    	//les classes Test et Message ont été généré préalablement 
    	//et contiennent les même champs de classes que les colones de la table correspondante dans la BD
    	Test t1 = new Test (1, "TestRAM", "F", 7, 1, "F", 000, 000, 00, 00, 0, 00);
    	Message m1 = new Message(1, Error, 1, 01, "Send", 0, "Anomalie Bit1, LSB", 0, 0);
    	// ajout des params si nécessaire
    	t1.add(m1);
    	tests.add(t1);
     
    	// et ce pour toute la base => beaucoup d 'objet de lignes de code !
     
    	}
     
    	/**
            *       Grand switch généré automatiquement
            *
            */
    	public void simule(){
     
    		String cmd = comm.receiveCmd()
     
    		// switch sur cmd ou sur un int associé (id du test par exemple, mais nécessite un lookup dans la HashMap)
    		switch(cmd){
     
    			case cmd:
    				wm = conf.getWorkingMode(); //single, random ou scroll
    				wm.answer(cmd); // envoie un ou plusieurs messages suivant la commande
    				break;
     
    			// et ce pour tous les messages entrant		
     
    			case default:
    				wm.sendErrorProtocol();
     
    		}
    	}
    }

  10. #10
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Salut !

    +1 pour le XML... J'aurai opté pour une feuille de style XSL permettant de générer n'importe quel type de fichier...
    Je m'explique, tu génères ton flux XML à partir de ta BDD. Et ensuite tu la transforme via XSL en Java, très peu de code Java pour une plus grande flexibilité...
    bon courage !
    +++
    Ju

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    En effet ça marche très très bien. J ai récupéré une feuille XSL générant du C à partir de l XML et l ai adapté pour générer du Java. ça marche du feu de dieu. je dois encore étudier ça plus en détail mais cette solution me paraît très efficace et relativement facile à mettre en oeuvre pour peu qu on prenne le temps de se former aux transformations XSL.
    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 37
    Dernier message: 23/02/2011, 12h22
  2. Réponses: 1
    Dernier message: 03/01/2006, 17h46
  3. [C#] Comment générer le code à partir du WSDL ?
    Par Piolet dans le forum Services Web
    Réponses: 2
    Dernier message: 27/08/2004, 13h30
  4. Quel avenir pour les outils de génération de code ?
    Par Bruno75 dans le forum Débats sur le développement - Le Best Of
    Réponses: 5
    Dernier message: 05/11/2003, 18h30
  5. Génération de code
    Par YAMKI dans le forum Rational
    Réponses: 5
    Dernier message: 22/04/2003, 16h41

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