<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<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/"
	>

<channel>
	<title>gigaspaces &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/gigaspaces/</link>
	<description>Feed of posts on WordPress.com tagged "gigaspaces"</description>
	<pubDate>Tue, 08 Dec 2009 10:18:57 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Business Rules in Space]]></title>
<link>http://croffler.wordpress.com/2009/09/17/business-rules-in-space/</link>
<pubDate>Thu, 17 Sep 2009 15:30:24 +0000</pubDate>
<dc:creator>croffler</dc:creator>
<guid>http://croffler.wordpress.com/2009/09/17/business-rules-in-space/</guid>
<description><![CDATA[As mentioned in an earlier blog, a rules engine is used in our architecture for validating business ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>As mentioned in an earlier blog, a rules engine is used in our architecture for validating business objects, routing and business process instantiation. The general idea is to pre compile the rules and make them available in a cache that can scale and is backed by persistence.</p>
<p><a href="http://croffler.files.wordpress.com/2009/09/rules1.png"><img style="display:block;float:none;margin-left:auto;margin-right:auto;border-width:0;" title="rules" src="http://croffler.files.wordpress.com/2009/09/rules_thumb.png?w=240&#038;h=230" border="0" alt="rules" width="240" height="230" /></a></p>
<p>Rules are stored in a repository (LDAP, RDBMS or files). When applications or processing units need to access the business rules they are read from the rules space.</p>
<p>The rules are first read from the repository, pre compiled and written into the JavaSpace. The loading of the rules into the space can be accomplished in different ways. XAP from GigaSpaces provides several <a href="http://www.gigaspaces.com/wiki/display/XAP7/Caching+and+External+Data+Source">options</a> for this process or you can write your own. You can also configure a Local View or a <a href="http://www.gigaspaces.com/wiki/display/XAP7/Local+Cache+and+Local+View">Local Cache</a> for the business rules according to your requirements.</p>
<p>We are using the <a href="http://jboss.org/drools/">Drools</a> engine version 4.0.7 in our project (the latest version of Drools has some serialization problems) . In Drools rules are built with a RuleBase and Packages.</p>
<p>Here is an example:</p>
<p>The RuleEntry class is used for the space operations and the persistent backend. There is nothing special about this class besides the RuleBase attribute which holds the compiled rules.</p>
<div id="codeSnippetWrapper" style="border:1px solid silver;overflow:auto;font-size:8pt;width:97.5%;cursor:text;direction:ltr;max-height:200px;line-height:12pt;">
<div id="codeSnippet" style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum1" style="color:#606060;">   1:</span> <span style="color:#0000ff;">package</span> gov.mz.framework.rules;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum2" style="color:#606060;">   2:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum3" style="color:#606060;">   3:</span> <span style="color:#0000ff;">import</span> gov.mz.framework.rules.error.RuleError;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum4" style="color:#606060;">   4:</span> <span style="color:#0000ff;">import</span> gov.mz.framework.rules.msg.IRulesMessages;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum5" style="color:#606060;">   5:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum6" style="color:#606060;">   6:</span> <span style="color:#0000ff;">import</span> java.io.Serializable;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum7" style="color:#606060;">   7:</span> <span style="color:#0000ff;">import</span> java.io.StringReader;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum8" style="color:#606060;">   8:</span> <span style="color:#0000ff;">import</span> java.sql.Timestamp;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum9" style="color:#606060;">   9:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum10" style="color:#606060;">  10:</span> <span style="color:#0000ff;">import</span> javax.persistence.Column;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum11" style="color:#606060;">  11:</span> <span style="color:#0000ff;">import</span> javax.persistence.Entity;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum12" style="color:#606060;">  12:</span> <span style="color:#0000ff;">import</span> javax.persistence.GeneratedValue;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum13" style="color:#606060;">  13:</span> <span style="color:#0000ff;">import</span> javax.persistence.GenerationType;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum14" style="color:#606060;">  14:</span> <span style="color:#0000ff;">import</span> javax.persistence.Id;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum15" style="color:#606060;">  15:</span> <span style="color:#0000ff;">import</span> javax.persistence.Table;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum16" style="color:#606060;">  16:</span> <span style="color:#0000ff;">import</span> javax.persistence.Transient;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum17" style="color:#606060;">  17:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum18" style="color:#606060;">  18:</span> <span style="color:#0000ff;">import</span> mozgif.error.UserTypeError;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum19" style="color:#606060;">  19:</span> <span style="color:#0000ff;">import</span> mozgif.space.ISpacePersistence;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum20" style="color:#606060;">  20:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum21" style="color:#606060;">  21:</span> <span style="color:#0000ff;">import</span> org.drools.RuleBase;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum22" style="color:#606060;">  22:</span> <span style="color:#0000ff;">import</span> org.drools.RuleBaseFactory;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum23" style="color:#606060;">  23:</span> <span style="color:#0000ff;">import</span> org.drools.rule.Package;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum24" style="color:#606060;">  24:</span> <span style="color:#0000ff;">import</span> org.springframework.stereotype.Repository;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum25" style="color:#606060;">  25:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum26" style="color:#606060;">  26:</span> <span style="color:#0000ff;">import</span> com.gigaspaces.annotation.pojo.SpaceClass;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum27" style="color:#606060;">  27:</span> <span style="color:#0000ff;">import</span> com.gigaspaces.annotation.pojo.SpaceExclude;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum28" style="color:#606060;">  28:</span> <span style="color:#0000ff;">import</span> com.gigaspaces.annotation.pojo.SpaceId;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum29" style="color:#606060;">  29:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum30" style="color:#606060;">  30:</span> @javax.persistence.SequenceGenerator(name = <span style="color:#006080;">"SEQ_GEN"</span>, sequenceName = <span style="color:#006080;">"RULE_SEQUENCE"</span>, allocationSize = 20)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum31" style="color:#606060;">  31:</span> @SpaceClass</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum32" style="color:#606060;">  32:</span> @Repository</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum33" style="color:#606060;">  33:</span> @Entity</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum34" style="color:#606060;">  34:</span> @Table(name = <span style="color:#006080;">"RULE_BASE"</span>)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum35" style="color:#606060;">  35:</span> <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> RuleEntry <span style="color:#0000ff;">implements</span> ISpacePersistence&#60;RuleEntry&#62;, Serializable</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum36" style="color:#606060;">  36:</span> {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum37" style="color:#606060;">  37:</span>     @Id</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum38" style="color:#606060;">  38:</span>     @Column(name = <span style="color:#006080;">"ID"</span>)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum39" style="color:#606060;">  39:</span>     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = <span style="color:#006080;">"SEQ_GEN"</span>)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum40" style="color:#606060;">  40:</span>     <span style="color:#0000ff;">private</span> Long id;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum41" style="color:#606060;">  41:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum42" style="color:#606060;">  42:</span>     @Column(name = <span style="color:#006080;">"TIMESTAMP"</span>)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum43" style="color:#606060;">  43:</span>     <span style="color:#0000ff;">private</span> Timestamp timeStamp;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum44" style="color:#606060;">  44:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum45" style="color:#606060;">  45:</span>     @Column(name = <span style="color:#006080;">"VERSION"</span>)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum46" style="color:#606060;">  46:</span>     <span style="color:#0000ff;">private</span> String version;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum47" style="color:#606060;">  47:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum48" style="color:#606060;">  48:</span>     @Column(name = <span style="color:#006080;">"RULE_BASE_NAME"</span>)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum49" style="color:#606060;">  49:</span>     <span style="color:#0000ff;">private</span> String ruleBaseName;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum50" style="color:#606060;">  50:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum51" style="color:#606060;">  51:</span>     @Column(name = <span style="color:#006080;">"RULE_CONTEXT"</span>)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum52" style="color:#606060;">  52:</span>     <span style="color:#0000ff;">private</span> String ruleContext;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum53" style="color:#606060;">  53:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum54" style="color:#606060;">  54:</span>     @Transient</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum55" style="color:#606060;">  55:</span>     <span style="color:#0000ff;">private</span> RuleBase ruleBase;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum56" style="color:#606060;">  56:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum57" style="color:#606060;">  57:</span>     <span style="color:#0000ff;">public</span> RuleEntry()</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum58" style="color:#606060;">  58:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum59" style="color:#606060;">  59:</span>         <span style="color:#0000ff;">super</span>();</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum60" style="color:#606060;">  60:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum61" style="color:#606060;">  61:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum62" style="color:#606060;">  62:</span>     <span style="color:#0000ff;">public</span> Timestamp getTimeStamp()</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum63" style="color:#606060;">  63:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum64" style="color:#606060;">  64:</span>         <span style="color:#0000ff;">return</span> timeStamp;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum65" style="color:#606060;">  65:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum66" style="color:#606060;">  66:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum67" style="color:#606060;">  67:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> setTimeStamp(Timestamp timeStamp)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum68" style="color:#606060;">  68:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum69" style="color:#606060;">  69:</span>         <span style="color:#0000ff;">this</span>.timeStamp = timeStamp;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum70" style="color:#606060;">  70:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum71" style="color:#606060;">  71:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum72" style="color:#606060;">  72:</span>     @SpaceId</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum73" style="color:#606060;">  73:</span>     <span style="color:#0000ff;">public</span> Long getId()</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum74" style="color:#606060;">  74:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum75" style="color:#606060;">  75:</span>         <span style="color:#0000ff;">return</span> id;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum76" style="color:#606060;">  76:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum77" style="color:#606060;">  77:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum78" style="color:#606060;">  78:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> setId(Long id)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum79" style="color:#606060;">  79:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum80" style="color:#606060;">  80:</span>         <span style="color:#0000ff;">this</span>.id = id;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum81" style="color:#606060;">  81:</span>     }</pre>
<p><!--CRLF--><!--CRLF--><!--CRLF--><!--CRLF--><!--CRLF--><!--CRLF--><!--CRLF--><!--CRLF--><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum90" style="color:#606060;">  90:</span>     <span style="color:#0000ff;">public</span> RuleEntry toSpace() <span style="color:#0000ff;">throws</span> UserTypeError</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum91" style="color:#606060;">  91:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum92" style="color:#606060;">  92:</span>         <span style="color:#0000ff;">try</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum93" style="color:#606060;">  93:</span>         {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum94" style="color:#606060;">  94:</span>             StringReader reader = <span style="color:#0000ff;">new</span> StringReader(getRuleContext());</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum95" style="color:#606060;">  95:</span>             Package pkg = RulesFacade.getFacade().load(reader);</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum96" style="color:#606060;">  96:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum97" style="color:#606060;">  97:</span>             <span style="color:#0000ff;">this</span>.setRuleBase(RuleBaseFactory.newRuleBase());</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum98" style="color:#606060;">  98:</span>             ruleBase.addPackage(pkg);</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum99" style="color:#606060;">  99:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum100" style="color:#606060;"> 100:</span>             <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">this</span>;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum101" style="color:#606060;"> 101:</span>         }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum102" style="color:#606060;"> 102:</span>         <span style="color:#0000ff;">catch</span> (Exception ex)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum103" style="color:#606060;"> 103:</span>         {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum104" style="color:#606060;"> 104:</span>             <span style="color:#0000ff;">throw</span> <span style="color:#0000ff;">new</span> RuleError(IRulesMessages.RULE_BASE_ERROR, <span style="color:#0000ff;">this</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum105" style="color:#606060;"> 105:</span>                     .getRuleBaseName(), ex);</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum106" style="color:#606060;"> 106:</span>         }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum107" style="color:#606060;"> 107:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum108" style="color:#606060;"> 108:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum109" style="color:#606060;"> 109:</span>     <span style="color:#008000;">// Transient in the Space World</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum110" style="color:#606060;"> 110:</span>     @Column(name = <span style="color:#006080;">"RULE_CONTEXT"</span>)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum111" style="color:#606060;"> 111:</span>     @SpaceExclude</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum112" style="color:#606060;"> 112:</span>     <span style="color:#0000ff;">public</span> String getRuleContext()</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum113" style="color:#606060;"> 113:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum114" style="color:#606060;"> 114:</span>         <span style="color:#0000ff;">return</span> ruleContext;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum115" style="color:#606060;"> 115:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum116" style="color:#606060;"> 116:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum117" style="color:#606060;"> 117:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> setRuleContext(String ruleContext)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum118" style="color:#606060;"> 118:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum119" style="color:#606060;"> 119:</span>         <span style="color:#0000ff;">this</span>.ruleContext = ruleContext;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum120" style="color:#606060;"> 120:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum121" style="color:#606060;"> 121:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum122" style="color:#606060;"> 122:</span>     <span style="color:#0000ff;">public</span> String getVersion()</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum123" style="color:#606060;"> 123:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum124" style="color:#606060;"> 124:</span>         <span style="color:#0000ff;">return</span> version;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum125" style="color:#606060;"> 125:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum126" style="color:#606060;"> 126:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum127" style="color:#606060;"> 127:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> setVersion(String version)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum128" style="color:#606060;"> 128:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum129" style="color:#606060;"> 129:</span>         <span style="color:#0000ff;">this</span>.version = version;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum130" style="color:#606060;"> 130:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum131" style="color:#606060;"> 131:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum132" style="color:#606060;"> 132:</span>     <span style="color:#0000ff;">public</span> String getRuleBaseName()</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum133" style="color:#606060;"> 133:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum134" style="color:#606060;"> 134:</span>         <span style="color:#0000ff;">return</span> ruleBaseName;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum135" style="color:#606060;"> 135:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum136" style="color:#606060;"> 136:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum137" style="color:#606060;"> 137:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> setRuleBaseName(String packageName)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum138" style="color:#606060;"> 138:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum139" style="color:#606060;"> 139:</span>         <span style="color:#0000ff;">this</span>.ruleBaseName = packageName;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum140" style="color:#606060;"> 140:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum141" style="color:#606060;"> 141:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum142" style="color:#606060;"> 142:</span>     <span style="color:#0000ff;">public</span> RuleBase getRuleBase()</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum143" style="color:#606060;"> 143:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum144" style="color:#606060;"> 144:</span>         <span style="color:#0000ff;">return</span> ruleBase;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum145" style="color:#606060;"> 145:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum146" style="color:#606060;"> 146:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum147" style="color:#606060;"> 147:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> setRuleBase(RuleBase ruleBase)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum148" style="color:#606060;"> 148:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum149" style="color:#606060;"> 149:</span>         <span style="color:#0000ff;">this</span>.ruleBase = ruleBase;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum150" style="color:#606060;"> 150:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum151" style="color:#606060;"> 151:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p>When rules need to fire within an application or a processing unit they are requested through a RulesFacade. The method fireRules() is called with the rule name and the objects to be asserted as arguments. This method creates a RuleEntry and queries the space to retrieve the requested precompiled rule. This is accomplished in the getInstanceFromCache method. (line 10)</p>
<div id="codeSnippetWrapper" style="border:1px solid silver;overflow:auto;font-size:8pt;width:97.5%;cursor:text;direction:ltr;max-height:200px;line-height:12pt;">
<div id="codeSnippet" style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum1" style="color:#606060;">   1:</span> @Transactional(readOnly = false, rollbackFor = UserTypeError.<span style="color:#0000ff;">class</span>, propagation = Propagation.REQUIRED)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum2" style="color:#606060;">   2:</span> <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> fireRules(String ruleName, ArrayList&#60;Object&#62; list)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum3" style="color:#606060;">   3:</span>         <span style="color:#0000ff;">throws</span> Exception</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum4" style="color:#606060;">   4:</span> {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum5" style="color:#606060;">   5:</span>     <span style="color:#008000;">// Create a new RuleEntry</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum6" style="color:#606060;">   6:</span>     RuleEntry entry = <span style="color:#0000ff;">new</span> RuleEntry();</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum7" style="color:#606060;">   7:</span>     entry.setRuleBaseName(ruleName);</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum8" style="color:#606060;">   8:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum9" style="color:#606060;">   9:</span>     <span style="color:#008000;">// Get the RuleEntry from Cache</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum10" style="color:#606060;">  10:</span>     entry = <span style="color:#0000ff;">this</span>.getInstanceFromCache(entry);</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum11" style="color:#606060;">  11:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum12" style="color:#606060;">  12:</span>     <span style="color:#008000;">// Get a working Session for this rule</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum13" style="color:#606060;">  13:</span>     StatelessSession session = entry.getRuleBase().newStatelessSession();</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum14" style="color:#606060;">  14:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum15" style="color:#606060;">  15:</span>     <span style="color:#008000;">// Assert all facts and fire rules</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum16" style="color:#606060;">  16:</span>     session.execute(list);</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum17" style="color:#606060;">  17:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p align="justify">If the rule is not found in space it will be read from the repository(line 9) The rule is then compiled and written into the space( line 15) The repository holds the plain text version of the rule not the precompiled rule. The toSpace() method accomplishes the compilation of the rule before writing it to the space.</p>
<div id="codeSnippetWrapper" style="border:1px solid silver;overflow:auto;font-size:8pt;width:97.5%;cursor:text;direction:ltr;max-height:200px;line-height:12pt;">
<div id="codeSnippet" style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum1" style="color:#606060;">   1:</span> <span style="color:#0000ff;">protected</span> V getInstanceFromCache(V template) <span style="color:#0000ff;">throws</span> UserTypeError</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum2" style="color:#606060;">   2:</span> {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum3" style="color:#606060;">   3:</span>     <span style="color:#008000;">// Try to read the instance from the Space</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum4" style="color:#606060;">   4:</span>     V instance = gigaSpace.readIfExists(template);</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum5" style="color:#606060;">   5:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum6" style="color:#606060;">   6:</span>     <span style="color:#0000ff;">if</span> (instance == null)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum7" style="color:#606060;">   7:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum8" style="color:#606060;">   8:</span>         <span style="color:#008000;">// If none found in the Space load it from the repository</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum9" style="color:#606060;">   9:</span>         instance = daoFacade.findOne(template);</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum10" style="color:#606060;">  10:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum11" style="color:#606060;">  11:</span>         <span style="color:#008000;">// If we got an entry from the repository</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum12" style="color:#606060;">  12:</span>         <span style="color:#008000;">// we will put it into the space</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum13" style="color:#606060;">  13:</span>         <span style="color:#0000ff;">if</span> (instance != null)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum14" style="color:#606060;">  14:</span>         {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum15" style="color:#606060;">  15:</span>             gigaSpace.write(instance.toSpace());</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum16" style="color:#606060;">  16:</span>         }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum17" style="color:#606060;">  17:</span>         <span style="color:#0000ff;">else</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum18" style="color:#606060;">  18:</span>             <span style="color:#0000ff;">throw</span> <span style="color:#0000ff;">new</span> RuleError(IRulesMessages.RULE_DOES_NOT_EXIST);</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum19" style="color:#606060;">  19:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum20" style="color:#606060;">  20:</span>     <span style="color:#0000ff;">return</span> instance;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum21" style="color:#606060;">  21:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p align="left">The toSpace method is a Drools specific implementation. The PackageBuilder parses the rules context and creates a Package, a new RuleBase is created and the package is added.</p>
<div id="codeSnippetWrapper" style="border:1px solid silver;overflow:auto;font-size:8pt;width:97.5%;cursor:text;direction:ltr;max-height:200px;line-height:12pt;">
<div id="codeSnippet" style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum1" style="color:#606060;">   1:</span> <span style="color:#0000ff;">public</span> RuleEntry toSpace() <span style="color:#0000ff;">throws</span> UserTypeError</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum2" style="color:#606060;">   2:</span> {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum3" style="color:#606060;">   3:</span>     <span style="color:#0000ff;">try</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum4" style="color:#606060;">   4:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum5" style="color:#606060;">   5:</span>         StringReader reader = <span style="color:#0000ff;">new</span> StringReader(getRuleContext());</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum6" style="color:#606060;">   6:</span>         Package pkg = RulesFacade.getFacade().load(reader);</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum7" style="color:#606060;">   7:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum8" style="color:#606060;">   8:</span>         <span style="color:#0000ff;">this</span>.setRuleBase(RuleBaseFactory.newRuleBase());</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum9" style="color:#606060;">   9:</span>         ruleBase.addPackage(pkg);</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum10" style="color:#606060;">  10:</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum11" style="color:#606060;">  11:</span>         <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">this</span>;</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum12" style="color:#606060;">  12:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum13" style="color:#606060;">  13:</span>     <span style="color:#0000ff;">catch</span> (Exception ex)</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum14" style="color:#606060;">  14:</span>     {</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum15" style="color:#606060;">  15:</span>         <span style="color:#0000ff;">throw</span> <span style="color:#0000ff;">new</span> RuleError(IRulesMessages.RULE_BASE_ERROR, <span style="color:#0000ff;">this</span></pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum16" style="color:#606060;">  16:</span>                 .getRuleBaseName(), ex);</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum17" style="color:#606060;">  17:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;direction:ltr;line-height:12pt;"><span id="lnum18" style="color:#606060;">  18:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p>We have implemented a cache that loads rules on demand. There are other ways to implement this cache. XAP from <a href="http://www.gigaspaces.com">GigaSpaces</a> provides several other options. <a href="http://www.gigaspaces.com/wiki/display/XAP7/Caching+and+External+Data+Source">(All in cache, LRU cache)</a></p>
<p>This implementation should work for other rules engines as well. The only requirement is that the rules class like RuleBase is Serializable.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Space Bus]]></title>
<link>http://croffler.wordpress.com/2009/09/09/space-bus/</link>
<pubDate>Wed, 09 Sep 2009 12:34:52 +0000</pubDate>
<dc:creator>croffler</dc:creator>
<guid>http://croffler.wordpress.com/2009/09/09/space-bus/</guid>
<description><![CDATA[With the many requirements we are facing for a framework like this we need to find a common object r]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>With the many requirements we are facing for a framework like this we need to find a common object repository that can be accessed via a unified API regardless of origin and type of object including Business Objects , Business Rules, Configuration parameters, Instrumentation and logging. We also need to be able to cache the information, provide scalability, failover and recoverability within the framework.</p>
<p><a href="http://en.wikipedia.org/wiki/Tuple_space">JavaSpaces</a> will do that for us in a simple and elegant way. The Event Bus (EB) just became a Space Bus (SB). The SB is the backbone of this framework.</p>
<p>After researching the different vendors that provide JavaSpaces implementations we have picked XAP from <a href="http://gigaspaces.com">GigaSpaces</a>. XAP provides unique features like DataGrid, Caching, mirror service, recovery and many more that are part of our requirements. XAP also uses <a href="https://www.hibernate.org/">Hibernate</a> and <a href="http://www.springsource.org/">Spring</a> which we use in many of our other projects. Further more XAP provides a simple integration with the <a href="http://www.mulesoft.org">MULE</a> ESB which we are using to bridge heterogeneous platforms and environments.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Open source Java caching vendor M&amp;A]]></title>
<link>http://saviorodrigues.wordpress.com/2009/08/19/open-source-java-caching-vendor-ma/</link>
<pubDate>Thu, 20 Aug 2009 03:45:10 +0000</pubDate>
<dc:creator>Savio Rodrigues</dc:creator>
<guid>http://saviorodrigues.wordpress.com/2009/08/19/open-source-java-caching-vendor-ma/</guid>
<description><![CDATA[Terracotta, an open source Java caching vendor, announced it has acquired EHCache earlier this week.]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Terracotta, an open source Java caching vendor, announced it has acquired EHCache earlier this week.  This is interesting for two reasons.  No, it&#8217;s not because I thought EHCache was a Canadian company because of the &#8220;Eh&#8221; in their name.</p>
<p>EHCache provides an alternative approach to Java caching than Terracotta&#8217;s approach.  While Terracotta&#8217;s approach can be at the JVM layer without application changes, the EHCache approach requires the application be modified with caching in mind.  Terracotta founder and CTO, Ari Zilka, <a href="http://blog.terracottatech.com/2009/08/terracotta_and_ehcache_a_marri.html" target="_blank">explains the benefits of the combined company</a>:</p>
<blockquote><p>&#8220;Terracotta&#8217;s interface in more than 50% of use cases has been EHCache. Basically, developers design applications to use EHCache and use Terracotta&#8217;s EHCache clustering module to get massive scale and high availability at runtime.</p>
<p>The two together will provide the most seamless path from 1 node up to 100. Instead of having to worry about which version of EHCache Terracotta supports, or if your EHCache integration will work well with Terracotta, EHCache&#8217;s and Terracotta&#8217;s users alike can rest assured the two will always work in perfect harmony from today forward.&#8221;</p></blockquote>
<p>The second interesting aspect of this acquisition, and not mentioned by Ari, the combined company looks much more attractive to VMware/SpringSource.  IBM WebSphere eXtreme Scale Chief Architect Billy Newport had <a href="http://twitter.com/billynewport/status/3257327262" target="_blank">predicted</a> that VMware would acquire Terracotta after news of the SpringSource acquisition hit the wire.  Billy may be on to something.  Terracotta can offer both an unintrusive caching solution that could be married alongside future JVM work that VMware is sure to do, and also offers a caching API that could find its way into SpringSource products. Smart move on Terracotta&#8217;s part.  Although, to be fair, this acquisition was in the works before the SpringSource acquisition was made public.</p>
<p>Terracotta is positioning the acquisition as a major competitive coup versus the likes of <a href="http://www.oracle.com/technology/products/coherence/index.html" target="_blank">Oracle Coherence</a>, <a href="http://www.gigaspaces.com/" target="_blank">GigaSpaces </a>and <a href="http://www.ibm.com/software/webservers/appserv/extremescale/" target="_blank">WebSphere eXtreme Scale</a>.  Leaders from Oracle Coherence and WebSphere eXtreme Scale had a more measured response:</p>
<p>Oracle Coherence&#8217;s Cameron Purdy <a href="http://www.infoq.com/news/2009/08/terracotta-buys-ehcache#view_46718" target="_blank">commented</a>:</p>
<blockquote><p>&#8220;Competition is good, and Terracotta has a different approach that may prove to help with some needs that had gone unaddressed by products such as our own (Oracle Coherence). Greg&#8217;s got a good track record with ehcache and now he&#8217;s getting paid to do what he loves. While the competitive hyperbole is silly, I nonetheless find it flattering that we (collectively) are building technology and businesses that have gone from niche to central in enterprise software (despite all the competition, our business continues to grow at &#8220;ludicrous speed&#8221;), and I find it even more flattering that companies want to compare to and compete with the product that I work on <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> &#8220;</p></blockquote>
<p>WebSphere eXtreme Scale&#8217;s Billy Newport <a href="http://www.infoq.com/news/2009/08/terracotta-buys-ehcache#view_46765" target="_blank">commented</a>:</p>
<blockquote><p>I agree with Cameron, competition is good and while we&#8217;ve (from an IBM WebSphere eXtreme Scale point of view) previously only seen Terracotta on small setups (2 nodes or so), I&#8217;m sure the new capabilities (static striping etc) and that it fits into EHCache which has a lot of prewritten adapters in open source software will mean we see more of him <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   It&#8217;s all good for growing the market and increasing customer awareness. &#8220;</p></blockquote>
<p>As Cameron and Bill point out, the acquisition is definitely goodness for customer awareness and adoption.  To date, the market has been dominated by commercial products.  However, open source vendors such as <a href="http://www.terracotta.org/" target="_blank">Terracotta</a> and <a href="http://www.gridgain.com/index.html" target="_blank">GridGain</a> want to change that.  Interesting times ahead.</p>
<p>Follow me on twitter at: <a href="http://twitter.com/SavioRodrigues" target="_blank">SavioRodrigues</a></p>
<p><em>PS: I <a href="http://www.infoworld.com/d/open-source/disclaimer-explained-672">should </a>state: &#8220;The postings on this site are my own and don&#8217;t necessarily represent IBM&#8217;s positions, strategies or opinions.&#8221;</em></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[A brief overview of EC2 and GigaSpaces]]></title>
<link>http://chrisrod.wordpress.com/2009/08/07/a-brief-overview-of-ec2-and-gigaspaces/</link>
<pubDate>Fri, 07 Aug 2009 13:21:44 +0000</pubDate>
<dc:creator>chrisrod</dc:creator>
<guid>http://chrisrod.wordpress.com/2009/08/07/a-brief-overview-of-ec2-and-gigaspaces/</guid>
<description><![CDATA[Elastic Compute Cloud Elastic Compute Cloud (EC2) is an Amazon’s web service that provides resizable]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><!--[if !mso]&#62;  v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);}  &#60;![endif]--><!--[if gte mso 9]&#62;   Normal  0      false  false  false                     MicrosoftInternetExplorer4  &#60;![endif]--><!--[if gte mso 9]&#62;   &#60;![endif]--></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-size:14pt;">Elastic Compute Cloud</span></strong></p>
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="text-align:justify;"><strong>Elastic Compute Cloud (<span class="caps">EC2</span>)</strong> is an Amazon’s web service that provides <strong>resizable compute capacity</strong> in a cloud. One of the main characteristics of EC2, and at the same time one of its great advantage, is that it was designed to make <strong>web-scale computing easier</strong> for developers.</p>
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="text-align:justify;">Amazon <span class="caps">EC2</span>’s simple web service interface allows to obtain and configure capacity with minimal friction. It provides as well a complete control of the computing resources and lets run on an Amazon’s computing environment.</p>
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="text-align:justify;">Between the advantages that one can find using EC2, we could mention the reduction of time required to obtain and boot new server instances to minutes, allowing a quickly scale capacity, both up and down, as the change<span> </span>of computing requirements. Other advantages are the possibility to count with a diversity of Operating Systems, the possibility of run on multiple locations or utilize static IP endpoints.</p>
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="text-align:justify;">To use EC2, it is necessary to sign up to the Amazon’s web page, and with this, get the two keys to use the web service; on of them is the <strong>Access Key ID</strong>, and the other one is the <strong>Secret Access Key</strong>, that can be generated as many times as one desire, depending on the security requirements that one has.<span> </span>With these two keys it is possible to access to all the web service’s facilities, depending on the type of account created.</p>
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="text-align:justify;">To see EC2 in action, first it is needed to create an Amazon Machine Image (AMI) that will contain the application, libraries and the configuration settings. It is also possible to use one of the image templates to achieve the same objective, and one can do this using a firefox extension called “<strong>ElasticFox</strong>”, that can be download clicking on the next link: <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609">http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609</a>, once it is installed, you will see a GUI like the one is showed on the figure 01; once this extension is launched in firefox, it is possible to create the AMI, using the keys obtained on the Amazon web page, as it was explained on the previous paragraph. A really helpful tutorial to create a simple AMI can be found on the next link: <a href="http://www.youtube.com/watch?v=9QKnORsJKt4&#38;annotation_id=annotation_297897&#38;feature=iv">http://www.youtube.com/watch?v=9QKnORsJKt4&#38;annotation_id=annotation_297897&#38;feature=iv</a>, that explains how to create an Amazon account, the installation of the ElasticFox extension, and finally the creation and test of the new AMI. Once the AMI is created, the next step is to upload the web application to the Amazon Simple Storage Service (S3); between the tools used to accomplish this task, there is a firefox extension that can be smoothly installed on it, that is called “<strong>S3 Fox</strong>”, this extension can be downloaded clicking on the next link: <a href="https://addons.mozilla.org/en-US/firefox/addon/3247">https://addons.mozilla.org/en-US/firefox/addon/3247</a>. Finally, it is possible to configure the security and network access, with the <strong>ElasticFox</strong> tool.</p>
<p class="MsoNormal" style="text-align:center;" align="justify"><!--[if !mso]&#62;  v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);}  &#60;![endif]--><!--[if gte mso 9]&#62;   Normal  0      false  false  false                     MicrosoftInternetExplorer4  &#60;![endif]--><!--[if gte mso 9]&#62;   &#60;![endif]--> <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 90.0pt 72.0pt 90.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --> <!--[if gte mso 10]&#62;  /* Style Definitions */ table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;}  &#60;![endif]--><strong><span style="font-size:12pt;font-family:&#34;"><!--[if gte vml 1]&#62;                                &#60;![endif]--><!--[if !vml]--></span><span style="font-size:11pt;"><br />
<img style="max-width:800px;" src="http://chrisrod.files.wordpress.com/2009/08/11.jpg" alt="" /></span></strong></p>
<p class="MsoNormal" style="text-align:center;" align="justify"><strong><span style="font-size:11pt;">Figure 01. The ElasticFox extension</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong> </strong></p>
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-size:14pt;">GigaSpaces XAP<span> </span></span></strong></p>
<p class="MsoNormal" style="text-align:justify;">
<p style="text-align:justify;"><strong>GigaSpaces XAP (eXtreme Application Platform)</strong> is a <strong>scale-out application server</strong>. Among the advantages that one can find working with GigaSpaces, we can mention:</p>
<p style="margin-left:36pt;text-align:justify;text-indent:-18pt;"><!--[if !supportLists]--><span>-<span style="font-family:&#34;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span><!--[endif]-->High-throughput</p>
<p style="margin-left:36pt;text-align:justify;text-indent:-18pt;"><!--[if !supportLists]--><span>-<span style="font-family:&#34;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span><!--[endif]-->Low-latency</p>
<p style="margin-left:36pt;text-align:justify;text-indent:-18pt;"><!--[if !supportLists]--><span>-<span style="font-family:&#34;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span><!--[endif]--><strong>Scalability</strong></p>
<p style="text-align:justify;">and these advantages give the possibility to use GigaSpaces to build the next generation class of applications.</p>
<p style="text-align:justify;">It can be said that a usual Web-Application that stores its data within the IMDG (In-Memory Data Grid) would basically have the next machines:</p>
<p class="MsoNormal" style="margin-left:36pt;text-align:justify;text-indent:-18pt;"><!--[if !supportLists]--><span>-<span style="font-family:&#34;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span><!--[endif]-->GSM Machine</p>
<p class="MsoNormal" style="margin-left:36pt;text-align:justify;text-indent:-18pt;"><!--[if !supportLists]--><span>-<span style="font-family:&#34;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span><!--[endif]-->Load-Balancer Machine</p>
<p class="MsoNormal" style="margin-left:36pt;text-align:justify;text-indent:-18pt;"><!--[if !supportLists]--><span>-<span style="font-family:&#34;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span><!--[endif]-->Database and Mirror Machines</p>
<p class="MsoNormal" style="margin-left:36pt;text-align:justify;text-indent:-18pt;"><!--[if !supportLists]--><span>-<span style="font-family:&#34;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span><!--[endif]-->GSC Machines – Running Web Application, IMDG and Services</p>
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="margin-left:18pt;text-align:center;" align="center"><strong><span style="font-size:11pt;"><img style="max-width:800px;" src="http://chrisrod.files.wordpress.com/2009/08/2.jpg" alt="" /><br />
</span></strong></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:center;" align="center"><strong><span style="font-size:11pt;">Figura 02. A basic Web Application running on a cloud.</span></strong></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;">
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;">As can be seen in the last figure, the whole cloud is composed for many machines that can be created very easily editing a XML file and uploading it, with the aid of the <strong>GigaSpaces Cloud Console</strong> that can be found at the GigaSpaces web page (<a href="http://www.gigaspaces.com/mycloud">http://www.gigaspaces.com/mycloud</a>), this console has many tools to create and manage all the clouds that one needs or have already been deployed. Comparing this tool, with the one that creates an Amazon’s AMI using the <strong>ElasticFirefox</strong>, this console is specially oriented to the creation and management of <strong>GigaSpaces </strong>clouds.</p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;">
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;">About the XML file that has to be edited for the creation of all the machines that one needs in a cloud, a basic template can be checked on the lines below this paragraph.</p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;">
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><em>&#60;cloud-config&#62;</em></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><em>&#60;cloud-name&#62;my-data-grid&#60;/cloud-name&#62;</em></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><em>&#60;license&#62;</em></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><em><span style="font-size:8pt;">Nov 16, 2009~CloudTestUser@bPS8NOufjXOuPNSYMWPO#PREMIUM^7.0XAPPremium%UNBOUND+UNLIMITED</span></em></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><em>&#60;/license&#62;</em></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><em>&#60;gigaspaces-build-location&#62;</em></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><em>gigaspacesversions/gigaspaces-xap-premium-7.0.0-m9-b3496-87.zip</em></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><em>&#60;/gigaspaces-build-location&#62;</em></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><em>&#60;ami-id&#62;ami-91db3cf8&#60;/ami-id&#62;</em></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><em><span style="background:yellow none repeat scroll 0 0;">&#60;machines&#62;</span></em></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><em><span style="background:yellow none repeat scroll 0 0;">&#60;!&#8211; Insert here &#8211;&#62;</span></em></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><em><span style="background:yellow none repeat scroll 0 0;">&#60;/machines&#62;</span></em></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><em>&#60;start-ui&#62;admin-application&#60;/start-ui&#62;</em></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><em>&#60;/cloud-config&#62; <span> </span></em></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><em> </em></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;">
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;">Between the “<strong>machine</strong>” tags one can create all the machines required for the Web Application; referring to the example of the figure 02, the XML file can be downloaded from the next link: <a href="http://cloud.gigaspaces.com/cloudtools/session-resources/demo/files/petclinic-mysql-example.xml">http://cloud.gigaspaces.com/cloudtools/session-resources/demo/files/petclinic-mysql-example.xml</a> <span> </span></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;">
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;">To upload this file, and by this way create the required machines, follow the next procedure:</p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;">
<p class="MsoNormal" style="margin-left:36pt;text-align:justify;text-indent:-18pt;"><!--[if !supportLists]--><span>01.<span style="font-family:&#34;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span><!--[endif]-->Log into the <strong>Cloud Console</strong> using your GigaSpaces and Amazon Web Service (AWS) <strong>keys</strong> on this web page: <a href="http://www.gigaspaces.com/mycloud">http://www.gigaspaces.com/mycloud</a></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;">
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><!--[if gte vml 1]&#62;  &#60;![endif]--><!--[if !vml]--><br />
<!--[endif]--></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:center;" align="center"><strong><span style="font-size:11pt;"><img style="max-width:800px;" src="http://chrisrod.files.wordpress.com/2009/08/3.jpg" alt="" /><br />
</span></strong></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:center;" align="center"><strong><span style="font-size:11pt;">Figure 03. Log into the Cloud Console</span></strong></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;">
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;">
<p class="MsoNormal" style="margin-left:36pt;text-align:justify;text-indent:-18pt;"><!--[if !supportLists]--><span>02.<span style="font-family:&#34;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span><!--[endif]-->Upload the XML file that has all the information of the machines to be used in the cloud,<span> </span>filling the “<strong>Deployment Descriptor</strong>” field and clicking in the button “<strong>Deploy</strong>”</p>
<p class="MsoNormal" style="margin-left:36pt;text-align:justify;text-indent:-18pt;">
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><!--[if gte vml 1]&#62;  &#60;![endif]--><!--[if !vml]--><br />
<!--[endif]--></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:center;" align="center"><strong><span style="font-size:11pt;"><img style="max-width:800px;" src="http://chrisrod.files.wordpress.com/2009/08/4.jpg" alt="" /><br />
</span></strong></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:center;" align="center"><strong><span style="font-size:11pt;">Figure 04. Deploying the machines with the Cloud Console</span></strong>.</p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;">
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="text-align:justify;">Now to upload the Web Application to the Amazon’s S3, an easy way to do this task is using the “<strong>S3Fox</strong>” extension, following the next procedure:</p>
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="margin-left:36pt;text-align:justify;text-indent:-18pt;"><!--[if !supportLists]--><span>01.<span style="font-family:&#34;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span><!--[endif]-->Start the <strong>S3Fox</strong> extension signing up with the Amazon’s Access Keys.</p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;">
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><!--[if gte vml 1]&#62;  &#60;![endif]--><!--[if !vml]--><br />
<!--[endif]--></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:center;" align="center"><strong><span style="font-size:11pt;"><img style="max-width:800px;" src="http://chrisrod.files.wordpress.com/2009/08/5.jpg" alt="" /><br />
</span></strong></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:center;" align="center"><strong><span style="font-size:11pt;">Figure 05. Signing up to the S3 through the S3Fox</span></strong></p>
<p class="MsoNormal" style="margin-left:18pt;text-align:justify;"><strong><span style="font-size:11pt;"> </span></strong></p>
<p class="MsoNormal" style="margin-left:36pt;text-align:justify;text-indent:-18pt;"><!--[if !supportLists]--><span>02.<span style="font-family:&#34;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span><!--[endif]-->Create a test folder at the root level of the S3 account by clicking the button at the right side panel.</p>
<p class="MsoNormal" style="margin-left:36pt;text-align:justify;text-indent:-18pt;"><!--[if !supportLists]--><span>03.<span style="font-family:&#34;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;"> </span></span><!--[endif]-->Upload all the necessary files from the left side of the panel to the right side that, by the way, corresponds to the S3.</p>
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="text-align:justify;">Finally for testing the web application, observe the link next to the “<strong>Load_Balancer</strong>” field in the <strong>Cloud Console</strong> and click on it, the application that you upload on the S3 should be displayed on the web browser.</p>
<p class="MsoNormal" style="text-align:justify;"><!--[if gte vml 1]&#62;  &#60;![endif]--><!--[if !vml]--><!--[endif]--></p>
<p class="MsoNormal" style="text-align:center;" align="center"><strong><span style="font-size:11pt;"><img style="max-width:800px;" src="http://chrisrod.files.wordpress.com/2009/08/6.jpg" alt="" /><br />
</span></strong></p>
<p class="MsoNormal" style="text-align:center;" align="center"><strong><span style="font-size:11pt;">Figure 06. Checking the Web Application deployed in the S3.</span></strong></p>
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-size:16pt;">Conclusions</span></strong></p>
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="text-align:justify;">After reviewing the documentation found in the internet about GigaSpaces, I think that is a technology very promising for the future developments of applications that will need to be reliable and at the same time very flexible.</p>
<p class="MsoNormal" style="text-align:justify;">
<p class="MsoNormal" style="text-align:justify;">Talking about the service given by Amazon EC2, I think that the price they offer to have a cloud deployed on its servers is very reasonable, knowing that taking care of a Data Center needs people specialized on its maintenance and management.</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=e27b6736-6f74-8e19-b899-ec1fb729b5a7" alt="" /></div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GigaSpaces Releases XAP 7.0 for Deploying and Scaling Apps]]></title>
<link>http://petrocomputing.wordpress.com/2009/07/15/gigaspaces-releases-xap-7-0-for-deploying-and-scaling-apps/</link>
<pubDate>Tue, 14 Jul 2009 20:32:13 +0000</pubDate>
<dc:creator>petrocomputing</dc:creator>
<guid>http://petrocomputing.wordpress.com/2009/07/15/gigaspaces-releases-xap-7-0-for-deploying-and-scaling-apps/</guid>
<description><![CDATA[GigaSpaces Technologies, provider of application middleware platforms for Java and .NET environments]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>GigaSpaces Technologies, provider of application middleware platforms for Java and .NET environments, announced the launch of eXtreme Application Platform (XAP) 7.0, an enterprise-grade application server for deploying and scaling distributed applications. XAP 7.0 is the only product that provides all middleware functions for the entire application stack within a single platform.</p>
<p>&#8220;XAP 7.0 is based on a unique architecture designed to manage the most complex environments as experienced by our Fortune 100 customers,” said GigaSpaces CTO Nati Shalom. “With this new release, scalability is made so transparent and easy that organizations can leverage existing skill sets and historic investments to develop highly scalable applications that can meet fluctuating, unpredictable demand, with guaranteed performance and no downtime.&#8221;</p>
<p>GigaSpaces XAP 7.0 enables organizations to do more with less while meeting and exceeding the most demanding business requirements. XAP is the only product that offers all of the following:</p>
<ul>
<li>Single Platform – One middleware platform provides data, messaging, processing, high availability and deployment, resulting in reduced complexity, no middleware integration, and fewer license fees.</li>
<li>High Performance – Proven in mission-critical applications with the highest throughputs, largest data volumes and millisecond-level latency.</li>
<li>Scalable On Demand – Unlimited, linear scalability with predictable consumption of resources, performing real-time capacity planning by re-assigning unutilized resources to applications experiencing high loads.</li>
<li>Always On – Eliminates unplanned downtime under extreme, unpredictable load by reacting to loads in real time and automatically provisioning more resources to meet service levels.</li>
<li>Open – Minimizes vendor lock-in by supporting major open frameworks and standards, providing native support for Java, .NET and C++, and running on any existing infrastructure and public and private cloud environments.</li>
</ul>
<p>“Extreme transaction processing is making its way into mainstream adoption because of the exponential growth of Web-based transactions, even within the ‘traditional’ business environment,” said Massimo Pezzini, VP and Fellow at Gartner. “Companies are seeking tools to help them cost-effectively manage variability between times of high and low demand; therefore, they are considering technologies that support both in-house and cloud-based processing.”</p>
<p>Additional enhancements include:</p>
<ul>
<li>40X faster data access for extreme speed;</li>
<li>Increased utilization of multi-core machines by up to 300%;</li>
<li>Revamped Management Center GUI for improved development productivity;</li>
<li>Administration API for fine-grained control of the entire deployment environment from within applications;</li>
<li>Simpler APIs for writing easily maintainable code;</li>
<li>Improved packaging for effortless deployment of Web applications;</li>
<li>Updated security model; and</li>
<li>Improved logging and troubleshooting for product robustness.</li>
</ul>
<p>Now, potential clients can evaluate XAP online, observing real enterprise applications running within a production-ready environment, without having to download the actual software.</p>
<p align="right"><a href="http://www.gigaspaces.com/">www.gigaspaces.com</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[PMP or SBA?]]></title>
<link>http://aminsblog.wordpress.com/2009/02/05/pmp-or-sba/</link>
<pubDate>Thu, 05 Feb 2009 20:58:37 +0000</pubDate>
<dc:creator>abbaspour</dc:creator>
<guid>http://aminsblog.wordpress.com/2009/02/05/pmp-or-sba/</guid>
<description><![CDATA[I feel myself at the junction of &#8220;Pure Message Passing&#8221; and &#8220;Space Based Architect]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I feel myself at the junction of &#8220;Pure Message Passing&#8221; and &#8220;Space Based Architecture&#8221;! which one is more suitable for developing high-throughput systems?</p>
<p>The first solution pure-message-passing  (where i feel myself quite a habitat) comes from the world of functional actor based systems well developed in Erlang and followed by its successors in Scala, Kilim or even JUC. Its side effect free nature makes it a perfect choice for highly concurrent, multi core domains but enforces its own programming model using messaging boxes and actors.</p>
<p>The second one, SBA (where i have applied for residency) comes from tuple spaces. a simple but strong paradigm first developed in Linda and followed by its worthy successor javaspaces and successfully used in domains such as orbitz and gigaspaces xap. Its share-take nature makes it a perfect choice for caching and in memory solution but again enforces its model to some extend which is well documented in xap&#8217;s PU.</p>
<p>These two model, although seem quite obverse in first sight, but share a lot in nature. they both introduce the separation of data and processor in an even driven paradigm. Even driven nature of these two models make both very strong for suitable todays complex and high demanding nature. and yes, both have their own mathematically proven theory behind.</p>
<p>Now the question comes in mind, which will be superior or will the both remain as competitor? maybe SBA since dummies don&#8217;t enjoy immutables? or maybe they collide into one single computational model? mixing quantum physics and relativity?  cloud-computing? anyone?</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Any Independent Benchmark of IMDG Solutions? (Coherence, Terracotta, WXS, Gigaspaces)]]></title>
<link>http://aminsblog.wordpress.com/2008/11/24/any-independent-benchmark-of-imdg-solutions-coherence-terracotta-wxs-gigaspaces/</link>
<pubDate>Mon, 24 Nov 2008 14:13:59 +0000</pubDate>
<dc:creator>abbaspour</dc:creator>
<guid>http://aminsblog.wordpress.com/2008/11/24/any-independent-benchmark-of-imdg-solutions-coherence-terracotta-wxs-gigaspaces/</guid>
<description><![CDATA[It&#8217;s hard to believe that Terracotta with its great simplicity is in fact 10x times faster tha]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>It&#8217;s hard to believe that Terracotta with its great simplicity is in fact <a href="http://www.terracotta.org/web/display/orgsite/Terracotta+10x+Faster+Than+Oracle">10x times faster than Oracle Coherence</a>?! Idea&#8217;s matter but after all Oracle is a multibillion company and Terracotta Tech is much smaller!</p>
<p>The point is, most of these benchmarks are from their vendors and obviously in this way it&#8217;s easy to find and obtain test which outperform in the specific cases.</p>
<p>What I am eager to here is this domain, is a vendor independent benchmark, not those from Oracle, IBM or Terracotta themselves! Do you know any?!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Microsoft's Windows Azure: Computing on Clouds]]></title>
<link>http://vikaskhera.wordpress.com/2008/11/11/microsofts-windows-azure-computing-on-clouds/</link>
<pubDate>Tue, 11 Nov 2008 05:43:01 +0000</pubDate>
<dc:creator>Vikas Khera</dc:creator>
<guid>http://vikaskhera.wordpress.com/2008/11/11/microsofts-windows-azure-computing-on-clouds/</guid>
<description><![CDATA[Identity platform with the new hosted services Microsoft has announced a new version of Windows that]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><div id="attachment_533" class="wp-caption alignnone" style="width: 449px"><a href="http://vikaskhera.files.wordpress.com/2008/11/mwa3.jpg"><img class="size-full wp-image-533" title="Identity platform with the new hosted services" src="http://vikaskhera.wordpress.com/files/2008/11/mwa3.jpg" alt="Identity platform with the new hosted services" width="439" height="293" /></a><p class="wp-caption-text">Identity platform with the new hosted services</p></div>
<p>Microsoft has announced a new version of Windows that will run over the Internet from data centers hosted by Microsoft. Called Windows Azure, the idea is that developers will write software that runs within the &#8220;clouds&#8221; as opposed to the traditional approach of residing within servers owned and managed of a given business. The official word came at the start of Microsoft&#8217;s Professional Developer Conference 2008 this week. It is not known how Microsoft will charge for Azure at this point, but it will be free during the preview period. Azure would allow software developers to create new applications that can be operated on the Internet rather than on the developers’ computers.</p>
<div id="attachment_531" class="wp-caption alignnone" style="width: 410px"><a href="http://vikaskhera.files.wordpress.com/2008/11/mwa1.jpg"><img class="size-full wp-image-531" title="Azure Services Platform " src="http://vikaskhera.wordpress.com/files/2008/11/mwa1.jpg" alt="Azure Services Platform " width="400" height="222" /></a><p class="wp-caption-text">Azure Services Platform </p></div>
<p>Microsoft will use the Azure platform to run its own web applications and will also open the platform to outside developers for building and running their own apps. Azure will compete with other cloud platforms, such as Amazon Web Services, Google App Engine, and Salesforce.com&#8217;s force.com, and, given Microsoft&#8217;s enormous scale and influence in the software industry, its launch marks a milestone in the history of utility computing. The cloud is now firmly in the mainstream. Or, as Microsoft puts it: &#8220;The truth is evident: Cloud computing is here.&#8221;</p>
<div id="attachment_532" class="wp-caption alignnone" style="width: 449px"><a href="http://vikaskhera.files.wordpress.com/2008/11/mwa2.jpg"><img class="size-full wp-image-532" title="Microsoft's Cloud Computing " src="http://vikaskhera.wordpress.com/files/2008/11/mwa2.jpg" alt="Microsoft's Cloud Computing " width="439" height="293" /></a><p class="wp-caption-text">Microsofts Cloud Computing</p></div>
<p>The announcements come at the start of Microsoft’s Professional Developer Conference here. On Tuesday, Microsoft plans to go into more detail on Windows 7, the successor to Windows Vista, due out by about January 2010.</p>
<p>Cloud Computing Technology Providers and Contributors in 2008-2009 The following companies are among the providers and contributors of Cloud Computing technology, 10Gen, 3Leaf, 3Tera, Absolute Performance, Accenture, Akamai, Amazon.com, Appirio, Appistry, Areti Internet, Boomi, Box.net, Canaan Partners, Cloud9 Analytics, CloudWorks, CNI Systems, CohesiveFT, CSRware, DataDirect, Dell, DNAmail, eBay, Elastra, EMC, EngineYard, Enki Consulting, Enomaly, Excelian, Flexiscale, Fortress ITX, Forum, GigaSpaces, GoGrid, Google, HP, IBM, IBRIX, Joyent, JumpBox, Layered Technologies, Level 3 Communications, Linxter, LongJump, MDV, Microsoft, Moka5 (MokaFive), Mosso, NewServers, Nirvanix, Ocarina Networks, OpSource, Panorama Software, Peer1 Networks, Pervasive Software, Platform Computing, PLX Technology, Qlayer, Rackspace, RampRate, Red Hat, RightScale, rPath, Salesforce.com, Saugatuck Technology, ServePath, Skills Matter, Skytap, SnapLogic, SOASTA, Sun Microsystems, Symphoniq, Symphony Services, Tap In Systems, Teneros, Terremark, Transitive Corporation, Univa UD, Verizon Business, Vertica, VMware, XCalibre, Zabovo.com, ZOHO and  Zuora.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Waiting to see if App Engine or an alternative gets there first]]></title>
<link>http://codecrafter.wordpress.com/2008/10/22/wait-on-gae-or-alternatives/</link>
<pubDate>Wed, 22 Oct 2008 23:47:10 +0000</pubDate>
<dc:creator>Josh Heitzman</dc:creator>
<guid>http://codecrafter.wordpress.com/2008/10/22/wait-on-gae-or-alternatives/</guid>
<description><![CDATA[After tracking down numerous alternatives to Google App Engine after hitting a wall on Project Fango]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>After tracking down numerous <a href="http://codecrafter.wordpress.com/2008/10/17/alternatives-to-app-engine/">alternatives to Google App Engine</a> after hitting a wall on Project Fangorn, I looked at the most promising alternatives in more depth.  Here is what I found.</p>
<p><strong>GigaSpaces<br />
</strong></p>
<p>Using <a href="http://www.gigaspaces.com/xap">GigaSpaces XAP</a> would mean&#8211;at a minimum&#8211;creating Python bindings to their C++ API and re-writing my data model.  Actually running on their EC2 value added service costs a significant premium over what Amazon EC2 costs.  While they do offer XAP free to startups, in that case then you have to operate your own servers and the list of alternatives in that space is quite large.  I also couldn&#8217;t find any statements by GigaSpaces that indicated that you could have no instances running and have one spun up if a web request comes in, so it looks like at least one small instance would have to be running constantly putting the minimum cost at over $200 a month to use their EC2 service.</p>
<p><strong>10gen<br />
</strong></p>
<p>Using <a href="http://www.10gen.com/">10gen</a> would currently mean a total rewrite as it currently supports Jython rather then Python and the <a href="http://wiki.python.org/jython/PylonsOnJython">effort</a> to get Pylons working on Jython is not yet complete.  Once that effort is complete 10gen becomes more promising as then I should only need to rewrite my datamodel and I might not even need to do that at some point as the 10gen folks have indicated they are willing to take on the <a href="http://www.10gen.com/blog/2008/10/on-portability">portability issue</a>.  In their alpha stage, they are providing free hosting with quotas and their <a href="http://www.10gen.com/wiki/FAQ.Product">FAQ</a> states &#8220;but will be competitive with <a href="http://googleappengine.blogspot.com/2008/05/announcing-open-signups-expected.html">other offerings</a>, and with a very low minimum bill size&#8221;.</p>
<p>For those using Django rather then Pylons 10gen is working on putting the DJango data model on top of their API.</p>
<p><strong>Amazon EC2 &#38; SimpleDB</strong></p>
<p>Running Python is no problem on EC2, nor is accessing SimpleDB since it is accessed via a REST API.  So after rewriting my datamodel I would get the joy of managing my own instances and a minimum bill of over $70 a month.  I could add third party instance management for an increase in my monthly minimum to over $100 a month.</p>
<p><span style="text-decoration:underline;"><em>UPDATE 10/23/2008</em></span>:  Amazon has announced a private beta for their own monitoring, load balancing, and automatic scaling service offering.  No mention of price and it seems likely to be simply included with EC2 service.</p>
<p><strong>Now waiting&#8230;<br />
</strong></p>
<p>to see who gets there first.  Will it be:</p>
<ul>
<li>Google by raising their mcycle soft cap, excluding the mcycle consumption of puts from the calculation, or reducing the mcycle consumption of puts?</li>
<li>GigaSpaces by lowering their EC2 premium, allowing an app to go offline until a web request comes in, and providing Python bindings?</li>
<li>10gen indirectly with the help of those working on getting Pylons working on Jython (or directly by providing the DJango data model for those using Django)?</li>
<li>Someone else?</li>
</ul>
<p><strong>If they all take too long?</strong></p>
<p>Then there are numerous options and a few of them follow.</p>
<p>The one that might involve the least changes to my existing code could be continuing and expanding the work of this <a href="http://github.com/jchris/portable-google-app-engine-sdk/tree/master">project</a> to make the GAE SDK portable.  While doing this work would also help other GAE refugees to just change providers without changing code I don&#8217;t feel a great need to tie myself to the GAE  API/object model.</p>
<p>An interesting project is <a href="http://www.terracotta.org/">Terracotta</a> which uses Aspect Orient Programming to distribute existing multi-threaded Java apps.  It could be possible to reuse everything in the project except for the part doing the aspecting, which would need to be rewritten to Python.  Such an effort could potentially be combined with the work of continuing and expanding the work of making the GAE SDK portable.</p>
<p>Another interesting project is <a href="http://openssi.org">OpenSSI</a>, which  basically does the reverse of what is of virtualization.  Rather then allowing multiple virtual machines to run on one physical machine, OpenSSI allows multiple physical machines (and virtual machines to I&#8217;d imagine) to be treated as one machine from the perspective of a virtual process (and thus from the developer&#8217;s perspective).  You still have to deal sychronization just like writing a multi-threaded process as well as inter-process communication between different virtual processes, but you don&#8217;t have to deal with writing distribution code.  This may not be a great thing to use for Python because of its global interpreter lock.  When I started getting into Python a couple of years ago I made the decision to multiprocess rather then multithread because of the GIL.  This has a couple of advantages anyway.  One being robustness and the other being just a step away from being a networked distributed app.  If something could be developed to allow the use of Terracotta with Python, then its likely the same could be done to make take advantage of OpenSSI as well.</p>
<p>The <a href="http://codespeak.net/pypy/dist/pypy/doc/home.html">PyPy</a> project could be useful in combining Terracotta or OpenSSI with Python since its goal is to let you create a custom interpretor for Python.</p>
<p>Another interesting project is <a href="http://hadoop.apache.org/">Hadoop</a> which is a distributed filesystem and its derivative HBase which is a distributed database.</p>
<p><a href="http://www.mems-exchange.org/software/durus/">Durus</a> could be a starting point for distributed transactional memory in Python.  I say starting point as it&#8217;s home page states &#8220;Durus is best suited to collections of less than a million instances with relatively stable state&#8221; so clearly it doesn&#8217;t scale as is.</p>
<p>This Wikipedia <a href="http://en.wikipedia.org/wiki/Software_transactional_memory">entry</a> also lists numerous other software transactional memory implementations although most are not distributed but OpenSSI could be utilized to provide that.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Alternatives to Google App Engine]]></title>
<link>http://codecrafter.wordpress.com/2008/10/17/alternatives-to-app-engine/</link>
<pubDate>Fri, 17 Oct 2008 22:43:04 +0000</pubDate>
<dc:creator>Josh Heitzman</dc:creator>
<guid>http://codecrafter.wordpress.com/2008/10/17/alternatives-to-app-engine/</guid>
<description><![CDATA[As I hit a wall in my development of Project Fangorn on Google&#8217;s App Engine platform I started]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>As I hit a <a href="http://codecrafter.wordpress.com/2008/10/16/app-engine-not-up-to-the-task/">wall</a> in my development of Project Fangorn on Google&#8217;s App Engine platform I started looking around for alternative platforms.  While there are numerous providers that claim to provide a cloud very few of them actually have a distributed datastore and a hosting environment that automatically expands and contracts (i.e. scale) the resources allocated to the running of your app, so the service they provide is either utility computing somewhere in between utility computing and cloud computing.</p>
<p><strong>True Clouds</strong></p>
<p>There is Google App Engine of course, but they aren&#8217;t currently up to what I&#8217;m trying to do.</p>
<p>Amazon has SimpleDB plus their Elastic Compute Cloud (EC2).  While EC2 requires you to manage virtual machines, there are a number of third party providers of VM managers for EC2 that fluff up EC2 into more of a cloud.  Two of these providers are <a href="http://www.enomaly.com">Enomaly</a> (general VM scaling) and <a href="http://heroku.com">Heroku</a> (rails specific scaling).</p>
<p><em>UPDATE 10/23/2008</em>:  Amazon has announced a private beta for their own monitoring, load balancing, and automatic scaling service offering.  No mention of price and it seems likely to be simply included with EC2 service.</p>
<p>One particularly interesting EC2 third party provider is GigaSpaces with their <a href="http://www.gigaspaces.com/xap">XAP</a> platform that provides in memory transactions backed up to a database.  The in memory transactions appear to scale linearly across machines thus providing a distributed in-memory datastore that gets backed up to persistent storage.  A lot of the docs reference Java, but the page returned by the aforementioned link states &#8220;&#8230;deploy applications that use Java, .Net, C++, or even scripting languages&#8230;&#8221; so after a cursory investigation it is not clear what aspects of their platform is only accessible via Java and which aspectes are generally accessible.  Bears more investigation.</p>
<p><a href="http://www.10gen.com/">10gen</a> has a service in alpha preview that has a distributed datastore called Mongo and a hosting environment called Bable that automatically scales the resources hosting your app to fit current demand.  Like Google 10gen doesn&#8217;t provide VMs that you can run just anything on.  Currently apps can be written in server side JavaScript, Python, and Ruby (Update 10/21/2008 &#8211; it is only Jython and JRuby that are supported), so they are ahead of Google with respect the number of languages supported.</p>
<p><strong>Cloud Processing but Utility Storage<br />
</strong></p>
<p>The combination of Amazon&#8217;s S3, EC2, and third party auto-scaling VM managers falls into this category.</p>
<p><a href="http://www.flexiscale.com">FlexiScale</a> and <a href="http://www.mosso.com">Mosso</a> both look to provide services similar to Amazon&#8217;s combination of EC2 with third party auto-scaling VM managers and Simple Storage Service (S3), as they make not claims to to have a distributed datastore, but just a SAN/NAS that can be accessed from the VMs.</p>
<p><strong>Just Utility Computing</strong></p>
<p>The combination of Amazon&#8217;s S3 and bare EC2 (i.e. no third party VM managers) falls into this category.</p>
<p><a href="http://gogrid.com">GoGrid</a> has persistent storage that backups your server image, but it appears to be limited to just backups and doesn&#8217;t appear to be a persistent datastore.</p>
<p><a href="http://www.appnexus.com">AppNexus</a>, <a href="http://www.joyent.com">Joyent</a>, and Sun&#8217;s <a href="https://www.projectcaroline.net">Project Caroline</a> all look to provide services similar to Amazon&#8217;s combination of bare EC2 and Simple Storage Service (S3).</p>
<p><strong>Future offerings<br />
</strong></p>
<p>Sun also has <a href="http://www.network.com/">Network.com</a> but that site doesn&#8217;t say much beyond &#8220;Network.com is in transition&#8230;&#8221; which isn&#8217;t very informative.</p>
<p>Microsoft is supposed to be announcing something in this space at <a href="http://www.microsoftpdc.com/">PDC</a> at the end of this month.  From what I remember (can&#8217;t find the article now) it will provide a .Net only hosting environment but I don&#8217;t recall if there was going to be any kind of distributed datastore or just MS SQL Server.  I came across mention of an MSFT project to distribute SQL Server so I would guess there will not be a distributed datastore at this time.</p>
<p>3Tera is working on turning their AppLogic grid computing product into a <a href="http://www.3tera.com/Cloud-computing/">cloud computing</a> service offering but it doesn&#8217;t appear that a preview is available yet and remains to be seen if it will really be cloud computing or just another utility computing provider.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Inside the Cloud: 9 Sectors to Watch]]></title>
<link>http://gigaom.com/2008/07/20/9-cloud-computingsectors-to-watch/</link>
<pubDate>Sun, 20 Jul 2008 13:00:57 +0000</pubDate>
<dc:creator>Alistair Croll</dc:creator>
<guid>http://gigaom.com/2008/07/20/9-cloud-computingsectors-to-watch/</guid>
<description><![CDATA[There&#8217;s already a ton of activity taking place in the cloud computing space, so much so that i]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>There&#8217;s already a ton of activity taking place in the cloud computing space, so much so that it can be hard to know who to watch. In many cases, it&#8217;s too early to pick winners. But there are distinct sectors of the IT industry that are particularly well suited to the on-demand, pay-as-you-go economics of cloud computing. Here are eight segments &#8212; and one company that&#8217;s a segment all its own &#8212; that we&#8217;re tracking closely. <iframe src='http://digg.com/api/diggthis.php?u=http%3A%2F%2Fdigg.com%2Fsoftware%2FInside_the_Cloud_9_Sectors_to_Watch' height='82' width='55' frameborder='0' scrolling='no' style='float: right; margin-left: 10px; margin-bottom: 5px; padding: 4px 0 2px 4px; background: #fff;'></iframe></p>
<p><strong>Hosting companies that make the jump:</strong> When it comes to reliable managed hosting, <a href="http://www.rackspace.com" target="_blank">Rackspace</a> leads the pack. (Its VMware-based Mosso offering may appeal more to enterprises trying the cloud for the first time.) Clouds like XCalibre&#8217;s <a href="http://www.flexiscale.com/" target="_blank">Flexiscale</a> and <a href="http://www.joyent.com" target="_blank">Joyent</a> are already there, but don&#8217;t have Rackspace&#8217;s installed base.</p>
<p><!--more--><strong>Stack-specific clouds: </strong>While Google and Amazon get the headlines, <strong><a href="http://www.engineyard.com" target="_blank">Engine Yard</a> </strong>is heavily involved in the Ruby on Rails development community. Competitor <a href="http://www.heroku.com" target="_blank">Heroku</a> is also Rails-focused, but relies on Amazon for its hosting platform.</p>
<p><strong>Tools to wrangle virtual machines: </strong>To manage your EC2 machines, you&#8217;re going to need help. <strong><a href="http://www.rightscale.com" target="_blank">RightScale</a> </strong>makes software for managing machines in the cloud; its tight focus on Amazon has made it an early favorite. <a href="http://www.elastra.com" target="_blank">Elastra</a>, <a href="http://www.enomalism.com/features/" target="_blank">Enomalism</a> and others have similar solutions.</p>
<p><strong>Testing sandboxes: </strong>For many enterprises, a testing sandbox is the perfect way to start using on-demand infrastructure. <span style="text-decoration: line-through;"><strong><a href="http://www.cohesiveft.com">CohesiveFT&#8217;s</a></strong> </span><a href="http://www.skytap.com/">Skytap</a><strong> </strong><span style="text-decoration: line-through;">(a sister to Flexiscale)</span> spins up testing machines in a cloud, but incumbent <a href="http://www.surgient.com" target="_blank">Surgient</a> and recent entrant <a href="http://www.stacksafe.com" target="_blank">StackSafe</a> aren&#8217;t far behind. And once you&#8217;ve tested a machine and seen that it works, why not leave it in the cloud?</p>
<p><strong>Cloud-based development platforms:</strong> Companies like <a href="http://www.rollbase.com" target="_blank">Rollbase</a> and <a href="http://www.coghead.com" target="_blank">Coghead</a> let non-developers build data-driven applications of any sort (as opposed to more specialized platforms like those of <a href="http://www.salesforce.com" target="_blank">Salesforce</a> and <a href="http://www.ning.com" target="_blank">Ning</a>.) But Intuit&#8217;s <a href="http://www.quickbase.com" target="_blank"><strong>Quickbase</strong></a>, which <a href="http://quickbase.intuit.com/blog/2008/04/17/quickbase-developer-program-we-announce-our-new-platform-as-a-service-paas-in-beta-today/" target="_blank">now has access to Quickbooks</a> data, has a head start: Millions of small businesses. Is this how SMB gets cloud?</p>
<p><strong>Scaling frameworks: </strong>Wall Street needed fast, reliable applications that grew easily. Instead of adding more, bigger servers, they used <strong><a href="http://www.gigaspaces.com" target="_blank">Gigaspaces</a> </strong>to bundle whole server clusters into discrete &#8220;processing units&#8221; that can be cloned to add capacity. In addition to being faster and scaling better, these units don&#8217;t care whether they&#8217;re in a private data center or a cloud.</p>
<p><strong>Application delivery networks:</strong> What has tens of thousands of servers worldwide, a global network connecting them, and isn&#8217;t Google? <a href="http://www.akamai.com" target="_blank"><strong>Akamai</strong></a>. What was once a way of getting bits to far-flung corners of the Net is an often-overlooked cloud: Akamai has been able to run code at the edge <a href="http://www.akamai.com/html/about/press/releases/2000/press_101800b.html" target="_blank">since 2000</a>. Its 2007 acquisition of <a href="http://www.akamai.com/html/about/press/releases/2007/press_020507.html" target="_blank">Netli</a> made it matter to enterprises even more. Akamai can weather heavy load and may be able to withstand attacks better than centralized clouds.</p>
<p><strong>Cloud builders:</strong> <strong><a href="http://www.3tera.com" target="_blank">3Tera</a> </strong>lets companies get into the cloud business. Enterprises can make in-house clouds on existing data centers; or service providerscan build their own cloud offeringsin the way <a href="http://www.enkiconsulting.net/landing-pages/grid.html" target="_blank">Enki</a> and others have. In 3Tera&#8217;s model, subscribers drag and drop the firewalls, servers and appliances they need. The company&#8217;s software then maps these virtual application stacks to servers and network segments. The results are impressive: On seeing 3Tera for the first time, ESM guru <a href="http://www.johnmwillis.com/ibm/demystifying-clouds/" target="_blank">John Willis</a> was so impressed he insisted on logging in to the icons on his screen to verify that it wasn&#8217;t just a demo.</p>
<p><strong>The obvious one:</strong> Of the three big virtualization firms, only one (<a href="http://www.microsoft.com" target="_blank"><strong>Microsoft</strong></a>) also has millions of desktops, <a href="http://www.microsoft.com/presspass/press/2008/feb08/02-11acquisition.mspx" target="_blank">two</a> handset platforms, licensing for desktops, servers and applications, <a href="https://www.mesh.com/Welcome/Welcome.aspx">synchronization</a>, and a huge online presence. Up until now, the Redmond giant has been treading carefully; it has to convert billions of dollars of shrink-wrap sales to on-demand revenue streams. But Microsoft&#8217;s going to be a huge player in the cloud.</p>
<p>For more insights into cloud computing trends, check out the recent <a href="http://briefings.gigaom.com" target="_blank">GigaOM/Bitcurrent briefing</a> on cloud computing that was launched at Structure 08.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Structure 08 Conference a Big Success ]]></title>
<link>http://bigmarketingsmallbusiness.com/2008/06/30/structure-08-conference-a-big-success/</link>
<pubDate>Mon, 30 Jun 2008 16:38:29 +0000</pubDate>
<dc:creator>Rajan Sodhi</dc:creator>
<guid>http://bigmarketingsmallbusiness.com/2008/06/30/structure-08-conference-a-big-success/</guid>
<description><![CDATA[I was invited by Techvibes to write a blog post about the first ever Structure 08 conference hosted ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><img class="alignright size-medium wp-image-426" src="http://bigmarketing.wordpress.com/files/2008/06/peer1_sponsor_sign.jpg?w=200" alt="PEER 1 headline sponsor of Structure 08" width="200" height="299" />I was invited by <a title="Techvibes" href="http://www.techvibes.com/blog/structure-08-sheds-light-on-cloud-computing/" target="_blank">Techvibes</a> to write a blog post about the first ever <a title="Structure 08" href="http://events.gigaom.com/structure/08/" target="_blank"><strong>Structure 08 conference</strong></a> hosted by <a title="GigaOM" href="http://gigaom.com/" target="_blank">GigaOM</a>, which I attended and my company <a title="PEER 1" href="http://ww.peer1.com" target="_blank">PEER 1</a> sponsored. It was held on June 25th in San Francisco at the Mission Bay Conference Center:</p>
<blockquote><p>Just got back from the Structure 08 conference hosted by GigaOM and headline sponsored by my company, Vancouver-based PEER 1. The sold out event was a tremendous success with over 600 people in attendance representing companies like Google, Facebook, Microsoft, and VMWare. A third of the conference room was allocated to media alone.</p>
<p>Making the decision to sponsor Structure 08 was an easy one. It is so rare to have a room full of the brightest minds discussing and debating the latest technology impacting IT infrastructure. “Cloud Computing” was by far the topic of the day, a buzz term that seems to encompass anything related to virtualization or on-demand scalable web hosting, which is sometimes, well, cloudy.</p>
<p>The line up of speakers included Jonathan Yarmis of AMR Research, Mendel Rosenblum of VMWare, and a heated discussion that included panelists from Google, AT&#38;T, GigaSpaces, Mosso, Joyent, and XCalibre. <a title="Cloud Computing" href="http://www.techvibes.com/blog/structure-08-sheds-light-on-cloud-computing/" target="_blank">Read more</a></p></blockquote>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[STRUCTURE 08: Working the Cloud Panel]]></title>
<link>http://gigaom.com/2008/06/25/structure-08-working-the-cloud-panel/</link>
<pubDate>Wed, 25 Jun 2008 17:00:13 +0000</pubDate>
<dc:creator>Katie Fehrenbacher</dc:creator>
<guid>http://gigaom.com/2008/06/25/structure-08-working-the-cloud-panel/</guid>
<description><![CDATA[Oooh, our first panel of the morning, Working the Clouds: NextGen Infrastructure for New Entrepreneu]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Oooh, our first panel of the morning, <em>Working the Clouds: NextGen Infrastructure for New Entrepreneurs</em>. We&#8217;ve got a six-person lineup to give us their perspectives, and our own Alistair Croll to throw them questions. The lineup includes:</p>
<ul>
<li>Christophe Bisciglia, Senior Software Engineer with Google</li>
<li>Jason Hoffman, Founder, CTO of Joyent</li>
<li>Tony Lucas, CEO of XCalibre Communications</li>
<li>Lew Moorman, SVP of Strategy and Corp Dev, Rackspace</li>
<li>Geva Perry, CMO of GigaSpaces</li>
<li>Joe Weinman, VP of Strategic Solutions at AT&#38;T</li>
</ul>
<p><a href="http://gigaom.wordpress.com/files/2008/06/s08nextgen.jpg"><img class="alignnone size-medium wp-image-13933" title="s08nextgen" src="http://gigaom.wordpress.com/files/2008/06/s08nextgen.jpg?w=300" alt="Structure 08 NextGen panel: AT&#38;T, GigaSpaces, Rackspace, XCalibre, Joyent, Google, GigaOM" width="300" height="161" /></a></p>
<p>Here are some notes:</p>
<p><strong>Alistair:</strong> When we are moving to clouds, are we selling our souls? Should we be happy with our cloud overlords?</p>
<p><strong>AT&#38;T Joe:</strong> I have a prediction that is not surprising. There will be a proprietary stack and there will be an open business model based on the cloud that will leverage standards, commodization, price-compression, and differential vs dynamic pricing.</p>
<p><strong>GigaSpace&#8217;s Geva:</strong> There&#8217;s room for both models. People are talking about specialized clouds.</p>
<p><!--more--><br />
<strong>Joyent&#8217;s Jason</strong>: The question is is it about selling your soul. You can&#8217;t leave. Until Google open sources Big Table . . .</p>
<p><strong>Alistair:</strong> Fluffy clouds was coined here at Structure 08 (chuckles).</p>
<p><strong>XCalibre&#8217;s Tony:</strong> Google&#8217;s Big Table is basically a lock in.</p>
<p><strong>Google&#8217;s Christophe:</strong> I claim that Google is possibly a little bit ahead as far as Big Table. But people can build a better mouse trap and come in and compete. It&#8217;s a developer preview, but the theory is that the API is open and not locked down.</p>
<p><strong>Joyent&#8217;s Jason:</strong> There&#8217;s been a lot published on what an open, loving cloud should do. We should give people real assurances that the cloud is a good place to be.</p>
<p><strong>Google&#8217;s Christophe:</strong> When we publish something on Big Table it is not to say that it&#8217;s a lock-in, but it&#8217;s our attempt to say that this is something that worked for us.</p>
<p><strong>XCalibre&#8217;s Tony:</strong> Why not open Big Table completely if you know better than everyone else?</p>
<p><strong>Google&#8217;s Christophe:</strong> Big Table is a compromise that is scalable. There&#8217;s nothing about the API that says you have to do this with Big Table.</p>
<p><strong>XCalibre&#8217;s Tony:</strong> One of the big problems that companies need to figure out is licensing.</p>
<p><strong>AT&#38;T Joe:</strong> The dirty secret of the cloud is that companies need to figure out the licensing models, or it will be forced to fold. The whole idea will drop dead of its own weight.</p>
<p><strong>Alistair:</strong> There are two theories: put everything in the cloud and put more out at the edge. What&#8217;s the setup for Google?</p>
<p><strong>Christophe&#8217;s Google:</strong> We have geographically distributed clusters. A lot of services are replicated. We want to make sure that if you trust us with your email, the most current copy might be in a datacenter closer to you.</p>
<p><strong>AT&#38;T Joe:</strong> &#8220;Architecture 3.0.&#8221; We don&#8217;t have all the nuts and bolts that will work it out. But an optimal mix of edge and keeping core information in the data center.</p>
<p><strong>Alistair:</strong> Can we have our old toys? Can we put all our toys in the cloud environment?</p>
<p><strong>Joyent&#8217;s Jason:</strong> Absolutely. If we want people to be on the cloud, we have to make sure that this occurs.</p>
<p><strong>Geva&#8217;s GigaSpaces:</strong> Or make it look like our old toys. Use all of the APIs.</p>
<p><strong>Christophe&#8217;s Google:</strong> It&#8217;s important to find a compromise. When we deal with enterprise we can&#8217;t tell them to move into the cloud and do it differently. But five years from now its important for people to build apps that can serve millions of users — then people have to think about building apps differently. We need to provide tools for people to build apps for the cloud.</p>
<p><strong>Geva&#8217;s GigaSpaces:</strong> Vogel said earlier all you need is a credit card, but that&#8217;s not what big corporations want. They want help with services.</p>
<p><strong>Lew&#8217;s Rackspace:</strong> There&#8217;s also a big problem with marketing — cloud means something new everyday.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[On Clouds, the Sun and the Moon]]></title>
<link>http://gigaom.com/2008/06/21/on-clouds-the-sun-and-the-moon/</link>
<pubDate>Sat, 21 Jun 2008 19:00:05 +0000</pubDate>
<dc:creator>Guest Column</dc:creator>
<guid>http://gigaom.com/2008/06/21/on-clouds-the-sun-and-the-moon/</guid>
<description><![CDATA[The main value proposition of cloud computing is better economics, that it&#8217;s cheaper to rent h]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>The main value proposition of cloud computing is better economics, that it&#8217;s cheaper to rent hardware, software platforms and applications (via a per-usage  or subscription model) than it is to buy, build and maintain them in the corporate data center. But if we expect that cloud computing is here to stay –- and not just a passing fad –- it must be feasible for the cloud providers themselves. So how do they do it?</p>
<p>They do it by leverage <a href="http://en.wikipedia.org/wiki/Economies_of_scale">economies of scale</a>. Put simply, the idea is that one very large organization can more efficiently build and operate its infrastructure than many small firms can on their own. To better understand this, let&#8217;s break down some of the financial advantages leveraged in cloud computing: <!--more--></p>
<p><strong>Specialization: </strong>Specialization is also known as division of labor, a term coined by the father of modern economics, Adam Smith. A company for whom running a large-scale data center is a core part of its business will do so much more cost-effectively than a company for whom it&#8217;s merely one aspect. The former will hire the best experts in the world, and will have the management attention required to continuously innovate, optimize and improve operations. And the overhead costs associated with doing so will spread thinly across massive usage. Case in point: Since it needed to use hundreds of thousands of servers, it was worthwhile for <a href="http://blogs.zdnet.com/Ou/?p=268">Google to build its own, homegrown devices</a> to fit its exact power supply and fault-tolerance needs.</p>
<p>Although in software, anyone can build anything with enough people, time and money (as my old boss used to say, “It’s all ones and zeros”), it makes no sense for individual companies to develop capabilities such as dynamic provisioning, linear scalability and in-memory data partitioning when they&#8217;re readily available from off-the-shelf products.</p>
<p><strong>Purchasing Power:</strong> Large organizations buy in bulk, which they can leverage to negotiate lower prices. So presumably the cloud provider can acquire lower-costing servers and networks, operating systems and virtualization software. Furthermore, they can negotiate better interest rates, insurance premiums and other contracts.</p>
<p><strong>Utilization:</strong> This is perhaps the most important one and what I like to call the Kindergarten Principle, or “sharing is good.”  In computing, tremendous savings can be achieved by having multiple companies share the same IT infrastructure.</p>
<p>Experts estimate average data center utilization rates range from 15 percent to 20 percent. If you include the processing, memory and storage capacity available on company-owned laptops and desktops as well, utilization rates may be as low as 5 percent. That’s a lot of waste. Imagine if this were the case in the hospitality industry. In most cases, a hotel with even 50 percent average occupancy rates would quickly go out of business.</p>
<p>So why is this happening with corporate IT?</p>
<p>Application loads are volatile; they experience peaks and troughs based on time of day, day of the week or month, seasons and so on. To avoid hitting the &#8220;scalability wall,&#8221; companies need to overprovision. So if a company expects a certain daily peak volume (for example, the opening of the trading day for an e-trading application), it will provision enough hardware so that utilization rates at the peak reach no more than 70 percent (leaving some room for unexpected loads – hey, <a href="http://gigaom.com/2008/06/09/the-new-iphone-is-apptastic/">Steve Jobs may announce the next iPhone today</a>). But at other times utilization rates could go as low as 10 percent, with the average somewhere in between.</p>
<p>So the difference between peak loads and average loads drives overprovisioning and a high rate of unused computing capacity. But if we aggregate the activities of several companies, we will not face such volatility in application loads. Let’s see why.</p>
<p><strong>Follow the Sun:</strong> In many cases, peaks and troughs in application volumes can largely be attributed to the time of day. Human-facing applications are active during daytime and face very low activity during the night. When New York experiences the opening bell trading spike, London is in the midday lull and Tokyo is going to bed. Same goes for e-commerce sites, social networking sites, gaming sites and others, though these types of applications might experience peaks after business hours as well.</p>
<p>If companies around the globe and in different industries share the same resources on the cloud, higher utilization rates will be achieved by the cloud provider, lowering its costs – savings that it can turn around and pass on to its customers. This model of shared resources even addresses the need to overprovision for unexpected peaks, as it is unlikely that all the cloud users, in all geographical regions and all industries will face peaks at the same time. This is similar to the notion of a bank not having all of the cash reserves necessary to handle the cash commitments to all customers at the same time (is there an equivalent to a bank run in cloud computing?).</p>
<p><strong>Follow the Moon:</strong> And with so much focus on energy costs, data center power consumption and cooling (not to mention the environment), there&#8217;s also a cloud computing approach known as <a href="http://raoulteeuwen.blogspot.com/2008/05/being-greener-by-following-moon.html">Follow the Moon</a>. It posits that a cloud provider with physical data centers in several different geographical locations can run the applications that are active from the day side of the world in centers on the night side of the world, taking advantage of lower power and cooling costs.</p>
<p>Cloud computing, therefore, is an economically feasible strategy. Over time, the cost savings will be too compelling for all but the very largest companies to ignore.</p>
<p><em><a href="http://gevaperry.typepad.com/">Geva Perry</a> is the chief marketing officer of <a href="http://www.gigaspaces.com/">GigaSpaces</a> </em></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Cache-aside, write-behind, magic and why it sucks being an Oracle customer]]></title>
<link>http://stnor.wordpress.com/2008/05/25/cache-aside-write-behind-magic/</link>
<pubDate>Sun, 25 May 2008 04:00:00 +0000</pubDate>
<dc:creator>stnor</dc:creator>
<guid>http://stnor.wordpress.com/2008/05/25/cache-aside-write-behind-magic/</guid>
<description><![CDATA[I&#8217;ve been looking at a few different technologies to improve the scalability of one of our app]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I&#8217;ve been looking at a few different technologies to improve the scalability of one of our applications. We&#8217;re scaling pretty ok to be honest, considering that we currently have a traditional database centric solution. The cost for scaling an database bound application running Oracle is crazy to say the least considering they charge <strong>$47 500 </strong><strong>per two x86 cores</strong> for Oracle Enterprise Edition. On top of this it&#8217;s 22% for software updates and support per year. As this wasn&#8217;t enough, they also increase the support cost with 4% per year.</p>
<p>You might think that the price above is for production environments, but in fact you have to pay for every single installation throughout the organization. There are no discounts for staging, DR, test or development environments.</p>
<p><em>I have a piece of advice for all you kids out there considering to run Oracle &#8211; just don&#8217;t do it.</em></p>
<p>This advice goes for all Oracle products really, as they all have the same pricing model.</p>
<h4>Databases are overrated</h4>
<p>My strong recommendation is to build an application that doesn&#8217;t <em>rely</em> on an underlying RDBMS. The relational database is an overrated, overly complex form of persistent store. They are slow, and are also usually a single point of failure. Does this mean that databases are dead and a thing from the past? No, but the role of the database will probably change going forward. In my opinion we should use the RDBMS as a System of Record that is mostly up to date.</p>
<p>If you ask me, databases are great at mainly two things:</p>
<ol>
<li>They make the data accessible for other systems in a standard way and</li>
<li>They have a strong query language that many people know</li>
</ol>
<p>So, write to databases asynchronously and use it for reporting and extracting data. Store the data in a data grid in the application tier (where it&#8217;s used).</p>
<h4>What is a Data Grid?</h4>
<p>A <em>Data Grid</em> is a horizontally scalable in-memory data management solution. Data grids try to eliminate data source contention by scaling out data management with commodity hardware.</p>
<p>Some underlying philosophies of data grids &#8211; according to Oracle (sic!):</p>
<ul>
<li>Keep data in the application tier (where it’s used)</li>
<li>Disks are slow and databases are evil</li>
<li>Data Grids will solve your application scalability and performance problems</li>
</ul>
<p>I have been looking at three different data grid vendors; Oracle Coherence, Gigaspaces EDG/XAP and Terracotta DSO.</p>
<h5>Oracle Coherence</h5>
<p>I really like this product. It focuses solely on being a potent data grid, with abilities to do act as a compute grid as well. Although I haven&#8217;t used Coherence for any large projects, its design and concepts are easy to relate to. It supports JTA transactions and consists of a single jar that you drop into your class path. The Coherence configuration doesn&#8217;t contain any infrastructural descriptions which means that you can use the same configuration on a your development laptop as in the production environment with multiple servers. The main issue with Coherence is the fact that evil Oracle owns it since a few years back.</p>
<h5>Gigaspaces XAP</h5>
<p>Gigaspaces mission seem to be to provide a very scalable application server with XAP &#8211; <em>&#8220;The Scale-Out Application Server&#8221;</em>. The EDG &#8211; enterprise data grid &#8211; packaging seem to provide about the same feature set as Coherence. The main difference to me, is the fact that the Gigaspaces offerings are both application server infrastructure that needs configuration, deployments and all of that. As I see things, the main drawback is the application server approach &#8211; it feels overwhelming. On the other hand, Gigaspaces is still a smaller company and eager to do business and provide great implementation support and the product seems to be a really good application server.</p>
<h5>Terracotta DSO</h5>
<p>Terracotta has a different approach. They provide Networked Attached Memory for the Java heap. If you can write a thread-safe program, you can scale out using Terracotta with no or minor changes to your application. From a technical point of view it&#8217;s a beautiful solution: You declare what objects you want to make available using Terracotta, and then Terracotta will makes your data persistent (if you want) and available on all clustered nodes. When you invoke new() on a clustered object, you will get a reference to the cluster object (if one exists). Another important difference between Terracotta and the others is that they only send the part of an object that&#8217;s been changed rather than the full serialized object graph.</p>
<p>I&#8217;m in love with this product. Its free and open source too and Terracotta Inc provides commercial support. The main concern I have with Terracotta is that its really a paradigm shift to the average java enterprise developer to start to write multi-threaded programs without having JTA transactions. Another concern is the magic &#8211; the low-level hooks they do in the JVM:s. At the time of writing, only Sun and IBM JVM:s are supported. It runs fine on OSX though.</p>
<h4>The bottom line</h4>
<p>So which one is the better? Well, that depends on a lot of things as always. If you decide to move to the grid it&#8217;s going to require retraining of your developers regardless of what solution you go for.</p>
<p>Please do keep in mind that products doesn&#8217;t usually solve your problems. And that you can go a long way using a less expensive RDBMS by partitioning the data across multiple servers &#8211; sharding. This is what a lot of large sites out there do.</p>
<p>Further reading:<br />
<a title="The Coming of the Shard" href="http://highscalability.com/unorthodox-approach-database-design-coming-shard">The Coming of the Shard</a><br />
<a title="eBay's Architectural Principles" href="http://www.infoq.com/presentations/shoup-ebay-architectural-principles">eBay&#8217;s Architectural Principles</a><br />
<a title="Oracle Coherence" href="http://www.oracle.com/technology/products/coherence/">Oracle Coherence</a><br />
<a title="Gigaspaces EDG" href="http://www.gigaspaces.com/edg">Gigaspaces EDG</a><br />
<a title="Terracotta" href="http://www.terracotta.org/">Terracotta DSO</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[How Cloud &amp; Utility Computing Are Different]]></title>
<link>http://gigaom.com/2008/02/28/how-cloud-utility-computing-are-different/</link>
<pubDate>Fri, 29 Feb 2008 00:42:11 +0000</pubDate>
<dc:creator>Guest Column</dc:creator>
<guid>http://gigaom.com/2008/02/28/how-cloud-utility-computing-are-different/</guid>
<description><![CDATA[Written by Geva Perry, chief marketing officer at GigaSpace Technologies. We are witnessing a seismi]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><i>Written by <a href="http://gevaperry.typepad.com/">Geva Perry</a>, chief marketing officer at <a href="http://www.gigaspaces.com/">GigaSpace Technologies</a>.</i></p>
<p>We are witnessing a seismic shift in information technology &#8212; the kind that comes around every decade or so. It is so massive that it affects not only business models, but the underlying architecture of how we develop, deploy, run and deliver applications. This shift has given a new relevance to ideas such as cloud computing and utility computing. Not surprisingly, these two different ideas are often lumped together. <!--more--></p>
<p align="center"><b>What is Utility Computing?</b></p>
<p>While utility computing often requires a cloud-like infrastructure, its focus is on the business model on which providing the computing services are based. Simply put, a utility computing service is one in which customers receive computing resources from a service provider (hardware and/or software) and “pay by the drink,” much as you do for your electric service at home – an analogy that <a href="http://www.roughtype.com/">Nicholas Carr</a> discusses extensively in <a href="http://gigaom.com/2008/01/11/the-big-switch-is-a-good-thing/">&#8220;The Big Switch</a>.&#8221;</p>
<p><!--more--><br />
Amazon Web Services (AWS), despite a <a href="http://gigaom.com/2008/02/15/amazon-s3-service-goes-down/">recent outage</a>, is the current poster child for this model as it provides a variety of services, among them the Elastic Compute Cloud (EC2), in which customers pay for compute resources by the hour, and Simple Storage Service (S3), for which customers pay based on storage capacity. Other utility services include Sun’s Network.com, EMC’s recently launched storage cloud service, and those offered by startups such as <a href="http://gigaom.com/2007/11/12/free-facebook-app-hosting/">Joyent</a> and <a href="http://gigaom.com/2008/02/19/mosso-hosting-cloud-computing/">Mosso</a>.</p>
<p>The main benefit of utility computing is better economics. Corporate data centers are notoriously underutilized, with resources such as servers often idle 85 percent of the time. This is due to overprovisioning &#8212; buying more hardware than is needed on average in order to handle peaks (such as the opening of the Wall Street trading day or the holiday shopping season), to handle expected future loads and to prepare for unanticipated surges in demand. Utility computing allows companies to only pay for the computing resources they need, when they need them.</p>
<p align="center"><b>What is Cloud Computing?</b></p>
<p>Cloud computing is a broader concept than utility computing and relates to the underlying architecture in which the services are designed. It may be applied equally to utility services and internal corporate data centers, as George Gilder reported in a story for Wired Magazine titled <a href="http://www.wired.com/wired/archive/14.10/cloudware.html?pg=1&#38;topic=cloudware&#38;topic_set=">The Information Factories</a>. Wall Street firms have been implementing internal clouds for years. They call it “grid computing,” but the concepts are the same.</p>
<p>Although it is difficult to come up with a precise and comprehensive definition of cloud computing, at the heart of it is the idea that applications run somewhere on the “cloud” (whether an internal corporate network or the public Internet) – we don’t know or care where. But as end users, that’s not big news: We&#8217;ve been using web applications for years without any concern as to where the applications actually run.</p>
<p>The big news is for application developers and IT operations.  Done right, cloud computing allows them to develop, deploy and run applications that can easily grow capacity (scalability), work fast (performance), and never &#8212; or at least rarely &#8212; fail (reliability), all without any concern as to the nature and location of the underlying infrastructure.</p>
<p>Taken to the next step, this implies that cloud computing infrastructures, and specifically their middleware and application platforms, should ideally have these characteristics:</p>
<ul>
<li><i>Self-healing</i>: In case of failure, there will be a hot backup instance of the application ready to take over without disruption (known as failover). It also means that when I set a policy that says everything should always have a backup, when such a fail occurs and my backup becomes the primary, the system launches a new backup, maintaining my reliability policies.</li>
<li><i>SLA-driven</i>: The system is dynamically managed by service-level agreements that define policies such as how quickly responses to requests need to be delivered. If the system is experiencing peaks in load, it will create additional instances of the application on more servers in order to comply with the committed service levels &#8212; even at the expense of a low-priority application.</li>
<li><i>Multi-tenancy</i>: The system is built in a way that allows several customers to share infrastructure, without the customers being aware of it and without compromising the privacy and security of each customer’s data.</li>
<li><i>Service-oriented</i>: The system allows composing applications out of discrete services that are loosely coupled (independent of each other). Changes to or failure of one service will not disrupt other services. It also means I can re-use services.</li>
<li><i>Virtualized</i>: Applications are decoupled from the underlying hardware. Multiple applications can run on one computer (virtualization a la VMWare) or multiple computers can be used to run one application (grid computing).</li>
<li><i>Linearly Scalable</i>: Perhaps the biggest challenge. The system will be predictable and efficient in growing the application. If one server can process 1,000 transactions per second, two servers should be able to process 2,000 transactions per second, and so forth.</li>
<li><i>Data, Data, Data</i>: The key to many of these aspects is management of the data: its distribution, partitioning, security and synchronization. New technologies, such as Amazon&#8217;s <a href="http://gigaom.com/2007/12/14/amazon-simple-db/">SimpleDB</a>, are part of the answer, not large-scale relational databases. And don’t let the name fool you. As my colleague <a href="http://natishalom.typepad.com/nati_shaloms_blog/2007/12/amazon-simpledb.html">Nati Shalom rightfully proclaims, SimpleDB</a> is not really a database. Another approach that is gaining momentum is <a href="http://natishalom.typepad.com/nati_shaloms_blog/2007/10/bringing-data-a.html">in-memory data grids</a>.</li>
</ul>
<p>One thing is certain: The way the industry has traditionally built software applications just won’t cut it on the cloud. That&#8217;s why companies such as Google, Amazon and eBay have developed their own infrastructure software, opting not to rely on products from the large middleware vendors such as Oracle and BEA, who designed them with a very different approach in mind.</p>
<p>For this reason, we are seeing the emergence of a new generation of application platform vendors. These vendors, which include my own company, <a href="http://www.gigaspaces.com/">GigaSpaces</a>, are building software platforms made for the cloud from the ground up: “cloudware,” if you will.</p>
<p>So although they are often lumped together, the differences between utility computing and cloud computing are crucial. Utility computing relates to the business model in which application infrastructure resources &#8212;  hardware and/or software &#8212; are delivered. While cloud computing relates to the way we design, build, deploy and run applications that operate in an a virtualized environment, sharing resources and boasting the ability to dynamically grow, shrink and self-heal.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[DITA and wiki - w/ho/w will (we/you) write]]></title>
<link>http://annegentle.wordpress.com/2007/08/14/dita-and-wiki-whow-will-weyou-write/</link>
<pubDate>Wed, 15 Aug 2007 03:05:02 +0000</pubDate>
<dc:creator>annegentle</dc:creator>
<guid>http://annegentle.wordpress.com/2007/08/14/dita-and-wiki-whow-will-weyou-write/</guid>
<description><![CDATA[I received an excellent question from a reader about his eagerness to use wikis for his product]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I received an excellent question from a reader about his eagerness to use wikis for his product&#8217;s doc set, but he came across conflicts and issues when he questioned the practicality of maintaining a wiki for his large set of documentation. Here&#8217;s Paul&#8217;s well-phrased request for information.</p>
<p><em>I am considering using a wiki for documentation projects, but have been coming across some showstopper issues. Here is the story:</em></p>
<p><em>Our documentation set is large. We only want to maintain one set of files. Therefore, any changes in the wiki would need to be automatically synched with the source files.</em></p>
<p><em>The obvious suggestion is &#8220;just make the wiki your source files.&#8221; However, it is not as simple as that, for a few reasons.</em></p>
<ul>
<li><em>First of all, we need to generate attractive offline documentation in online help format, viewable across several operating systems. No wiki enables an elegant way of doing that.</em></li>
<li><em>Secondly, we have a bunch of conditional text&#8211;our existing documentation comes in six different versions. I have not found a good way to integrate the different conditional tags into a wiki, while maintaining it in both our sources and the offline output files.</em></li>
<li><em>Finally, wikis almost by nature do not support DITA. Wikis are designed to be simple and easy to understand. However, that approach negates many of the advantages of structured writing.</em></li>
</ul>
<p><em> For these reasons, I currently see wikis primarily as a collaboration tool. But they do not have the features necessary for complex technical documentation.</em></p>
<p><em>Do you have ideas for how we could get around these issues?</em></p>
<p>Oddly enough, on this particular day, another reader wrote in about similar issues with wikis, but they have started to overcome them. He listed the issues succinctly, saying:</p>
<p><em>I&#8217;d say that there is quite an art to creating wiki doc from a couple of perspectives:</em></p>
<p><em>* conversion<br />
* building out the infrastructure<br />
* look-and-feel issues<br />
* style issues<br />
* review issues<br />
* basic editing issues</em></p>
<p><em>Even with all these issues &#8212; <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  &#8212; however, the immediateness of the experience, the ease associated with making changes and the creation of links and containers, and the modern look and feel really make wikis a fascinating competitor with other, much different technologies. <strong>How many other industries move off in such opposite directions (wikis vs. dita)? </strong>It&#8217;s sort of like trying to figure out whether cars should run on gas or steam!</em></p>
<p><em>The CEO of Confluence came through a few weeks ago. He was pointing out to the following as an example of a company that had developed wiki doc:</em></p>
<p><a href="http://www.gigaspaces.com/wiki/dashboard.action" target="_blank"><font color="#0000cc"><em>http://www.gigaspaces.com/wiki/dashboard.action</em></font></a></p>
<p><em>Here are two more you might find interesting if you don&#8217;t already know about them:</em></p>
<p><a href="http://docs.codehaus.org/display/GROOVY/Documentation" target="_blank"><font color="#0000cc"><em>http://docs.codehaus.org/display/GROOVY/Documentation</em></font></a></p>
<p><a href="http://www.aptana.com/docs/index.php/Main_Page" target="_blank"><font color="#0000cc"><em>http://www.aptana.com/docs/index.php/Main_Page</em></font></a></p>
<p>And here&#8217;s the part that is amazing to me &#8211; in a follow up email, Paul answered some of his own questions and said that the <a href="http://www.gigaspaces.com/wiki/dashboard.action">gigaspaces.com wiki</a> is one wiki he is investigating further. For example, by talking to one of the writers, he learned that their wiki has 1300 pages, and reuses many pages through the [include] command or transclusion, which is the inclusion of part of a document into another document by reference. My original response to Paul talked about DITA as source files and wiki as an output from those source files. I learned that Robohelp does something like that, with source files and wiki as output, and this <a href="http://muddybranch.thejkgroup.com/2007/02/mediawiki_2_for.html">blog post mentions round-tripping the content back to Robohelp</a>.</p>
<p>Naturally, I have some ideas about DITA and wikis. My post about <a href="http://talk.bmc.com/blogs/blog-gentle/anne-gentle/dita-storm" target="_blank">DITA Storm built into a custom wiki</a> describes a hybrid approach, with DITA files as the source and editable pages. Paul takes that idea one step further, saying that you could have the internal technical writers see a DITA editor interface to the wiki, but have end-users write doc in a simplified editor with fewer tags. I like that idea.</p>
<p>There&#8217;s also the possibility of a transform from DITA to wikitext. A search on the dita-ot-developer list on <a href="http://sourceforge.net/" target="_blank">sourceforge.net</a> revealed that Deborah Pickett was writing such a thing for her employer last April. I emailed her and she generously gave me her XSLT source files, but said that she gave it up when she found that &#8220;The whitespace rules for wikimedia meant that anything fancy would end up being better written in wikimedia&#8217;s pretend HTML format anyway.&#8221; Hm. I haven&#8217;t tried the transform yet myself. Bob Doyle has done a lot of DITA to WikiMedia transformation to pre-seed the ditawiki.org with content, and he says &#8220;The Perl script for conversion to MediaWiki is publicly available at http://www.jtidy.de/conv. It has a major flaw in that it does not convert URLs to hyperlinks.&#8221; Again, I&#8217;d need to try it myself to see whether that approach would work and if the technology scripting is worth the effort.</p>
<p>Now, for everyone pondering wikis and DITA, an absolute must read is this great article by Paul Prescod, <a href="http://www.idealliance.org/proceedings/xtech05/papers/03-02-04/">The Convergence of Structure and Chaos</a>. Not that it offers practical solutions (although he hints at some at the very end), but it maps DITA concepts to wiki concepts.</p>
<p>I&#8217;ve also been noticing that people are trying to automate getting content from their support forums into wikis&#8230; Check out this poor intern&#8217;s daunting task:  <a href="http://ask.metafilter.com/62679/Automated-Media-Wiki-Page-Creation" target="_blank">http://ask.metafilter.com/62679/Automated-Media-Wiki-Page-Creation</a>.</p>
<p>I guess to answer <a href="http://justwriteclick.com/2007/06/26/wiki-research-for-an-article-about-tech-pubs-and-wikis/">my own question about where wikis fit in tech doc</a>, I currently see wikis as supplemental, not source doc from which to make other things. I probably lean towards seeing a wiki is another output from perhaps DITA source. Sure, there would have to be a loopback mechanism to get the contributed parts of a wiki back to the source files, and I&#8217;m not sure how automated that could be. But, I would love it if vendors could convince me otherwise, and frankly, I keep hearing about Confluence and their examples are compelling.</p>
<p>So I share with you these side conversations I&#8217;m having in hopes that the information here helps others in their quest to offer wikis to their end-users. Users, write the manuals. But make sure <a href="http://4jsgroup.blogspot.com/2007/08/should-tech-writers-be-writers.html">us writers get to meet our objectives as well</a>.</p>
<p>As a final departing thought, I share <a href="http://youtube.com/watch?v=NLlGopyXT_g">the machine is us/ing us</a> video, containing the best description of Web 2.0 and new media I&#8217;ve seen to date, created by a cultural anthropologist. It&#8217;s about five minutes long, and a thought provoking piece.</p>
<p>One of the questions in it that stuck in my mind was the question at about 3:00 minutes, &#8220;Who will organize all this data?&#8221; And the typed and re-typed answers after a screencast or demo of del.icio.us:</p>
<p><strong>We will. </strong></p>
<p><strong>You will.</strong></p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
