Pergunta

Eu tenho um aplicativo no Google App Engine que estava funcionando bem. Percebi que uma das minhas JDO aprimoradas objetos que eu esqueci de implementar equals e hashCode (eu preciso usar o objeto em um conjunto). Então eu fiz. Eu realmente não fazer nada de especial nessas implementações, na verdade eu usei apenas Eclipse para gerá-los. Como assim:

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;

@Persistent
private String appleId;

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result
            + ((appleId == null) ? 0 : appleId.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    User other = (User) obj;
    if (appleId == null) {
        if (other.appleId != null)
            return false;
    } else if (!appleId.equals(other.appleId))
        return false;
    return true;
}

Então, agora, quando eu tentar acertar quaisquer URLs no aplicativo, essa exceção é jogado:

/ addUser javax.jdo.JDOUserException: classe persistente "Classe com.bpapa.myapp.domain.User não parece ter sido reforçada Você pode querer executar novamente o potenciador e verificar se há erros na saída.". não tem tabela no banco de dados, mas a operação exige. Por favor, verifique a especificação dos metadados para esta classe. em org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException (NucleusJDOHelper.java:427) em org.datanucleus.jdo.JDOQuery.execute (JDOQuery.java:249) em com.bpapa.myapp.servlet.AddUserServlet.doPost (AddUserServlet.java:34)

Algumas ideias sobre o que eu fiz de errado?

Foi útil?

Solução

Você tem conjunto eclipse para executar automaticamente o potenciador DataNucleus? E se você tentar limpar o projeto com Projeto-> limpo e, em seguida, construir o projeto a partir do zero?

Outras dicas

Configuração no eclipse ( "executar o potenciador DataNucleus" - questão relacionada como discutido acima)

Configurações do projeto -> Google -> App Engine -> ORM

Alterar src PARH "src /" caminho para o "src //" caminho exato de suas classes JDO

I enfrentou o mesmo problema, e quando eu fiz o projeto -> Limpo, eu vi seguinte exceção no log:

{Caused by: org.datanucleus.exceptions.NucleusException: Plugin (Bundle) "org.datanucleus.store.appengine" is already registered. Ensure you dont have multiple JAR versions of the same plugin in the classpath. The URL "file:/C:/Documents%20and%20Settings/Administrator/workspace/Guestbook/war/WEB-INF/lib/datanucleus-appengine-1.0.8.final.jar" is already registered, and you are trying to register an identical plugin located at URL "file:/C:/eclipse/plugins/com.google.appengine.eclipse.sdkbundle.1.4.2_1.4.2.v201102111811/appengine-java-sdk-1.4.2/lib/user/orm/datanucleus-appengine-1.0.8.final.jar."}

Então, eu removidos:

C:/Documents and Settings/Administrator/workspace/Guestbook/war/WEB-INF/lib/datanucleus-appengine-1.0.8.final.jar

a partir do projeto eclipse, limpa e re-construída, tudo começou a trabalhar como esperado.

Eu resolvi este problema através da actualização para a versão mais recente do appengine Java SDK.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top