<?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"
	>

<channel>
	<title>Nexablog</title>
	<atom:link href="http://blog.nexaweb.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nexaweb.com</link>
	<description>new and interesting from Nexaweb</description>
	<pubDate>Thu, 11 Dec 2008 13:32:40 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Application Modernization Paves the Way for Outsourced Development</title>
		<link>http://blog.nexaweb.com/post/application-modernization-paves-the-way-for-outsourced-development/</link>
		<comments>http://blog.nexaweb.com/post/application-modernization-paves-the-way-for-outsourced-development/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 16:55:20 +0000</pubDate>
		<dc:creator>jdaly</dc:creator>
		
		<category><![CDATA[Application Modernization]]></category>

		<guid isPermaLink="false">http://blog.nexaweb.com/?p=141</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/application-modernization-paves-the-way-for-outsourced-development/";</script>A large percentage of outsourced, onshore and offshore resources, are skilled in XML, Java and other Internet-based languages and development techniques, meaning their ability to tinker with and add features to 3GL/4GL applications is limited at best and that cost savings of such as model is neutralized. Adding to the conversation is the acknowledgment that [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/application-modernization-paves-the-way-for-outsourced-development/";</script><p>A large percentage of outsourced, onshore and offshore resources, are skilled in XML, Java and other Internet-based languages and development techniques, meaning their ability to tinker with and add features to 3GL/4GL applications is limited at best and that cost savings of such as model is neutralized. Adding to the conversation is the acknowledgment that more than 200 million lines of COBOL code are currently in use while another five million are being written each year. This presents a challenge given the waning number of students studying computer science and the shrinking number of experts in legacy applications.</p>
<p>According to Gartner, “interviews conducted with IT sourcing managers across the Gartner client base hint at what’s to come: Many have seen price hikes of 10% to 15% in certain skills during the past year.”<span id="more-141"></span></p>
<p>Still, the dwindling, expensive legacy expert community is not the only IT population that needs to be addressed.  The rise of the millennium generation should also be top of mind.  Gartner research reports: “College students and 20-somethings are heading toward IT-related work in film, music, multimedia, gaming and Internet companies” and that “students enrolling in science, technology, engineering, and mathematics &#8212; the STEM disciplines – have declined in developed countries and risen in other countries.  In the United States for instance, computer science enrollment has dropped 39% since 2002.</p>
<p>The costs and reduction in the workforce of experienced legacy IT professionals combined with a shrinking pool of Internet IT resources is a significant issue, but so too is it an opportunity &#8212; an opportunity to re-structure IT as a business-driven function. CIO’s, IT executives, and business leaders must identify the roles and competencies that understand how information, processes, and relationships drive business effectiveness and who can lead the development of solutions to support LOB demands. These roles include business process designers and developers, enterprise architects, information modelers, business analysts, and IT financial analysts.  While there is not an overabundance of these resources either, an IT group organized around these roles will require fewer bodies which equates to less operational overhead.  The effect of such a transition however will leave a gap in the more traditional IT roles such as application development, programming, infrastructure and services.</p>
<p>“In China, India and other countries, the IT curriculum attracts enrollment.  Chinese universities graduate about 500,000 IT and high-tech students every year.”  Developing countries such as China and others are quickly becoming part of the workforce solution, but as it relates to Internet-oriented technologies such as Java, .NET, XML and others. Thus, it comes back to application modernization.  There is a tremendous demand among business leaders that IT become business driven.  This requires that IT resources are more business-minded, but such a transition in resource skill set requires growing the IT department and incurring more costs, or focusing the IT organization on these skills and leveraging outsourced resources for development and programming.  To adopt that outsource model effectively however requires that applications and the architecture that supports them exist in a format familiar to that pool of outsource<br />
resources.</p>
<p>Pursuance of an application modernization initiative, regardless of size or scope, is paramount to better utilization of offshore resources.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nexaweb.com/post/application-modernization-paves-the-way-for-outsourced-development/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Guide to Java MessageFormat (or, How I Learned to Stop Worrying and Love Macros)</title>
		<link>http://blog.nexaweb.com/post/a-guide-to-java-messageformat-or-how-i-learned-to-stop-worrying-and-love-macros/</link>
		<comments>http://blog.nexaweb.com/post/a-guide-to-java-messageformat-or-how-i-learned-to-stop-worrying-and-love-macros/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 16:28:46 +0000</pubDate>
		<dc:creator>Joel Barciauskas</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.nexaweb.com/?p=139</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/a-guide-to-java-messageformat-or-how-i-learned-to-stop-worrying-and-love-macros/";</script>While working on an application for a client, I encountered some issues with Java&#8217;s MessageFormat.  In particular, I needed to pass MessageFormat a string that contained single-quotes and curly braces that would be treated literally.  This is an issue, because single-quotes and curly braces are special characters in MessageFormat land.
MessageFormat is designed to [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/a-guide-to-java-messageformat-or-how-i-learned-to-stop-worrying-and-love-macros/";</script><p>While working on an application for a client, I encountered some issues with Java&#8217;s MessageFormat.  In particular, I needed to pass MessageFormat a string that contained single-quotes and curly braces that would be treated literally.  This is an issue, because single-quotes and curly braces are special characters in MessageFormat land.</p>
<p>MessageFormat is designed to allow you to dynamically create a string based on a static pattern and a set of inputs. For example, this is from the MessageFormat JavaDoc:</p>
<blockquote>
<pre> Object[] testArgs = {new Long(3), "MyDisk"};

 MessageFormat form = new MessageFormat(
     "The disk \"{1}\" contains {0} file(s).");

 System.out.println(form.format(testArgs));

 // output, with different testArgs
 <em>output</em>: The disk "MyDisk" contains 0 file(s).
 <em>output</em>: The disk "MyDisk" contains 1 file(s).
 <em>output</em>: The disk "MyDisk" contains 1,273 file(s).</pre>
</blockquote>
<p><span id="more-139"></span><br />
Seems pretty straight forward.  However, say you wanted to format a string that contained curly braces, such as &#8220;{ Hello {0}! I&#8217;m inside curly braces }&#8221;.  Of course, to support this, MessageFormat uses single-quotes to specify strings that should be treated literally.  So, naively, one might think to format</p>
<blockquote>
<pre>{ Hello {0}! I'm inside curly braces }</pre>
</blockquote>
<p>with the following output where {0} = &#8220;Joel&#8221;</p>
<blockquote>
<pre>{ Hello Joel! I'm inside curly braces }</pre>
</blockquote>
<p>We would come up with something like</p>
<blockquote>
<pre>'{ Hello {0}! I'm inside curly braces '}</pre>
</blockquote>
<p>This would work, if single-quote were an escape character like many of us are accustomed to using, for instance in regular expressions, and in Java literal strings, backslash &#8220;\&#8221; is an escape character.  Of course, if single-quote were like an escape character, the above example would work and I wouldn&#8217;t be writing this post.  <strong>But the single-quote isn&#8217;t an escape character. </strong></p>
<p>The rules for MessageFormat escaping are most easily understood like this:</p>
<ol>
<li>Strings inside single quotes are treated literally</li>
<li>Two single-quotes next to each other will be interpreted as a single single-quote, rather than an empty literal string</li>
</ol>
<p>The understanding of single-quote as an escape character comes from the second rule.  In this case, it is similar to &#8220;\\&#8221; in Java, C, Perl, etc, where to get the literal character &#8220;\&#8221; rather than an escaped string to be interpreted specially (e.g., &#8220;\n&#8221; for new line, &#8220;\u2297&#8243; for a special Unicode character), you type the escape character twice, i.e., &#8220;\\&#8221;.  However, the two single-quotes in a row are a special case, and most of the time you will use a string inside a set of single-quotes to represent a set of characters that should be ignored by the MessageFormat parser as it searches for placeholders (e.g., {0}, {1}, &#8230;).</p>
<p>Following these rules, to format</p>
<blockquote>
<pre>{ Hello {0}! I'm inside curly braces }</pre>
</blockquote>
<p>where {0} = &#8220;Joel&#8221;, i.e.,</p>
<blockquote>
<pre>{ Hello Joel! I'm inside curly braces }</pre>
</blockquote>
<p>We really only need to tell the parser to ignore the start and end curly braces.  To do this, we will use the following pattern:</p>
<blockquote>
<pre>'{' Hello {0}! I'm inside curly braces '}'</pre>
</blockquote>
<p>And that actually works!</p>
<p>Now, let&#8217;s look at the problem I was trying to solve, and see if these rules can help us out.  The string I was trying to format looked like this:</p>
<blockquote>
<pre>&lt;label text="{ bind('dataSource=joelDS; select=text; type=ONE_WAY') }" /&gt;</pre>
</blockquote>
<p>I was using this string in an <a href="http://dev.nexaweb.com/home/us.dev/index.html@cid=1447.html">XModify Macro</a>, however, such as this:</p>
<blockquote>
<pre>&lt;macro:macro xmlns:macro="http://openxal.org/core/macro"
	name="addTradingTab"&gt;
	&lt;xm:modifications xmlns:xm="http://openxal.org/core/xmodify"&gt;
		&lt;xm:append select="id('container')"&gt;
			&lt;label text="{ bind('dataSource={0}; select=text; type=ONE_WAY') }" /&gt;
		&lt;/xm:append&gt;
	&lt;/xm:modifications&gt;
&lt;/macro:macro&gt;</pre>
</blockquote>
<p>Notice that the string to be appended contains a {, a }, and two &#8216;, all of which need to be escaped, without smothering the {0} from the parser.  First lets tell the parser to ignore the first { and last }:</p>
<blockquote>
<pre>&lt;macro:macro xmlns:macro="http://openxal.org/core/macro"
	name="addTradingTab"&gt;
	&lt;xm:modifications xmlns:xm="http://openxal.org/core/xmodify"&gt;
		&lt;xm:append select="id('container')"&gt;
			&lt;label text="'{' bind('dataSource={0}; select=text; type=ONE_WAY') '}'" /&gt;
		&lt;/xm:append&gt;
	&lt;/xm:modifications&gt;
&lt;/macro:macro&gt;</pre>
</blockquote>
<p>Next, lets escape the single quotes inside the parens:</p>
<blockquote>
<pre>&lt;macro:macro xmlns:macro="http://openxal.org/core/macro"
	name="addTradingTab"&gt;
	&lt;xm:modifications xmlns:xm="http://openxal.org/core/xmodify"&gt;
		&lt;xm:append select="id('container')"&gt;
			&lt;label text="'{' bind(''dataSource={0}; select=text; type=ONE_WAY'') '}'" /&gt;
		&lt;/xm:append&gt;
	&lt;/xm:modifications&gt;
&lt;/macro:macro&gt;</pre>
</blockquote>
<p>We can test the above string using the <a href="http://java.sun.com/j2se/1.4.2/docs/guide/intl/demos/MessageFormat/1.1/example1.html">MessageFormat demo provided by Sun</a>, which runs in an applet.  Entering the</p>
<blockquote>
<pre>&lt;label text="'{' bind(''dataSource={0}; select=text; type=ONE_WAY'') '}'" /&gt;</pre>
</blockquote>
<p>line in the Pattern field, and entering &#8220;joelDS&#8221; in the 0 argument, we get:</p>
<blockquote>
<pre>&lt;label text="{ bind('dataSource=joelDS; select=text; type=ONE_WAY') }" /&gt;</pre>
</blockquote>
<p>Wahoo, it works!</p>
<p>To review:</p>
<ol>
<li>While MessageFormat single-quotes act like escape characters, it is much easier to think of them as a string-literal syntax</li>
<li>When in doubt, test your Macro patterns using the <a href="http://java.sun.com/j2se/1.4.2/docs/guide/intl/demos/MessageFormat/1.1/example1.html">MessageFormat demo provided by Sun</a>.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.nexaweb.com/post/a-guide-to-java-messageformat-or-how-i-learned-to-stop-worrying-and-love-macros/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Considerations for Enterprise Web 2.0 Modernization</title>
		<link>http://blog.nexaweb.com/post/considerations-for-enterprise-web-20-modernization/</link>
		<comments>http://blog.nexaweb.com/post/considerations-for-enterprise-web-20-modernization/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 23:00:45 +0000</pubDate>
		<dc:creator>jchone</dc:creator>
		
		<category><![CDATA[Application Modernization]]></category>

		<guid isPermaLink="false">http://blog.nexaweb.com/?p=117</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/considerations-for-enterprise-web-20-modernization/";</script>Here are some considerations when you want to modernize your enteprise application to Enterprise Web 2.0.



]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/considerations-for-enterprise-web-20-modernization/";</script><p>Here are some considerations when you want to modernize your enteprise application to Enterprise Web 2.0.<br />
<center></p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/HdiF71rQ-Lc&#038;ap=%2526fmt%3D18"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/HdiF71rQ-Lc&#038;ap=%2526fmt%3D18" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p></center></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nexaweb.com/post/considerations-for-enterprise-web-20-modernization/feed/</wfw:commentRss>
		</item>
		<item>
		<title>dojo.E 0.3.0 Released</title>
		<link>http://blog.nexaweb.com/post/dojoe-030-released/</link>
		<comments>http://blog.nexaweb.com/post/dojoe-030-released/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 15:14:13 +0000</pubDate>
		<dc:creator>community</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[W3C]]></category>

		<category><![CDATA[dojo]]></category>

		<category><![CDATA[dojoe]]></category>

		<guid isPermaLink="false">http://blog.nexaweb.com/?p=109</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/dojoe-030-released/";</script>Everyone,
Last night we finally got all the pieces to the dojo.E release finished and it is now online. There is quite a few things new in this release of dojo.E. We are also now making it possible to get the dojo.E code with the IMB, EDS and Nexaweb Server right from the dojo.E site.  This [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/dojoe-030-released/";</script><p>Everyone,</p>
<p>Last night we finally got all the pieces to the <a href="http://dojoe.nexaweb.com">dojo.E</a> release finished and it is now online. There is quite a few things new in this release of dojo.E. We are also now making it possible to get the dojo.E code with the IMB, EDS and Nexaweb Server right from the dojo.E site.  This is exciting because you can get started with dojo.E and IMB by download a simple zip file.</p>
<p><span id="more-109"></span></p>
<p>This version of dojo.E includes many new features that expand it beyond the XML UI and UI manipulation features:</p>
<ul>
<li><a href="http://dojoe.nexaweb.com/index.html@cid=2739.html">Internet Messing Bus</a> support including interval polling, one-time sync and long-polling.  Over the previous implementation of the IMB there are tons of improvements and has been written from the ground up.  dojo.E can have a full Comet support using the Nexaweb Server.</li>
</ul>
<pre>   //create the session.
   var imbSession = new nexaweb.imb.Session();
   imbSession.createSession();

   //Subscribe to the chat topic.
   imbSession.getMessagingService().subscribe("chat", function(topic, message){
       dojo.byId("latestChat").innerHTML = message;
   });

   //publish the message.
   imbSession.getMessagingService().publish("chat", dojo.byId("chatBox").value);</pre>
<ul>
<li><a href="http://dojoe.nexaweb.com/index.html@cid=2966.html">EDS</a> support - developers can pull data out of data base and use it as a dojo data store.</li>
<li><a href="http://dojoe.nexaweb.com/index.html@cid=2962.html">Templating</a> - We have upgraded the templating capabilities of dojo.E.  Now macros can use dojo.string.substitute and dojox.dtl.  I got real excited about the dtl support after watching Alex show what the it could, an extra three lines of code and BAM it is integrated into dojo.E.</li>
</ul>
<pre>&lt;dojoe.Macro id="dtlMacro" format="dojox.dtl._Templated"&gt;
  &lt;dojoe.Include query="#contactTable" blendMode="append"&gt;
      {% for item in contacts %}
      &lt;tr id="{{ item.firstName }}-{{ item.lastName }}"&gt;
         &lt;th&gt;{{ item.firstName }}&lt;/th&gt;
         &lt;th&gt;{{ item.lastName }}&lt;/th&gt;
         &lt;th&gt;{{ item.email }}&lt;/&gt;
    	 &lt;th&gt;&lt;dijit.TitlePane title="Button" style="width:110px"&gt;
         &lt;dijit.form.Button onclick="dojoe.macros.remove.execute(['{{ item.firstName }}-
             {{ item.lastName }}'])" label="Remove"/&gt; &lt;/dijit.TitlePane&gt; &lt;/th&gt;
    &lt;/tr&gt;
    {% endfor %}
   &lt;/append&gt;
 &lt;/dojoe.Xmodify&gt;</pre>
<ul>
<li>Form Support - Adding a &#8220;form&#8221; attribute to a Marco will automatically connect the Macros execution to the form submittal.</li>
<li>Mashup widgets - We now have a <a href="http://dojoe.nexaweb.com/index.html@cid=2961.html">WebTop</a> (think iGoogle), <a href="http://dojoe.nexaweb.com/index.html@cid=2680.html">Fusion Charts</a> support (Comes with the free version and easy to add the full version of the Gadgets). <a href="http://dojoe.nexaweb.com/index.html@cid=2960.html">Tag Cloud</a>, <a href="http://dojoe.nexaweb.com/index.html@cid=2959.html">Iterator</a> and an <a href="http://dojoe.nexaweb.com/index.html@cid=2739.html">Paging Bar</a>.</li>
<li><a href="http://dojoe.nexaweb.com/index.html@cid=2963.html">Dynamic UI improvements</a> - We have added dojoe.includeRequest, includeString, includeDocument that give developers a easy way to interact with HTML, dojoML or XML UI universally.</li>
<li>Lots of bug fixes overs the previous release of dojo.E</li>
<li>Support for both Dojo 1.1 and Dojo 1.2</li>
<li><a href="http://dojoe.nexaweb.com/index.html@cid=2789.html">Experimental XBL processor</a> - <a href="http://www.w3.org/TR/xbl/">XBL</a> is an great spec that makes creating reusable components; dojo.E has the ability turn an XBL document into a dojo widget.</li>
</ul>
<p>A new version of dojo.E is online as of last night and with many improvements to the site:</p>
<ul>
<li>Updated Verbiage on home page. Now site talks about the things that dojo.E improves and less about XML</li>
<li>Updated Hero Spot - Highlights all of the new features in the release.</li>
<li>New Samples for the Mashup Widgets.</li>
<li>Improved downloads tracking now tracking the exact downloads dojo.E</li>
<li>Possible to <a href="http://dojoe.nexaweb.com/index.html@cid=2594.html">download</a> the dojo.E with Nexaweb extensions from the dojo.E site</li>
<li>Updated documentation in the documents and reference area.</li>
<li>Nightly builds and the dojo.E code repository is now online - <a href="http://source.nexaweb.com/projects/dojoe/">http://source.nexaweb.com/projects/dojoe/</a></li>
</ul>
<p>Take a look and send feedback on anything out of place. We have also launched <a href="http://dojoe.nexaweb.com/index.html@cid=2958.html">dojo.Everywhere</a> in an effort to get more information and feedback to more people.  Under dojo.Everywhere you can use the Google Group or subscribe to the <a href="http://pownce.com/dojoe/">Pownce feed</a> to give feedback or get the latest updates.</p>
<p><strong>Screencast</strong>:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="499" height="361" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=2293033&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="499" height="361" src="http://vimeo.com/moogaloop.swf?clip_id=2293033&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<a href="http://vimeo.com/2293033">Running your first dojo.E Project</a> from <a href="http://vimeo.com/user377399">Bob Buffone</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Bob (Buffone)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nexaweb.com/post/dojoe-030-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Legacy Impact: Globalization &#038; Application Modernization (Part 1 of 4)</title>
		<link>http://blog.nexaweb.com/post/legacy-impact-globalization-application-modernization-part-1-of-4/</link>
		<comments>http://blog.nexaweb.com/post/legacy-impact-globalization-application-modernization-part-1-of-4/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 16:32:38 +0000</pubDate>
		<dc:creator>jdaly</dc:creator>
		
		<category><![CDATA[Application Modernization]]></category>

		<guid isPermaLink="false">http://blog.nexaweb.com/?p=99</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/legacy-impact-globalization-application-modernization-part-1-of-4/";</script>Legacy applications have architectural limitations that prohibit their ability to support large scale deployments. They often necessitate servers and technicians at each location with continuous client software maintenance and service, all creating redundant headcounts, resources and costs.
Application modernization toward an open, web architecture can address these technology limitations as they relate to the demands of [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/legacy-impact-globalization-application-modernization-part-1-of-4/";</script><p>Legacy applications have architectural limitations that prohibit their ability to support large scale deployments. They often necessitate servers and technicians at each location with continuous client software maintenance and service, all creating redundant headcounts, resources and costs.</p>
<p>Application modernization toward an open, web architecture can address these technology limitations as they relate to the demands of globalization and will create new opportunities in terms of people and delivery. First, regarding the architectural limitations of legacy technologies, modernization toward an open, web architecture supports centralized deployments and zero-client installation which significantly lessens the need for local technicians, eliminates client software maintenance needs, and supports a reduction in hardware and infrastructure &#8211;consequently lessening energy requirements. From a pure software development perspective, adopting a loosely coupled architectural Web approach can reduce the time to execute a change request by 90 percent.</p>
<p>Secondly, modernization with Internet-based technology creates new methods of delivery and new ways to carve the resources pie. In terms of people, transformation toward an open, standardized application platform allows better utilization of a global workforce, especially from countries such as China and India. In terms of delivery, the lack of skilled IT resources against the demand will drive innovation and investment in new delivery models such as SaaS, IT process automation, and Internet-based service offerings that lessen reliance on human resources to resolve issues that can be solved in other ways.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nexaweb.com/post/legacy-impact-globalization-application-modernization-part-1-of-4/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tutorial: Hibernate, DWR and dojo.E</title>
		<link>http://blog.nexaweb.com/post/tutorial-hibernate-dwr-and-dojoe/</link>
		<comments>http://blog.nexaweb.com/post/tutorial-hibernate-dwr-and-dojoe/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 18:16:12 +0000</pubDate>
		<dc:creator>Joel Barciauskas</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[dojoe]]></category>

		<guid isPermaLink="false">http://blog.nexaweb.com/?p=96</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/tutorial-hibernate-dwr-and-dojoe/";</script>I just presented a tutorial on Friday on using Direct Web Remoting, Hibernate and dojo.E.  It’s a very simple demo, but demonstrates the power of these three technologies combined to create simple, dynamic Java applications very quickly.  The tutorial is available on SlideShare.
DWR, Hibernate and Dojo.E - A Tutorial
View SlideShare presentation or Upload your [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/tutorial-hibernate-dwr-and-dojoe/";</script><p>I just presented a tutorial on Friday on using Direct Web Remoting, Hibernate and <a href="http://dojoe.nexaweb.com/">dojo.E</a>.  It’s a very simple demo, but demonstrates the power of these three technologies combined to create simple, dynamic Java applications very quickly.  The tutorial is available on SlideShare.</p>
<div style="left;"><a title="DWR, Hibernate and Dojo.E - A Tutorial" href="http://www.slideshare.net/jbarciauskas/dwr-hibernate-and-dojoe-a-tutorial-presentation?type=powerpoint">DWR, Hibernate and Dojo.E - A Tutorial</a></p>
<div style="2px;">View SlideShare <a title="View DWR, Hibernate and Dojo.E - A Tutorial on SlideShare" href="http://www.slideshare.net/jbarciauskas/dwr-hibernate-and-dojoe-a-tutorial-presentation?type=powerpoint">presentation</a> or <a href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a href="http://slideshare.net/tag/tutorials">tutorials</a> <a href="http://slideshare.net/tag/tutorial">tutorial</a>)</div>
</div>
<p>Note that there is a bug that obscures the URL for the SVN project.  The URL is <a href="http://source.nexaweb.com/svn/repos/trunk/tutorials/ajax/DWRExample/">http://source.nexaweb.com/svn/repos/trunk/tutorials/ajax/DWRExample/</a>.</p>
<p>You can check out the project via SVN using this URL.</p>
<p>Also, to copy and paste the code snippets, <a href="http://www.slideshare.net/jbarciauskas/dwr-hibernate-and-dojoe-a-tutorial-presentation/download">download the document</a> and open directly in PowerPoint. When copying and pasting, watch out for “smart quotes”. Some of the quotation characters in the PPT have been replaced with “smart quotes”, which are not recognized by XML parsers.</p>
<p>This will get even more exciting with the new features of DWR 3.0, which will add a RESTful layer to DWR’s remoting.  To learn more about DWR 3.0, I recommend <a href="http://joel.barciausk.as/2008/10/06/speaking-of-dwr-3/">Joe Walker&#8217;s presentation</a> from The Ajax Experience last week.  He&#8217;s the lead developer for DWR.</p>
<p>Joel Barciauskas</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nexaweb.com/post/tutorial-hibernate-dwr-and-dojoe/feed/</wfw:commentRss>
		</item>
		<item>
		<title>dojo.E swag</title>
		<link>http://blog.nexaweb.com/post/dojoe-swag/</link>
		<comments>http://blog.nexaweb.com/post/dojoe-swag/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 13:51:59 +0000</pubDate>
		<dc:creator>jdeLorenzo</dc:creator>
		
		<category><![CDATA[Fun]]></category>

		<category><![CDATA[dojoe]]></category>

		<guid isPermaLink="false">http://blog.nexaweb.com/?p=83</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/dojoe-swag/";</script>Over the weekend the dojo.E team spent some time at the Dojo Foundation’s Boston Dojo Developer Day and then at The Ajax Experience with some cool swag in tow. For those who missed these events, we’re giving away free stickers along with a limited number of t-shirts at the dojo.E website. Hurry up, though, as supplies are limited.

]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/dojoe-swag/";</script><p>Over the weekend the dojo.E team spent some time at the Dojo Foundation’s <a href="http://dojotoolkit.org/2008/07/10/dojo-developer-day-boston">Boston Dojo Developer Day</a> and then at <a href="http://ajaxexperience.techtarget.com/east/index.html">The Ajax Experience</a> with some <a href="http://blog.nexaweb.com/wp-content/uploads/2008/09/dojoeswag.gif">cool swag</a> in tow. For those who missed these events, we’re giving away free stickers along with a limited number of t-shirts at the <a href="http://dojoe.nexaweb.com">dojo.E website</a>. Hurry up, though, as supplies are limited.</p>
<p><a href="http://blog.nexaweb.com/wp-content/uploads/2008/09/dojoeswag1.gif"><img class="alignnone size-full wp-image-85" src="http://blog.nexaweb.com/wp-content/uploads/2008/09/dojoeswag1.gif" alt="" width="500" height="339" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nexaweb.com/post/dojoe-swag/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mozilla Firefox and Google Chrome Harmony</title>
		<link>http://blog.nexaweb.com/post/mozilla-firefox-and-google-chrome-harmony/</link>
		<comments>http://blog.nexaweb.com/post/mozilla-firefox-and-google-chrome-harmony/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 14:34:02 +0000</pubDate>
		<dc:creator>jchone</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://blog.nexaweb.com/?p=77</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/mozilla-firefox-and-google-chrome-harmony/";</script>  Google Chrome is only about three weeks old and is already an  Internet phenomenon. To sum it up, Google Chrome is all about making web  browsing safer, faster, and easier. While  some might see a fierce competition between Google Chrome and Mozilla Firefox,  I see harmony. 
Here is some [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/mozilla-firefox-and-google-chrome-harmony/";</script><p> <img src="/images/img-firefox-chrome-harmony.jpg" align="left" class="imgPostIntro" /> Google Chrome is only about three weeks old and is already an  Internet phenomenon. To sum it up, Google Chrome is all about making web  browsing <a href="http://www.google.com/googlebooks/chrome/med_22.html" target="bb">safer</a>, <a href="http://www.google.com/googlebooks/chrome/med_14.html" target="bb">faster</a>, and <a href="http://www.google.com/chrome/intl/en/features.html" target="bb">easier</a>. While  some might see a fierce competition between Google Chrome and Mozilla Firefox,  I see harmony. </p>
<p>Here is some background to better understand this point  of view. There has been a somewhat valid belief stating that the un-typed and  interpreted nature of the JavaScript language was a major limitation for building  demanding client applications. Consequently, to overcome this challenge, the  browser technology providers had the following two options:</p>
<ol>
<li><strong>Re-invent the  language</strong> by “upgrading” the JavaScript language to a more a traditional typed  and object-oriented language, such as Java or C#, allowing the runtime to just focus  on running the code. </li>
<li><strong>Re-invent the runtime</strong> by creating novels ways for the JavaScript virtual machine to parse and  interpret the JavaScript code, making the language as robust and reliable as  more traditional languages. </li>
</ol>
<p><span id="more-77"></span></p>
<p>Conforming to the EcmaScript’s <a href="http://blog.nexaweb.com/post/ecma-achieves-harmony-on-the-web/">Harmony</a> decision, which focuses  on not reinventing [or forking] the language (i.e., not doing #1), Google  and Mozilla are actually genuinely working on the same goal, which is to make the  current JavaScript faster and more reliable in a completely transparent way to  the web developer. So, from a language point of view, Mozilla and Google are  actually in complete harmony in pursuit of the <a href="http://weblogs.mozillazine.org/roadmap/archives/2007/03/the_open_web_and_its_adversari.html" target="bb">Open  Web vision</a>. </p>
<p>Here are a few Q&amp;As to summarize my take on Google  Chrome from a developer’s perspective.</p>
<p><strong>Which one is  faster?</strong> <strong></strong></p>
<p>It does not matter as long as they keep fighting it up.<strong> </strong>Google Chrome got a good <a href="http://www.download.com/8301-2007_4-10030717-12.html" target="bb">PR</a> head-start, but,  Mozilla Firefox 3.1 is back <a href="http://andreasgal.com/2008/09/03/tracemonkey-vs-v8/" target="bb">in the race</a> with <a href="http://ejohn.org/blog/tracemonkey/" target="bb">TraceMonkey</a>.</p>
<p><strong>What’s the good  news? </strong></p>
<p>JavaScript has become a safer bet for developers.<strong> </strong>With Google, Mozilla, and Apple  seriously investing in JavaScript, from applications to runtimes, developers can  rest assured that the language has a bright future. I also think this will be a  factor in forcing Microsoft to react aggressively, assuming it does not want to  see the Internet slipping way (again).</p>
<p><strong>What’s the bad  news?</strong></p>
<p> The caveats (and there are always some) are that  developers will have yet another browser to test against and the market will  have yet another browser to adopt. </p>
<p>So, at the end, I think that Google Chrome is a good  thing for the Open Web in general, and my hope is that it will be a forcing  hand to get Microsoft to update its Web strategy. </p>
<p>For example, given that Microsoft Internet strategy seems  to be mostly focused on the plug-in front (i.e., SilverLight vs. Flash), it  might be interesting for Microsoft to just re-use the Mozilla or Google  JavaScript virtual machine. Why not?  Developers  will be happy, and Microsoft would be able to fully focus on SilverLight and Net. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nexaweb.com/post/mozilla-firefox-and-google-chrome-harmony/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ECMA achieves Harmony on the Web</title>
		<link>http://blog.nexaweb.com/post/ecma-achieves-harmony-on-the-web/</link>
		<comments>http://blog.nexaweb.com/post/ecma-achieves-harmony-on-the-web/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 22:49:17 +0000</pubDate>
		<dc:creator>jchone</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.nexaweb.com/?p=51</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/ecma-achieves-harmony-on-the-web/";</script>

As you might have heard,  harmony has been found in the ECMAScript working group ECMAScript  Harmony (see also EJohn Resig’s post and thegreat  Harmony podcast with Brendan Eich and Arun Ranganathan).
To sum it up, the ECMAScript, responsible for standardizing  JavaScript, has had pretty intense discussions over the years about the future [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/ecma-achieves-harmony-on-the-web/";</script><p><img  align="left" class="imgPostIntro"  src="/images/harmony.jpg" width="66" height="70" />
<p>
As you might have heard,  harmony has been found in the ECMAScript working group <a href="https://mail.mozilla.org/pipermail/es-discuss/2008-August/003400.html">ECMAScript  Harmony</a> (see also <strong><em><a href="http://ejohn.org/blog/ecmascript-harmony/">EJohn Resig’s post</a> </em></strong>and the<strong></strong><a href="http://openwebpodcast.com/episode-2-brendan-eich-and-arun-ranganathan-on-ecmascript-harmony">great  Harmony podcast with Brendan Eich and Arun Ranganathan</a>).</p>
<p>To sum it up, the <a href="http://en.wikipedia.org/wiki/ECMAScript">ECMAScript</a>, responsible for standardizing  JavaScript, has had pretty intense discussions over the years about the future  of the language. One side wanted to evolve JavaScript into a more typed and  traditional compiled language (ECMAScript 4), while the other wanted to keep  JavaScript’s dynamic nature a core feature of the language (ECMAScript 3+). </p>
<p>Theoretically, from a language perspective there are pros  and cons for both sides. However, the bigger question was and is <strong>“what is the  best direction for the web?” </strong></p>
<p>To better answer this question, a quick look at the  different application architecture designs would be helpful. There are two main  architecture designs for client applications. </p>
<ol>
<li><strong>Client Oriented Architecture</strong> in which  application logic resides on the client machine and data are loaded and  synchronized from a local or remote internet destination. This approach is currently  the best, if not the only, way to build desktop applications (i.e. Outlook, Photoshop  and Skype). While it can also work and be useful in a web environment via plugins  such as SilverLight, Java and Flash, it often finds itself at odds with standard web assets.  
  </li>
<li><strong>Web Oriented Architecture</strong> in which application  logic is distributed across client and server and data can be downloaded or  synchronized as part of the application flow. The distributed nature of this  approach requires the client runtime (i.e. browser) to have a more programmable  interface (i.e. html, css, and JavaScript) than the traditional client centric  approach. A unique attribute of this web architecture is the capability for the  server to completely reprogram the client within an application flow. This  architecture attribute is probably the single most important design concept  behind the web we know today. </li>
</ol>
<p>In the client centric approach, the benefits of having a  typed and compiled language provides undeniable benefits as it facilitates  client applications to fully take advantage of the local device’s resources.  Platforms such as Java, .Net and others provide great versatility and client  side capabilities. </p>
<p>For the web centric approach, dynamic languages and  architecture such as html/css and JavaScript have proven to be robust and  scalable design principles for internet based applications.  These include  consumer sites such as YouTube, Facebook and eBay as  well as enterprise mission critical applications such as SAP, Oracle Ebusiness,  and SalesForce.com. </p>
<p><strong>So the real debate was</strong> “do we bring the ‘client/server’  application model back to the web, or do we continue to improve the current dynamic  nature of the web which allows clients and servers to fully participate in all  aspect of the application?”</p>
<p>Luckily, <strong>a conclusion has been reached and the decision has  been to keep the Web dynamic</strong> and to abandon parts of the ECMAScript 4 concepts that could have had a negative or backward impact  on the dynamic nature of the web. </p>
<p>Some might call  harmony a <a href="http://www.rockonflash.com/blog/?p=127">victory for Microsoft</a>, who despite their SilverLight effort were  lobbying to keep JavaScript more incremental and dynamic, others might&nbsp;say that <a href="http://joshblog.net/2008/08/13/how-will-ecmascript-harmony-affect-actionscript-3/">it  dismisses&nbsp;Adobe’s ActionScript</a>, which was paving the way for a more a  traditional object oriented language for the Web. However, the real winner is the Web as we know it today as this event ratifies its design principles and  consolidate its resources for building a better and brighter future.  Harmony is a great  milestone for the future of the web, and in many ways it has already  reinvigorated the industry interest about the web technology discussions and  directions. The ECMAScript team did a fabulous job at reaching consensus and  articulating the decisions in an objective and informative way.</p>
<p>For enterprises, this is a huge step forward as it ratifies  open Web technologies and design principles as the future-proof building blocks  for creating the next generation of internet enterprise applications. </p>
<p>Now, the next two big milestones for the web are going to be how fast  <a href="http://alex.dojotoolkit.org/2008/08/harmony-fallout/">Microsoft will catch-up</a> on its JavaScript implementation, and when the web will  be able to leverage the next iteration of the web markup language (<a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/">HTML 5</a>). </p>
<p>Note: if you are getting confused with all these names and version, Alex Russell made a nice <a href="http://alex.dojotoolkit.org/2008/08/the-ecmajavascript-name-soup/">name soup</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nexaweb.com/post/ecma-achieves-harmony-on-the-web/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Nexaweb&#8217;s IMB gets struck by a Comet</title>
		<link>http://blog.nexaweb.com/post/the-imb-gets-struck-by-a-comet/</link>
		<comments>http://blog.nexaweb.com/post/the-imb-gets-struck-by-a-comet/#comments</comments>
		<pubDate>Sat, 16 Aug 2008 21:12:48 +0000</pubDate>
		<dc:creator>community</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[Community]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Marketing]]></category>

		<category><![CDATA[RIA]]></category>

		<category><![CDATA[dojo]]></category>

		<category><![CDATA[dojoe]]></category>

		<category><![CDATA[Comet]]></category>

		<category><![CDATA[IMB]]></category>

		<category><![CDATA[Nexaweb]]></category>

		<guid isPermaLink="false">http://blog.nexaweb.com/?p=26</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/the-imb-gets-struck-by-a-comet/";</script>Just finished checking in the last of the updates (minus bug fixes) for the new Ajax IMB Client, after a week of straight coding and little else. The new version has been completely rewritten from the ground up. This coincides with Nexaweb&#8217;s upcoming release (in a month or so)  of an updated version of [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.nexaweb.com/post/the-imb-gets-struck-by-a-comet/";</script><p style="text-align: left;">Just finished checking in the last of the updates (minus bug fixes) for the new Ajax IMB Client, after a week of straight coding and little else. The new version has been completely rewritten from the ground up. This coincides with Nexaweb&#8217;s upcoming release (in a month or so)  of an updated version of the Ajax Client. The Ajax Client codebase will be completely updated and run over dojo 1.2. All the coding for these updates follow six principles:</p>
<p style="text-align: left;"><span id="more-26"></span><br />
<img class="size-medium wp-image-42 margin-right:10px alignleft" title="istock_000001798605xsmall" src="http://blog.nexaweb.com/wp-content/uploads/2008/08/istock_000001798605xsmall.jpg" alt="" width="300" height="179" /></p>
<ul style="text-align: left;">
<li>Small</li>
<li>Flexible</li>
<li>Fast</li>
<li>Simple</li>
<li>Easy</li>
<li>Robust</li>
<li>Add Value</li>
</ul>
<p style="text-align: left;">Applying these rules to the IMB code produced some great improvements in both size as well as functionality. Comparing the metrics between the old codebase and the new one shows considerable improvement.</p>
<ul style="text-align: left;">
<li>Number of Classes - old 30 vs. New 10 - <strong>67% savings. </strong></li>
<li>Size - old 27KB vs. New 17KB - <strong>37% savings. </strong>I had it down to 14KB before adding in the new features.</li>
<li>Complexity, if I were to measure it, would be <strong>1/10</strong> of the old codebase.</li>
</ul>
<p style="text-align: left;"><strong>New Features:</strong></p>
<p style="text-align: left;">The numbers tell only half the story. Developers will benefit from the simplified usage and increased functionality of the IMB codebase. Below are the features new to this version of the codebase:</p>
<ol style="text-align: left;">
<li><strong>long-polling</strong> <strong>support </strong>- This is a huge benefit over the first version&#8217;s interval-based polling.  Reading a lot about Comet techniques and looking through tons of code last week, I was able to get &#8220;long-polling,&#8221; as it&#8217;s known, into the codebase. <a href="http://en.wikipedia.org/wiki/Comet_%28programming%29">WIkipedia</a> has a good article on <a href="http://en.wikipedia.org/wiki/Comet_%28programming%29">Comet</a> as does <a href="http://cometdaily.com/">Comet Daily</a>.  Opening the &#8220;push&#8221; connection is done as follows:<code> </code>imbSession.getSynchronizationService().openPushConnection();<br />
<code><br />
</code>The great thing about long-polling is that it&#8217;s a very clean client-side implementation and works well in all the browsers.  Most of the work for dealing with the complexity is done on the server-side.  Our server already had all the infrastructure to handle long-polling and just needed some client-side love.</li>
<li><strong>Server Controlled</strong> - You can specify the synchronization mechanism for the IMB using a server configuration file; when the IMB is started, the server tells the IMB Client how it should configure its synchronization service: interval-polling (interval), long-polling or nothing. Again, the server was already sending the client the right information, I just needed to read it and configure the synchronization layer. In the WEB-INF/nexaweb-client.xml file you can configure the client to start a push connection (long-polling in Ajax) or start interval polling at startup.<br />
<code><br />
&lt;default-session-configuration&gt;<br />
&lt;configuration&gt;<br />
&lt;polling-interval&gt;2 seconds&lt;/polling-interval&gt;<br />
&lt;begin-polling-on-startup&gt;false&lt;/begin-polling-on-startup&gt;<br />
&lt;establish-push-connection-on-startup&gt;<br />
true<br />
&lt;/establish-push-connection-on-startup&gt;<br />
&lt;/configuration&gt;<br />
&lt;/default-session-configuration&gt;<br />
</code><br />
The configuration can be customized for more advanced behavior such as starting a push connection for IE and a ten-minute polling interval for all other browsers.</li>
<li><strong>Events </strong>- Developers can now manage all common events that occur in the Ajax client.  This allows developers to handle session time outs, polling errors, and more.<br />
<code><br />
dojo.connect(myIMBSession, "onSessionTimeOut", displayRestartDialog);</code></li>
<li><strong>Policy based management of the transport</strong>: Nexaweb&#8217;s server infrastructure has always been a very well thought out piece of code.  Developers or Administrators can control every aspect of the IMB to get just the right balance of performance and client throughput.  The WEB-INF/nexaweb-client.xml file can configure how data is sent up the push connection.  Originally intended to more effectively manage complex network topologies, the IMB policies allow the configuration of data pushes to the client.  The following piece of XML from the nexaweb-client.xml demonstrates this capability:<br />
<code><br />
&lt;policy&gt;<br />
&lt;configuration class="com.nexaweb.server.pushconnection.<br />
flushpolicies.ThroughputFlushPolicy"&gt;<br />
&lt;flush-size&gt;1 bytes&lt;/flush-size&gt;<br />
&lt;is-stream-closed-on-flush&gt;true&lt;/is-stream-closed-on-flush&gt;<br />
&lt;measurement-period&gt;2 seconds&lt;/measurement-period&gt;<br />
&lt;minimum-throughput&gt;500 bytes&lt;/minimum-throughput&gt;<br />
&lt;/configuration&gt;<br />
&lt;/policy&gt;<br />
</code><br />
This tells the server to use the throughput policy, whereby data being sent up the push connection waits either 2 seconds or until the payload is 500 bytes before it&#8217;s sent to the client.  Why would this be a good configuration? Maybe you know that data comes in very short bursts and want to wait until the end of the burst before sending the data. Setting the policy to 1 millis and 1 bytes would mean that the server would send the data and cut the connection for every message. Although this might send the data quicker initially, the data would be choppier. Also more resource requests would be made resulting in poor performance and higher resource consumption.</li>
<li><strong>Robust error handling:</strong> One thing we are trying do throughout the codebase is to introduce better error handling to warn developers about issues or things that they should not do, and prevent them from happening.  Below are some examples of this in the IMB code.
<ul>
<li>Developers can no longer start up two polling tasks</li>
<li>Can&#8217;t subscribe to a topic with the same handler twice</li>
<li>The codebase notifies developers if the session is invalid when they try to use any of the services&#8230;</li>
</ul>
</li>
</ol>
<p style="text-align: left;"><strong>Existing  Features:</strong></p>
<p style="text-align: left;">The IMB already had some cool features in it, which have now been recoded following the rules above to hopefully make them easier and more robust.</p>
<ul style="text-align: left;">
<li><strong>Automatic request proxying</strong>:  Say a developer wants to load an RSS file from digg.com - they can use the following code to do so:<br />
<code><br />
session.getRequestService().retrieve("http://digg.com/rss/index.xml");<br />
session.getRequestService().retrieveAsynchronously(<br />
"http://digg.com/rss/index.xml",  {<br />
requestCompleted: function(request, response){<br />
},<br />
requestFailed: function(request, response){<br />
}<br />
});<br />
</code><br />
The IMB will detect this is as a cross-site request and proxy it via the server.  This means that the client never needs to open up cross-site requests and developers can manage it from the server-side.</li>
<li><strong>Simple Resource retrieval:</strong> The IMB &#8220;RequestService&#8221; can be used to access server-side resources with either a synchronous or asynchronous connection. The API is the same as shown above, but if the resource is within the application, the IMB retrieves the resource as any other Ajax framework would.</li>
<li><strong>Automatic Resource Processing:</strong> dojo.E and the Nexaweb platform allow developers to use Xmodify syntax to change the HTML DOM or dojo Widgets.  Using the following methods, developers can simplify this by telling the IMB to automatically process the results of the request:<br />
<code><br />
session.getRequestService().retrieveAndProcess("login.jsp");<br />
session.getRequestService().retrieveAndProcessAsynchronously("login.jsp",  {<br />
requestCompleted: function(request, response){<br />
},<br />
requestFailed: function(request, response){<br />
}<br />
});<br />
</code></li>
<li><strong>Pub/Sub</strong> is the metaphor for how the IMB handles its real-time messaging.  Any &#8220;node&#8221; (Client or Server) within the application can subscribe to a topic and no matter where the message is published from, all subscribers receive a copy of it.<br />
<code><br />
session.getMessagingService().subscribe("chat-with-me", {<br />
onMessage: function(topic, message){<br />
var div = dojo.byId("last_"+topic);<br />
div.innerHTML = message;<br />
}<br />
});<br />
</code><br />
New to this version, developers can supply a function to be called when a message is received for a topic.<br />
<code><br />
session.getMessagingService().subscribe("chat-with-me",<br />
function(topic, message){<br />
});</code></li>
<li style="text-align: left;"><strong>Clustering</strong>: The IMB is fully clusterable, which gives applications unlimited scalability.  The clustering has been in production deployments for fours years now and proven in large scale deployments such as <a href="http://www.nexaweb.com/whitepapers/Nikkei_Computing_BTM_article.pdf">Tokyo-Mitsubishi UFJ</a>. Clustering the IMB is necessary for mission critical applications like MUFJ&#8217;s FOREX Trading Platform.  When dealing with millions of dollars, messages must be delivered no matter the circumstance.  Clustering removes any single point of failure in the back end, allowing machines to crash or be taken off-line without interruption to the service.</li>
</ul>
<p style="text-align: left;">
<p style="text-align: left;"><strong>Sample Applications:</strong></p>
<p style="text-align: left;">I have created two sample applications that demonstrate the functionality of the improved IMB.</p>
<ul style="text-align: left;">
<li><a href="http://demo1.nexaweb.com/imb/tictactoe.html"><strong>Tic-Tac-Toe</strong></a> - A simple, single player Tic-Tac-Toe game with the Artificial Intelligence (it&#8217;s all relative) embedded into the server.  When the user moves or sends a message, the server initiates the AI to respond to the messages and moves by publishing a response message.</li>
</ul>
<p style="text-align: center;"><a href="http://demo1.nexaweb.com/imb/tictactoe.html"><img class="aligncenter size-full wp-image-65" title="tictactoe" src="http://blog.nexaweb.com/wp-content/uploads/2008/08/tictactoe.jpg" alt="" width="400" height="204" /></a></p>
<ul style="text-align: left;">
<li><a href="http://demo1.nexaweb.com/imb/control-panel.html"><strong>IMB Dashboard</strong></a> - This application allows users to control every facet of the IMB functionality through a simple to use UI.  To see what the new push connection does, open up two browsers and have them talk to each other by subscribing to the same topic.</li>
</ul>
<p style="text-align: left;">
<p style="text-align: center;"><a href="http://demo1.nexaweb.com/imb/control-panel.html"><img class="aligncenter size-full wp-image-66" title="control-panel" src="http://blog.nexaweb.com/wp-content/uploads/2008/08/control-panel.jpg" alt="" width="500" height="328" /></a></p>
<p style="text-align: left;"><strong>That&#8217;s It:</strong></p>
<p style="text-align: left;">Can&#8217;t think of anything else to mention about the new or old IMB code so I&#8217;ll end it here.  Oh wait, one last thing, a sample application.  Been trying to think of a cool app, something simple yet useful or at least fun for a couple minutes, but haven&#8217;t settled on one. I will create the super awesome chat application but want something a little more engaging. Any ideas, add them via the comments.</p>
<p style="text-align: left;">Bob (Buffone)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nexaweb.com/post/the-imb-gets-struck-by-a-comet/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
