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

Grails Java Discussion :

Application Web - Grails sync. Oracle


Sujet :

Grails Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2012
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Application Web - Grails sync. Oracle
    Bonjour à tous,

    Je suis actuellement étudiant, en stage de validation d'études, et je rencontre quelques difficultés avec la technologie qu'on me demande d'utiliser.
    Explication : Je dois m'intégrer dans un système existant et développer une interface de recherche 'avancée'. Disposant d'un accès à une base Oracle 11gR2 avec uniquement des vues (les droits d'accés de ma société sont plûtot stricts), je dois me connecter à celle-ci afin de récupérer la plupart des données et effectuer des traitements dessus. (je n'ai accès qu'en lecture à ces données).
    Voila ma problématique maintenant est que je dois utiliser le framework Grails (utilisation de Groovy -Java-).

    Comment récupérer correctement les données que j'ai dans mes vues, et avoir un affichage liste dans mon application Grails ? Existe-t-il un moyen de générer les classes de domaine en récupérant l'architecture des vues Oracle ?

    En effet, Grails intégre un ensemble de plug-in comme hibernate, db-reverse-engineer, ... mais étant débutant en la matière, je requiers toutes explications de votre part pouvant m'aider à avancer.
    Pour le moment uniquement la connexion à la base Oracle fonctionne.

    Merci à vous

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2005
    Messages : 218
    Points : 310
    Points
    310
    Par défaut
    Si je comprend bien une partie de ta problématique, c'est de pouvoir faire un reverse engeneering de ta base pour générer les domaines.

    Il y a un plugin pour ca :
    http://grails.org/plugin/db-reverse-engineer


    Sinon il y a GRAG également qui pourrait t'aider:
    http://grails.org/GRAG

    Après pour tes vues, il faudrait probablement faire un generate-all sur chaque domaine pour avoir un début d'inetreface web et je ne sais pas jusqu'où vont ces outils.

    je ne sais pas ce que ca vaut n'ayant pas eu le besoin de l'utiliser jusqu'alors.

    A+

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2012
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Réponse
    Merci beaucoup pour ta réponse,

    En effet j'ai déjà eu l'occasion d'installer db-reverse-engineer.
    Seulement lors de l'utilisation de cet outil (visiblement performant), je n'ai
    aucune génération de domaines. Je pense qu'une mauvaise configuration est à l'origine de ce problème. Néamoins je n'ai aucun rapport d'erreur :

    | Starting database reverse engineering, connecting to 'url de ma bdd' ...
    | Finished database reverse engineering

    Une petite idée sur l'erreur que j'aurais mu commettre ?
    En rappelant que je dois récupérer des données de Vues et non de Tables.
    Peut être dois-je le spécifier qque part dans le Config.groovy ?
    Bien évidemment si quelqu'un si connait davantage dans la configuration de db-reverse-engineer ou dans la propostion d'une autre solution, je suis prenneur.

    En attendant je me mets au test de Grag comme tu me l'as conseillé.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2005
    Messages : 218
    Points : 310
    Points
    310
    Par défaut
    Tu parlais de vues stockées dans la base.
    J'avais pas tilté comme le terme vue est le même pour les écrans.
    D'où ma réponse sur les generate-all un peu à coté de la plaque du coup.

    Je suppose que dans ta base tu as des tables le reverse aurais du au moins te générer les tables.

    En rappelant que je dois récupérer des données de Vues et non de Tables.
    Je suppose que tu voulais dire que tu voulais récupérer le schéma des vues.

    Là par contre je ne suis pas convaincu que ca marche, les domaines sont attachés à des données persistentes. Tes vues sont en principe générer à partir des tables, il faut pour moi récupérer les domaines correspondant à tes tables, puis refaire en sorte de lire tes vues. A moins que Grag ne permette de tout faire.

    http://fr.softuses.com/53127

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2012
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Réponse
    En effet la récupération du schéma est complexe car je n'ai à ma disposition que les vues. Si les tables étaient visibles via ma connexion je n'aurais eu aucun problèmes à générer les domaines.
    Donc d'après ce que tu dis et je pense que c'est une réponse assez pertinente : les vues uniquement ne suffiraient pas pour créer mes domaines. Je vais chercher de mon côté si je peux allé plus loin (notamment avec grag), voir obtenir les droits auprès des responsables de la base Oracle pour les accès aux tables.

    Merci pour ton aide en tout cas macumba, je laisse cette requête ouverte au cas où d'autres personnes pourraient contribuer à avancer dans mon problème.

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2005
    Messages : 218
    Points : 310
    Points
    310
    Par défaut
    En relisant ta problématique, je me demande si tu as vraiment besoin de faire un reverse de tes tables.
    Normalement avec une table accessible et tes vues tu dois pouvoir lire tes vues
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def listVue = UnDomaine.executeQuery("select " +
    			" mv.id,mv.code,mv.nom,... "+ 
    			" from  MaVue mv" +
    			" where mv.id = :my_id ",
    			[my_id: user.id])
     
    listVue.each {
    			chaine = chaine +separateur+ "{\"id\":" + it[0] + ",\"code\":\"" + it[1] + "\",\"nom\":\"" + it[2] ...
    		}
    où it[0], it[1] correspondrait aux champs que tu veux récupérer de tes vues dans l'ordre définie dans ta requete.

    Pour une utilisation ponctuelle, ca peut dépanner mais pour une utilisation régulière je me demande le bien fondé de la méthode. La productivité de grails se fait sur le Modèle vue controller autogénérer. Là tout serait à refaire à la mano. Si tu en as vraiment beaucoup en modifiant événtuellement le script de création de pages et de controller ca peut éventuellement s'automatiser un peu plus, mais il y a du boulot.

    grails install-templates

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2012
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Réponse
    Je vais essayer ta méthode, de toute manière je n'ai besoin des appels que pour une seule et unique utilisation : sélectionner un enregistrement afin de pouvoir faire un traitement xml dessus.

    Sur le coup je me sens un peu dans le mal si je me retrouve à revoir le modèle MVC

    Merci en tout cas pour ta méthode

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2012
    Messages : 9
    Points : 1
    Points
    1
    Par défaut The Last One
    Bonjour à tous,
    Mon problème a été résolu par de nouvelles assignations de permissions sur Oracle. Merci encore pour ton aide Macumba, maintenant je me dois de configurer le plugin Hibernate afin de faire le mapping de l'application Grails

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

    Informations forums :
    Inscription : août 2004
    Messages : 8 765
    Points : 12 925
    Points
    12 925
    Par défaut
    Faire de la recherche avancée en SQL n'est pas la chose la plus flexible au monde, c'est même globalement chiant, ça pose un cout sur la base non négligeable, ainsi que sur ton appli.

    Je te conseillerais plutôt d'utiliser un outil dédié à l'indexation comme Solr qui est destiné à ce genre de taches et que tu peux alimenter depuis ta base via le DataImportHandler entre autres.

    Le recherches seront bien plus flexibles et rapides, sans même parler de recherches approchantes, sur les subtrings contenues dans une chaîne (mettre un % au début d'un like fait qu'aucun index ne peut être autorisé).

    Puis de taper sur Solr à partir de Grails. (http://www.grails.org/plugin/solr)
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2005
    Messages : 218
    Points : 310
    Points
    310
    Par défaut
    Bonne suggestion, mais ca me parait un peu lourd à mettre en place pour le besoin d'atiras!!!
    je n'ai besoin des appels que pour une seule et unique utilisation : sélectionner un enregistrement afin de pouvoir faire un traitement xml dessus.

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

    Informations forums :
    Inscription : août 2004
    Messages : 8 765
    Points : 12 925
    Points
    12 925
    Par défaut
    Honnêtement, monter un core Solr est quelque chose de plutôt rapide dans l'ensemble une fois que le coup de main est pris.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2012
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Réponse
    Merci Sinok je regarde ca actuellement, en effet la documentation fournit est assez convaincante.
    Pour le moment j'ai un autre probléme qui me proccupe. Une fois le serveur local démarré, le site fonctionne correctement, mais dès que je souhaite accéder à un des controller de mon application j'ai l'erreur suivante :



    Une idée ?
    D'apres moi c'est que la requête auprès de la base ne renvoie aucune valeur et ainsi met en echec le reste de l'application.

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

    Informations forums :
    Inscription : août 2004
    Messages : 8 765
    Points : 12 925
    Points
    12 925
    Par défaut
    Params n'est pas un objet de type list. Donc ça plante.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2012
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Reponse
    Malheureusement le fait que params soit passé en paramétre de la méthode list() n'est pas la cause de cette erreur, je viens de faire tous les tests nécessaires sans résutlats convaincants

  15. #15
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2005
    Messages : 218
    Points : 310
    Points
    310
    Par défaut
    Je pense que ton pb vient de là :

    Ton action est codée :
    Il faut la coder comme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     def list = {
    ... (puis ce que tu avais codé)
    ou def list(){...
    l'action list et la méthode liste de ton domaine sont différentes.

    Pour le max il faut faire en sorte d'indiquer params.max et non max dans l'affectation.

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2012
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Réponse
    Je l'ai donc codé comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def list() {
            [h_EQUIPMENTInstanceList: H_EQUIPMENT.list(), h_EQUIPMENTInstanceTotal: H_EQUIPMENT.count()]  }
    ou ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def list = {
            [h_EQUIPMENTInstanceList: H_EQUIPMENT.list, h_EQUIPMENTInstanceTotal: H_EQUIPMENT.count()]  }
    Donc sans résultat.
    Cependant j'ai une erreur différente lors de l'essai de la deuxième solution :
    No such property: list for class: ***.H_EQUIPMENT Possible solutions: id, class

    Comme tu l'as précisé plus haut, avec cette méthode je dois surement la définir lors de la déclaration du domaine ?

  17. #17
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2005
    Messages : 218
    Points : 310
    Points
    310
    Par défaut
    Pour la deuxième solution tu aurais du écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def list = {
            [h_EQUIPMENTInstanceList: H_EQUIPMENT.list(), h_EQUIPMENTInstanceTotal: H_EQUIPMENT.count()]  }
    Par contre, si dans ta table tu n'as pas d'attribut id, ca risque de ne pas marcher. Essaie plutot de faire une requete sur la table, comme je te l'avais indiqué avec un executeQuery ou un createCriteria dans un premier temps.

    Par défaut l'id d'un domaine est nommé id, si ce n'est pas l'id de ta table il faut le préciser, comme suit sur ton domaine (id column : xxx):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Person {static mapping = {
    table 'people'
    version false
    id column: 'person_id'
    }
    }
    Avec cette précision tu devrais pouvoir utiliser les méthodes "classiques Grails", je pense. Si c'est des clés composites c'est un peu plus compliqué.

    Juste une question tu as bien un domaine H_EQUIPMENT ?

  18. #18
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2012
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Réponse
    Merci Macumba,
    Je regarde ca en début de semaine !

    Sinon oui j'ai bien créé le domaine H_EQUIPMENT à l'aide des outils fournit pour Grails.

Discussions similaires

  1. interroger dwh depuis application web ( grails )
    Par zeunknown0 dans le forum Outils de restitution et d'analyse
    Réponses: 2
    Dernier message: 20/02/2013, 15h33
  2. Oracle et Application Web
    Par magicstar dans le forum Débuter
    Réponses: 6
    Dernier message: 07/03/2008, 16h13
  3. Delphi et Oracle avec application web.
    Par hshamsan dans le forum Web & réseau
    Réponses: 2
    Dernier message: 22/11/2007, 08h36
  4. Réponses: 3
    Dernier message: 16/06/2007, 00h57
  5. Interrogation bdd oracle avec une application web
    Par Lemuel dans le forum Oracle
    Réponses: 2
    Dernier message: 09/12/2006, 14h09

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