2010-04-26 9 views
2

Comment puis-je utiliser les classes de domaine grails (qui est dans groovy) dans la couche de service qui est en Java/Spring. Lorsque j'utilise le graal MVC, tout va bien, car je peux utiliser le contrôleur pour accéder aux objets du domaine et appeler CRUD et d'autres méthodes dynamiques sur eux. Mais, ce que je me demande est là est une manière propre de le faire à partir de Java - disons la couche de service. Par exemple, je souhaite développer un cadre de reporting dans lequel je dois utiliser des objets de domaine pour accéder à la base de données.Comment accéder aux classes de domaine Grails dans la couche de service Java?

J'espère que la question est claire. Cela devrait être un problème standard que tout le monde doit avoir rencontré dans un projet de taille raisonnable. Je me demande simplement comment il est résolu ... peut-être qu'il me manque quelque chose ici.

merci.

Répondre

2

org.codehaus.groovy.runtime.InvokerHelper rend ceci assez simple; voir ce fil de la liste de diffusion: http://grails.1312388.n4.nabble.com/Calling-Dynamic-Finders-on-Domain-Class-via-the-MetaClass-td1596496.html

+0

Merci pour la réponse. Cependant, après avoir essayé le code suivant dans une classe principale dans l'application de Grails - (Liste ) InvokerHelper.invokeMethod (SecUser.class, « liste », null) Je reçois le « MissingMethodException » qui semble logique car il n'est pas une méthode "list" dans la classe de domaine SecUser. Pouvez-vous m'expliquer comment obtenir l'objet de domaine "réel" afin que je puisse utiliser la méthode ci-dessus pour accéder à des méthodes dynamiques? Merci – batmannavneet

+0

Voulez-vous dire que vous l'avez exécuté à partir de la ligne de commande dans une classe avec une méthode main()? Cela ne fonctionnera pas - l'application Grails doit être en cours d'exécution. InvokerHelper trouve simplement la méthode métaclasse pour vous et l'invoque comme si vous l'appeliez à partir de Groovy, mais cela dépend de tout ce qui est câblé. Pour tester cela, vous pouvez créer un contrôleur temporaire qui appelle votre classe Java et appeler le contrôleur à partir d'un navigateur. –

+0

Merci Burt.Cela fonctionne.Mais ce que j'essaie de faire est d'accéder à la classe de domaine de grails et leurs méthodes CRUD à partir de programmes Java autonomes (méthode principale). Existe-t-il un moyen de faire cela? Je peux penser à plusieurs scénarios où il peut être nécessaire d'accéder aux classes DAO dans les programmes Java autonomes. Maintenant, si dans grails en utilisant GORM, les classes de domaine sont les classes DAO, il doit y avoir un moyen d'y accéder de manière autonome (peut-être filer grails application contexte avant d'appeler des méthodes). Pouvez-vous suggérer un moyen de le faire, peut-être avec un exemple? Merci beaucoup. – batmannavneet

1

Exemple de code Snippet:

import my.package.User 
import org.codehaus.groovy.runtime.InvokerHelper; 


List allInstances = (List)InvokerHelper.invokeMethod(User.class, "list", null)); 


User one=(User)InvokerHelper.invokeMethod(User.class, "get", id); 
0

Où que InvokerHelper fonctionne bien, si vous avez accès à la classe GORM je mettrais des fonctions autour du Gorm appelle - puis Java les classes verront cela. Cela semble plus propre et ne place pas une dépendance sur une classe Groovy dans votre code Java.

Questions connexes