GWT с проблемой JDO

Имейте в виду, что: ваш рабочий каталог в unicorn.rb должен быть: / your / cap / directory / current

НЕ be: File.expand_path ("../ ..", ФАЙЛ )

Из-за ошибки разветвления программной ссылки Unicorn и Linux: программная ссылка может работать некорректно.

Например:

cd current #current - это мягкая ссылка на другой каталог

... ...

когда мы получаем наш рабочий каталог, мы получаем абсолютный путь, а не путь в «текущем»

6
задан Community 23 May 2017 в 10:29
поделиться

5 ответов

Шрирам Нараян говорит строковому кодированию ключа, чтобы он прошел через механизм RPC GWT:

@PersistenceCapable (identityType = IdentityType.APPLICATION)
открытый класс SomeDomainClass реализует Serializable {
@PrimaryKey
@Persistent (valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension (vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
String id;

8
ответ дан 8 December 2019 в 12:22
поделиться

Другой вариант - реализовать DTO (объект передачи данных ), который вы используете в клиенте вместо прямого использования постоянных объектов. Или вы можете перейти к JPA вместо JDO. В примере класса данных в JPA-документах appengine вместо этой реализации ключа используется длинный идентификатор http://code.google.com/appengine/docs/java/datastore/usingjpa.html

1
ответ дан 8 December 2019 в 12:22
поделиться

Может быть, вы забыли создать реализацию для RPCCallsService? Я не вижу его в списке имеющихся у вас файлов.

У вас должен быть файл с именем RPCCallsServiceImpl.java в RPCCalls / src / com / example / rpccalls / server /, это файл реализации для интерфейса RPCCallsService .java.

Это будет выглядеть примерно так:

import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.example.rpccalls.client.RPCCallsService;

public class RPCCallsServiceImpl extends RemoteServiceServlet implements RPCCallsService {

  // Factory to get persistence manager object later
  private static final PersistenceManagerFactory PMF = JDOHelper.getPersistenceManagerFactory("transactional-optional");

  public String saveName(Person p) {
    // Data Store need persistence manager object for writing to it 
    PersistenceManager pm = PMF.getPersistenceManager();

    // Recommended way to save an object to the data store
    try {
      pm.makePersistent(p);
    } finally {
      pm.close();
    }

    // You want it to return string
    return p.getName();
  }

}

Надеюсь, это поможет вам решить проблему. Приветствую :)

1
ответ дан 8 December 2019 в 12:22
поделиться

The second tutorial you've referenced has a section on shadowing the com.google.appengine.api.datastore.Key class, since it's not available to GWT:

Since I'm not doing anything with the Key class on the client I'm going to stub it out. This actually requires a few steps and involves the super-src feature of GWT XML module files.

You might want to take a look at the GWT documentation, which states that

The heart of GWT is a compiler that converts Java source into JavaScript

, therefore you need to have the source code available to use a given class in the client code.

3
ответ дан 8 December 2019 в 12:22
поделиться

Как только вам надоест JDO, посмотрите на objectify. Я обнаружил, что с ним гораздо приятнее работать, и он имеет полное взаимодействие с GWT без DTO.

3
ответ дан 8 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: