Adding a custom GWT module in a Roo-project

So I started looking into Roo the other day. Seems like a nice tool (once it matures a little more). Anyway - I wanted to create a custom module in addition to the two being generated when adding GWT-support to the project. Not as easy as I thought, mainly because I hadn’t seen the Url Rewrite Filter before. I ended up with a 404, no matter what I did, and couldn’t figure out why. Frustration!
After reading up on the url rewrite stuff, I was ready to give it another try. Let’s create a module called Application, based on the standard sample application you’ll get using the GWT wizard in Eclipse. First of all, create the Roo project using the following instructions:
project --topLevelPackage com.technowobble
persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
entity --class com.technowobble.domain.MyEntity
gwt setup
(The “gwt setup” setup command generates some code that will not compile unless there’s a persistence setup and at least one entity.)
Next, create the Application.gwt.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.0.1//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.0.1/distro-source/core/src/gwt-module.dtd">
<module rename-to="application">
<inherits name="com.google.gwt.user.User" />
<inherits name="com.google.gwt.user.theme.standard.Standard" />
<inherits name="com.technowobble.gwt.ApplicationCommon" />
<source path="client" />
<source path='shared'/>
<entry-point
class="com.technowobble.gwt.client.Application" />
</module>
We also need to add the actual Application-class (Application.java) and the service classes (GreetingService.java, GreetingServiceAsync.java, GreetingServiceImpl.java and FieldVerifier) from the Eclipse GWT sample application. While we’re at it, put the Application.html and Application.css into the src/main/webapp folder.
Of course, the service servlet needs to be added to web.xml:
<servlet>
<servlet-name>greetServlet</servlet-name>
<servlet-class>com.technowobble.gwt.server.GreetingServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>greetServlet</servlet-name>
<url-pattern>/application/greet</url-pattern>
</servlet-mapping>
Before we can access the new module we need to add the following rules to urlrewrite.xml:
<rule enabled="true">
<from casesensitive="false">/application/**</from>
<to last="true" type="forward">/application/$1</to>
</rule>
<rule enabled="true">
<from casesensitive="false">/Application.html</from>
<to last="true" type="forward">/Application.html</to>
</rule>
The html file contains a reference to the stylesheet, which needs to be updated due to the Url Rewrite Filter - just change the href to href=“static/Application.css”.
That’s it. Of course, an interesting exercise would be to combine this with the use of the DispatcherServlet and a Spring/GWT-integration controller like the GwtRpcController being used in my blog entry about [Spring Security and GWT](http://technowobble.blogspot.com/2010/05/gwt-and-spring- security.html)
You can find the full source here.