Компиляция приложения GWT с MongoDB и Morphia

Я попытался скомпилировать приложение GWT, использующее MongoDB и 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?*

Банки Morphia и MongoDB вставляются в раздел «Библиотеки» пути сборки Java (я использую Eclipse). Также я приложил исходный код MongoDB.

Когда я не использовал Morphia, все работало нормально.

Вот мой код класса:

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;
 }
}

Что не так?

Спасибо.


person Konstantin    schedule 28.12.2010    source источник


Ответы (2)


Поддержка Morphia GWT все еще находится в стадии разработки.

См. этот выпуск: http://code.google.com/p/morphia/issues/detail?id=103

Но, похоже, у вас есть и другие проблемы. Вы не можете подключиться к серверу в общем коде, только в коде сервера. Вам нужно прочитать и понять, какой код и где находится в проекте GWT.

Единственное, что будет поддерживать модуль morphia, — это возможность отправлять сущности в клиентский код GWT. На самом деле вы не можете использовать его или код драйвера MongoDB для выполнения серверных операций на клиенте; это никогда не будет разрешено GWT.

person Scott Hernandez    schedule 29.12.2010
comment
Спасибо, вы правы, я только что переместил эти классы в серверный пакет, и теперь он работает нормально. - person Konstantin; 30.12.2010

GWT нужен исходный код классов MongoDb и Morphia. Но также вы не должны и не можете использовать эти классы для уровня gwt вашего приложения. Также вы не можете использовать пакет java.net для слоя gwt. Вы можете использовать только подмножество классов Java для слоя gwt.

Я рекомендую вам прочитать руководство по GWT http://code.google.com/webtoolkit/doc/latest/tutorial/index.html .

person Gursel Koca    schedule 28.12.2010
comment
В GWT я не могу использовать эти классы на клиентском уровне, который будет скомпилирован в код javascript, но на стороне сервера я могу использовать все, что захочу. Я написал, что прикрепил код MongoDB, но все равно ошибка. - person Konstantin; 29.12.2010
comment
Кажется, вы определяете пакет com.planner.shared как в файле module.gwt.xml. Вот почему компилятор gwt пытается скомпилировать этот класс. Вы должны проверить исходный элемент в файле module.gwt.xml. - person Gursel Koca; 29.12.2010