
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>pgt &#187; gwt</title>
	<atom:link href="http://pgt.de/tag/gwt/feed/" rel="self" type="application/rss+xml" />
	<link>http://pgt.de</link>
	<description>t3chnology scouting GmbH</description>
	<lastBuildDate>Thu, 08 Dec 2011 11:07:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>GWT 2.5?</title>
		<link>http://pgt.de/2011/12/08/gwt-2-5/</link>
		<comments>http://pgt.de/2011/12/08/gwt-2-5/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 11:06:21 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[gwt]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=898</guid>
		<description><![CDATA[<p>Normally the GWT team does not comment on future milestones, releases and does not provide an official roadmap (Issue 7013).</p> <p>But this time, the team posted several comments on whether GWT is dead or not (mainly because of the fuss around Dart), and Ray Cromwell posted a comment providing some insight on what is [...]]]></description>
			<content:encoded><![CDATA[<p>Normally the GWT team does not comment on future milestones, releases and does not provide an official roadmap (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=7013" target="_blank">Issue 7013</a>).</p>
<p>But this time, the team posted several comments on whether <a href="http://blog.oio.de/2011/12/08/future-of-gwt-and-gwt-2-5/" target="_blank">GWT is dead or not</a> (mainly because of the fuss around Dart), and Ray Cromwell posted a comment providing some insight on what is coming on GWT 2.5:</p>
<blockquote><p>The next release or two of GWT may include more core improvements than the last few point releases of GWT so far, consider:</p>
<p>1) Compiler optimizations that reduce code by size by 30% uncompressed, and 15% gzipped<br />
2) SourceMap support and Source-Level Java debugging in Chrome (and hopefully Firefox)<br />
3) A „super draft mode“ that can recompile many apps in under 10 seconds and most under 5<br />
4) New „to the metal“ „modern browser“ HTML bindings<br />
5) Testing framework that makes GUI testing delightful<br />
6) Incremental compile support to speed up production compiles</p>
<p>So code will be getting smaller, faster, easier to debug (in some situations) and test, and compiles will go quicker. This reflects somewhat the shift in GWT team composition, but as people ramp up on other parts of the SDK (e.g. MVP stuff), I’m sure there will be improved responsiveness to fixing bugs in that area as well.</p></blockquote>
<p>Add this to the list of issues already fixed and scheduled for 2.5, and we will have a really interesting release.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2011/12/08/gwt-2-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GWT-JSF &#8211; Wahl-o-Mat</title>
		<link>http://pgt.de/2011/05/05/gwt-jsf-wahl-o-mat/</link>
		<comments>http://pgt.de/2011/05/05/gwt-jsf-wahl-o-mat/#comments</comments>
		<pubDate>Thu, 05 May 2011 07:15:22 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Java & Co.]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[politics]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=885</guid>
		<description><![CDATA[<p>Die kleine Entscheidungshilfe, bzw. die Vortragsfolien zu unserem Vortrag auf der Jax 2011.</p> <p></p> <p>Oder direkt hier: http://bit.ly/gwt-jsf-wahlomat</p> ]]></description>
			<content:encoded><![CDATA[<p>Die kleine Entscheidungshilfe, bzw. die Vortragsfolien zu unserem Vortrag auf der Jax 2011.</p>
<p><iframe frameborder='0' style='width:460px;height:375px;' src='http://public.iwork.com/embed/?d=wahlomat-gwt-jsf.key&#038;a=p51619782&#038;h=768&#038;w=1024&#038;sw=458'></iframe></p>
<p>Oder direkt hier: <a href="http://bit.ly/gwt-jsf-wahlomat" target="_blank">http://bit.ly/gwt-jsf-wahlomat</a></p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2011/05/05/gwt-jsf-wahl-o-mat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE 6 / 7 / 8 bad performance?</title>
		<link>http://pgt.de/2011/01/30/ie-6-7-8-bad-performance/</link>
		<comments>http://pgt.de/2011/01/30/ie-6-7-8-bad-performance/#comments</comments>
		<pubDate>Sun, 30 Jan 2011 19:04:37 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=839</guid>
		<description><![CDATA[<p>When you start developing complex enterprise applications using GWT, you can run into the problem that IE does not perform quite well with too much JavaScript.</p> <p>Many companies are still stuck in &#8211; IMHO &#8211; the most successfull vendor-version lock-in web history. Ever heard this?</p> <p>I cannot upgrade IE in our company because of [...]]]></description>
			<content:encoded><![CDATA[<p>When you start developing complex enterprise applications using GWT, you can run into the problem that IE does not perform quite well with too much JavaScript.</p>
<p>Many companies are still stuck in &#8211; IMHO &#8211; the most successfull vendor-version lock-in web history. Ever heard this?</p>
<blockquote><p>I cannot upgrade IE in our company because of  (&#8230;)*</p>
<p>(*) You can fill in you favorite corporate intranet application that won&#8217;t work elsewhere, only in IE6.</p></blockquote>
<p>And even if you can upgrade IE to the latest version (actually IE8), it won&#8217;t get much better. Chrome, Opera, Firefox and Safari &#8211; pic anyone and you will see that the RIA in question can be fast.</p>
<p>And here is where Google comes to the rescue. In a recent blog posting, the Chromium declared that &#8220;<a href="http://blog.chromium.org/2010/12/chrome-is-ready-for-business.html" target="_blank">chrome is ready for business</a>&#8220;:</p>
<blockquote><p>Both Chrome and Chromium are now manageable through Group Policy objects on Windows, plist/MCX configuration on Mac, and special JSON configuration files on Linux. We polished up the NTLM and Kerberos protocol support, and created a list of supported policies and administrative templates to help administrators deploy.</p></blockquote>
<p>This is good news for companies willing to switch from IE to chrome, but for those sticking to IE we still have the nochrome-vendor-version lock-in. And this is the greatest problem: how do you switch to a modern browser, if you must run several applications in IE? The answer is simple: you switch the rendering engine inside IE, but not for all applications, just for those explicitly asking for it:</p>
<blockquote><p>For users needing access to older web applications not yet qualified for Chrome, we also developed Chrome Frame, an Internet Explorer (TM) plug-in that provides Chrome-quality rendering for the broader Web, while defaulting to host rendering for any web applications that still require IE.</p></blockquote>
<p>This way, IE will work as always, but if some page adds a simple html or http header, google chrome will do the rendering of the page, inside IE. Users don&#8217;t have to switch from one browser to another, and the IT department can rollout one web application upgrade after another, without compromising legacy apps.</p>
<p>You could even use a <a href="http://wiki.squid-cache.org/SquidFaq/ContentAdaptation" target="_blank">proxy with content adaptation</a> to add the required http header to all pages from the internet.</p>
<p>I mean, really, <a href="http://apcmag.com/microsoft-warns-stop-using-ie6-ie7-now.htm" target="_blank">even Microsoft says you should upgrade</a>:</p>
<blockquote><p>Microsoft&#8217;s urging to upgrade to IE8 appears to be partially in response to the German and French governments&#8217; recommendation that people stop using Internet Explorer altogether due to its security vulnerabilities.</p>
<p>Microsoft&#8217;s announcement said: &#8220;It is important to note that all software has vulnerabilities and switching browsers in an attempt to protect against this one, highly publicized, but currently limited attack can inadvertently create some false sense of security. Moreover, IE8 has other built-in security protections, such as the SmartScreen filter, that other browsers do not have that protect against real consumer threats, such as socially engineered malware and phishing attacks.&#8221;</p></blockquote>
<p><div style="padding: 50px 10px 50px 10px; text-align:center;"><script type="text/javascript"><!--
google_ad_client = "ca-pub-8682101792434953";
/* blogposts */
google_ad_slot = "3634251742";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2011/01/30/ie-6-7-8-bad-performance/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GWT and standards compliance</title>
		<link>http://pgt.de/2011/01/30/gwt-and-standards-compliance/</link>
		<comments>http://pgt.de/2011/01/30/gwt-and-standards-compliance/#comments</comments>
		<pubDate>Sun, 30 Jan 2011 17:11:14 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[java ee]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=828</guid>
		<description><![CDATA[<p>This is a sort of &#8220;standard&#8221; question when it comes down to the topic web frameworks, Java and finally the Google Web Toolkit (GWT).</p> <p>My first though is, what exactly is meant with &#8220;standard&#8221;? A short look at Wikipedia shows:</p> <p>Open Standard: An open standard is a standard that is publicly available and has [...]]]></description>
			<content:encoded><![CDATA[<p>This is a sort of &#8220;standard&#8221; question when it comes down to the topic web frameworks, Java and finally the Google Web Toolkit (GWT).</p>
<p>My first though is, what exactly is meant with &#8220;standard&#8221;?<br />
<span id="more-828"></span><br />
A short look at Wikipedia shows:</p>
<blockquote><p><a href="http://en.wikipedia.org/wiki/Open_standard" target="_blank">Open Standard</a>: An open standard is a standard that is publicly available and has various rights to use associated with it, and may also have various properties of how it was designed (e.g. open process). There is no single definition and interpretations do vary with usage.</p>
<p><a href="http://en.wikipedia.org/wiki/De_facto_standard">De facto standard</a>: A de facto standard is a custom, convention, product, or system that has achieved a dominant position by public acceptance or market forces (such as early entrance to the market). De facto is a Latin phrase meaning &#8220;concerning the fact&#8221; or &#8220;in practice&#8221;.</p>
<p><a href="http://en.wikipedia.org/wiki/Internet_standard" target="_blank">Internet standard</a>: In computer network engineering, an Internet Standard (STD) is a normative specification of a technology or methodology applicable to the Internet. Internet Standards are created and published by the Internet Engineering Task Force (IETF).</p></blockquote>
<p>No, no,  no! Not that kind of standard, right? Ah, ok, the Java EE standard!</p>
<p>Again, looking at Wikipedia you will find the following under &#8220;<a href="http://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition#Nomenclature.2C_standards.2C_and_specifications" target="_blank">nomenclature, standards and specification</a>&#8220;:</p>
<blockquote><p>Java EE is defined by its specification. As with other Java Community Process specifications, providers must meet certain conformance requirements in order to declare their products as Java EE compliant.</p>
<p>Java EE includes several API specifications, such as JDBC, RMI, e-mail, JMS, web services, XML, etc., and defines how to coordinate them. Java EE also features some specifications unique to Java EE for components. These include Enterprise JavaBeans, Connectors, servlets, portlets (following the Java Portlet specification), JavaServer Pages and several web service technologies. This allows developers to create enterprise applications that are portable and scalable, and that integrate with legacy technologies.</p></blockquote>
<p>Which leaves us just a few options: the Servlet/ JSP and the JavaServer Faces specifications. While the Servlet and JSP specifications focus on how to handle HTTP request/ responses, the JSF specification defines a GUI component model for web applications.</p>
<p>The problem here is: there is no room anymore for another &#8220;compliant&#8221; web framework &#8211; JSF made it into the Java EE specification &#8211; end of line. But, despite of a wide industry support, JSF is not the only web framework being used today by Java developers. And to make things a little more trickier, typical Web 2.0 web applications do not render the UI on the server side but in the browser.</p>
<p>Fancy &#8220;Web 2.0&#8243; applications are not written in Java. Rich user interfaces are being rendered completely in the browser, avoiding the server roundtrip and minimizing latency. How? By simply using DHTML (technologies defined by the W3C).</p>
<p>So is this the end of Java? No! You will find people using Java backends for &#8220;Web 2.0&#8243; applications. But even as a backend technology we won&#8217;t be abiding by the rules of standard compliance by using RMI or SOAP to communicate: it is common to send lightweight JSON over HTTP. All you need for that is a Servlet and a little bit of JSON &lt;-&gt; Java objects mapping. People developing RIAs and using JSON back and forward to the server are measuring latency in milliseconds.</p>
<p>So, if you will be building a Web 2.0 application, don&#8217;t look for a specification at the Java EE side. It is the wrong side, as Java is actually the backend, not the frontend. That brings us back to the first standards I cited above: open standards, de facto standards and internet standards.</p>
<p>This is how things were before JSF, and this is how things became after Web 2.o.</p>
<p><a href="http://pgt.de/wp-content/uploads/2011/01/gwt-and-standards.png"><img class="aligncenter size-medium wp-image-829" title="gwt-and-standards" src="http://pgt.de/wp-content/uploads/2011/01/gwt-and-standards-300x203.png" alt="" width="300" height="203" /></a></p>
<p>So, back to the question, is GWT standard compliant or not? Well, besides of those blue boxes on the picture above I would say yes!</p>
<ul>
<li>The compiler is not standard, but I would not know what a standard compiler would be or mean to development anyway</li>
<li>The GWT-RPC mechanism is highly GWT proprietary, don&#8217;t use it if you don&#8217;t like it. But it is my belief that there aren&#8217;t too many developers out there that can code something better than GWT-RPC by hand&#8230;</li>
</ul>
<p><div style="padding: 50px 10px 50px 10px; text-align:center;"><script type="text/javascript"><!--
google_ad_client = "ca-pub-8682101792434953";
/* blogposts */
google_ad_slot = "3634251742";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2011/01/30/gwt-and-standards-compliance/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Apache configuration for GWT applications [updated]</title>
		<link>http://pgt.de/2011/01/27/apache-configuration-for-gwt-applications/</link>
		<comments>http://pgt.de/2011/01/27/apache-configuration-for-gwt-applications/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 09:07:14 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[deflate]]></category>
		<category><![CDATA[expires]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[http header]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=804</guid>
		<description><![CDATA[<p>GWT applications are basically a bunch of static resources, and static resources are strong candidates for browser caching.</p> <p>The GWT generated files make it quite easy to follow some of the tips for building a cache-aware site:</p> <p>If a resource (especially a downloadable file) changes, change its name. That way, you can make it [...]]]></description>
			<content:encoded><![CDATA[<p>GWT applications are basically a bunch of static resources, and static resources are strong candidates for browser caching.</p>
<p>The GWT generated files make it quite easy to follow some of the <a href="http://www.mnot.net/cache_docs/#TIPS" target="_blank">tips for building a cache-aware site</a>:</p>
<blockquote><p>If a resource (especially a downloadable file) changes, change its name. That way, you can make it expire far in the future, and still guarantee that the correct version is served; the page that links to it is the only one that will need a short expiry time.</p></blockquote>
<p>If we have a look at the generated files we will find</p>
<ul>
<li>strongly unique filenames</li>
<li>cache and nocache hints in the filename</li>
</ul>
<p><span id="more-804"></span></p>
<p><a href="http://pgt.de/wp-content/uploads/2011/01/gwtfilenames.png"><img class="aligncenter size-full wp-image-806" title="GWT generated files" src="http://pgt.de/wp-content/uploads/2011/01/gwtfilenames.png" alt="" width="376" height="308" /></a></p>
<p>It would be possible to add servlet filters to the Java EE Web Container (I will call it tomcat from now on&#8230;) delivering those files, but I prefer to have it outside of tomcat. As long as I don&#8217;t find the &#8220;GWT optimization all-in-one-filter&#8221; I will keep using the Apache http server for optimization. Besides, it is not unusual to hide one ore more tomcat instances behind an Apache http server.</p>
<p>Well, I found it quite tricky to setup compression, http headers and the right proxy configuration, so here is my config as of today&#8230;</p>
<p>I am using <a href="http://httpd.apache.org/docs/2.2/mod/mod_deflate.html" target="_blank">mod_deflate</a>, <a href="http://httpd.apache.org/docs/2.2/mod/mod_expires.html" target="_blank">mod_expires</a> and <a href="http://httpd.apache.org/docs/2.2/mod/mod_headers.html" target="_blank">mod_headers</a>, <a href="http://httpd.apache.org/docs/2.2/mod/mod_proxy.html" target="_blank">mod_proxy</a> and <a href="http://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html" target="_blank">mod_proxy_ajp</a>. It is up to you to have those loaded in your Apache configuration. Load balancing with <a href="http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html" target="_blank">mod_proxy_balancer</a> is out of scope for this article.</p>
<p>So here is my configuration:<br />
<strong>[update]</strong><br />
I added a version number to the configuration.<br />
<strong>[/update]</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
</pre></td><td class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #adadad; font-style: italic;">#</span>
<span style="color: #adadad; font-style: italic;">#  Version 2</span>
<span style="color: #adadad; font-style: italic;">#  Source: http://pgt.de/2011/01/27/apache-configuration-for-gwt-applications/</span>
<span style="color: #adadad; font-style: italic;">#</span>
&lt;<span style="color: #000000; font-weight:bold;">IfModule</span> mod_proxy.c&gt;
   &lt;<span style="color: #000000; font-weight:bold;">IfModule</span> mod_proxy_ajp.c&gt;
&nbsp;
      &lt;<span style="color: #000000; font-weight:bold;">IfModule</span> mod_expires.c&gt;
         <span style="color: #00007f;">ExpiresActive</span> <span style="color: #0000ff;">On</span>
      &lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;          
&nbsp;
      &lt;<span style="color: #000000; font-weight:bold;">IfModule</span> mod_headers.c&gt;
         &lt;<span style="color: #000000; font-weight:bold;">ProxyMatch</span> (.*)<span style="color: #00007f;">nocache</span>\.js$&gt;
            <span style="color: #00007f;">Header</span> Set Cache-Control <span style="color: #7f007f;">&quot;max-age=0, no-store&quot;</span>
         &lt;/<span style="color: #000000; font-weight:bold;">ProxyMatch</span>&gt;
         &lt;<span style="color: #000000; font-weight:bold;">ProxyMatch</span> (.*)\.cache\.(.*)&gt;
            <span style="color: #00007f;">Header</span> Set Cache-Control <span style="color: #7f007f;">&quot;max-age=31536000, public, must-revalidate&quot;</span>
         &lt;/<span style="color: #000000; font-weight:bold;">ProxyMatch</span>&gt;
         &lt;<span style="color: #000000; font-weight:bold;">ProxyMatch</span> (.*)\.cache\.js$&gt;
            <span style="color: #00007f;">Header</span> Set Cache-Control <span style="color: #7f007f;">&quot;max-age=31536000, private&quot;</span>
         &lt;/<span style="color: #000000; font-weight:bold;">ProxyMatch</span>&gt;
      &lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;          
&nbsp;
      &lt;<span style="color: #000000; font-weight:bold;">IfModule</span> mod_deflate.c&gt;
         <span style="color: #00007f;">SetOutputFilter</span> DEFLATE
         <span style="color: #00007f;">AddOutputFilterByType</span> DEFLATE text/plain
         <span style="color: #00007f;">AddOutputFilterByType</span> DEFLATE text/html 
         <span style="color: #00007f;">AddOutputFilterByType</span> DEFLATE text/xml  
         <span style="color: #00007f;">AddOutputFilterByType</span> DEFLATE text/css  
         <span style="color: #00007f;">AddOutputFilterByType</span> DEFLATE text/javascript
         <span style="color: #00007f;">AddOutputFilterByType</span> DEFLATE application/xml
         <span style="color: #00007f;">AddOutputFilterByType</span> DEFLATE application/xhtml+xml
         <span style="color: #00007f;">AddOutputFilterByType</span> DEFLATE application/rss+xml  
         <span style="color: #00007f;">AddOutputFilterByType</span> DEFLATE application/javascript
         <span style="color: #00007f;">AddOutputFilterByType</span> DEFLATE application/x-javascript
         <span style="color: #00007f;">AddOutputFilterByType</span> DEFLATE application/x-shockwave-flash
      &lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;          
&nbsp;
      &lt;<span style="color: #000000; font-weight:bold;">Proxy</span> *&gt;
         &lt;<span style="color: #000000; font-weight:bold;">IfModule</span> mod_expires.c&gt;
            <span style="color: #00007f;">ExpiresByType</span> application/json   <span style="color: #7f007f;">&quot;now&quot;</span>
            <span style="color: #00007f;">ExpiresByType</span> text/css            <span style="color: #7f007f;">&quot;now&quot;</span>
            <span style="color: #00007f;">ExpiresByType</span> text/html          <span style="color: #7f007f;">&quot;now&quot;</span>
         &lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;
         &lt;<span style="color: #000000; font-weight:bold;">ifModule</span> mod_headers.c&gt;
             <span style="color: #00007f;">Header</span> unset ETag
             <span style="color: #00007f;">Header</span> unset Last-Modified
         &lt;/<span style="color: #000000; font-weight:bold;">ifModule</span>&gt;
         <span style="color: #00007f;">FileETag</span> <span style="color: #0000ff;">None</span>
      &lt;/<span style="color: #000000; font-weight:bold;">Proxy</span>&gt;
&nbsp;
      &lt;<span style="color: #000000; font-weight:bold;">Location</span> /gwt&gt;
         <span style="color: #00007f;">ProxyPass</span>         ajp://localhost:<span style="color: #ff0000;">8009</span>/gwt
         <span style="color: #00007f;">Order</span> <span style="color: #00007f;">allow</span>,<span style="color: #00007f;">deny</span>
         <span style="color: #00007f;">Allow</span> from <span style="color: #0000ff;">all</span>  
      &lt;/<span style="color: #000000; font-weight:bold;">Location</span>&gt; 
&nbsp;
   &lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;          
&lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;</pre></td></tr></table></div>

<p>As you can see I turned off caching of css and html files for my GWT app for a simple reason: my GWT apps follow the single page principle, so users won&#8217;t leave/ reload the page. And when they do, it is ok to deliver the actual version. You can fill in your own strategy here, depending on your own application lifecycle.</p>
<p>The compression is working fine, as you can see at the difference between the size and the transfered size:</p>
<p><a href="http://pgt.de/wp-content/uploads/2011/01/gwt-chrome-transfersizes.png"><img src="http://pgt.de/wp-content/uploads/2011/01/gwt-chrome-transfersizes-300x126.png" alt="" title="Transfer sizes in google chrome" width="300" height="126" class="aligncenter size-medium wp-image-819" /></a></p>
<p>As configured, the expiration headers for the cacheable filenames are set to the far future, here are the headers for a split point:<br />
<a href="http://pgt.de/wp-content/uploads/2011/01/split-point-headers.png"><img src="http://pgt.de/wp-content/uploads/2011/01/split-point-headers-300x176.png" alt="" title="HTTP headers for cacheable GWT artefacts" width="300" height="176" class="aligncenter size-medium wp-image-821" /></a></p>
<p>And, as required to get updated GWT apps pushed to the clients on a browser refresh, the http header for the not cacheable file:<br />
<a href="http://pgt.de/wp-content/uploads/2011/01/nocache-headers.png"><img src="http://pgt.de/wp-content/uploads/2011/01/nocache-headers-300x275.png" alt="" title="HTTP headers for no cache files" width="300" height="275" class="aligncenter size-medium wp-image-823" /></a></p>
<p><div style="padding: 50px 10px 50px 10px; text-align:center;"><script type="text/javascript"><!--
google_ad_client = "ca-pub-8682101792434953";
/* blogposts */
google_ad_slot = "3634251742";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2011/01/27/apache-configuration-for-gwt-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GWT Large scale application development</title>
		<link>http://pgt.de/2010/04/24/gwt-large-scale-application-development/</link>
		<comments>http://pgt.de/2010/04/24/gwt-large-scale-application-development/#comments</comments>
		<pubDate>Sat, 24 Apr 2010 16:04:00 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[My blog]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[mvp]]></category>
		<category><![CDATA[pattern]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=801</guid>
		<description><![CDATA[<p>There is a two part article on the GWT docs homepage talking about large scale application development and GWT. Sorry, this is a crosspost from here&#8230;</p> <p>Building any large scale application has its hurdles, and GWT apps are no exception. Multiple developers working simultaneously on the same code base, while maintaining legacy features and [...]]]></description>
			<content:encoded><![CDATA[<p>There is a two part article on the GWT docs homepage talking about large scale application development and GWT. Sorry, this is a crosspost from <a href="http://techscouting.wordpress.com/2010/04/24/gwt-large-scale-application-development/" target="_blank">here</a>&#8230;</p>
<blockquote><p>Building any large scale application has its hurdles, and GWT apps are no exception. Multiple developers working simultaneously on the same code base, while maintaining legacy features and functionality, can quickly turn into messy code. To help sort things out we introduce design patterns to create compartmentalized areas of responsibility within our project.</p></blockquote>
<p>Part I</p>
<blockquote><p><a href="http://code.google.com/intl/de/webtoolkit/articles/mvp-architecture.html" target="_blank">http://code.google.com/intl/de/webtoolkit/articles/mvp-architecture.html</a></p>
<p>Model view presenter, AppController, binding presenters and views, EventBus, history, testing</p></blockquote>
<p>Part II</p>
<blockquote><p><a href="http://code.google.com/intl/de/webtoolkit/articles/mvp-architecture-2.html" target="_blank">http://code.google.com/intl/de/webtoolkit/articles/mvp-architecture-2.html</a></p>
<p>Complex UIs, optimized UIs, and code splitting.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2010/04/24/gwt-large-scale-application-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upcoming google i/o 2010 gwt sessions</title>
		<link>http://pgt.de/2010/02/08/upcoming-google-io-2010-gwt-sessions/</link>
		<comments>http://pgt.de/2010/02/08/upcoming-google-io-2010-gwt-sessions/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 11:44:01 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[gwt]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=793</guid>
		<description><![CDATA[<p>Here are the GWT sessions on the upcoming google i/o 2010 to keep an eye on.</p> <p>Google usually publishes the sessions on youtube and uploads the slides to the respective session homepage. Ray Ryan is talking on two session, one of it is called &#8220;Architecting GWT applications for production at Google&#8221; &#8211; maybe it [...]]]></description>
			<content:encoded><![CDATA[<p>Here are the GWT sessions on the upcoming <a href="http://code.google.com/intl/de/events/io/2010/sessions.html" target="_blank">google i/o 2010</a> to keep an eye on.</p>
<p>Google usually publishes the sessions on youtube and uploads the slides to the respective session homepage. Ray Ryan is talking on two session, one of it is called &#8220;Architecting GWT applications for production at Google&#8221; &#8211; maybe it is part two of his last talk on <a href="http://pgt.de/2009/09/18/best-practices-for-architecting-your-gwt-app/" target="_self">gwt architectures</a> best practices.</p>
<p>I surely won&#8217;t miss any of those:</p>
<p><a href="http://code.google.com/intl/de/events/io/2010/sessions/architecting-performance-gwt.html" target="_blank">Architecting for performance with Google Web Toolkit</a></p>
<blockquote><p>Modern web applications are quickly evolving to an architecture that has to account for the performance characteristics of the client, the server, and the global network connecting them. Should you render HTML on the server or build DOM structures with JS in the browser, or both? This session discusses this, as well as several other key architectural considerations to keep in mind when building your Next Big Thing.</p></blockquote>
<p><a href="http://code.google.com/intl/de/events/io/2010/sessions/gwt-html5.html" target="_blank">GWT + HTML5 can do what?!</a></p>
<blockquote><p>How can you take advantage of new HTML5 features in your GWT applications? In this session, we answer that question in the form of demos &#8212; lots and lots of demos. We&#8217;ll cover examples of how to use Canvas for advanced graphics, CSS3 features, Web Workers, and more within your GWT applications.</p></blockquote>
<p><a href="http://code.google.com/intl/de/events/io/2010/sessions/gwt-ui-overhaul.html" target="_blank">GWT&#8217;s UI overhaul: UiBinder, ClientBundle, and Layout Panels</a></p>
<blockquote><p>There have been some really huge improvements in GWT&#8217;s UI fundamentals over the past year. We&#8217;ve introduced features such as UiBinder, ClientBundle, CssResource, and uber layout panels that allow you to build fast UIs in a sane manner. Come see how fun/easy/fast it can be to use these technologies in harmony to overhaul your UI.</p></blockquote>
<p><a href="http://code.google.com/intl/de/events/io/2010/sessions/gwt-continuous-build-testing.html" target="_blank">GWT continuous build and testing best practices</a></p>
<blockquote><p>GWT has a lot of little-publicized infrastructure that can help you build apps The Right Way: test-driven development, fast continuous builds, code coverage, comprehensive unit tests, and integration testing using Selenium or WebDriver. This session will survey GWT&#8217;s testing infrastructure, describe some best practices we&#8217;ve developed at Google, and help you avoid common pitfalls.</p></blockquote>
<p><a href="http://code.google.com/intl/de/events/io/2010/sessions/architecting-production-gwt.html" target="_blank">Architecting GWT applications for production at Google</a></p>
<blockquote><p>For large GWT applications, there&#8217;s a lot you should think about early in the design of your project. GWT has a variety of technologies to help you, but putting it all together can be daunting. This session walks you through how teams at Google architect production-grade apps, from design to deployment, using GWT.</p></blockquote>
<p><a href="http://code.google.com/intl/de/events/io/2010/sessions/measure-in-milliseconds-speed-tracer-gwt.html" target="_blank">Measure in milliseconds redux: Meet Speed Tracer</a></p>
<blockquote><p>It turns out that web apps can be slow for all sorts of opaque and unintuitive reasons. Don&#8217;t be fooled into thinking that bloated, slow JavaScript is the only culprit. This session introduces you to Speed Tracer, a new GWT tool that can tell you exactly where time is going within the browser.</p></blockquote>
<p><a href="http://code.google.com/intl/de/events/io/2010/sessions/faster-apps-faster-gwt-compiler.html" target="_blank">Faster apps faster: Optimizing apps with the GWT Compiler</a></p>
<blockquote><p>The GWT compiler isn&#8217;t just a Java to JavaScript transliterator. It performs many optimizations along the way. In this session, we&#8217;ll show you not only the optimizations performed, but how you can get more out of the compiler itself. Learn how to speed up compiles, use -draftCompile, compile for only one locale/browser permutation, and more.</p></blockquote>
<p><a href="http://code.google.com/intl/de/events/io/2010/sessions/gwt-linkers-webworkers-extensions.html" target="_blank">GWT Linkers target HTML5 Web Workers, Chrome Extensions, and more</a></p>
<blockquote><p>At its core GWT has a well-defined and customizable mechanism &#8212; called Linkers &#8212; that controls exactly how GWT&#8217;s compiled JavaScript should be packaged, served, and run. This session will describe how to create linkers and explains some of the linkers we&#8217;ve created, including a linker that turns a GWT module into an HTML5 Web Worker and one that generates an HTML App Cache manifest automatically.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2010/02/08/upcoming-google-io-2010-gwt-sessions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GWT 2.0.1 is da</title>
		<link>http://pgt.de/2010/02/03/gwt-2-0-1-is-da/</link>
		<comments>http://pgt.de/2010/02/03/gwt-2-0-1-is-da/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 20:31:17 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[My blog]]></category>
		<category><![CDATA[gwt]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=781</guid>
		<description><![CDATA[<p>Habs gerade erst gesehen.</p> <p>Aus den &#8220;release notes&#8220;:</p> Standard.css missing new layout styles The CurrencyList/CurrencyData APIs are now public ]]></description>
			<content:encoded><![CDATA[<p>Habs gerade erst gesehen.</p>
<p>Aus den &#8220;release <a href="http://code.google.com/intl/de/webtoolkit/release-notes.html#Release_Notes_Current" target="_blank">notes</a>&#8220;:</p>
<ul>
<li>Standard.css missing new layout styles</li>
<li>The CurrencyList/CurrencyData APIs are now public</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2010/02/03/gwt-2-0-1-is-da/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Looking forward to GWT 2.0.1</title>
		<link>http://pgt.de/2010/01/21/looking-forward-to-gwt-2-0-1/</link>
		<comments>http://pgt.de/2010/01/21/looking-forward-to-gwt-2-0-1/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 07:32:07 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[gwt]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=778</guid>
		<description><![CDATA[<p>I just spent some time on the GWT issue list, nice to see work being completed on the 2.0.1 release. Unfortunately, it looks like week numbers are not going to make it into 2.0.1. Since many issues are already marked &#8220;FixedNotReleased&#8221; it might be a good option to checkout and build GWT from the source. Unfortunately the [...]]]></description>
			<content:encoded><![CDATA[<p>I just spent some time on the GWT issue list, nice to see work being completed on the 2.0.1 release. Unfortunately, it looks like <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4009" target="_blank">week numbers</a> are not going to make it into 2.0.1. Since many issues are already marked &#8220;FixedNotReleased&#8221; it might be a good option to <a href="http://code.google.com/intl/de/webtoolkit/makinggwtbetter.html#workingoncode" target="_blank">checkout and build GWT</a> from the source. Unfortunately the <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4429" target="_blank">standard layout for TabLayoutPanel</a> isn&#8217;t marked fixed yet&#8230;</p>
<p>Here is the issue list for the release 2.0.1 I have been looking at:</p>
<blockquote><p><a href="http://code.google.com/p/google-web-toolkit/issues/list?can=2&amp;q=+milestone%3D2_0_1&amp;colspec=ID+Type+Status+Priority+Milestone+Owner+Summary&amp;cells=tiles" target="_blank">http://code.google.com/p/google-web-toolkit/issues/list?can=2&amp;q=+milestone%3D2_0_1&amp;colspec=ID+Type+Status+Priority+Milestone+Owner+Summary&amp;cells=tiles</a></p></blockquote>
<p>Some issues are tagged &#8220;NextRelease&#8221;, so this a worthwhile list to look at:</p>
<blockquote><p><a href="http://code.google.com/p/google-web-toolkit/issues/list?can=2&amp;q=milestone=NextRelease&amp;colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary" target="_blank">http://code.google.com/p/google-web-toolkit/issues/list?can=2&amp;q=milestone=NextRelease&amp;colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary</a></p></blockquote>
<p>As you can see, there are some issues tagged &#8220;NextRelease&#8221; that already are marked &#8220;FixedNotReleased&#8221;.</p>
<p>In the list of &#8220;Planned&#8221; issues you will find &#8220;<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=123" target="_blank">drag and drop</a>&#8221; and support for &#8220;<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=267" target="_blank">comet/ server push</a>&#8220;:</p>
<blockquote><p><a href="http://code.google.com/p/google-web-toolkit/issues/list?can=2&amp;q=milestone%3DPlanned&amp;colspec=ID+Type+Status+Priority+Milestone+Owner+Summary&amp;cells=tiles" target="_blank">http://code.google.com/p/google-web-toolkit/issues/list?can=2&amp;q=milestone%3DPlanned&amp;colspec=ID+Type+Status+Priority+Milestone+Owner+Summary&amp;cells=tiles</a></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2010/01/21/looking-forward-to-gwt-2-0-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Speed Tracer on a Mac</title>
		<link>http://pgt.de/2009/12/09/using-speed-tracer-on-a-mac/</link>
		<comments>http://pgt.de/2009/12/09/using-speed-tracer-on-a-mac/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 20:03:08 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[From nerds to nerds]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[gwt]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=741</guid>
		<description><![CDATA[<p><p class="wp-caption-text">Speed Tracer on a Mac</p></p> <p>I finally got Speed Tracer running on Mac OSX. Just in case you missed the news: GWT 2.0 was released yesterday and brought a nice friend called Speed Tracer. </p> <p>The tool itself is written in GWT (funny, don&#8217;t?) and works as an Chrome extension. Since Chrome for [...]]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_745" class="wp-caption alignright" style="width: 310px"><a href="http://pgt.de/wp-content/uploads/2009/12/Bildschirmfoto-2009-12-09-um-20.54.09.png"><img src="http://pgt.de/wp-content/uploads/2009/12/Bildschirmfoto-2009-12-09-um-20.54.09-300x260.png" alt="Speed Tracer on a Mac" title="Speed Tracer on a Mac" width="300" height="260" class="size-medium wp-image-745" /></a><p class="wp-caption-text">Speed Tracer on a Mac</p></div></p>
<p>I finally got Speed Tracer running on Mac OSX. Just in case you missed the news:<a href="http://googlewebtoolkit.blogspot.com/2009/12/introducing-google-web-toolkit-20-now.html" target="_blank"> GWT 2.0 was released yesterday and brought a nice friend called Speed Tracer</a>. </p>
<p>The tool itself is written in GWT (funny, don&#8217;t?) and works as an Chrome extension. Since Chrome for Mac is beta and does not have support for extensions we nee to use use Chromium. </p>
<p>There are postings on <a href="http://grack.com/blog/2009/12/08/re-enable-install-button-for-mac-chrome-extensions/">how to get extensions running on Chrome for Mac</a>, but I preferred to use a <a href="http://www.chromium.org/Home" target="_blank">Chromium</a> build.</p>
<blockquote><p><a href="http://code.google.com/intl/de-DE/webtoolkit/speedtracer/get-started.html" target="_blank">Speed Tracer</a> is a Google Chrome extension that helps you identify and fix performance problems in your web applications. It visualizes metrics that are taken from low level instrumentation points inside of the browser and analyzes them as your application runs. Using Speed Tracer you are able to get a better picture of where time is being spent in your application.</p></blockquote>
<p>Thanks to pohl (irc chat on ##gwt) for the hints.</p>
<p>So here we go:</p>
<blockquote><p>1) We need some Chrome build that has &#8220;extensions enabled&#8221;. I used <a href="http://build.chromium.org/buildbot/snapshots/chromium-rel-mac/34059/">this one here</a>, but you might try <a href="http://build.chromium.org/buildbot/waterfall/console">any other newer one</a>.</p>
<p>2) Install <a href="http://code.google.com/webtoolkit/speedtracer/get-started.html#downloading">Speed Tracer</a>.</p>
<p>3) Start Chromium with the required command line parameter.</p>
<p>This part is the only real tricky one if you are not a geek&#8230;  ;-)<br />
From the Terminal you can start Chromium manually by executing the following&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>Applications<span style="color: #000000; font-weight: bold;">/</span>Chromium.app<span style="color: #000000; font-weight: bold;">/</span>Contents<span style="color: #000000; font-weight: bold;">/</span>MacOS<span style="color: #000000; font-weight: bold;">/</span>Chromium <span style="color: #660033;">--enable-extension-timeline-api</span></pre></div></div>

<p>&#8230; or you simply rename the bin to something else and place a script that does the command line magic for you.<br />
I renamed Chromium to Chromium-bin and created a Chromium named script file that contains:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #7a0874; font-weight: bold;">exec</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${0%/*}</span>/Chromium-bin&quot;</span> <span style="color: #660033;">--enable-extension-timeline-api</span></pre></div></div>

<p>Don&#8217;t forget to make the script file executable&#8230;</p></blockquote>
<p>That&#8217;s it. Now you can visit some ajax-funny site (google wave, google maps, google mail, google docs, you name it) and test drive Speed Tracer.</p>
<p>Good luck!</p>
<p><div style="padding: 50px 10px 50px 10px; text-align:center;"><script type="text/javascript"><!--
google_ad_client = "ca-pub-8682101792434953";
/* blogposts */
google_ad_slot = "3634251742";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2009/12/09/using-speed-tracer-on-a-mac/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GWT is not the future but the present of web development</title>
		<link>http://pgt.de/2009/11/05/gwt-is-not-the-future-but-the-present-of-web-development/</link>
		<comments>http://pgt.de/2009/11/05/gwt-is-not-the-future-but-the-present-of-web-development/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 10:16:45 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[gwt]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=693</guid>
		<description><![CDATA[<p>I just read an interesting blog articles about &#8220;is GWT the future of web development or not&#8220;. I find the titles quite funny, because I really don&#8217;t believe that it was no ones intention to forecast the future, so the real question is &#8211; is GWT a good approach for present web development?</p> <p>There [...]]]></description>
			<content:encoded><![CDATA[<p>I just read an interesting blog articles about &#8220;is GWT <a href="http://blog.balfes.net/?p=869">the future</a> of web development <a href="http://www.cforcoding.com/2009/10/lost-in-translation-or-why-gwt-isnt.html" target="_blank">or not</a>&#8220;. I find the titles quite funny, because I really don&#8217;t believe that it was no ones intention to forecast the future, so the real question is &#8211; is GWT a good approach for present web development?</p>
<p>There is actually too much fuss about static or dynamic language. The best language is still the language I know best. I feel quite at home with Java and Eclipse &#8211; I won&#8217;t be any more productive in any other language so soon. If you are telling me that one can do things faster with Grails &amp; Co. you might have a point (I really don&#8217;t know), but then we are talking about (web) frameworks and not about the language. I have my roots in Perl programming and I know exactly why I like type safety, but this again is a very personal statement.</p>
<p>Personally speaking, leveraging Java Programmers means really a lot to me. It is not only Eclipse and Java. It is checkstyle, findbugs, unit testing, build infrastructure. I have appreciated reading the GOF patterns, I loved Effective Java and I still have to chuckle when I think of the bad smells in Refactoring (which I somehow know all by personal history). When I do code in Java I mostly do it by consciousness and not by copy and paste from some sites like in my early days in development. Is a matter of fact, I do have something to leverage and it really means something to me.</p>
<p>But wait, let&#8217;t just don&#8217;t forget that GWT does something really tricky. It is not imposing some Java GUI component model on Javascript. They never left sight of what can be done with Javascript and can&#8217;t. It is not like RAP that tries put the Eclipse workbench on the browser, they are just being HTML and Javascript. And this is good and bad. It is good because it is about generating efficient Javascript, and bad because HTML looks ugly without lots of makeup.</p>
<p>If you are looking for eye candy in web development, don&#8217;t wast your time with GWT. And if you start doing SmartClient or GXT just know that you are not really leveraging GWT, thats just using GWTs infrastructure but nothing more.</p>
<p>If you are looking for software engineering in web development, take a closer look at GWT.</p>
<p>And yes, the GWT compilation is brutal. That&#8217;s why we have the developer modus (formerly known as hosted modus) &#8211; it starts fast and I keep it running. Simply refreshing the browser gives me the refreshed code, refreshing the jetty server gives me the changes in the backend. With OOPHM (out of process hosted modus) GWT looses the tight coupling to the only one browser on each OS by doing hosted modus inside-out. Google for it or try it out on your machine, works very good here. And, btw, I do have good monitor, a good chair and a fast computer. I mean, this is my day-to-day job.</p>
<p>I don&#8217;t know if scripting is the future, but I know it is the present when we speak of web development. Browser do speak  javascript and this won&#8217;t change in the near future, I mean, it is even getting worse (or better, you name it) with HTML 5, where we will be able to do 2D and video and much more just in javascript.</p>
<p>And when it comes to javascript in the browser, I don&#8217;t see any better approach then GWT at the moment.</p>
<p>Maturity? GWT is rock stable. It is more a compiler and does not really give me much runtime dependencies. We now have AdWords and Google Wave to showcase how far we can come if we have the knowledge and the resources.</p>
<p>And no, there is no eye candy.</p>
<p>If you are going down the GWT road, please have a look at the <a href="http://pgt.de/2009/09/18/best-practices-for-architecting-your-gwt-app/">GWT Architectural best practices</a>. If you like Spring (as I do), please have a look on how to use your <a href="http://pgt.de/2009/09/16/use-spring-with-gwt-dispatch/" target="_blank">Spring backend with GWT-dispatch</a> (command pattern based RPC approach for GWT).</p>
<p>[update]</p>
<p><a href="http://www.blogger.com/profile/14109371385959164305" target="_blank">Joel</a> has commented on the ranting post and it is <a href="http://www.cforcoding.com/2009/10/lost-in-translation-or-why-gwt-isnt.html?showComment=1256837717972#c6998534070688607679" target="_blank">hard to find</a> it on the very long list of comments. That&#8217;s why I want to quote it here:</p>
<blockquote><p>It&#8217;s unfortunate to see another long rant based on the same misunderstandings that we&#8217;ve seen from the day we released GWT. Very briefly, here are the major issues I see:</p>
<p>1. I don&#8217;t like Java, because Java programmers write reams of unnecessary abstraction.<br />
We largely agree on this point (speaking for myself, at least, not everyone at Google). J2EE is a monstrosity, as is whatever library led to RequestBuilderFactoryFactory. This has precisely squat to do with Java the language.</p>
<p>2. Translating Java to Javascript necessarily leads to bad code, because some things can&#8217;t be translated well.<br />
This is, in some sense, true. I really wish Java had a first-class function/method object (C# delegates would be fine). I wish Enum weren&#8217;t so damned heavy (we&#8217;re working on that). But the things that aren&#8217;t present in Java, that would be useful when translating to Javascript, probably account for &lt;5% of the code we generate. So it&#8217;s irritating but largely irrelevant.</p>
<p>3. Compilation times take too long.<br />
I hate them too. So what? But if you&#8217;re not using hosted (development) mode 99% of the time, you&#8217;re either doing something wrong, or you fall into one of a few special cases (e.g., new mobile libraries) that we&#8217;re working to address. Development mode gives you basically the standard edit/refresh cycle you get with Javascript, except that the compiler, generators, and other tools all get a chance to do work and catch errors.<br />
Also, if you think you can get away without some sort of compilation process for a large Javascript application, you&#8217;re unfortunately mistaken. Badly. You can&#8217;t just concatenate a few hundred thousand lines of Javascript, strip out the comments, and hope for the best. You&#8217;ll end up with a monstrosity of several megabytes, even for a medium-sized app.</p>
<p>4. The widgets suck.<br />
Fair enough. Hell, I wrote half of them, and don&#8217;t entirely disagree. Go write some that don&#8217;t. Oh, and when you run off to talk about how much Ext sucks, realize that you&#8217;re saying that Ext-JS sucks as well. Neither is the fastest library in the world, but they are very complete and cover a huge variety of use-cases. They made a very different set of tradeoffs than we did, but they&#8217;re a legitimate set of tradeoffs, and appeal greatly to enterprise developers that need to get a lot of UI built quickly.</p>
<p>5. Not all applications are Gmail.<br />
No kidding. If I were a real pedant, I would point out that this is a tautology. But yes &#8212; if you&#8217;re building a simple &#8220;page at a time&#8221; app and need to add a little script to it, by all means use JQuery or whatever you feel like. That&#8217;s appropriate. Use the right tool for the job.</p>
<p>GWT was built to solve a specific set of problems, and we took what we believe are the right set of decisions to do so. Plenty remains to be done, and we continue to work on it. I wrote up a clarification on several of these points some time ago:<br />
<a href="http://blog.j15r.com/2009/07/note-i-originally-posted-this-last.html" target="_blank"> http://blog.j15r.com/2009/07/note-i-originally-posted-this-last.html</a><br />
I hope this proves helpful to some.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2009/11/05/gwt-is-not-the-future-but-the-present-of-web-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GWT Schulung Aktualisiert</title>
		<link>http://pgt.de/2009/09/23/gwt-schulung-aktualisiert/</link>
		<comments>http://pgt.de/2009/09/23/gwt-schulung-aktualisiert/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 07:19:40 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[people and business]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[training]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=619</guid>
		<description><![CDATA[<p>In Zusammenarbeit mit der Firma OIO wurde die GWT Schulung angepasst. Jetzt werden auch die Architektur Best Practices aus dem Adwords Team besprochen:</p> <p>Architekturkonzepte für GWT Anwendungen</p> Serverseitige Integration mit dem Command-Pattern (gwt-dispatch) Clientseitige Dependency-Injection (google-gin) Umsetzung des Model-View-Presenter Entwurfsmusters (gwt-presenter) Loose Kopplung in der Anwendung durch Verwendung eines EventBusses <p>Dieses Jahr finden noch [...]]]></description>
			<content:encoded><![CDATA[<p>In Zusammenarbeit mit der Firma <a href="http://oio.de" target="_blank">OIO</a> wurde die <a href="http://www.oio.de/google-web-toolkit-schulung.htm">GWT Schulung</a> angepasst. Jetzt werden auch die Architektur Best Practices aus dem Adwords Team besprochen:</p>
<blockquote><p><strong>Architekturkonzepte für GWT Anwendungen</strong></p>
<ul>
<li>Serverseitige Integration mit dem Command-Pattern (gwt-dispatch)</li>
<li>Clientseitige Dependency-Injection (google-gin)</li>
<li>Umsetzung des Model-View-Presenter Entwurfsmusters (gwt-presenter)</li>
<li>Loose Kopplung in der Anwendung durch Verwendung eines EventBusses</li>
</ul>
</blockquote>
<p>Dieses Jahr finden noch zwei Schulungen statt:</p>
<ul>
<li>Orientation in Objects, Mannheim, am 15.10. &#8211; 16.10.2009</li>
<li>Orientation in Objects, Mannheim, am 03.12. &#8211; 04.12.2009</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2009/09/23/gwt-schulung-aktualisiert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>W-JAX 2009 Vorträge</title>
		<link>http://pgt.de/2009/09/22/w-jax09-events/</link>
		<comments>http://pgt.de/2009/09/22/w-jax09-events/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 09:54:21 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Java & Co.]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[cep]]></category>
		<category><![CDATA[esper]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[osgi]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=613</guid>
		<description><![CDATA[<p> W-JAX 2009</p> <p>Die Konferenz für Java, Enterprise Architekturen &#38; SOA</p> <p>Die W-JAX ist die Konferenz für ganzheitliches technisches Know-how im Enterprise- und Webumfeld. Hier kommen die besten Experten Europas zusammen, um ihr Wissen und ihre Erfahrung an die Teilnehmer weiterzugeben. Durch ihren einzigartigen Mix an Themen verleiht die W-JAX alljährlich der Java Enterprise [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-662" style="margin: 10px;" title="wjax09_button_speaker_de" src="http://pgt.de/wp-content/uploads/2009/09/wjax09_button_speaker_de.jpg" alt="wjax09_button_speaker_de" width="128" height="128" /><br />
<strong><em>W-JAX 2009</em></strong></p>
<p><em>Die Konferenz für Java, Enterprise Architekturen &amp; SOA</em></p>
<blockquote><p>Die W-JAX ist die Konferenz für ganzheitliches technisches Know-how im Enterprise- und Webumfeld. Hier kommen die besten Experten Europas zusammen, um ihr Wissen und ihre Erfahrung an die Teilnehmer weiterzugeben. Durch ihren einzigartigen Mix an Themen verleiht die W-JAX alljährlich der Java Enterprise Community die entscheidenden Impulse.</p></blockquote>
<p><strong>Google Web Toolkit &#8211; Making a Better Web 2.0</strong><br />
Speaker: Papick G. Taboada</p>
<blockquote><p>Mit Adwords und Google Wave sind die ersten großen GWT basierten Anwendungen von Google erschienen. Mit einem optimierenden Kompiler und pfiffige Codegeneratoren werden mit GWT maßgeschneiderte JavaScript Anwendungen erstellt, die Entwicklung findet allerdings in Java statt. In dem Vortrag werden Konzepte, Neuigkeiten aus 2.0 und die aus Adwords gewonnenen Architektur &#8220;Best Practices&#8221; vorgestellt.</p></blockquote>
<p><strong>SpringSource dm Server: Fitness für die Webanwendungen</strong><br />
Speaker: Agim Emruli, Papick G. Taboada</p>
<blockquote><p>Java-EE-Webanwendungen tragen Deployment-bedingt eine große Menge an Bibliotheken mit sich. Mit OSGi werden dank einem standardisierten Modularisierungskonzept neue Wege gegangen. Lernen Sie in der Session die Möglichkeiten der Modularisierung in Java-EE-Webanwendungen auf dem OSS SpringSource dm Server kennen, damit schwergewichtige und monolithische Deployments der Vergangenheit angehören.</p></blockquote>
<p><strong>EDA in der Businessintegration</strong><br />
Speaker: Christian Dedek, Papick G. Taboada</p>
<blockquote><p>Integrationsszenarien mit ereignisgesteuerten Architekturansätzen in Java umsetzen? Dieser Vortrag bietet Ihnen eine Einführung in EDA und Complex Event Processing (CEP) und stellt den Zusammenhang zwischen EDA und SOA her. Darüber hinaus veranschaulicht er die Architektur und den Aufbau von Esper und zeigt CEP-Einsatzszenarien.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2009/09/22/w-jax09-events/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML Editor for Eclipse</title>
		<link>http://pgt.de/2009/09/21/html-editor-for-eclipse/</link>
		<comments>http://pgt.de/2009/09/21/html-editor-for-eclipse/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 12:19:11 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[Java & Co.]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[gwt]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=605</guid>
		<description><![CDATA[<p>Thanks for the tip:</p> <p>Amateras HTML Editor for Eclipse</p> <p>EclipseHTMLEditor is an Eclipse Plugin for HTML / JSP / XML / CSS / DTD / JavaScript editing. This plugin is required by StrutsIDE and FacesIDE.</p> HTML/JSP/XML/CSS/DTD/JavaScript Highlighting HTML/JSP Preview HTML/JSP/XML Validation Contents Assist Wizards for creating HTML/JSP/XML files And many more powerful features&#8230; <p>Works [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks for the tip:</p>
<p><a href="http://amateras.sourceforge.jp/cgi-bin/fswiki_en/wiki.cgi?page=EclipseHTMLEditor" target="_blank">Amateras HTML Editor for Eclipse</a></p>
<blockquote><p>EclipseHTMLEditor is an Eclipse Plugin for HTML / JSP / XML / CSS / DTD / JavaScript editing. This plugin is required by StrutsIDE and FacesIDE.</p>
<ul>
<li>HTML/JSP/XML/CSS/DTD/JavaScript Highlighting</li>
<li>HTML/JSP Preview</li>
<li>HTML/JSP/XML Validation</li>
<li>Contents Assist</li>
<li>Wizards for creating HTML/JSP/XML files</li>
<li>And many more powerful features&#8230;</li>
</ul>
</blockquote>
<p>Works fine with Eclipse Galileo.<br />
I am using it now along with the Google Eclipse Plugin for GWT development/ training.</p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2009/09/21/html-editor-for-eclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Practices For Architecting Your GWT App</title>
		<link>http://pgt.de/2009/09/18/best-practices-for-architecting-your-gwt-app/</link>
		<comments>http://pgt.de/2009/09/18/best-practices-for-architecting-your-gwt-app/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 08:24:10 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[gin]]></category>
		<category><![CDATA[guice]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[mvp-pattern]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=600</guid>
		<description><![CDATA[<p>Just in case you haven&#8217;t seen it yet: there is very interesting talk from Ray Ryan available online:</p> <p>Google Web Toolkit Architecture: Best Practices for Architecting your GWT App</p> <p>A common question people ask is how to architect a GWT app. Ray Ryan discusses real-world learnings and patterns from the Google AdWords team and [...]]]></description>
			<content:encoded><![CDATA[<p>Just in case you haven&#8217;t seen it yet: there is very interesting talk from Ray Ryan available online:</p>
<blockquote><p><a href="http://code.google.com/intl/de-DE/events/io/sessions/GoogleWebToolkitBestPractices.html" target="_blank"><strong>Google Web Toolkit Architecture: Best Practices for Architecting your GWT App</strong></a></p>
<p>A common question people ask is how to architect a GWT app. Ray Ryan discusses real-world learnings and patterns from the Google AdWords team and elsewhere which you can use in your apps.</p></blockquote>
<p>While dependency injection on the client side in general is nothing new, having it on a GWT application (I mean on the client) is something a little harder to setup. Since we don&#8217;t have reflection and dynamic proxies&#8230; But GWT provides an alternative called deferred binding, and there is a project called <a href="http://code.google.com/p/google-gin/" target="_blank">Gin</a> providing the <a href="http://code.google.com/p/google-guice/" target="_blank">Guice DI</a> approach for GWT apps.</p>
<p>There are some other projects like gwt-dispatch and gwt-presenter that where created inspired by Ray Ryans talk.</p>
<p>So if you are doing or planning GWT development, have a look at the video and the following projects:</p>
<ul>
<li><a href="http://code.google.com/p/gwt-dispatch/" target="_blank"><strong>gwt-dispatch</strong></a>: Inspired by Ray Ryan&#8217;s Best Practices For Architecting Your GWT App session at Google I/O 2009, this is an implementation of the &#8216;command pattern&#8217; discussed at the beginning of the video.</li>
<li><a href="http://code.google.com/p/gwt-presenter/" target="_blank"><strong>gwt-presenter</strong></a>: Inspired by Ray Ryan&#8217;s Best Practices For Architecting Your GWT App session at Google I/O 2009, this is an implementation of the &#8216;Presenter&#8217; part of the Model-View-Presenter (MVP) design pattern discussed in the video.</li>
<li><a href="http://code.google.com/p/google-gin/" target="_blank"><strong>google-gin</strong></a>: GIN (GWT INjection) brings automatic dependency injection to Google Web Toolkit client-side code. GIN is built on top of Guice and uses (a subset of) Guice&#8217;s binding language. By using GWT&#8217;s compile-time Generator support, GIN has little-to-no runtime overhead compared to manual DI.</li>
</ul>
<p>If you are looking for an easy approach to use Spring in the backend with the gwt-dispatch project have a look at this posting:</p>
<ul>
<li><a href="http://pgt.de/2009/09/16/use-spring-with-gwt-dispatch/"><strong>Use Spring with GWT dispatch </strong></a></li>
</ul>
<p>If you are looking for a simple and concise approach to use autowire your Gwt-RPC servlets with components from the Spring application context, have a look at this posting:</p>
<ul>
<li><a href="http://pgt.de/2009/07/17/non-invasive-gwt-and-spring-integration-reloaded/" target="_blank"><strong>Non invasive GWT and Spring integration (reloaded)</strong></a></li>
</ul>
<p><strong>[update]</strong></p>
<ul>
<li><a href="http://code.google.com/p/mvp4g/" target="_blank"><strong>mvp4g</strong></a>: all-in-one approach providing annotation based Event Bus, Dependency Injection, Model View Presenter, Place Service</li>
</ul>
<p><strong>[/update]</strong></p>
<p><div style="padding: 50px 10px 50px 10px; text-align:center;"><script type="text/javascript"><!--
google_ad_client = "ca-pub-8682101792434953";
/* blogposts */
google_ad_slot = "3634251742";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2009/09/18/best-practices-for-architecting-your-gwt-app/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Use Spring with GWT dispatch</title>
		<link>http://pgt.de/2009/09/16/use-spring-with-gwt-dispatch/</link>
		<comments>http://pgt.de/2009/09/16/use-spring-with-gwt-dispatch/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 20:14:50 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[dispatch]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=594</guid>
		<description><![CDATA[<p>From the GWT dispatch site:</p> <p>Inspired by Ray Ryan&#8217;s Best Practices For Architecting Your GWT App session at Google I/O 2009, &#8220;gwt dispatch&#8221; is an implementation of the &#8216;command pattern&#8217; discussed at the beginning of the video. </p> <p>The project uses Gin in the frontend and Guice in the backend. Guice defines a very [...]]]></description>
			<content:encoded><![CDATA[<p>From the <a href="http://code.google.com/p/gwt-dispatch/">GWT dispatch site</a>:</p>
<blockquote><p>Inspired by <a href="http://code.google.com/events/io/sessions/GoogleWebToolkitBestPractices.html">Ray Ryan&#8217;s Best Practices For Architecting Your GWT App</a> session at Google I/O 2009, &#8220;gwt dispatch&#8221; is an implementation of the &#8216;command pattern&#8217; discussed at the beginning of the video.
</p></blockquote>
<p>The project uses Gin in the frontend and Guice in the backend. Guice defines a very nice dependency injection framework, and as such, competes partially with the Springframework. But the Springframework is by far more than dependency injection, and I don&#8217;t want to miss any of its features in the backend. </p>
<p>So I took a look at the gwt dispatch sources, and decided to use Spring to setup the server side of the dispatch service. GWT dispatch extensively uses constructor injection. This works perfectly with Spring, but not with plain servlets. So I needed to rewrite the DispatchServiceServlet a little&#8230;</p>
<p><span id="more-594"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> StandardDispatchServiceServlet <span style="color: #000000; font-weight: bold;">extends</span> RemoteServiceServlet
		<span style="color: #000000; font-weight: bold;">implements</span> DispatchService <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> Dispatch dispatch<span style="color: #339933;">;</span>
&nbsp;
	@Override
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> init<span style="color: #009900;">&#40;</span>ServletConfig config<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> ServletException <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">init</span><span style="color: #009900;">&#40;</span>config<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		WebApplicationContext ctx <span style="color: #339933;">=</span> WebApplicationContextUtils
				.<span style="color: #006633;">getRequiredWebApplicationContext</span><span style="color: #009900;">&#40;</span>config.<span style="color: #006633;">getServletContext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		AutowireCapableBeanFactory beanFactory <span style="color: #339933;">=</span> ctx
				.<span style="color: #006633;">getAutowireCapableBeanFactory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		beanFactory.<span style="color: #006633;">autowireBean</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> Result execute<span style="color: #009900;">&#40;</span>Action<span style="color: #339933;">&lt;?&gt;</span> action<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> ActionException <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> dispatch.<span style="color: #006633;">execute</span><span style="color: #009900;">&#40;</span>action<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">RuntimeException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			log<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Exception while executing &quot;</span> <span style="color: #339933;">+</span> action.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
					<span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;: &quot;</span> <span style="color: #339933;">+</span> e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">throw</span> e<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@Autowired
	@Required
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setDispatch<span style="color: #009900;">&#40;</span>Dispatch dispatch<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">dispatch</span> <span style="color: #339933;">=</span> dispatch<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Instead of using constructor injection, I use setter injection. This way the servlet can be simply added to the web.xml. The servlet lifecycle initializes servlets before they are service-ready. I use the initialization callback method to autowire the servlet instance.</p>
<p>Here is my web.xml:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;web-app<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>contextConfigLocation<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/WEB-INF/spring-conf.xml<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>log4jConfigLocation<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/WEB-INF/log4j.xml<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;listener<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;listener-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.springframework.web.util.Log4jConfigListener<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/listener-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/listener<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;listener<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;listener-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.springframework.web.context.ContextLoaderListener<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/listener-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/listener<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!-- Servlets --&gt;</span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>dispatchServlet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>x.y.gwt.hellospringdispatch.server.support.StandardDispatchServiceServlet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>dispatchServlet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/hellospringdispatch/dispatch<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!-- Default page to serve --&gt;</span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;welcome-file-list<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;welcome-file<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>HelloSpringDispatch.html<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/welcome-file<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/welcome-file-list<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/web-app<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p> I am using annotation based configuration in my project, so the spring configuration file is very concise:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;beans</span> </span>
<span style="color: #009900;">    <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans&quot;</span></span>
<span style="color: #009900;">	<span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> </span>
<span style="color: #009900;">	<span style="color: #000066;">xmlns:context</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/context&quot;</span></span>
<span style="color: #009900;">	<span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;</span>
<span style="color: #009900;">	     http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd</span>
<span style="color: #009900;">         http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-2.5.xsd</span>
<span style="color: #009900;">    &quot;</span></span>
<span style="color: #009900;">	<span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;context:annotation-config</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;context:component-scan</span> <span style="color: #000066;">base-package</span>=<span style="color: #ff0000;">&quot;x.y.gwt.hellospringdispatch.server&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/beans<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>The component scan will add any properly annotated class to the spring application context. Obviously, the classes in the GWT dispatch project are not properly annotated. So I created the classes in my projects that are needed by the DispatchService implementation:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">net.customware.gwt.dispatch.server.ActionHandlerRegistry</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">net.customware.gwt.dispatch.server.DefaultDispatch</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.springframework.beans.factory.annotation.Autowired</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.springframework.stereotype.Component</span><span style="color: #339933;">;</span>
&nbsp;
@<span style="color: #003399;">Component</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> DispatchBean <span style="color: #000000; font-weight: bold;">extends</span> DefaultDispatch <span style="color: #009900;">&#123;</span>
&nbsp;
	@Autowired
	<span style="color: #000000; font-weight: bold;">public</span> DispatchBean<span style="color: #009900;">&#40;</span>ActionHandlerRegistry handlerRegistry<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span>handlerRegistry<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.List</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">net.customware.gwt.dispatch.server.ActionHandler</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">net.customware.gwt.dispatch.server.DefaultActionHandlerRegistry</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.springframework.beans.factory.annotation.Autowired</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.springframework.stereotype.Component</span><span style="color: #339933;">;</span>
&nbsp;
@<span style="color: #003399;">Component</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ActionHandlerRegistryBean <span style="color: #000000; font-weight: bold;">extends</span> DefaultActionHandlerRegistry <span style="color: #009900;">&#123;</span>
&nbsp;
	@Autowired
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setHandlers<span style="color: #009900;">&#40;</span>List<span style="color: #339933;">&lt;</span>ActionHandler<span style="color: #339933;">&lt;?</span>, <span style="color: #339933;">?&gt;&gt;</span> handlers<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>ActionHandler<span style="color: #339933;">&lt;?</span>, <span style="color: #339933;">?&gt;</span> actionHandler <span style="color: #339933;">:</span> handlers<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			addHandler<span style="color: #009900;">&#40;</span>actionHandler<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>The action handler registry is the place where the ActionHandlers are kept. I used the collection autowire feature to get a list of all handlers registered in the Spring application context.</p>
<p>The last step is to add ActionHandlers to the Spring context. For obvious reasons I prefer to keep my action handlers &#8220;Spring free&#8221; &#8211; that&#8217;s why I created my own annotation to identify  action handlers:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.lang.annotation.Retention</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.lang.annotation.RetentionPolicy</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.springframework.stereotype.Component</span><span style="color: #339933;">;</span>
&nbsp;
@<span style="color: #003399;">Component</span>
@Retention<span style="color: #009900;">&#40;</span>RetentionPolicy.<span style="color: #006633;">RUNTIME</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> @<span style="color: #000000; font-weight: bold;">interface</span> ActionHandlerBean <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>I am not sure if I need to setup the retention policy &#8211; I should have a look at that&#8230;</p>
<p>All I need to do now is to add handlers to any package below the server package. The Spring component scan will automatically find the handlers and add them to the Spring application context and further inject them to the handler registry.</p>
<p>Here is a simple ActionHandler:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">net.customware.gwt.dispatch.server.ActionHandler</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">net.customware.gwt.dispatch.server.ExecutionContext</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">net.customware.gwt.dispatch.shared.ActionException</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.springframework.beans.factory.annotation.Autowired</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.springframework.beans.factory.annotation.Required</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">x.y.gwt.hellospringdispatch.server.support.ActionHandlerBean</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">x.y.gwt.hellospringdispatch.shared.SendGreeting</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">x.y.gwt.hellospringdispatch.shared.SendGreetingResult</span><span style="color: #339933;">;</span>
&nbsp;
@ActionHandlerBean
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SendGreetingHandler <span style="color: #000000; font-weight: bold;">implements</span>
		ActionHandler<span style="color: #339933;">&lt;</span>SendGreeting, SendGreetingResult<span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> SendGreetingHandler<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> SendGreetingResult execute<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> SendGreeting action,
			<span style="color: #000000; font-weight: bold;">final</span> ExecutionContext context<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> ActionException <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> name <span style="color: #339933;">=</span> action.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">new</span> SendGreetingResult<span style="color: #009900;">&#40;</span>name, <span style="color: #0000ff;">&quot;Hello from the server&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> cause<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> ActionException<span style="color: #009900;">&#40;</span>cause<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> rollback<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> SendGreeting action,
			<span style="color: #000000; font-weight: bold;">final</span> SendGreetingResult result, <span style="color: #000000; font-weight: bold;">final</span> ExecutionContext context<span style="color: #009900;">&#41;</span>
			<span style="color: #000000; font-weight: bold;">throws</span> ActionException <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Nothing to do here</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> Class<span style="color: #339933;">&lt;</span>SendGreeting<span style="color: #339933;">&gt;</span> getActionType<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> SendGreeting.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//	</span>
<span style="color: #666666; font-style: italic;">//	@Autowired</span>
<span style="color: #666666; font-style: italic;">//	@Required</span>
<span style="color: #666666; font-style: italic;">//	public void setCustomerService(CustomerService gibher) {</span>
<span style="color: #666666; font-style: italic;">//</span>
<span style="color: #666666; font-style: italic;">//	}</span>
<span style="color: #666666; font-style: italic;">//</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>I am very happy with this approach as it allows me to add new action (command) handlers without any configuration overhead. Simply dropping the implementation somewhere in the server package will do all the magic.</p>
<p><div style="padding: 50px 10px 50px 10px; text-align:center;"><script type="text/javascript"><!--
google_ad_client = "ca-pub-8682101792434953";
/* blogposts */
google_ad_slot = "3634251742";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2009/09/16/use-spring-with-gwt-dispatch/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Non invasive GWT and Spring integration (reloaded)</title>
		<link>http://pgt.de/2009/07/17/non-invasive-gwt-and-spring-integration-reloaded/</link>
		<comments>http://pgt.de/2009/07/17/non-invasive-gwt-and-spring-integration-reloaded/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 20:14:22 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[Java & Co.]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=431</guid>
		<description><![CDATA[<p class="wp-caption-text">New project layout</p> <p>Here is my overdue update to my Non invasive GWT and Spring integration blog post from early 2008. Since then we have had the GWT 1.6 and GWT 1.7 releases: One of the biggest changes to GWT 1.6 is a new project structure. The old output format has been replaced [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_454" class="wp-caption alignright" style="width: 219px"><a href="http://pgt.de/wp-content/uploads/2009/07/Bild-14.png"><img src="http://pgt.de/wp-content/uploads/2009/07/Bild-14-209x300.png" alt="New project layout" title="Project layout" width="209" height="300" class="size-medium wp-image-454" /></a><p class="wp-caption-text">New project layout</p></div>


<p>Here is my overdue update to my <a href="http://pgt.de/2008/02/14/non-invasive-gwt-and-spring-integration/" target="_blank">Non invasive GWT and Spring integration</a> blog post from early 2008. Since then we have had the <a href="http://code.google.com/intl/de-DE/webtoolkit/doc/1.6/ReleaseNotes_1_6.html" target="_blank">GWT 1.6</a> and <a href="http://code.google.com/intl/de-DE/webtoolkit/doc/1.7/ReleaseNotes_1_7.html" target="_blank">GWT 1.7</a> releases:

<blockquote>One of the biggest changes to GWT 1.6 is a new project structure. The old output format has been replaced by the standard Java web app "expanded war" format, and the actual directory name does default to "/war". Note that the war directory is not only for compiler output; it is also intended to contain handwritten static resources that you want to be included in your webapp alongside GWT modules (that is, things you'd want to version control).</blockquote>

<p>As a matter of fact, now we finally can (must) manage the web.xml file ourselves:


<blockquote>Projects with server-side code (GWT RPC) must configure a web.xml file at /war/WEB-INF/web.xml. This web.xml file must define and publish any servlets associated with the web application.
</blockquote>

<p> This is a little pain for really much gain, and that's why I am writing this post after all...

<span id="more-431"></span>

<p>

<p>Starting a Springframework ApplicationContext in a Java EE compiient web-application is well known and documented <a href="http://static.springsource.org/spring/docs/2.5.x/reference/beans.html#beans-factory-scopes-other-web-configuration" target="_blank">in the Springframework reference</a>:


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #00bbdd;">&lt;!DOCTYPE web-app</span>
<span style="color: #00bbdd;">    PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot;</span>
<span style="color: #00bbdd;">    &quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot;&gt;</span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;web-app<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>contextConfigLocation<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/WEB-INF/spring-conf.xml<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>log4jConfigLocation<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/WEB-INF/log4j.xml<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/param-value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/context-param<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;listener<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;listener-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.springframework.web.util.Log4jConfigListener<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/listener-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/listener<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;listener<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;listener-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.springframework.web.context.ContextLoaderListener<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/listener-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/listener<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!-- Servlets... --&gt;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!-- Default page to serve.. --&gt;</span>
&nbsp;
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/web-app<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>




<p>There aren't many beans in my spring configuration files as I am using annotation based configuration in my apps. Here a sample spring confuguration taken from one of my sample projects:


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;beans</span> </span>
<span style="color: #009900;">    <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans&quot;</span></span>
<span style="color: #009900;">	<span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> </span>
<span style="color: #009900;">	<span style="color: #000066;">xmlns:context</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/context&quot;</span></span>
<span style="color: #009900;">	<span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;</span>
<span style="color: #009900;">	     http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd</span>
<span style="color: #009900;">         http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-2.5.xsd</span>
<span style="color: #009900;">    &quot;</span></span>
<span style="color: #009900;">	<span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;context:annotation-config</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;context:component-scan</span> <span style="color: #000066;">base-package</span>=<span style="color: #ff0000;">&quot;x.y.gwt.hellospring.server&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;basicTextEncryptor&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.jasypt.encryption.pbe.StandardPBEStringEncryptor&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;algorithm&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;PBEWithMD5AndDES&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;keyObtentionIterations&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;1000&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;password&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;s0990w8eh0c8hf08aefh8hGf9egf9aefea8f&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/beans<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>




<p>So this is (despite of the missing log4j.xml config) the configuration setup I am using on GWT 1.6 and GWT 1.7 projects in order to bootstrap an application context.

<p>The next step is to implement the dependency injection of spring managed beans into my GWT RPC serverside implementation. I will be using the annotation based config provided by the Springframework. 

<p>This is how the dependency injection in my GWT RPC services looks like:


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #008000; font-style: italic; font-weight: bold;">/**
 * The server side implementation of the RPC service.
 */</span>
@SuppressWarnings<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;serial&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> EncodingServiceImpl 
<span style="color: #000000; font-weight: bold;">extends</span> AutoinjectingRemoteServiceServlet
<span style="color: #000000; font-weight: bold;">implements</span> EncodingService <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> IEncodingService encodingService<span style="color: #339933;">;</span>
&nbsp;
	@Autowired
	@Required
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setEncodingService<span style="color: #009900;">&#40;</span>IEncodingService encodingService<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">encodingService</span> <span style="color: #339933;">=</span> encodingService<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Service implementation ommited here...</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>




<p>EncodingServiceImpl is the server side GWt RPC implementation, while EncodingService is the GWT service I am setting up. The managed bean in my spring configuration implements IEncodingService (and uses the great <a href="http://www.jasypt.org/"  target="_blank">jasypt</a> lib). I am using the annotations to configure the dependency injection.

<p>All I have to do now, is "autowire" my RPC servlet during initialization. Since this is not going to be the only GWT RPC service needing dependency injection I introduced the AutoinjectingRemoteServiceServlet class:


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> AutoinjectingRemoteServiceServlet <span style="color: #000000; font-weight: bold;">extends</span> RemoteServiceServlet <span style="color: #009900;">&#123;</span>
&nbsp;
	@Override
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> init<span style="color: #009900;">&#40;</span>ServletConfig config<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> ServletException <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">init</span><span style="color: #009900;">&#40;</span>config<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		WebApplicationContext ctx <span style="color: #339933;">=</span> WebApplicationContextUtils
				.<span style="color: #006633;">getRequiredWebApplicationContext</span><span style="color: #009900;">&#40;</span>config.<span style="color: #006633;">getServletContext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		AutowireCapableBeanFactory beanFactory <span style="color: #339933;">=</span> ctx
				.<span style="color: #006633;">getAutowireCapableBeanFactory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		beanFactory.<span style="color: #006633;">autowireBean</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>




<p> There is not much to say about this class. During the initializiation of the RPC Servlet (remember: GWT uses servlets as the foundation technology on the server side implementation of GWT RPC. Being so, the GWT RPC service implementation "lives" in the same lifecycle as any other servlet. I am using the initialization step to get a reference to the ApplicationContext. After that I use the autowire bean method to autowire the servlet automatically.

<p>If you prefer to directly expose spring beans, you should have a look at <a href="http://code.google.com/p/spring4gwt/"  target="_blank">http://code.google.com/p/spring4gwt/</a>.



 ]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2009/07/17/non-invasive-gwt-and-spring-integration-reloaded/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>GWT, eclipse, i18n, and UTF-8 properties</title>
		<link>http://pgt.de/2009/07/16/gwt-eclipse-i18n-and-utf-8-properties/</link>
		<comments>http://pgt.de/2009/07/16/gwt-eclipse-i18n-and-utf-8-properties/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 05:37:27 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=427</guid>
		<description><![CDATA[<p>GWT does a great job reading UTF-8 encoded property files:</p> <p>Both Constants and Messages use traditional Java properties files, with one notable difference: properties files used with GWT should be encoded as UTF-8 and may contain Unicode characters directly, avoiding the need for native2ascii.</p> <p>This is nice, but there is a tiny little problem [...]]]></description>
			<content:encoded><![CDATA[<p>GWT does a great job reading UTF-8 encoded property files:</p>
<blockquote><p>Both Constants and Messages use traditional Java properties files, with one notable difference: properties files used with GWT should be encoded as UTF-8 and may contain Unicode characters directly, avoiding the need for native2ascii.</p></blockquote>
<p>This is nice, but there is a tiny little problem when using eclipse: the default encoding for java property files is ISO-8859-1.</p>
<p>This setting can be changed in the eclipse preferences:</p>
<p><a href="http://pgt.de/wp-content/uploads/2009/07/Bild-13.png"><img class="size-medium wp-image-428 alignnone" title="Bild 1" src="http://pgt.de/wp-content/uploads/2009/07/Bild-13-300x270.png" alt="Bild 1" width="300" height="270" /></a></p>
<p>Or you can change the encoding of a single file with &#8220;EDIT -&gt; Set Encoding&#8221;&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2009/07/16/gwt-eclipse-i18n-and-utf-8-properties/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Outdated posting about Maven and GWT</title>
		<link>http://pgt.de/2009/05/06/outdated-posting-about-maven-and-gwt/</link>
		<comments>http://pgt.de/2009/05/06/outdated-posting-about-maven-and-gwt/#comments</comments>
		<pubDate>Wed, 06 May 2009 11:12:10 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=314</guid>
		<description><![CDATA[GWT new project layout [...]]]></description>
			<content:encoded><![CDATA[<p>I recently read the posting on the GWT Blog: <a href="http://googlewebtoolkit.blogspot.com/2009/05/gwt-and-maven-playing-nicely-together.html" target="_blank">GWT and Maven &#8211; Playing Nicely Together Since 2008</a>.</p>
<p>Well, I must say that I am surprised and sad about it:</p>
<ul>
<li>The posting talks about GWT 1.5.3 (we already know about that for a long time &#8211; so why now?)</li>
<li>GWT and Maven stopped playing nicely together since GWT version 1.6</li>
</ul>
<p>The new GWT building &#8220;layout&#8221; is great and at the same time it is a NO-GO for many of us. It generates the GWT app directly into the folder where it expects to find the web.xml and all the other resources we usually keep under SCM.</p>
<p>I really was hoping to use plain vanilla Maven and Ant to create GWT apps, but at the moment I can&#8217;t do it. And I am waiting (as many others) to get a working maven plugin that does the building magic.</p>
<p>Why can&#8217;t it be done right once and for all?</p>
<p>How many times will I have to hack a build infrastructure for a GWT project???</p>
<p>Or am I missing something?</p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2009/05/06/outdated-posting-about-maven-and-gwt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GWT 1.5 nearing relase</title>
		<link>http://pgt.de/2008/05/27/gwt-15-nearing-relase/</link>
		<comments>http://pgt.de/2008/05/27/gwt-15-nearing-relase/#comments</comments>
		<pubDate>Tue, 27 May 2008 08:06:04 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[gwt]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=130</guid>
		<description><![CDATA[<p>Just had a look at the SVN logs, and found this here:</p> Revision: 2940 Creating 1.5 release branch. <p>So no more betas? Would be great to have a release in near future. People are expecting GWT 1.5 to be announced at the Google IO conference this week. Lets hope so!</p> ]]></description>
			<content:encoded><![CDATA[<p>Just had a look at the SVN logs, and found this here:</p>
<blockquote>
<pre style="margin-left: 1em;">Revision: 2940
Creating 1.5 release branch.</pre>
</blockquote>
<p>So no more betas? Would be great to have a release in near future. People are expecting GWT 1.5 to be announced at the Google IO conference this week. Lets hope so!</p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2008/05/27/gwt-15-nearing-relase/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

