2010-12-28 10 views
1

j'ai essayé de compiler l'application GWT, qui utilise MongoDB et Morphia, mais a une exception:Compiler l'application GWT avec MongoBD et Morphia

*[ERROR] - Line 12: No source code is available for type com.google.code.morphia.Morphia; did you forget to inherit a required module? 
[ERROR] - Line 13: No source code is available for type com.mongodb.DB; did you forget to inherit a required module? 
[ERROR] - Line 15: No source code is available for type java.net.UnknownHostException; did you forget to inherit a required module? 
[ERROR] - Line 15: No source code is available for type com.mongodb.MongoException; did you forget to inherit a required module? 
[ERROR] - Line 17: No source code is available for type com.mongodb.Mongo; did you forget to inherit a required module? 
[ERROR] - Line 27: No source code is available for type com.mongodb.DBCollection; did you forget to inherit a required module?* 

pots Morphia et MongoDB sont insérés dans la section Bibliothèques de chemin de compilation Java (I j'utilise Eclipse). J'ai aussi attaché le code source MongoDB. Lorsque je n'ai pas utilisé Morphia, tout a bien fonctionné.

Voici mon code de classe:

package com.planner.shared; 

import java.net.UnknownHostException; 
import java.util.ArrayList; 

import com.google.code.morphia.Morphia; 
import com.mongodb.*; 
import com.planner.shared.Project; 
import com.planner.shared.ClassWrapper; 

public class ProjectWrapper extends Base implements ClassWrapper { 
Morphia morphia; 
DB db; 

public ProjectWrapper() throws UnknownHostException, MongoException { 
    super(); 
    Mongo m = new Mongo("127.0.0.1", 27017); 
    db = m.getDB("planner"); 
    morphia = new Morphia(); 
    morphia.map(Project.class); 
} 

public ArrayList<Project> getProjects() { 

    ArrayList<Project> projects = new ArrayList<Project>(); 
    //Get projects collection 
    DBCollection projectsColl = db.getCollection("projects"); 
    //Get all projects from collection 
    DBCursor cur = projectsColl.find(); 
    //Save all project to arrayList 
    while(cur.hasNext()) { 
    DBObject obj = cur.next(); 
    projects.add(morphia.fromDBObject(Project.class, obj)); 
    } 
    return projects; 
} 
} 

Qu'est-ce qui ne va pas?

Merci.

Répondre

3

Le support Morphia GWT est toujours en construction.

Voir cette question: http://code.google.com/p/morphia/issues/detail?id=103

Mais il semble que vous avez d'autres questions aussi. Vous ne pouvez pas vous connecter à un serveur en code partagé, seul le code serveur. Vous devez lire et comprendre quel code va où dans un projet GWT. La seule chose que le module morphia va prendre en charge est la possibilité d'envoyer des entités vers le code client GWT. Vous ne pouvez pas réellement l'utiliser, ou le code du pilote MongoDB, pour faire des opérations de serveur sur le client; cela ne sera jamais autorisé par GWT.

+0

Merci, vous avez raison, je viens de déplacer ces classes au paquet de serveur et maintenant cela fonctionne très bien. – Konstantin

1

GWT a besoin du code source des classes MongoDb et Morphia. Mais aussi, vous ne devriez pas et ne pouvez pas utiliser ces classes pour la couche gwt de votre application. De plus, vous ne pouvez pas utiliser le paquetage java.net pour la couche gwt. Vous ne pouvez utiliser qu'un sous-ensemble de classes Java pour la couche gwt.

Je vous recommande de lire le tutoriel GWT http://code.google.com/webtoolkit/doc/latest/tutorial/index.html.

+0

Dans GWT je ne peux pas utiliser ces classes sur la couche client qui sera compilée en code javascript, mais du côté serveur je peux utiliser tout ce que je veux. J'ai écrit, que j'ai attaché le code MongoDB, mais il y a toujours une erreur. – Konstantin

+0

Il semble que vous définissiez le package com.planner.shared comme dans votre fichier module.gwt.xml. C'est pourquoi le compilateur gwt essaie de compiler cette classe. Vous devriez vérifier l'élément source dans le fichier module.gwt.xml. –

Questions connexes