title: GWT with JDO problem
body: <p>I just start playing with GWT I'm having a really hard time to make GWT + JAVA + JDO + Google AppEngine working with DataStore.
  I was trying to follow different tutorial but had no luck. For example I wend to these tutorials: <a href="https://stackoverflow.com/questions/958879/problems-passing-class-objects-through-gwt-rpc">TUT1</a> <a href="http://fredsa.allen-sauer.com/2009/04/1st-look-at-app-engine-using-jdo.html" rel="nofollow noreferrer">TUT2</a></p>
  
  <p>I was not able to figure out how and what i need to do in order to make this work.
  Please look at my simple code and tell me what do i need to do so i can persist it to the datastore:</p>
  
  <p><strong>1. ADDRESS ENTITY</strong></p>
  
  <pre><code>package com.example.rpccalls.client;
  
  import java.io.Serializable;
  
  import javax.jdo.annotations.IdGeneratorStrategy;
  import javax.jdo.annotations.Persistent;
  import javax.jdo.annotations.PrimaryKey;
  
  public class Address implements Serializable{
  
   @PrimaryKey
   @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
   private int addressID;
   @Persistent private String address1;
   @Persistent private String address2;
   @Persistent private String city;
   @Persistent private String state;
   @Persistent private String zip;
  
   public Address(){}
  
   public Address(String a1, String a2, String city, String state, String zip){
    this.address1 = a1;
    this.address2 = a2;
    this.city = city;
    this.state = state;
    this.zip = zip;
   }
  
   /* Setters and Getters */
  }
  </code></pre>
  
  <p><strong>2. PERSON ENTITY</strong></p>
  
  <pre><code>package com.example.rpccalls.client;
  
  import java.io.Serializable;
  import java.util.ArrayList;
  
  import javax.jdo.annotations.IdGeneratorStrategy;
  import javax.jdo.annotations.PersistenceCapable;
  import javax.jdo.annotations.Persistent;
  import javax.jdo.annotations.PrimaryKey;
  
  import com.google.appengine.api.datastore.Key;
  
  @PersistenceCapable
  public class Person implements Serializable{
  
   @PrimaryKey
   @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
   private Key key;
   @Persistent private String name;
   @Persistent private int age;
   @Persistent private char gender;
   @Persistent ArrayList&lt;Address&gt; addresses;
  
   public Person(){}
  
   public Person(String name, int age, char gender){
    this.name = name;
    this.age = age;
    this.gender = gender;
   }
  
   /* Getters and Setters */
  }
  </code></pre>
  
  <p><strong>3. RPCCalls</strong></p>
  
  <pre><code>package com.example.rpccalls.client;
  
  import java.util.ArrayList;
  
  import com.google.gwt.core.client.EntryPoint;
  import com.google.gwt.core.client.GWT;
  import com.google.gwt.event.dom.client.ClickEvent;
  import com.google.gwt.event.dom.client.ClickHandler;
  import com.google.gwt.user.client.Window;
  import com.google.gwt.user.client.rpc.AsyncCallback;
  import com.google.gwt.user.client.ui.Button;
  import com.google.gwt.user.client.ui.RootPanel;
  import com.google.gwt.user.client.ui.TextBox;
  
  
  public class RPCCalls implements EntryPoint {
  
   private static final String SERVER_ERROR = "An error occurred while attempting to contact the server. Please check your network connection and try again.";
  
   private final RPCCallsServiceAsync rpccallService = GWT.create(RPCCallsService.class);
  
   TextBox nameTxt = new TextBox();
   Button btnSave = getBtnSave();
  
   public void onModuleLoad() {
  
    RootPanel.get("inputName").add(nameTxt); 
    RootPanel.get("btnSave").add(btnSave);
   }
  
  
  
   private Button getBtnSave(){
  
    Button btnSave = new Button("SAVE");
  
    btnSave.addClickHandler(
      new ClickHandler(){
       public void onClick(ClickEvent event){
        saveData2DB(nameTxt.getText());
       }
      } 
    );
    return btnSave;
   }
  
   void saveData2DB(String name){  
    AsyncCallback&lt;String&gt; callback = new AsyncCallback&lt;String&gt;() {
     public void onFailure(Throwable caught) {
            Window.alert("WOOOHOOO, ERROR: " + SERVER_ERROR);
      // TODO: Do something with errors.
          }
  
          public void onSuccess(String result) {
            Window.alert("Server is saying: ' " + result + "'");
          }
  
    };
  
    ArrayList&lt;Address&gt; aa = new ArrayList&lt;Address&gt;();
    aa.add(new Address("123 sasdf","", "Some City", "AZ", "93923-2321"));
    aa.add(new Address("23432 asdf", "Appt 34", "Another City", "AZ", "43434-4432"));
  
    Person p = new Person();
    p.setName(name);
    p.setAge(23);
    p.setGender('m');
    p.setAddresses(aa);
  
    // !!!!!!!!!!!!!!!!!!  SERVER CALL !!!!!!!!!!!!!!!!!!
    rpccallService.saveName(p, callback);
    // !!!!!!!!!!!!!!!!!!  SERVER CALL !!!!!!!!!!!!!!!!!!
  
   }
  }
  </code></pre>
  
  <p><strong>4. RPCCallsService</strong></p>
  
  <pre><code>package com.example.rpccalls.client;
  
  import com.google.gwt.user.client.rpc.RemoteService;
  import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
  
  @RemoteServiceRelativePath("calls")
  public interface RPCCallsService extends RemoteService {
  
   String saveName(Person p);
  
  }
  </code></pre>
  
  <p><strong>5. RPCCallsServiceAsync</strong></p>
  
  <pre><code>package com.example.rpccalls.client;
  
  import com.google.gwt.user.client.rpc.AsyncCallback;
  
  public interface RPCCallsServiceAsync {
  
   void saveName(Person p, AsyncCallback&lt;String&gt; callback);
  
  }
  </code></pre>
  
  <p><strong>6. **RPCCalls.gwt.xml</strong></p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.6.4//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.6.4/distro-source/core/src/gwt-module.dtd"&gt;
  &lt;module rename-to='rpccalls'&gt;          
    &lt;inherits name='com.google.gwt.user.User'/&gt;
    &lt;inherits name='com.google.gwt.user.theme.standard.Standard'/&gt;
    &lt;entry-point class='com.example.rpccalls.client.RPCCalls'/&gt;
  &lt;/module&gt;
  </code></pre>
  
  <p>I tried to add Key class and everything else in those tutorials but it looks like i'm missing something.</p>
  
  <p>Here is my error:
  <a href="http://vasura.s3.amazonaws.com/Picture2.png" rel="nofollow noreferrer">alt text http://vasura.s3.amazonaws.com/Picture2.png</a></p>
  
  <p>or before i was getting this error: </p>
  
  <blockquote>
    <p>Key cannot be resolved to a type</p>
  </blockquote>
  
  <p>What is the best solution to make this working?</p>