Play-GWT2 Module
Play GWT2 provides some classes and commands to simplify the integration of a GWT 2.x Module in a play application.
h2. Installation
1. This module does not includes GWT SDK. You will need to download it. ( version 2.0.x )
2. Create a new Play! application or use an existing one.
2. Set GWT_PATH (or GWT_HOME) environment variable.
3. Install GWT2 module. > play install gwt2
4. Edit the conf/application.conf file to enable the GWT2 module :
# Additional modules
# ~~~~~
# A module is another play! application. Add a line for each module you want
# to add to your application. Modules path are either absolutes or relative to
# the application root.
#
module.gwt2=${play.path}/modules/gwt2-1.3
h2. Initialize you Application
bc. play gwt2:init myAppthis will
- create a folder in your application :
- create a folder in your application :
- and copy gwt-user.jar to
if you want to change get path for you gwt modules, edit the conf/application.conf file and add theese lines
# GWT2 Configuration
# ~~~~~
# gwt2.modulespath=myfolder
then you can set you personal folder to use
Create a GWT Module create your module like this:
play gwt2:create myApp
this will ask you a gwt module name
What is the gwt module name ?
enter for eg: firstmodule
this action create some files
GreetingService Interface must use annotation @RemoteServiceRelativePath(“greet”)
GreetingServiceImpl.java must implements GWTService and us @GWT2ServicePath(“/firstmodule/greet”) annotation
Testing you GWT Module with dev mode
First start you Play application.
play run myApp
Then start the dev mode,
play gwt2:devmode myApp
GWT will compile your modules at first time.
Now you access your gwt module this url
Compiling a module
To compile a module (eg: before deployment)
play gwt2:compile myApp
this will ask you a gwt module name
What is the gwt module name ?
Enter a name, then GWT will compile your module.
Remove a GWT Module
As for creating a new GWT Module but use gwt2:remove
play gwt2:remove myApp
this will ask you a gwt module name
What is the gwt module name ?
all directory of your module will be deleted:
-
-
Debugging the GWT UI
1. The easiest way it to eclipsify, netbeansify, ... you application and then use you prefered IDE to use JPDA. By default GWT listen on port 3408.
Creating a service using GWT-RPC
this part is the same as the Play-GWT by Rustem Suniev.
If you follow the GWT manual, it will explain you how to expose a service with GWT-RPC using a RemoteServiceServlet.
Exposing a GWT service with Play is almost the same, but since you can’t define servlets in a Play application, you have to use the provided support class, play.modules.gwt.GWTService
For example, to implement this service:
package gwt.mymod.client;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
@RemoteServiceRelativePath("hello")
public interface HelloService extends RemoteService {
String sayHello(String name);
}
simply create a class that extends the play.modules.gwt.GWTService, and define the service URL path with the play.modules.gwt.GWTServicePath annotation. Like this:
package services;
import play.modules.gwt2.GWT2Service;
import play.modules.gwt2.GWT2ServicePath;
import gwt.mymod.client.HelloService;
@GWT2ServicePath("/main/hello")
public class HelloServiceImpl extends GWT2Service implements HelloService {
public String sayHello(String name) {
return "Hello " + name;
}
}
This is the only difference from the GWT documentation.
Using Play Model You can use Play Model directly with your GWT Services. For that you have 2 solutions.
1. the first one is to create JPA Entity without extending play.db.jpa.Model
@Entity
public class MyModel
{
@Required
@MinSize(1)
@MaxSize(100)
@Column(name="text", nullable=false, length=100)
public String someText;
}
You will have to use JPA.em().
2. the second one is to extends your model with play.db.jpa.Model and add a Custom Field Serializer side to the model class.
MyModel.java
@Entity
public class MyModel extends Model
{
@Required
@MinSize(1)
@MaxSize(100)
@Column(name="text", nullable=false, length=100)
public String someText;
}
MyModel_CustomFieldSerializer.java
public class MyModel_CustomFieldSerializer {
public static MyModel instantiate(SerializationStreamReader reader)
throws SerializationException {
return new MyModel();
}
public static void serialize(SerializationStreamWriter writer,
MyModel instance)
throws SerializationException {
writer.writeObject(instance.id);
writer.writeString(instance.someText);
}
public static void deserialize(SerializationStreamReader reader,
MyModel instance)
throws SerializationException {
instance.id = (Long) reader.readObject();
instance.someText = reader.readString();
}
Samples
You will find 2 samples in the folder “samples” in the play gwt2 modules.
1. simple test
This sample is just a basic gwt module create with:
- gwt2:init
- gwt2:create
- gwt2:compile
2. myModel
This sample is an basic gwt module wich use Play Model.
About
This Module is maintained by Vincent Buzzano and was originaly based on the GWT Plugin by Rustem Suniev.
website:
- http://github.com/vbuzzano/play-gwt2