2010-01-19 6 views

Répondre

10

Mettez votre source src/java. Puis dans le fichier conf/printemps/resources.groovy, vous pouvez le faire, par exemple:

// Place your Spring DSL code here 
beans = { 
    myJavaFunction(com.my.javafunction) 

} 

vous pouvez ensuite l'injecter dans vos contrôleurs ou services avec:

def myJavaFunction 
+0

Merci pour votre réponse. Encore une chose: j'ai un enregistreur apache dans cette classe et le compilateur ne trouve évidemment pas le bocal du logger. Dois-je simplement ajouter le fichier jar au dossier lib ou obtenir une instance spéciale de l'environnement? – xain

+0

Vous pouvez publier cette question séparément. Je pense que nous avons rencontré cela, mais cela ne valait pas la peine de passer du temps en ce moment. Grails a intégré la journalisation, donc je suppose qu'il y a un conflit. –

4

est la classe dans un fichier JAR dans votre dossier lib/ou dans un fichier .java votre src/dossier?

De toute façon, il n'est pas nécessaire de l'envelopper dans un service. Vous pouvez construire des instances de la classe et appeler des méthodes à partir de n'importe où.

Si vous avez besoin d'encapsuler les appels de méthode dans une transaction, alors je la mettrais dans un service. Sinon, appelez-le directement. La seule autre raison de le mettre dans un service est d'utiliser la fonctionnalité de cadrage (si vous vouliez une nouvelle instance de la classe créée pour chaque demande)

acclamations

Lee

0

Si vous les avez emballés dans un fichier .jar puis déposez simplement le fichier jar dans votre projet/lib

0

il n'y a pas besoin d'envelopper comme service. si vous utilisez le printemps, il suffit d'ajouter le haricot dans resource.groovy

1

Je pensais que je devrais envoyer une mise à jour sur la façon de sur les grails 2.2, puisque j'ai beaucoup regardé autour et trouvé beaucoup de choses non pertinentes ne semble pas fonctionner, a fini par le faire fonctionner de cette façon:

Project name: gp22 
Grails Domain Example name: DemoGrailsDomain 
JavaClass:src/java/vv/Baggie.java 
Controller: DemoGrailsDomainController 

1: src/java/vv/Baggie.java

package vv; 
import gp22.DemoGrailsDomain; 


public class Baggie { 
    public int myresult(int value1) { 
     int resultset=10+value1; 
     return resultset; 

    } 

    public int getResult(int value1) { 
     int aa=myresult(value1); 
    return aa; 
     //You can call your domain classes directly 
    // Once called do a control shift o to pull in the above import example 
     //DemoGrailsDomain getdomain = new DemoGrailsDomain(); 
    } 


} 

DemoGrailsDomainController:

def list(Integer max) { 
     //def myJavaFunction 
     Baggie a=new Baggie() 
     int passit=5 
     def bb=a.getResult(passit); 
     println "--"+bb 

Faites un changement de contrôle o sur votre contrôleur maintenant, et il importera les vv.Baggie

Maintenant, quand je frappe la liste sur le navigateur le montre println:

| Serveur en cours d'exécution Parcourir à localhost: 8080/gp22 --15 sur ma console

Il vous avez une valeur transmise du contrôleur Grails à une classe Java traitée et retournée, la classe Java peut aussi appeler les Domaines Groovy et récupérer des informations

+0

> Faire un décalage de contrôle Je suppose que vous parlez d'un IDE? Laquelle? –

+0

Ctrl shift o sur ggts disponible sur la page de téléchargement sts. Bien que je pensais que c'était la norme sur tous les ide. Au moins éclipse est le même comportement pour jee – Vahid

+0

Par exemple plugins/projets utilisant cette méthode se référer à: https://github.com/vahidhedayati/latlongcalc ou https://github.com/vahidhedayati/RemoteSSH - le remoteSSH rend Java & Groovy appelle à effectuer des demandes identiques – Vahid

Questions connexes