Montag, Februar 05, 2007

GWT - simple RPC example

Robert Hanson hat ein sehr einfaches Tutorial bezüglich dem Nutzen von RPC mit dem GWT geschrieben. Es die die absoluten Basics, aber hat mir doch sehr geholfen. Wenn das Prinzip mal klar ist, dann lässt es sich einfach ausbauen.

http://roberthanson.blogspot.com/2006/06/trivial-gwt-example.html

Es ist halt in Englisch, aber ich denke, jeder kommt damit zurecht. Einfach nur den Source Code kopieren geht auch. Man versteht es ziemlich schnell, hier eine Mini Anleitung:

XML Datei muss angepasst werden. Servlet muss eingesetzt werden. path bezieht sich auf die Methode, welche auf dem Server aufgerufen werden will.

<module>
<inherits name='com.google.gwt.user.User'/>
<entry-point class='org.hanson.gwt.client.MyApplication'/>
<servlet path="/myService"
class="org.hanson.gwt.server.MyServiceImpl"/>
</module>

Das erste Interface, welches die Remote Methode hat
[./org/hanson/gwt/client/MyService.java]

package org.hanson.gwt.client;
import com.google.gwt.user.client.rpc.RemoteService;
public interface MyService extends RemoteService
{
public String myMethod (String s);
}

Das 2. Inteface welches ebenfalls die Methode hat. Diese sind sich sehr ähnlich
[./org/hanson/gwt/client/MyServiceAsync.java]

package org.hanson.gwt.client;
import com.google.gwt.user.client.rpc.AsyncCallback;
public interface MyServiceAsync
{
public void myMethod(String s, AsyncCallback callback);
}

Zum Schluss kommt noch der eigentliche Client:

[./org/hanson/gwt/client/MyApplication.java]

package org.hanson.gwt.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.RootPanel;

/**
* Entry point classes define onModuleLoad().
*/
public class MyApplication implements EntryPoint
{

public void onModuleLoad ()
{

// define the service you want to call
MyServiceAsync svc =
(MyServiceAsync) GWT.create(MyService.class);
ServiceDefTarget endpoint = (ServiceDefTarget) svc;
endpoint.setServiceEntryPoint("/myService");

// define a handler for what to do when the
// service returns a result
AsyncCallback callback = new AsyncCallback() {
public void onSuccess (Object result)
{
RootPanel.get().add(new HTML(result.toString()));
}

public void onFailure (Throwable ex)
{
RootPanel.get().add(new HTML(ex.toString()));
}
};

// execute the service
svc.myMethod("Do Stuff", callback);

}
}

Das wären so die wichtigesten Code Schnipsel daraus. Natürlich müssen die entsprechenden Pfade noch angepasst werden und zudem fehlt auch noch das html file, doch dies lässt sich sehr schnell erzeugen.

Bei mir hat es einwandfrei funktioniert!