2010-12-15 7 views
0

Hallo iam neu zu GWT-Framework. Ich möchte meine Domänenobjekte/Entitäten im Google Application Engine-Datenspeicher mit RPC persistieren. Eine einfache Implementierung zu testen, wenn ich mehrere RPC-Aufrufe (greetServer(), saveStudent()) machenSpeichern Sie gwt Entitäten in Google Application Engine-Datenspeicher mit jdo, mit rpc

Studenten

import javax.jdo.annotations.Extension; 
import javax.jdo.annotations.IdGeneratorStrategy; 
import javax.jdo.annotations.PersistenceCapable; 
import javax.jdo.annotations.Persistent; 
import javax.jdo.annotations.PrimaryKey; 

import com.google.gwt.user.client.rpc.IsSerializable; 

@PersistenceCapable 
public class Student implements IsSerializable { 

private static final long serialVersionUID = 1L; 

@PrimaryKey 
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
@Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true") 
private int studentId; 

@Persistent private String firstName; 
@Persistent private String lastName; 

public Student(){} 

public Student(String firstName, String lastName){ 
    this.firstName = firstName; 
    this.lastName = lastName; 
} 

public void setStudentId(int studentId) { 
    this.studentId = studentId; 
} 

public int getStudentId() { 
    return studentId; 
} 

public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

public String getFirstName() { 
    return firstName; 
} 

public void setLastName(String lastName) { 
    this.lastName = lastName; 
} 

public String getLastName() { 
    return lastName; 
} 
} 

GreetingService (Standard-Code generiert Eclipse IDE)

import com.google.gwt.user.client.rpc.RemoteService; 
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; 

@RemoteServiceRelativePath("greet") 
public interface GreetingService extends RemoteService { 
String greetServer(String name) throws IllegalArgumentException; 
**String saveStudent(Student s) throws IllegalArgumentException;** 
} 

GreetingServiceAsync

import com.google.gwt.user.client.rpc.AsyncCallback; 


public interface GreetingServiceAsync { 
void greetServer(String input, AsyncCallback<String> callback) 
    throws IllegalArgumentException; 
**void saveStudent(Student s, AsyncCallback<String> callback) 
    throws IllegalArgumentException;** 
} 

GreetingServiceImpl

import javax.jdo.PersistenceManager; 

import com.d.client.GreetingService; 
import com.d.client.Student; 
import com.d.shared.FieldVerifier; 
import com.google.gwt.user.server.rpc.RemoteServiceServlet; 

@SuppressWarnings("serial") 
public class GreetingServiceImpl extends RemoteServiceServlet implements 
    GreetingService { 

public String greetServer(String input) throws IllegalArgumentException 

    ... 

    String serverInfo = getServletContext().getServerInfo(); 
    String userAgent = getThreadLocalRequest().getHeader("User-Agent"); 

    ... 

} 


@Override 
public String saveStudent(Student s) throws IllegalArgumentException { 
    PersistenceManager pm = PMF.get().getPersistenceManager(); 
    pm.makePersistent(s); 
    return "student save - ok"; 
    } 

} 

PMF

import javax.jdo.JDOHelper; 
import javax.jdo.PersistenceManagerFactory; 

public final class PMF { 
    private static final PersistenceManagerFactory pmfInstance = JDOHelper 
      .getPersistenceManagerFactory("transactions-optional"); 

    private PMF() { 
    } 

    public static PersistenceManagerFactory get() { 
     return pmfInstance; 
    } 
} 

Entrypoint

... 

private final GreetingServiceAsync greetingService = GWT 
    .create(GreetingService.class); 

    greetingService.greetServer("greet", 
     new AsyncCallback<String>() { 
     public void onFailure(Throwable caught) { 
     // Show the RPC error message to the user 
     } 

     public void onSuccess(String result) { 
     //Show success message 
     } 
     }); 

    greetingService.saveStudent(new Student("kostas","trichas"), 
     new AsyncCallback<String>() { 
     public void onFailure(Throwable caught) { 
     // Show the RPC error message to the user  
     } 

     public void onSuccess(String result) { 
     //Show success message 
     } 
     }); 

    ... 

Ist die obige Implementierung korrekt? Ich entfalteten diese Beispielanwendung gae und es hat beharrte das Objekt nicht Student (Sie die Einheiten auf gae Datenspeicher-Viewer blättern)

es überprüfen Sie bitte:

http://gwtgaedatastore.appspot.com

Antwort

1

Ändern Sie Ihre int studentID Long id es die Arbeit mit Ihrem ursprünglichen Code

0

Dies funktioniert zu erhalten (dh Lange id.):

@Extension (vendorName="jpox", key="key-auto-increment" ,value="true") 

Oder ändern Sie die ID in String und Ihr Origcode funktioniert.

Ich konnte Long PK nicht mit Datanucleus arbeiten mit gae.pk-ID.