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:
(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:
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:
Before we can access the new module we need to add the following rules to urlrewrite.xml:
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
You can find the full source here.
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
You can find the full source here.
Nicely done. Thanks, that was confusing me :)
ReplyDelete