title: GWT - Main steps for this code
body: <p>Im moving first steps today on GWT framework. I need to understand (using the netbeans official <a href="http://www.netbeans.com/kb/docs/web/quickstart-webapps-gwt.html" rel="nofollow">tutorial</a> how this application work :) I place the code :</p>
  
  <pre><code>/*
   * To change this template, choose Tools | Templates
   * and open the template in the editor.
   */
  package org.yournamehere.client;
  
  import com.google.gwt.core.client.EntryPoint;
  import com.google.gwt.core.client.GWT;
  import com.google.gwt.user.client.ui.Button;
  import com.google.gwt.user.client.ui.Label;
  import com.google.gwt.user.client.ui.RootPanel;
  import com.google.gwt.event.dom.client.ClickEvent;
  import com.google.gwt.event.dom.client.ClickHandler;
  import com.google.gwt.user.client.Timer;
  import com.google.gwt.user.client.rpc.AsyncCallback;
  
  /**
   * Main entry point.
   *
   * @author djfonplaz
   */
  public class MainEntryPoint implements EntryPoint {
      /** 
       * Creates a new instance of MainEntryPoint
       */
      public MainEntryPoint() {
      }
  
      public static GWTServiceAsync getService() {
          // Create the client proxy. Note that although you are creating the
          // service interface proper, you cast the result to the asynchronous
          // version of the interface. The cast is always safe because the
          // generated proxy implements the asynchronous interface automatically.
  
          return GWT.create(GWTService.class);
      }
  
      public void onModuleLoad() {
          final Label quoteText = new Label();
  
          Timer timer = new Timer() {
              public void run() {
                  //create an async callback to handle the result:
                  AsyncCallback callback = new AsyncCallback() {
                      public void onFailure(Throwable arg0) {
                          //display error text if we can't get the quote:
                          quoteText.setText("Failed to get a quote");
                      }
  
                      public void onSuccess(Object result) {
                          //display the retrieved quote in the label:
                          quoteText.setText((String) result);
                      }
                  };
                  getService().myMethod(callback);
              }
          };
  
          timer.scheduleRepeating(1000);
          RootPanel.get().add(quoteText);
      }
  }
  
  /*
   * To change this template, choose Tools | Templates
   * and open the template in the editor.
   */
  
  package org.yournamehere.client;
  
  import com.google.gwt.user.client.rpc.RemoteService;
  import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
  
  /**
   *
   * @author djfonplaz
   */
  @RemoteServiceRelativePath("gwtservice")
  public interface GWTService extends RemoteService {
      public String myMethod();
  }
  
  /*
   * To change this template, choose Tools | Templates
   * and open the template in the editor.
   */
  
  package org.yournamehere.client;
  
  import com.google.gwt.user.client.rpc.AsyncCallback;
  
  /**
   *
   * @author djfonplaz
   */
  public interface GWTServiceAsync {
      public void myMethod(AsyncCallback callback);
  }
  
  /*
   * To change this template, choose Tools | Templates
   * and open the template in the editor.
   */
  
  package org.yournamehere.server;
  
  import com.google.gwt.user.server.rpc.RemoteServiceServlet;
  import java.util.ArrayList;
  import java.util.List;
  import java.util.Random;
  
  import org.yournamehere.client.GWTService;
  
  /**
   *
   * @author djfonplaz
   */
  public class GWTServiceImpl extends RemoteServiceServlet implements GWTService {
      private Random randomizer = new Random();
      private static final long serialVersionUID = -15020842597334403L;
      private static List quotes = new ArrayList();
  
      static {
          quotes.add("No great thing is created suddenly - Epictetus");
          quotes.add("Well done is better than well said - Ben Franklin");
          quotes.add("No wind favors he who has no destined port - Montaigne");
          quotes.add("Sometimes even to live is an act of courage - Seneca");
          quotes.add("Know thyself - Socrates");
      }
  
      public String myMethod() {
          return (String) quotes.get(randomizer.nextInt(5));
      }
  }
  </code></pre>
  
  <p>So (more or less) :</p>
  
  <ol>
  <li>the standard welcomeGWT.html is served to the server, which call directly trought the JS created the servlet MainEntryProject.java</li>
  <li>MainEntryProject.java (when is loaded trought onModuleLoad())  which should generate the string and send to the client.</li>
  </ol>
  
  <p>Right at this point?</p>
  
  <p>What i don't understand is :</p>
  
  <ol>
  <li>Who call the method myMethod() in GWTServiceImpl? Nobody ask this method, i just see getService().myMethod(callback), which should call the one of the GWTServiceAsync class.</li>
  <li>Who pass the string generated by GWTServiceImpls to public void onSuccess(Object result)?</li>
  <li>Why the getService() return GWTService and not the GWTServiceImpl? It should return a class, not an interface;</li>
  </ol>
  
  <p>If someone can help me, would be really glad! cheers</p>