<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2040226002278485965</id><updated>2011-07-07T18:51:05.662-07:00</updated><category term='Network Attached Memory'/><category term='Mongodb'/><category term='HttpSession'/><category term='In Memory Data Grid'/><category term='distributed cache'/><category term='coherence'/><category term='cluster'/><category term='development'/><category term='wily'/><category term='database offload'/><category term='concurrent hashmap'/><category term='Content Management System'/><category term='Terracotta'/><category term='noSQL Database'/><category term='memcache'/><category term='In Memory Data Base'/><category term='hashmap'/><category term='Distributed Java'/><category term='monitoring application'/><category term='comparison'/><category term='In Memory Database'/><category term='l1'/><category term='tuning'/><category term='High availability'/><category term='ECommerce'/><category term='toplink'/><category term='Quartz'/><category term='Scalability'/><category term='ibatis'/><category term='oscache'/><category term='real-life experiences'/><category term='hibernate'/><category term='l2'/><category term='Distributed Cache Java'/><category term='Publishing'/><category term='java'/><category term='howto'/><category term='Newspapers Online'/><category term='Stack'/><category term='swarmcache'/><category term='Session'/><category term='glassbox'/><category term='TimesTen'/><category term='ehcache'/><category term='Availability'/><category term='Black Friday'/><category term='Terrracotta'/><category term='SoftReference'/><category term='operations'/><category term='testing'/><category term='WeakReference'/><category term='Content Portal'/><title type='text'>Negentropy</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://javamuse.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://javamuse.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Iyer</name><uri>http://www.blogger.com/profile/12680952740383422001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2040226002278485965.post-7795862508089191520</id><published>2011-03-19T20:59:00.000-07:00</published><updated>2011-03-26T16:58:31.953-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='noSQL Database'/><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='Mongodb'/><category scheme='http://www.blogger.com/atom/ns#' term='memcache'/><category scheme='http://www.blogger.com/atom/ns#' term='real-life experiences'/><category scheme='http://www.blogger.com/atom/ns#' term='l2'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed cache'/><category scheme='http://www.blogger.com/atom/ns#' term='Distributed Cache Java'/><category scheme='http://www.blogger.com/atom/ns#' term='coherence'/><category scheme='http://www.blogger.com/atom/ns#' term='l1'/><category scheme='http://www.blogger.com/atom/ns#' term='ehcache'/><title type='text'>noSQL (Document-based) or Distributed Cache  - a Practitioner's tale.</title><content type='html'>As numerous discussions at Shutterfly and on various &lt;a href="http://www.articlesbase.com/software-articles/nosql-and-elastic-caching-in-isis-papyrus-2131261.html"&gt;online posts&lt;/a&gt;  and this &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=61980"&gt;blog&lt;/a&gt; by Greg Luck indicates, there is definitely some interest in the market in terms of understandings where Distributed Cache and NoSQL Movement use-cases intersect and where they don't.&lt;br /&gt;&lt;br /&gt;Of course, both aim to offload the RDBMS strong-hold in the enterprise by either&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Deflection (i.e. minimizing direct access to the RDBMS) - i.e. a proxy to the RDBMS or&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Avoidance (i.e. allowing for some types of data to not be stored in the RDBMS to begin with).&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;PURE-L2 Architecture:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Usage of L1-L2 analogies in distributed-cache literature &lt;/span&gt;&lt;span&gt;stems from &lt;/span&gt;&lt;span&gt;&lt;a href="http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches"&gt;multi-level cache hierarchies described in CPU architectures&lt;/a&gt;&lt;/span&gt;&lt;span&gt; - b&lt;/span&gt;&lt;span&gt;asically the L1 cache is local to your client application process and the L2 is an off-host/off-process &lt;/span&gt;&lt;span&gt;manager of cache-data.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;See this animated GIF -&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-Nk8yVtxtP8k/TYoABmBvcpI/AAAAAAAAADw/CkUtJPhKS5E/s1600/pureL2Examples.gif"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 150px;" src="http://2.bp.blogspot.com/-Nk8yVtxtP8k/TYoABmBvcpI/AAAAAAAAADw/CkUtJPhKS5E/s200/pureL2Examples.gif" alt="" id="BLOGGER_PHOTO_ID_5587278315094241938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As can be seen, whether the off-host process that manages the cache-data is MongoD or MemcacheD or Terracotta-Server, architecturally they all look equivalent - i.e. a pure-L2 with no-L1 - so that all data needs to be retrieved from over the network and then massaged into a POJO for consumption by the application. (FYI - I used these specific technology implementations as proxies for NoSQL and Distributed Cache since I have good familiarity with Mongo (Document Based noSQL), Terracotta-Ehcache and Memcache - given that we use these 3 technologies in our stack at Shutterfly).&lt;br /&gt;&lt;br /&gt;Given the architectural equivalence here and our runtime-observations, one could argue that in a pure-L2 architecture, using No-SQL technologies seems like the way to go (especially if there is a requirement to view the data outside of the confines of the application's Domain Model - e.g MongoDB Shell). Or at least, drop them into the same pool of candidate technologies and map features as they relate to your use-case.&lt;br /&gt;&lt;br /&gt;For us definitely, with Mongo-DB as L2, in certain use cases&lt;br /&gt;- we observed good response times (see attached image)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-v9_juGzwL7k/TYkO5qRARAI/AAAAAAAAADo/Dlsra2J0PXU/s1600/up185_MongoQueryResponse.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 71px;" src="http://2.bp.blogspot.com/-v9_juGzwL7k/TYkO5qRARAI/AAAAAAAAADo/Dlsra2J0PXU/s200/up185_MongoQueryResponse.png" alt="" id="BLOGGER_PHOTO_ID_5587013196490753026" border="0" /&gt;&lt;/a&gt;- we experienced good query expressability&lt;br /&gt;- we could validate data manipulations expected off the application easily from the MongoDB Shell.&lt;br /&gt;&lt;br /&gt;Although there was definitely the domain model/ BSON impedance mismatch to be overcome with Morphia annotations and APIs. For a comparison along some common dimensions, see the table below:&lt;br /&gt;&lt;table border="20" rules="all"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;Dimension&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;MongoD&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;MemcacheD&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;Terracotta Ehcache&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;Retrieval&lt;/td&gt;&lt;td&gt;BSON from MongoD that can be mapped via Morphia into a POJO&lt;/td&gt;&lt;td&gt;Serialized version from MemcacheD - that needs to be de-serialized via Java-Serializaton as a POJO&lt;/td&gt;&lt;td&gt;Object DNA from Terracotta Server - available at the application transparently as an Ehcache-Element.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;Latency (as seen by app)&lt;br /&gt;&lt;/td&gt;&lt;td&gt;1ms - more&lt;/td&gt;&lt;td&gt;1ms - more&lt;/td&gt;&lt;td&gt;1ms - more&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;Horizontal Scaling&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Replica+Sets"&gt;Mongo Replica Sets &lt;/a&gt;(available in open-source)&lt;/td&gt;&lt;td&gt;Multiple MemcacheD (available in open-source)&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.terracotta.org/documentation/3.2.1/product-documentation-17.html"&gt;Terracotta Server Cluster Array&lt;/a&gt; (not Available in open-source, in enterprise-kit&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;High Availability&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Replica+Sets"&gt;Mongo Replica Sets&lt;/a&gt; (available in open-source)&lt;/td&gt;&lt;td&gt;Not a good story - no HA available for MemcacheD (change to MemcacheDB but that has its own costs)&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.terracotta.org/documentation/3.2.1/product-documentation-17.html"&gt;Terracotta Server Cluster Array&lt;/a&gt; (not Available in open-source, in enterprise-kit&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;Query Expressability&lt;/td&gt;&lt;td&gt;Very good - see Mongo &lt;a href="http://www.mongodb.org/display/DOCS/Querying"&gt;Querying&lt;/a&gt; and &lt;a href="http://www.mongodb.org/display/DOCS/Advanced+Queries"&gt;Advanced Querying&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Key-Value lookup only &lt;/td&gt;&lt;td&gt;Key-Value although Ehcache 2.5 and onward now offer some search capability via &lt;a href="http://ehcache.org/documentation/search.html"&gt;searchability API&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Of course, there are use cases where cache access in the order of milli-seconds is a non-starter - you want cache-access in the order of mirco-seconds and hence if Network-hops and Impedance-mismatches can be avoided, you want to avoid them. A cache is about local data - and assuming your application has good locality characteristics, you want to exploit L1 caching and in such a case a L1-L2 architecture offered by some of the distributed cache implementations (Terracotta-Ehcache, Oracle-Coherence) or a bloated L1 architecture (Terracotta-BigMemory) could well be the way to go.&lt;br /&gt;&lt;br /&gt;If you have experiences or comments on MongoDB (or other noSQL) and distributed cache usage comparisons, feel free to share them or comment.&lt;br /&gt;Cheers,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2040226002278485965-7795862508089191520?l=javamuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javamuse.blogspot.com/feeds/7795862508089191520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2040226002278485965&amp;postID=7795862508089191520&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/7795862508089191520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/7795862508089191520'/><link rel='alternate' type='text/html' href='http://javamuse.blogspot.com/2011/03/nosql-document-based-or-distributed.html' title='noSQL (Document-based) or Distributed Cache  - a Practitioner&apos;s tale.'/><author><name>Iyer</name><uri>http://www.blogger.com/profile/12680952740383422001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Nk8yVtxtP8k/TYoABmBvcpI/AAAAAAAAADw/CkUtJPhKS5E/s72-c/pureL2Examples.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2040226002278485965.post-6869155939536674707</id><published>2010-01-28T19:11:00.000-08:00</published><updated>2010-02-02T17:11:25.482-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='noSQL Database'/><category scheme='http://www.blogger.com/atom/ns#' term='In Memory Data Grid'/><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><category scheme='http://www.blogger.com/atom/ns#' term='Distributed Java'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed cache'/><category scheme='http://www.blogger.com/atom/ns#' term='In Memory Database'/><category scheme='http://www.blogger.com/atom/ns#' term='ehcache'/><category scheme='http://www.blogger.com/atom/ns#' term='In Memory Data Base'/><title type='text'>Terracotta - Comparisons with RDBMS/IMDB/ORDBMS/ORM/OODBMS/NoSQLDB</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__0dIuoFtHm0/S2Sy1mNm-6I/AAAAAAAAADI/Gkzb55GZxWI/s1600-h/TCvsDB.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="http://3.bp.blogspot.com/__0dIuoFtHm0/S2Sy1mNm-6I/AAAAAAAAADI/Gkzb55GZxWI/s200/TCvsDB.gif" alt="" id="BLOGGER_PHOTO_ID_5432663684376099746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt; &lt;meta name="ProgId" content="Word.Document"&gt; &lt;meta name="Generator" content="Microsoft Word 2008"&gt; &lt;meta name="Originator" content="Microsoft Word 2008"&gt;  &lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:documentproperties&gt;   &lt;o:template&gt;Normal.dotm&lt;/o:Template&gt;   &lt;o:revision&gt;0&lt;/o:Revision&gt;   &lt;o:totaltime&gt;0&lt;/o:TotalTime&gt;   &lt;o:pages&gt;1&lt;/o:Pages&gt;   &lt;o:words&gt;1193&lt;/o:Words&gt;   &lt;o:characters&gt;6801&lt;/o:Characters&gt;   &lt;o:company&gt;Terracotta&lt;/o:Company&gt;   &lt;o:lines&gt;56&lt;/o:Lines&gt;   &lt;o:paragraphs&gt;13&lt;/o:Paragraphs&gt;   &lt;o:characterswithspaces&gt;8352&lt;/o:CharactersWithSpaces&gt;   &lt;o:version&gt;12.0&lt;/o:Version&gt;  &lt;/o:DocumentProperties&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:allowpng/&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves&gt;false&lt;/w:TrackMoves&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:drawinggridhorizontalspacing&gt;18 pt&lt;/w:DrawingGridHorizontalSpacing&gt;   &lt;w:drawinggridverticalspacing&gt;18 pt&lt;/w:DrawingGridVerticalSpacing&gt;   &lt;w:displayhorizontaldrawinggridevery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;   &lt;w:displayverticaldrawinggridevery&gt;0&lt;/w:DisplayVerticalDrawingGridEvery&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:dontautofitconstrainedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:usefelayout/&gt;   &lt;/w:Compatibility&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="276"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt; &lt;style&gt; &lt;!--  /* Font Definitions */ @font-face 	{font-family:Arial; 	panose-1:2 11 6 4 2 2 2 2 2 4; 	mso-font-charset:0; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 0 0 0 1 0;} @font-face 	{font-family:"Courier New"; 	panose-1:2 7 3 9 2 2 5 2 4 4; 	mso-font-charset:0; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 0 0 0 1 0;} @font-face 	{font-family:Times; 	panose-1:2 0 5 0 0 0 0 0 0 0; 	mso-font-charset:0; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 0 0 0 1 0;} @font-face 	{font-family:Wingdings; 	panose-1:5 2 1 2 1 8 4 8 7 8; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 0 65536 0 -2147483648 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 0 0 0 1 0;} @font-face 	{font-family:Cambria; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 0 0 0 1 0;} @font-face 	{font-family:Tahoma; 	panose-1:2 11 6 4 3 5 4 4 2 4; 	mso-font-charset:0; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 0 0 0 1 0;}  /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Times New Roman"; 	mso-ascii-font-family:Cambria; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-hansi-font-family:Cambria; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} a:link, span.MsoHyperlink 	{font-family:"Times New Roman"; 	mso-ascii-font-family:"Times New Roman"; 	mso-hansi-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman"; 	color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{font-family:"Times New Roman"; 	mso-ascii-font-family:"Times New Roman"; 	mso-hansi-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman"; 	color:purple; 	text-decoration:underline; 	text-underline:single;} p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph 	{margin-top:0in; 	margin-right:0in; 	margin-bottom:0in; 	margin-left:.5in; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Times New Roman"; 	mso-ascii-font-family:Cambria; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-hansi-font-family:Cambria; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst 	{mso-style-type:export-only; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:0in; 	margin-left:.5in; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Times New Roman"; 	mso-ascii-font-family:Cambria; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-hansi-font-family:Cambria; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle 	{mso-style-type:export-only; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:0in; 	margin-left:.5in; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Times New Roman"; 	mso-ascii-font-family:Cambria; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-hansi-font-family:Cambria; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast 	{mso-style-type:export-only; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:0in; 	margin-left:.5in; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Times New Roman"; 	mso-ascii-font-family:Cambria; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-hansi-font-family:Cambria; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} span.apple-style-span 	{mso-style-name:apple-style-span; 	font-family:"Times New Roman"; 	mso-ascii-font-family:"Times New Roman"; 	mso-hansi-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman";} span.apple-converted-space 	{mso-style-name:apple-converted-space; 	font-family:"Times New Roman"; 	mso-ascii-font-family:"Times New Roman"; 	mso-hansi-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.0in 1.0in 1.0in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */ @list l0 	{mso-list-id:237445708; 	mso-list-type:hybrid; 	mso-list-template-ids:-557696750 -1651340946 67698691 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 	{mso-level-number-format:alpha-upper; 	mso-level-text:%1&gt;; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-.25in; 	mso-bidi-font-family:"Times New Roman";} @list l0:level2 	{mso-level-number-format:bullet; 	mso-level-text:o; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-.25in; 	font-family:"Courier New"; 	mso-bidi-font-family:"Times New Roman";} @list l0:level3 	{mso-level-tab-stop:1.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l0:level4 	{mso-level-tab-stop:2.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l0:level5 	{mso-level-tab-stop:2.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l0:level6 	{mso-level-tab-stop:3.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l0:level7 	{mso-level-tab-stop:3.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l0:level8 	{mso-level-tab-stop:4.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l0:level9 	{mso-level-tab-stop:4.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l1 	{mso-list-id:345449748; 	mso-list-type:hybrid; 	mso-list-template-ids:1435255294 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l1:level1 	{mso-level-number-format:bullet; 	mso-level-text:o; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:1.0in; 	text-indent:-.25in; 	font-family:"Courier New"; 	mso-bidi-font-family:"Times New Roman";} @list l1:level2 	{mso-level-tab-stop:1.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l1:level3 	{mso-level-tab-stop:1.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l1:level4 	{mso-level-tab-stop:2.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l1:level5 	{mso-level-tab-stop:2.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l1:level6 	{mso-level-tab-stop:3.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l1:level7 	{mso-level-tab-stop:3.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l1:level8 	{mso-level-tab-stop:4.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l1:level9 	{mso-level-tab-stop:4.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l2 	{mso-list-id:394740221; 	mso-list-type:hybrid; 	mso-list-template-ids:1827802394 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l2:level1 	{mso-level-number-format:bullet; 	mso-level-text:o; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:1.0in; 	text-indent:-.25in; 	font-family:"Courier New"; 	mso-bidi-font-family:"Times New Roman";} @list l2:level2 	{mso-level-tab-stop:1.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l2:level3 	{mso-level-tab-stop:1.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l2:level4 	{mso-level-tab-stop:2.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l2:level5 	{mso-level-tab-stop:2.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l2:level6 	{mso-level-tab-stop:3.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l2:level7 	{mso-level-tab-stop:3.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l2:level8 	{mso-level-tab-stop:4.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l2:level9 	{mso-level-tab-stop:4.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l3 	{mso-list-id:420759102; 	mso-list-type:hybrid; 	mso-list-template-ids:-403816032 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l3:level1 	{mso-level-number-format:bullet; 	mso-level-text:o; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:1.0in; 	text-indent:-.25in; 	font-family:"Courier New"; 	mso-bidi-font-family:"Times New Roman";} @list l3:level2 	{mso-level-tab-stop:1.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l3:level3 	{mso-level-tab-stop:1.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l3:level4 	{mso-level-tab-stop:2.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l3:level5 	{mso-level-tab-stop:2.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l3:level6 	{mso-level-tab-stop:3.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l3:level7 	{mso-level-tab-stop:3.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l3:level8 	{mso-level-tab-stop:4.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l3:level9 	{mso-level-tab-stop:4.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l4 	{mso-list-id:567687676; 	mso-list-type:hybrid; 	mso-list-template-ids:1923089484 2068463750 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l4:level1 	{mso-level-start-at:6; 	mso-level-number-format:bullet; 	mso-level-text:-; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-.25in; 	font-family:Calibri; 	mso-fareast-font-family:"Times New Roman";} @list l4:level2 	{mso-level-number-format:bullet; 	mso-level-text:o; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-.25in; 	font-family:"Courier New"; 	mso-bidi-font-family:"Times New Roman";} @list l4:level3 	{mso-level-tab-stop:1.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l4:level4 	{mso-level-tab-stop:2.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l4:level5 	{mso-level-tab-stop:2.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l4:level6 	{mso-level-tab-stop:3.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l4:level7 	{mso-level-tab-stop:3.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l4:level8 	{mso-level-tab-stop:4.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l4:level9 	{mso-level-tab-stop:4.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l5 	{mso-list-id:636833907; 	mso-list-type:hybrid; 	mso-list-template-ids:297667962 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l5:level1 	{mso-level-number-format:bullet; 	mso-level-text:o; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:73.8pt; 	text-indent:-.25in; 	font-family:"Courier New"; 	mso-bidi-font-family:"Times New Roman";} @list l5:level2 	{mso-level-tab-stop:1.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l5:level3 	{mso-level-tab-stop:1.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l5:level4 	{mso-level-tab-stop:2.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l5:level5 	{mso-level-tab-stop:2.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l5:level6 	{mso-level-tab-stop:3.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l5:level7 	{mso-level-tab-stop:3.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l5:level8 	{mso-level-tab-stop:4.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l5:level9 	{mso-level-tab-stop:4.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l6 	{mso-list-id:1818716700; 	mso-list-type:hybrid; 	mso-list-template-ids:176703714 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l6:level1 	{mso-level-number-format:bullet; 	mso-level-text:o; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-.25in; 	font-family:"Courier New"; 	mso-bidi-font-family:"Times New Roman";} @list l6:level2 	{mso-level-tab-stop:1.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l6:level3 	{mso-level-tab-stop:1.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l6:level4 	{mso-level-tab-stop:2.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l6:level5 	{mso-level-tab-stop:2.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l6:level6 	{mso-level-tab-stop:3.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l6:level7 	{mso-level-tab-stop:3.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l6:level8 	{mso-level-tab-stop:4.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l6:level9 	{mso-level-tab-stop:4.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l7 	{mso-list-id:1866017931; 	mso-list-type:hybrid; 	mso-list-template-ids:1026991838 -1651340946 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l7:level1 	{mso-level-number-format:alpha-upper; 	mso-level-text:%1&gt;; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-.25in; 	mso-bidi-font-family:"Times New Roman";} @list l7:level2 	{mso-level-number-format:bullet; 	mso-level-text:o; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-.25in; 	font-family:"Courier New"; 	mso-bidi-font-family:"Times New Roman";} @list l7:level3 	{mso-level-tab-stop:1.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l7:level4 	{mso-level-tab-stop:2.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l7:level5 	{mso-level-tab-stop:2.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l7:level6 	{mso-level-tab-stop:3.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l7:level7 	{mso-level-tab-stop:3.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l7:level8 	{mso-level-tab-stop:4.0in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l7:level9 	{mso-level-tab-stop:4.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} ol 	{margin-bottom:0in;} ul 	{margin-bottom:0in;} --&gt; &lt;/style&gt; &lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* 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:0in 5.4pt 0in 5.4pt; 	mso-para-margin:0in; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-ascii-font-family:Cambria; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Cambria; 	mso-hansi-theme-font:minor-latin;} table.MsoTableGrid 	{mso-style-name:"Table Grid"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	border:solid black 1.0pt; 	mso-border-alt:solid black .5pt; 	mso-padding-alt:0in 0in 0in 0in; 	mso-border-insideh:.5pt solid black; 	mso-border-insidev:.5pt solid black; 	mso-para-margin:0in; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Times New Roman"; 	mso-ascii-font-family:Cambria; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Cambria; 	mso-hansi-theme-font:minor-latin;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;!--StartFragment--&gt;&lt;span style="font-size:100%;"&gt;OMG, with all these acronyms, Borat would have observed that the software industry is run by teenage girls, unlike the great nation of Kazakhstan!&lt;br /&gt;&lt;/span&gt;&lt;p class="MsoNormal"  style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;(The attached animated Gif summarizes the text below at a high-level. &lt;span style="font-weight: bold;"&gt;Click on the image to see the animation.)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;Anyways, Relational Databases have been around for 30+ years (the predecessors – Networked/Hierarchical databases are extinct now). They matured over years and fit the bill in the early 90s, until Internet Scale and data-intensive applications broke their back. Basic issues have always been the same:&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraph"  style="text-indent: -0.25in;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;A&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;u&gt;IMPEDANCE-MISMATCH&lt;/u&gt;&lt;/b&gt;: Domain Model to Relational Model Conversion – The impedance mis-match between your object-oriented application domain model and the relational schema that must support it results in a lot of tedious co-ordination between middle-ware/database developers, code and time (Time to arrive at a fixed/inflexible Schema Design, Stored Procedures and Interfaces to I/O against the schema and tuning/data-archival/backup etc.). This manifests as:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpFirst"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;u&gt;&lt;span style=""&gt;Complexity&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal; font-style: italic;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;u&gt;&lt;span style=""&gt;Greater Time-To-Market&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin: 0.1pt 0in; line-height: normal;font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin: 0.1pt 0in 0.1pt 0.5in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;B&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;u&gt;&lt;span style=""&gt;RDBMS IMPLEMENTATION&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;: Data managed by the RDBMS is in Memory and/on Disk. Arriving at a QEP (Query Execution Plan) and retrieving/updating data off Memory and/or Disk with Transactional ACID Guarantees involves complex machinery in terms of transaction-logs/redo-logs/locking/guaranteeing isolation-levels - i.e. costs in terms of processing resource and latency. Typically the RDBMS, being an "enterprise" resource also gets abused, since any application desiring persistence tends to utilize it – thereby leading to  bottle-necks on the Database/Database-Machine.&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;One’s options then are then to Scale Up the Database Infrastructure and Pay More in terms of Database Licenses (typically per CPU Licensing) and/or Invest in Clustered Database Technology (which is also expensive and a little immature to boot) - and both of these are very expensive options. Or Shard – up in the application tier. All &lt;/span&gt;&lt;span style="font-size:100%;"&gt;this manifests as:&lt;span style=""&gt;       &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal; font-weight: bold; font-style: italic;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-weight: normal;font-size:100%;" &gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-size:100%;" &gt;&lt;u&gt;&lt;span style=""&gt;Poor Latency with regards to Query Execution.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt; &lt;span style="font-style: italic;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;u style="font-style: italic;"&gt;&lt;span style=""&gt;&lt;span&gt;Poor Scalability due to a Database-Tier Bottle-neck.&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;b style=""&gt;&lt;u&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin: 0.1pt 0in; line-height: normal;font-family:verdana;"&gt;&lt;/p&gt;&lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;u&gt;&lt;span style=""&gt;Additional layer of complexity.&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;u&gt;&lt;span style=""&gt;Excessive Costs.&lt;br /&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;u&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin: 0.1pt 0in; line-height: normal;font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin: 0.1pt 0in 0.1pt 0.5in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;C&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;u&gt;&lt;span style=""&gt;DATA-REMOTENESS:&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; Data is always one/many hops away from the Application where the Business logic is often codified and executed. And where definitely the Presentation Layer sits. This manifests itself as:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt; &lt;span style="font-style: italic;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;u&gt;&lt;span style=""&gt;&lt;span style="font-style: italic;"&gt;Increased Latency to the Application.&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;b style=""&gt;&lt;u&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;The business is rife with sharp engineers, greedy business-men and dedicated workaholics – and status quo does not remain so, for more than an attosecond (10¯&lt;sup&gt;18&lt;/sup&gt;)! So what’s everyone been up to – to solve these problems?&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraph"  style="text-indent: -0.25in;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;A&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;To resolve Impedance-Mismatch, the industry’s efforts have revolved around the following approaches:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpFirst"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;OODBMS – Object Oriented DBMS:&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(Examples &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;è&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;span style="font-weight: bold;"&gt;Db4o, &lt;/span&gt;Objectivity/DB, Intersystems-Caché, Versant, Progress)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal; font-weight: bold;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;span style=""&gt;ORDBMS – Object Relational DBMS &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: normal;font-size:100%;" &gt;&lt;span style="font-weight: bold;"&gt;/Universal Servers: &lt;/span&gt;(Examples &lt;/span&gt;&lt;span style="font-weight: normal;font-size:100%;" &gt;&lt;span style=""&gt;è&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: normal;font-size:100%;" &gt; &lt;span style="font-weight: bold;"&gt;PostgreSQL, &lt;/span&gt;Cubrid, OpenLink Virtuoso)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;span style=""&gt;ORM – Object Relational Mapping Software:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; (Examples &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;è&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;span style="font-weight: bold;"&gt;Hibernate&lt;/span&gt;, Oracle-TopLink, IBatis, EclipseLink, Django).&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin: 0.1pt 0in; line-height: normal;font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin: 0.1pt 0in 0.1pt 0.5in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;B&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;To resolve RDBMS Implementation Issues:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;Issue of Latency due to Data Being On Disk and requiring complex QEPs, &lt;b style=""&gt;IMDB - In Memory Database: &lt;/b&gt;(Examples &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;è&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;b style=""&gt;Oracle Times-Ten&lt;/b&gt;, IBM Solid-DB, Sybase-ASE 15.5, MySQL Cluster, eXtremeDB)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;Brand New &lt;b style=""&gt;No-SQL&lt;/b&gt; Databases: (Examples &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;è&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;b style=""&gt;Apache HBase&lt;/b&gt;, SimpleDB, Project Voldemort, Facebook Cassandra, Amazon Dynamo (closed), Google BigTable (closed)).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin: 0.1pt 0in; line-height: normal;font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin: 0.1pt 0in 0.1pt 0.5in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="margin: 0.1pt 0in 0.1pt 0.5in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;C&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;To resolve Data-Remoteness, the industry’s efforts have revolved around, expectedly, solving the problem in the middle-ware and/or client-TIER with:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Caching and Distributed Caching Technologies&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;: (Examples &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;è&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; Terracotta Ehcache, Oracle Coherence)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style=""&gt;IMDG (In Memory Data-Grid)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;: (Examples &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;è&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; Terracotta Platform (with TIM-Messaging), Hadoop, Oracle Coherence)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Distributed Java Heap&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;: (Examples &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;è&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; Terracotta Platform and special editions of the Terracotta Platform such as Terracotta Sessions, Terracotta Quartz; and a couple of other wanna-bes).&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;  &lt;p class="MsoNormal"  style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;Solving the problem at the middle-tier is what folks have discovered works better and more cost effectively in that one can reduce Complexity, improve Latency and Scale/Scalability at once (See Table-A for Details) unlike the other approaches that solve one or more, but not the entire set of problems.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin-left: 0.25in;font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;u&gt;Table-A:&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;               &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;u&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;table class="MsoTableGrid"  style="border: medium none ; width: 535.5pt; border-collapse: collapse;font-family:verdana;" border="1" cellpadding="0" cellspacing="0" width="536"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid black; padding: 0in 5.4pt; width: 81.9pt;" valign="top" width="82"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;Problem&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 58.5pt;" valign="top" width="59"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;RDBMS&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 71.1pt;" valign="top" width="71"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;IMDB&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 72.9pt;" valign="top" width="73"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;No-SQLDB&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 56.7pt;" valign="top" width="57"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;OODBMS&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;ORDBMS&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;OR-Mapper&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;Terracotta&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 81.9pt;" valign="top" width="82"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Solution   to impedance mismatch between Relational and Object Oriented Domain Model&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt;" valign="top" width="59"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 71.1pt;" valign="top" width="71"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 72.9pt;" valign="top" width="73"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 56.7pt;" valign="top" width="57"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Reachability   Persistence.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size:100%;"&gt;Mapping Configuration files&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;Reachability Persistence.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 81.9pt;" valign="top" width="82"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Latency   Improvement &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt;" valign="top" width="59"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 71.1pt;" valign="top" width="71"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt; &lt;/span&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;(Since   data is in memory, Query Execution Times are improved, although   Data-Remoteness problem remains).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 72.9pt;" valign="top" width="73"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;(Fast   since several do&lt;/span&gt;&lt;span class="apple-style-span"  style="font-size:100%;"&gt;&lt;span style=""&gt; not attempt to   provide&lt;/span&gt;&lt;/span&gt;&lt;span class="apple-converted-space"  style="font-size:100%;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="apple-style-span"  style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;a href="http://en.wikipedia.org/wiki/ACID"&gt;&lt;span style="text-decoration: none; color: rgb(0, 0, 0);"&gt;ACID&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="apple-converted-space"  style="font-size:100%;"&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="apple-style-span"  style="font-size:100%;"&gt;&lt;span style=""&gt;guarantees   and do not require fixed table schemas and avoid&lt;/span&gt;&lt;/span&gt;&lt;span class="apple-converted-space"  style="font-size:100%;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="apple-style-span"  style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;a href="http://en.wikipedia.org/wiki/Join_%28SQL%29"&gt;&lt;span style="text-decoration: none; color: rgb(0, 0, 0);"&gt;join&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="apple-converted-space"  style="font-size:100%;"&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="apple-converted-space"  style="font-size:100%;"&gt;&lt;span style="color:black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span class="apple-style-span"  style="font-size:100%;"&gt;&lt;span style="color:black;"&gt;operations).&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 56.7pt;" valign="top" width="57"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;(For   some navigational and associative lookups, object graphs can be pulled up as   is)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;YES   - (if complemented with Distributed 2&lt;sup&gt;nd&lt;/sup&gt; Level Cache e.g.   Terracotta Ehcache (with H2LC plugin for Hibernate)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt; &lt;/span&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;(Close   to in-memory speeds possible)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 81.9pt;" valign="top" width="82"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Improve   Scale and Solve Scalability Issues&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt;" valign="top" width="59"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Yes   (if Ready to Spend &lt;b style=""&gt;$$$$$&lt;/b&gt; on Scaling UP + DB-Cluster s/w like Oracle RAC)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 71.1pt;" valign="top" width="71"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Yes   (to a certain extent, but limited by amount of memory and the need for   Non-volatile RAM) or compromising with Save-Points.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 72.9pt;" valign="top" width="73"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Yes   (assuming eventual consistency good enough)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 56.7pt;" valign="top" width="57"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;YES   - (with Distributed 2&lt;sup&gt;nd&lt;/sup&gt; Level Cache e.g. Terracotta Ehcache (with   H2LC plugin for Hibernate)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: left;"&gt;(since I/O is against HA Memory)&lt;br /&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 81.9pt;" valign="top" width="82"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Easy Integration   to RDBMS (entrenched source of truth)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt;" valign="top" width="59"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;N/a&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 71.1pt;" valign="top" width="71"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt; &lt;/span&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Typically   yes (e.g. Times Ten with Oracle)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 72.9pt;" valign="top" width="73"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 56.7pt;" valign="top" width="57"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;n/a&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;n/a&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;(Write-Behind,   Write-Through (with/without JTA))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 81.9pt;" valign="top" width="82"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Better Support   for Fast Changing Domain Models (Agile) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt;" valign="top" width="59"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 71.1pt;" valign="top" width="71"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 72.9pt;" valign="top" width="73"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 56.7pt;" valign="top" width="57"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 81.9pt;" valign="top" width="82"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Heterogeneous   Application/ Stack Support.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt;" valign="top" width="59"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 71.1pt;" valign="top" width="71"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 72.9pt;" valign="top" width="73"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 56.7pt;" valign="top" width="57"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span class="apple-style-span"  style="font-size:100%;"&gt;&lt;span style="color:black;"&gt;(Typically   you store&lt;/span&gt;&lt;/span&gt;&lt;span class="apple-style-span"  style="font-size:100%;"&gt;&lt;span style=""&gt; strongly-typed   objects in the database, which makes sharing across Apps/Heterogenous stacks   difficult)&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;(Data   is ultimately in relational form)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;(Data   is always in relational form – and ORM merely bridges the impedance)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;(Java   Solution – multiple apps can access the cache. Terracotta Ehcache supports   EhcacheRESTful so heterogeneous Stacks can access the same cache service)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 81.9pt;" valign="top" width="82"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Implementation   Maturity&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt;" valign="top" width="59"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 71.1pt;" valign="top" width="71"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 72.9pt;" valign="top" width="73"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 56.7pt;" valign="top" width="57"&gt;   &lt;p class="MsoListParagraph" style="margin-left: 0.25in; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;(Vetted   by 1000s of OSS and Commerical Deployments over 6 years)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 81.9pt;" valign="top" width="82"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;Common   Standard&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt;" valign="top" width="59"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 71.1pt;" valign="top" width="71"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 72.9pt;" valign="top" width="73"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 56.7pt;" valign="top" width="57"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.9in;" valign="top" width="65"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;X/&lt;/span&gt;&lt;span style="font-size:100%;"&gt;√&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;(Terracotta Ehcache is JSR 107 Compliant).&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"  style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;So, as the argument above indicates, if you are considering any of the following:&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraph"  style="margin-left: 1in; text-indent: -0.25in;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;more expensive RDBMS upgrade, &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpFirst"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;ORDBMS, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 73.8pt; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;IMDB, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 73.8pt; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;OODBMS, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpMiddle"  style="margin: 0.1pt 0in 0.1pt 73.8pt; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;No-SQL DB, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" face="verdana"&gt;&lt;span style="font-size:100%;"&gt;look to instead solve it with middleware, whilst still leveraging your existing investments.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Of the Middle/Client-Tier based solutions, Terracotta is the most compelling, since along with agreeable runtime characteristics and visibility, you get the most number of choices with regards to application expressability and deployment choices to fit your needs/budget and to trade off correctness v/s scale – see &lt;a href="http://www.terracotta.org/products"&gt;&lt;span style=""&gt;http://www.terracotta.org/products&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;If the data does eventually reside in a RDBMS, look at &lt;/span&gt;&lt;p&gt;&lt;/p&gt;  &lt;p class="MsoListParagraph"  style="margin-left: 1in; text-indent: -0.25in;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;Terracotta Ehcache (with the Hibernate 2&lt;sup&gt;nd&lt;/sup&gt; Level Cache Plugin) if using an ORM (Hibernate) &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormalCxSpFirst"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;o&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;Terracotta Ehcache (with the ability to write Behind - see &lt;a href="http://www.terracotta.org/beta/darwin"&gt;http://www.terracotta.org/beta/darwin&lt;/a&gt;) &amp;amp; join Greg Luck's upcoming Webinar&lt;/span&gt;&lt;span style="font-size:100%;"&gt; at &lt;a href="http://gregluck.com/blog/archives/2010/01/sign-up-for-a-webcast-i-am-giving-3-february-boost-application-performance-and-monitoring-with-terracotta-ehcache/"&gt;http://gregluck.com/blog/archives/2010/01/sign-up-for-a-webcast-i-am-giving-3-february-boost-application-performance-and-monitoring-with-terracotta-ehcache/&lt;/a&gt;).&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormalCxSpFirst"  style="margin: 0.1pt 0in 0.1pt 1in; text-indent: -0.25in; line-height: normal;font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;There is plenty of quantitative evidence to support the above, in the form of white-papers and case-studies and an impressive client roster at &lt;a href="http://www.terracotta.org/"&gt;&lt;span style=""&gt;http://www.terracotta.org&lt;/span&gt;&lt;/a&gt;. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraph"  style="margin-left: 73.8pt;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="margin: 0.1pt 0in; line-height: normal;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" face="verdana" style="margin: 0.1pt 0in; line-height: normal;"&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0.1pt 0in; line-height: normal; font-family: verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;!--EndFragment--&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2040226002278485965-6869155939536674707?l=javamuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javamuse.blogspot.com/feeds/6869155939536674707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2040226002278485965&amp;postID=6869155939536674707&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/6869155939536674707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/6869155939536674707'/><link rel='alternate' type='text/html' href='http://javamuse.blogspot.com/2010/01/terracotta-comparisons-with.html' title='Terracotta - Comparisons with RDBMS/IMDB/ORDBMS/ORM/OODBMS/NoSQLDB'/><author><name>Iyer</name><uri>http://www.blogger.com/profile/12680952740383422001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__0dIuoFtHm0/S2Sy1mNm-6I/AAAAAAAAADI/Gkzb55GZxWI/s72-c/TCvsDB.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2040226002278485965.post-2295908792042242311</id><published>2010-01-12T18:47:00.000-08:00</published><updated>2010-01-12T21:34:47.827-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Scalability'/><category scheme='http://www.blogger.com/atom/ns#' term='Quartz'/><category scheme='http://www.blogger.com/atom/ns#' term='Terracotta'/><category scheme='http://www.blogger.com/atom/ns#' term='High availability'/><category scheme='http://www.blogger.com/atom/ns#' term='ehcache'/><category scheme='http://www.blogger.com/atom/ns#' term='Stack'/><category scheme='http://www.blogger.com/atom/ns#' term='HttpSession'/><title type='text'>What can Terracotta do for you in 2010.</title><content type='html'>2009 was a great year for Terracotta in many ways. In terms of product releases, each release was packed with features that raised the bar in terms of value and simplicity, at least an order of magnitude. Here's a brief list:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Release of the Terracotta Server Array - i.e multiple active Terracotta Servers with the Terracotta Platform 3.0 release, to afford virtually unlimited scale-out characteristics.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Amazingly simple yet powerful, Hibernate 2nd Level Cache Product released with Terracotta Platform 3.1, offers immediate database offload for Applications that ORM (Hibernate) to the Database.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Acquisition of Ehcache and the tighter integration between this ubiquitous caching framework and the underlying Terracotta smart replication technology with 3.1.1 - in the form of Terracotta Ehcache Product Line.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Acquisition of Quartz and the tighter integration between this ubiquitous job-scheduling framework and the underlying Terracotta smart replication technology with 3.2 - in the form of the Terracotta Quartz Product Line.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;And with each release, the Terracotta Platform and its smart replication technology (DSO) was solidified and improved upon in terms of Lock Management, Fault Path Optimization, Heart Beating features and Disk I/O on the Terracotta Server.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Several Visualization tools were added to the  Platform and Products, mentioned above (Ehcache Panel, Hibernate Cache Region Panel, Improvements to the Terracotta Developer Console and Terracotta Operations Console).&lt;/li&gt;&lt;/ul&gt;A picture is worth a thousand words - so look at the attached &lt;span style="font-weight: bold;"&gt;animated GIF&lt;/span&gt; which delineates the entire suite of Terracotta Products available and where they apply within the stack.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__0dIuoFtHm0/S007_fyS4YI/AAAAAAAAACo/RsM73P1fANY/s1600-h/TerracottaProducts.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/__0dIuoFtHm0/S007_fyS4YI/AAAAAAAAACo/RsM73P1fANY/s400/TerracottaProducts.gif" alt="" id="BLOGGER_PHOTO_ID_5426059088101564802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(Seems like you need to click on the Animated image to get the animation going).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So use a specific product to solve a point problem or with the Enterprise Suite, ensure that each element within the stack benefits from simpler code-base, lesser RDBMS dependency and lower operating costs. The DX, EX, FX are basically versions along a scale continuum - so for standalone, non-distributed versions use DX, for medium scale use EX, for high-end scale use FX (since that allows for an unlimited number of active Terracotta Servers).&lt;br /&gt;&lt;br /&gt;The power that is depicted in the animated graphic is real:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;For Terracotta Ehcache look at - &lt;a href="http://www.terracotta.org/ehcache/"&gt;http://www.terracotta.org/ehcache/&lt;/a&gt; and &lt;a href="http://www.terracotta.org/ehcache/distributed-cache/ehcache-ex-hibernate"&gt;http://www.terracotta.org/ehcache/distributed-cache/ehcache-ex-hibernate.&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;For Terracotta Quartz look at - &lt;a href="http://dsoguy.blogspot.com/2009/12/clustered-quartz-scheduler-in-5-minutes.html"&gt;http://dsoguy.blogspot.com/2009/12/clustered-quartz-scheduler-in-5-minutes.html&lt;/a&gt; and &lt;a href="http://www.terracotta.org/quartz/"&gt;http://www.terracotta.org/quartz/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;For Terracotta Sessions look at - &lt;a href="http://www.terracotta.org/web-sessions/"&gt;http://www.terracotta.org/web-sessions/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;For Terracotta Platform, look at - &lt;a href="http://www.terracotta.org/platform/"&gt;http://www.terracotta.org/platform/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;2010 Roadmap is packed with features as well, which should further simplify your consumption of Terracotta even further, with further improvements in Scaling and Latency. Enjoy....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2040226002278485965-2295908792042242311?l=javamuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javamuse.blogspot.com/feeds/2295908792042242311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2040226002278485965&amp;postID=2295908792042242311&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/2295908792042242311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/2295908792042242311'/><link rel='alternate' type='text/html' href='http://javamuse.blogspot.com/2010/01/what-can-terracotta-do-for-you-in-2010.html' title='What can Terracotta do for you in 2010.'/><author><name>Iyer</name><uri>http://www.blogger.com/profile/12680952740383422001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__0dIuoFtHm0/S007_fyS4YI/AAAAAAAAACo/RsM73P1fANY/s72-c/TerracottaProducts.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2040226002278485965.post-1593420901936850807</id><published>2009-06-12T13:02:00.000-07:00</published><updated>2009-12-22T12:38:11.864-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Distributed Cache Java'/><category scheme='http://www.blogger.com/atom/ns#' term='ehcache'/><title type='text'>So... you want a Terracotta-based Distributed Cache</title><content type='html'>&lt;div class="Section1"&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;u&gt;INTRODUCTION:&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;There are many parallels between the Eastern parable of the &lt;a href="http://en.wikipedia.org/wiki/Blind_Men_and_an_Elephant"&gt;6 blind monks and an elephant &lt;/a&gt; and Terracotta’s capabilities and usage – in that Terracotta on the one-hand ships a platform based on its flagship DSO (Distributed Shared Objects) technology, which can be exploited in a multitude of ways to concoct distributed systems manufactured with POJOs from the J2SE JDK, but then also ships many ready-made solutions (Terracotta Integration Modules – TIMs in short) that solve specific problems in the enterprise-computing landscape e.g. TIMs exist for Http-Session Clustering, Master-Worker Frameworks (i.e. Map Reduce via tim-messaging), Distributed Job Scheduling (via tim-quartz), distributed Caching (via tim-concurrent-collections, tim-EhCache) and so on and so forth. An ever increasing compendium of these "half-truths" of what Terracotta actually is can be found at &lt;a href="http://forge.terracotta.org/"&gt;http://forge.terracotta.org&lt;/a&gt;.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;This article is &lt;b style=""&gt;&lt;u&gt;focused on Distributed Cache implementations&lt;/u&gt;&lt;/b&gt; (i.e. Java-based implementations of in-memory Data-Structures – which are backed by a Data-Source such as a Relational Database) with Terracotta and builds up on prior musings on the topic by &lt;a href="http://tech.puredanger.com/2009/05/01/terracotta-cache-map/"&gt;Alex Miller&lt;/a&gt; and &lt;a href="http://javamuse.blogspot.com/2008/11/distributed-cachingdatabase-offload.html"&gt;self&lt;/a&gt;.&lt;span style=""&gt;  &lt;/span&gt;It includes both POJO-based solutions and TIM-based solutions, with the latter affording you faster time to market as the description of TIMs above might lead you to conclude. It attempts to open the hood and describes how each distributed-cache feature is satisfied by Terracotta, describes the typical process around some common implementations within the community and also highlights what different interfaces are available to the application developer and why to choose one over the other. Would also recommend reading &lt;a href="http://www.terracotta.org/web/display/docs/Clustered+Data+Structures+Guide"&gt;The clustered data structures guide&lt;/a&gt; in conjunction with this blog to get a thorough understanding of how you can skin this cat.&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt; &lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;u&gt;TYPICAL REQUIREMENTS OF A DISTRIBUTED CACHE:&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;When looking for a comprehensive Distributed Cache Solution, customers often express the following requirements consistently:&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpFirst" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt; Cache Specific Features:&lt;span style=""&gt; &lt;/span&gt; such as Correctness, Eviction, Disk Spill-over, Cache-Hydration, Querying, Eventing, Transactional Updates and Partitioning.&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpLast" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;" &gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Non Functional Features: such as High Availability, Scalability/Latency, Security, Visibility/Management and Replication capabilities with Geographically Dispersed Active or DR (Disaster Recovery) Data-centers. And in some rare cases, Cross Platform usability (e.g. Dot-Net, C++ and Java based cache-consumers)&lt;/p&gt; &lt;p class="MsoNormal"&gt; The table below describes how Terracotta delivers these requirements, based on the several 100 production-deployments of this usage of Terracotta:&lt;/p&gt;  &lt;table class="MsoNormalTable" style="border: medium none ; margin-left: 23.4pt; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td colspan="2" style="border: 1pt solid black; padding: 0in 5.4pt; width: 139.5pt;" valign="top" width="186"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;CACHE FEATURES&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:black black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;CORE DSO PLATFORM&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;   &lt;td style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:black black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;TERRACOTTA TIMs&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:black black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;EXTERNAL (i.e.in App/Infrastucture)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td colspan="2"  style="border-style: none solid solid; padding: 0in 5.4pt; width: 139.5pt;color:-moz-use-text-color black black;" valign="top" width="186"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;u&gt;&lt;span style="font-size:8;"&gt;Cache Specific Features:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Large   Cache Sizes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Disk   Spillover&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;a href="http://www.terracotta.org/web/display/docs/Concept+and+Architecture+Guide#ConceptandArchitectureGuide-VirtualMemoryManager"&gt;Terracotta Virtual Memory&lt;/a&gt; ensures that you can accommodate large caches that exceed the size of client-JVM/TC-Server-JVM Heaps. Hot references are materialized in your local JVM heap, “warm” references in your Terracotta Server JVM heap and everything is on disk (assuming persistent-disk option is on).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 150.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Cache   Eviction&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;TTL, TTI schemes are delivered via &lt;a href="http://forge.terracotta.org/releases/projects/tim-map-evictor-parent/"&gt;tim-map-evictor&lt;/a&gt;. Fixed-Time expirations (i.e. empty cache at 5am) and custom schemes can be hand-built. Note that TIMs: EHCache, H2LC &amp;amp; DistributedMap, tccache TIMs already have eviction built in. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Cache   Partitioning&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;a href="http://www.terracotta.org/web/display/enterprise/Platform"&gt;Terracotta   Server Striping&lt;/a&gt; available in FX (Paid Only version).&lt;span style=""&gt;  &lt;/span&gt;So the striped layer is basically multiple   Mirror-Groups which in turn contain 1 Active Terracotta Server JVM and any   number of Mirror (i.e. hot standby) Terracotta JVMs. See &lt;a href="http://www.terracotta.org/attach/qt/terracotta_3.0/terracotta_3.0_server_striping.html"&gt;VIDEO&lt;/a&gt;.   &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;One can also partition up at the   application tier – but then the partitioning-scheme and routing is to be implemented by the application. Terracotta cluster events greatly ease partition management (Refer to Terracotta Consulting, if unsure)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Cache Correctness&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Across Threads in the same JVM and across JVM Process Boundaries.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Java Memory Model is extended by DSO from Amongst Threads in a single JVM Process to Amongst Threads in a single and across JVM Process Boundaries.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Across   JVM-&gt;DB&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Delivered via &lt;a href="http://forge.terracotta.org/releases/projects/tim-async/"&gt;Tim-async&lt;/a&gt;  that allows for asynchronous Write Behind to the database. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;In case of H2LC – Hibernate writes to 2&lt;sup&gt;nd&lt;/sup&gt; Level Cache on Commit. Terracotta is a transactional 2nd Level cache-provider. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Across DB-&gt;JVM&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Typically implemented externally, where database triggers keep track of DML changes and publish to a JMS-Topic and&lt;span style=""&gt;  &lt;/span&gt;one client JVM is a subscriber to this JMS-Topic and upon consumption of the message, updates the cache. The replication of this change is done by Terracotta (assuming the cache is clustered via Terracotta DSO). Use Terracotta cluster events to innoculate against subscriber-JVM failures.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Cache Eventing&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Could be implemented via – Distributed Wait/Notify or &lt;a href="http://www.terracotta.org/web/display/docs/Concept+and+Architecture+Guide#ConceptandArchitectureGuide-dmi"&gt;DMI&lt;/a&gt;   and &lt;a href="http://www.terracotta.org/web/display/docs/Cluster+Events"&gt;Cluster   Events&lt;/a&gt; (Refer to Terracotta Consultants)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Or via a custom event publication mechanism (Terracotta gives you JVM level clustering, after all - so Lists, Queues etc. can all be clustered just as easily as a Map).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Cache Visibility and Management&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Implemented via:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin-bottom: 0.0001pt; text-indent: -0.25in; line-height: normal;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:8;"&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;             &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:8;"&gt;&lt;a href="http://www.terracotta.org/web/display/orgsite/Terracotta+Developer+Console"&gt; Terracotta Developer Console&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin-bottom: 0.0001pt; text-indent: -0.25in; line-height: normal;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:8;"&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;             &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:8;"&gt;&lt;a href="http://www.terracotta.org/web/display/docs/Terracotta+Operations+Center"&gt; Terracotta Operations Center&lt;/a&gt;(FX/Paid only)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin-bottom: 0.0001pt; text-indent: -0.25in; line-height: normal;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:8;"&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;             &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:8;"&gt;&lt;br /&gt;&lt;a href="http://www.terracotta.org/web/display/docs/JMX+Guide"&gt;JMX API&lt;/a&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin-bottom: 0.0001pt; text-indent: -0.25in; line-height: normal;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:8;"&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;             &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:8;"&gt;&lt;a href="http://www.terracotta.org/web/display/docs/Cluster+Events"&gt;Cluster Events&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoListParagraphCxSpLast" style="margin-bottom: 0.0001pt; text-indent: -0.25in; line-height: normal;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:8;"&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:8;"&gt;&lt;a href="http://www.terracotta.org/web/display/docs/Data+Locality+API"&gt;Locality API&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;H2LC Tim features a specialized Management Console based on Hibernate Statistics (TC 3.1 onwards) – that pinpoints queries being offloaded off the database, cache-hit-ratios etc. and is very useful in determining the efficacy of the 2ndLevel Cache in Hibernate based Apps.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Cache Indexing/ Querying&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;a href="http://forge.terracotta.org/snapshots/projects.html#tim-searchable"&gt;Searchable Map&lt;/a&gt; exports an enhanced Map interfaces   and supports searches via a local Lucene Data-Store, whose disk-based-Index is kept in synch across JVMs with Terracotta DSO.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt; &lt;br /&gt;&lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Transactional Cache Updates&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt; Terracotta Hibernate 2nd Level Cache Implementation supports (shortly) a Transactional Cache. Similarly, tim-async's implementation provides guarantees around once-and-only-once write to the database with no transaction loss.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; Also, often implemented in the App, currently. e.g. in case of a write-through cache - Clustered cache is updated only after the transaction is committed to the database. Or in case of queues to be flushed to the db - double-headed-queues are popular - i.e. "txn-begin = pop-work-off-queue1", process and "txn-end = pop-work-off-queue2" (refer to Terracotta Consultants) &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt; &lt;br /&gt; &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Cache Preloading&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Achieved via &lt;a href="http://www.terracotta.org/web/display/docs27/Configuration+Guide+and+Reference"&gt;Fault-count tuning&lt;/a&gt;. It is a global setting though (Consultants know how to reflectively change this at run-time). More features are on the way to make cache-pre Loading across client-JVM/TCServer-JVMs&lt;span style=""&gt;  &lt;/span&gt;virtually painless.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Alternatively one could implement &lt;a href="http://forge.terracotta.org/releases/projects/tim-maps-root/"&gt;Maps with   non-partial behaviors&lt;/a&gt; – so that the entire cache can be faulted in one go into the client JVM from the Terracotta Server JVM (or from disk into the Terracotta Server JVM).&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;The Solutions described to the left were about pre-loading between Terracotta Server and Client JVMs. To pre-load from the data-source, typically cache warmers have to be written currently at the application tier. Note that you should be careful about coarsening your locks within your application code in case of bulk-loads. Expect more TIM offerings here soon. (Refer to Terracotta Consultants for now)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td colspan="2"  style="border-style: none solid solid; padding: 0in 5.4pt; width: 139.5pt;color:-moz-use-text-color black black;" valign="top" width="186"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;u&gt;&lt;span style="font-size:8;"&gt;Cache Non Functional Features:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;High   Availability&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Un-Planned   Down-Time&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;a href="http://www.terracotta.org/web/display/docs/Configuring+Terracotta+For+High+Availability"&gt;Terracotta   DSO + Network Active Passive&lt;/a&gt; technology ensures that you have no single point of failure in your architecture and that you are protected against some double/ multiple failures.In persistent-mode, all state received by the Terracotta server is written to disk as well - giving you much higher levels of HA than traditional, pure-N-memory-locations-based approaches. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Planned   Down-Time&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Terracotta helps you with &lt;a href="http://www.terracotta.org/web/display/docs/Troubleshooting+Guide#TroubleshootingGuide-HowdoIreduceplanneddowntimewithTerracotta%3F"&gt;several planned downtime scenarios&lt;/a&gt; in that you can execute rolling upgrades across the cluster, for those scenarios. More detailed discussions are documented in Terracotta run-books (Documentation included in Paid Versions). &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Security&lt;span style=""&gt;                      &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Follow Terracotta &lt;br /&gt;&lt;a href="http://www.terracotta.org/confluence/display/wiki/DEPLOYING+TERRACOTTA#DEPLOYINGTERRACOTTA-SecurityPractisesforTerracotta."&gt;Security Best Practices&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Disaster Recovery&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Could be implemented via &lt;a href="http://www.terracotta.org/web/display/docs/Tools+Overview#ToolsOverview-OperationsCenter%28opscenter%29"&gt;Terracotta Backup&lt;/a&gt; (available in the FX – Paid Version) or via an additional Hot-Standby Node in the DR (assuming it is ok to impact every live-transaction by a marginal amount). See &lt;a href="http://www.terracotta.org/confluence/display/wiki/DEPLOYING+TERRACOTTA#DEPLOYINGTERRACOTTA-IhaveaDRsiteaswellHowdoIreplicateTerracottaStatetotheDRSite%3F"&gt;notes…on this topic&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Could be implemented in the application   via client-JVMs publishing via JMS to a receiving JVM in the DR Site.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Geographically Dispersed Data Centers&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Recommend local clusters and application implemented JMS-based (apacheMQ for example) mechanisms if synchronization is needed (or refer to Terracotta Consultants) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt; &lt;tr style=""&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 63pt;color:-moz-use-text-color black black;" valign="top" width="84"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Hetergogenous Platform Support (.Net, C#, C++, Java based client JVMs etc.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 76.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="102"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 130.5pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="174"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 143.1pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="191"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Terracotta is Java only solution - however non-Java Clients can talk to a &lt;a href="http://www.terracotta.org/confluence/display/wiki/DEVELOPING+WITH+TERRACOTTA#DEVELOPINGWITHTERRACOTTA-HowcanaCappinteractwithJavaappoverSOAP%3F"&gt;Java-based Soap Service&lt;/a&gt; that shares state with the Java-based cluster. Ofcourse object identity contracts would be broken. (or refer to Terracotta Consultants) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Note that Scalability/Latency has deliberately not been included as a non-functional feature, since IMHO that is an emergent property of the architecture/implementation. &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpFirst" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;First off, given that application threads are executing I/O against shared in-memory Data-structures as against the RDBMS (other data-store) automatically gives you significantly better latencies and scale. &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Additionally, Terracotta replicates very smart with only field-level fine-grained changes darting around the network to only those JVMs that have those references materialized. &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Thirdly Terracotta implements Greedy-Locking (just like the JVM’s BiasedLocking), LockGC and Lock Lease Policies – which ensure no lock-starvation and significantly reduce distributed lock overheads.&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpLast" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Fourthly, if the cache-size is too large to fit onto a single Terracotta Server JVM’s heap and you are faced with demanding latency SLAs, you can stripe the Terracotta Server tier to ensure that all clustered data fits onto Heap on the Terracotta Server JVMs.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Terracotta thus offers you an extremely scalable implementation, where you can scale out the number of client JVMs and the number of Terracotta-Server-JVM Mirror-Groups based on the application load and the amount of clustered-I/O it executes – all on commodity hardware with the commodity Hotspot JVM you have grown to love.&lt;/p&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;u&gt;DEVELOPER OPTIONS:&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;As a developer you have many options in terms of what cache-interface you choose - POJOs, Spring and TIMs (Modules) …If anything the trick with Terracotta is to choose the right implementation for your use-case out of the several available. The section below tries to answer that specific question. &lt;/p&gt;  &lt;p class="MsoNormal"&gt;Note that – &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpFirst" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Non-functional features such as &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;" &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Cache-Correctness (intra and inter-JVM – Terracotta provides the highest levels of correctness out of the box - since no other product tries to honor the JMM across process-boundaries), &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;" &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;HA (very high-levels of HA given Disk Persistence and NAP), &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;" &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Scale&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;And some cache-specific features such as:&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;" &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Cache-Pre-Load &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;" &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Disk-Spillover &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;" &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Partitioning&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Are provided at the core-platform layer – i.e. via Terracotta flagship technology of JVM-level clustering (DSO or Distributed Shared Objects). &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Some features are to be implemented as Best Practices, externally in the application and/or infrastructure:&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;" &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;WAN/DR Support, &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpLast" style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;" &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Security&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;So they are not depicted in the table below. Note that you &lt;a href="http://www.terracotta.org/web/display/docs/Configuration+Guide+and+Reference#ConfigurationGuideandReference-TIMs"&gt;can use an existing TIM&lt;/a&gt; or &lt;a href="http://www.terracotta.org/web/display/docs/Terracotta+Integration+Modules+Manual"&gt;package your integration&lt;/a&gt; as a TIM.&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;table class="MsoNormalTable" style="border: medium none ; width: 607.5pt; margin-left: 23.4pt; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0" width="810"&gt;  &lt;tbody&gt;&lt;tr style="height: 15.25pt;"&gt;   &lt;td colspan="2" style="border: 1pt solid black; padding: 0in 5.4pt; width: 1.5in; height: 15.25pt;" valign="top" width="144"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;APPLICATION INTERFACES&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 15.25pt;color:black black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;WHEN TO USE THIS INTERFACE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 99pt; height: 15.25pt;color:black black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;What TIMs do I need.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td colspan="5"  style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 274.5pt; height: 15.25pt;color:black black black -moz-use-text-color;" valign="top" width="366"&gt;   &lt;p class="MsoListParagraphCxSpLast" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;CACHE FEATURES&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 10.25pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 99pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Eviction (TTL, TTI)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Cache- specific Visibility/ Mgmt&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Querying&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="72"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Eventing&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;     &lt;/tr&gt;  &lt;tr style="height: 9.75pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; background: rgb(191, 191, 191) none repeat scroll 0% 0%; width: 49.5pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; height: 9.75pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="color: rgb(196, 188, 150);font-size:8;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(191, 191, 191) none repeat scroll 0% 0%; width: 58.5pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="color: rgb(196, 188, 150);font-size:8;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(191, 191, 191) none repeat scroll 0% 0%; width: 1.75in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="color: rgb(196, 188, 150);font-size:8;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(191, 191, 191) none repeat scroll 0% 0%; width: 99pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="color: rgb(196, 188, 150);font-size:8;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(191, 191, 191) none repeat scroll 0% 0%; width: 49.5pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="color: rgb(196, 188, 150);font-size:8;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(191, 191, 191) none repeat scroll 0% 0%; width: 63pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="color: rgb(196, 188, 150);font-size:8;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(191, 191, 191) none repeat scroll 0% 0%; width: 49.5pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="color: rgb(196, 188, 150);font-size:8;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;      &lt;/tr&gt;  &lt;tr style="height: 9.75pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;DSO Platform provides&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 99pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;Locality API&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Tools such as TDC, Ops-Center etc.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.75in; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="72"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Cluster   Events and JMX API&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;    &lt;/tr&gt;  &lt;tr style="height: 9.75pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Terracotta Modules/ TIMs&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 99pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;       &lt;/tr&gt;  &lt;tr style="height: 9.75pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;H2LC&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; background: white none repeat scroll 0% 0%; width: 1.75in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Application ORMs to the Database via Hibernate and is in need of a highly scalable, available, Distributed 2&lt;sup&gt;nd&lt;/sup&gt; Level Cache - i.e. a Hibernate Accelerator (3.1)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; background: white none repeat scroll 0% 0%; width: 99pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;tim-hibernate&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;tim-hibernate-cache&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;tim-map-evictor&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;tim-concurrent-collections&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;√ &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;(via hibernate statistics)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.75in; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="72"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;    &lt;/tr&gt;  &lt;tr style="height: 9.75pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;EHCACHE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Application is agnostic to Cache Store Implementation or is already using EHCache as a Cache Store.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 99pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;tim-ehcache-*&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;tim-ehcache-commons&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.75in; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="72"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;    &lt;/tr&gt;  &lt;tr style="height: 9.75pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;DISTRIBUTED MAP BUILDER&lt;span style=""&gt;    &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;If Cache-keys are Strings and you want a built-in Evictor.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 99pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;tim-map-evictor, tim-concurrent-collections&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.75in; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="72"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;    &lt;/tr&gt;  &lt;tr style="height: 9.75pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;TCCACHE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Do not   care about identity and want a distributed store with a get/put API –   This will free you from having to deal with Correct Locking (which is needed for Object Identity preservation) and Instrumentation sections in tc-config.xml (since what is in Terracotta is a byte-array) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 99pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;tim-tccache, tim-concurrent-collections&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.75in; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="72"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt;x&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;     &lt;/tr&gt;  &lt;tr style="height: 9.75pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;CSM&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;If Cache-Keys are Strings and you plan on implementing your own evictor – i.e.  you just need a performant distributed data-store with identity.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 99pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;tim-concurrent-collections&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.75in; height: 9.75pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="72"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;     &lt;/tr&gt;  &lt;tr style="height: 10.25pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;SEARCHABLE MAP&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;If you   want to be able to query your Map and get returned a sub-set and otherwise   maintain a Map-Like interface&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 99pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;tim-searchable&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;(coming soon)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="72"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;√&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;/tr&gt;  &lt;tr style="height: 10.25pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;ESOTERIC MAP Variations&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;If you   want a &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Non Partial HashMap or a , Non-Partial/Non- Clearable (Datastructures that are clearable by the Terracotta Virtual Memory Manager implement the Clearable interface) HashMap&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 99pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;tim-maps,   or&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;tim-tree-map-cache.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="72"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;     &lt;/tr&gt;  &lt;tr style="height: 10.25pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 99pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="72"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;/tr&gt;  &lt;tr style="height: 10.25pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;JDK&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;CHM&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;High   concurrency (given striped locks) and Key is not a String (If Key is a string, use CSM).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 99pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;None&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  tc-config.xml &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="72"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;    &lt;/tr&gt;  &lt;tr style="height: 10.25pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;HashMap&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;If you might be doing multi-segment operations on a CHM or may need coarser locking that  Collection-Level APIs such as get/put – then use a HashMap since it is  not implicitly locked by TC like a CHM is.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 99pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;None&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; tc-config.xml  &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="72"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt;x&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;    &lt;/tr&gt;  &lt;tr style="height: 10.25pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;Map (HashMaps)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Terracotta  does not implement partial keys. Therefore use this if the #keys are so large that the keys alone won't ever fit into a JVM &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 99pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Tim-maps&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;x&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="72"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt;x&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;    &lt;/tr&gt;  &lt;tr style="height: 10.25pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 99pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="72"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;     &lt;/tr&gt;  &lt;tr style="height: 10.25pt;"&gt;   &lt;td  style="border-style: none solid solid; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;SPRING&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 58.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="78"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="168"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;Spring just injects the framework /POJO and you cluster the underlying frameworks/   POJOs – see Examples of injecting Terracotta-clustered &lt;a href="http://www.terracotta.org/confluence/display/wiki/DEVELOPING+WITH+TERRACOTTA#DEVELOPINGWITHTERRACOTTA-Sampleapplicationsillustratingtheusageofterracottaandspringwithvariousopensourceframeworks."&gt;EHcache, Hibernate, Quartz etc. via Spring&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 99pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="132"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 63pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="84"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 49.5pt; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="66"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td  style="border-style: none solid solid none; padding: 0in 5.4pt; width: 0.75in; height: 10.25pt;color:-moz-use-text-color black black -moz-use-text-color;" valign="top" width="72"&gt;   &lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0.0001pt; text-align: center; line-height: normal;" align="center"&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;br /&gt;&lt;br /&gt; &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;u&gt;&lt;o:p&gt;&lt;span style="text-decoration: none;"&gt; &lt;/span&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;u&gt;COMMON TERRACOTTA-BASED DISTRIBUTED CACHE IMPLEMENTATION:&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;If one samples the hundreds of Production Deployments of Distributed Caches with Terracotta, 2-3 winners out of the 10 odd possible options (described in the above section) easily emerge. The rest are more esoteric and specific users have chosen those options/data-structures given some specific requirements in their use-cases. The 2-3 "market-share-based-winners" include:&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpFirst" style="text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;EHCache via tim-ehcache&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Hibernate 2&lt;sup&gt;nd&lt;/sup&gt; Level Cache via tim-hibernate-cache/tim-hibernate (with EHCache as the 2&lt;sup&gt;nd&lt;/sup&gt; level Cache provider in pre Terracotta 3.x versions and with Terracotta ConcurrentStringMap (CSM) as the 2&lt;sup&gt;nd&lt;/sup&gt; Level Cache Provider), if the ORM is in the application’s data-access path. &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpLast" style="text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Distributed-Map via tim-concurrent-collections.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;The approach is to marry the data-structure and interfaces (i.e. the cache) with the smart (fine-grained), transparent (no java-serialization/ externalization), correct (in conformance with the JMM) replication capabilities afforded by the Terracotta-DSO-platform to arrive at a scalable, highly-available Distributed Cache. &lt;/p&gt;  &lt;p class="MsoListParagraph"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Here is a description of the typical SDLC for a EHCache-Based Distributed-Cache Implementation, for example. &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpFirst" style="text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;INTEGRATION: &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;" &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Packaged as a TIM – so you just need tim-ehcache-commons and tim-ehcache (and possibly tim-async) …Modules. Based on what keys/values are being dumped into the EHCache Store, you may need tweaks to the tc-config.xml. Refer to this &lt;a href="http://www.terracotta.org/web/display/orgsite/EHCache+Integration"&gt;EHCache integration manual&lt;/a&gt;. &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;" &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Usage of tim-async is optional since it would depend on&lt;span style=""&gt;  &lt;/span&gt;what the application can tolerate. Use it if you can &lt;a href="http://www.terracotta.org/web/display/docs/Clustered+Async+Processing"&gt;write-behind to the database&lt;/a&gt;. If you need to write-through to the database – then the Hibernate integration would accommodate you, but in applications without Hibernate, recommend writing to the database and on-db-Transaction-commit writing to the clustered-cache (of course, it depends on the particulars of your application). &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;" &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Other best practices are to be aware of:&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;§&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Application TTL and TTI – setting it too low can result in too much garbage on the Terracotta Server and setting it too high increases cache-size needlessly (not to mention data-freshness concerns, if the database receives DML from underneath the application).&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;§&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Read/ Write Ratio – (Terracotta does exceedingly well in all these scenarios, but the value you derive is different)&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 2in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;·&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;All Read / No Write (except to hydrate): You deflect N-1 Queries off the database assuming N is the size of your cluster.&lt;span style=""&gt;  &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 2in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;·&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Mostly Read / Some Write (update): Database Deflection + Correctness across JVMs.&lt;span style=""&gt;  &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 2in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;·&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Mostly Write/ Some Read: Database Deflection + Correctness across JVMs. Might need transaction tuning as well.&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;TESTING/TUNING:&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;" &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Post Functional Testing, the next step is to usually execute stress tests -&lt;span style=""&gt;  &lt;/span&gt;to simulate production-level cache-sizes, TTL/TTI and Read/Write ratios and other Cache&lt;span style=""&gt;  &lt;/span&gt;I/O – tuning here&lt;span style=""&gt;  &lt;/span&gt;to meet SLAs would typically involve:&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;§&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.terracotta.org/confluence/display/wiki/TUNING+TERRACOTTA#TUNINGTERRACOTTA-HowdoItuneInstrumentationScope%3F"&gt;Instrumentation Tuning&lt;/a&gt; – may require you to reduce the scope of the instrumentation in your tc-config.xml. This depends on the object graphs that comprise the keys and values of the elements that are within the Cache.&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;§&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Lock tuning -&lt;span style=""&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 2in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;·&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;EhCache.concurrency may need to be changed from the default of 127. Higher concurrency allows multiple threads to perform simultaneous operations against EhCache.&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 2in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;·&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Lock Levels: Set ehcache.lock.readLevel = READ to something more optimistic if the application allows it. If application can afford to read stale data, set ehcache.lock.readLevel = NO_LOCK. This allows read to be performed without acquiring any lock, though the application runs the risk of not reading latest data/changes (and exceptions in some cases) – so not recommended unless the cache is more-or-less read-only and even then with caution.&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;§&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Eviction tuning - &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 2in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;·&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Tune ehcache.global.eviction* properties and &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 2in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;·&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Based on application needs try setting 'timeToIdleSeconds and/or timeToLiveSeconds' inside ehcache.xml to reasonable values.&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;§&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Memory Tuning - &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 2in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;·&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;     &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.terracotta.org/confluence/display/wiki/TUNING+TERRACOTTA#TUNINGTERRACOTTA-CanIgetdetailsofGarbageCollectionTuningwithTerracotta."&gt;Garbage Collection Tuning.&lt;/a&gt; &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 2in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;·&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.terracotta.org/confluence/display/wiki/TUNING+TERRACOTTA#TUNINGTERRACOTTA-WhatisDGCandwhyshouldItuneit.AndifIneedto%2ChowshouldItuneDGC."&gt;Distributed Garbage Collection Tuning.&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 2in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;·&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.terracotta.org/confluence/display/wiki/TUNING+TERRACOTTA#TUNINGTERRACOTTA-HowdoItuneFaultingBehavior"&gt;Fault/Flush Tuning&lt;/a&gt; if needed, based on cache-sizes and available Heap on Client and Terracotta Server JVMs. &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;§&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.terracotta.org/confluence/display/wiki/TUNING+TERRACOTTA#TUNINGTERRACOTTA-WriteHeavyPayloadThebottleneckisincommitting%22Terracottatransactions%22totheTerracottaserver.WhatcanIdo%3F"&gt;Transaction Tuning&lt;/a&gt;, if needed, to exploit the core-platform’s batching, windowing and transaction-folding optimizations and based on whether the application tends to write in a burst or creates a lot of cache-objects.&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;HARDENING and ROLLOUT:&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;" &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Once done – you may or may not wish to execute Failure Tests in your specific environment (Terracotta does execute close to &lt;a href="http://www.terracotta.org/web/display/docs/Configuring+Terracotta+For+High+Availability#ConfiguringTerracottaForHighAvailability-ClusterTestswithTerracotta"&gt;25+ HA tests&lt;/a&gt; to guarantee no Single Points of Failure in the architecture) and/or Long Running Tests. Of course, we recommend these, especially if the &lt;a href="http://www.terracotta.org/web/display/docs/Configuring+Terracotta+For+High+Availability#ConfiguringTerracottaForHighAvailability-HighAvailabilityFeatures"&gt;default heartbeats and tolerances&lt;/a&gt; and &lt;a href="http://www.terracotta.org/confluence/display/wiki/TUNING+TERRACOTTA#TUNINGTERRACOTTA-WhatarethetolerancesbetweenclientJVMsandTerracottaServerJVMS%3A"&gt;failover timings&lt;/a&gt; do not &lt;a href="http://www.terracotta.org/confluence/display/wiki/TUNING+TERRACOTTA#TUNINGTERRACOTTA-HowdoItuneNetworkActive%2FPassiveforfasterfailoverfromActivetoPassive."&gt;meet your SLA&lt;/a&gt;. &lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;" &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Getting ready for production additional involves &lt;a href="http://www.terracotta.org/confluence/display/wiki/DEPLOYING+TERRACOTTA#DEPLOYINGTERRACOTTA-WhatshouldImonitorwhenIdeployaTerracottaIntegrationintoProduction%3F"&gt;ensuring Monitoring is in place &lt;/a&gt;and the technology is socialized amongst the Operational Staff who run and maintain the cluster.&lt;span style=""&gt;  &lt;/span&gt;Various Terracotta run-books are very useful here (available with the Terracotta subscription). Your implementation may end up then looking like what is depicted in Figure1:&lt;/p&gt; &lt;br /&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt; &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__0dIuoFtHm0/SjPzX_eAavI/AAAAAAAAACg/2p9KCkynrVA/s1600-h/DistributedCachesWithTerracotta_Fig1.png.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 326px; height: 400px;" src="http://1.bp.blogspot.com/__0dIuoFtHm0/SjPzX_eAavI/AAAAAAAAACg/2p9KCkynrVA/s400/DistributedCachesWithTerracotta_Fig1.png.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5346884776118741746" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;u&gt;&lt;o:p&gt;&lt;span style="text-decoration: none;"&gt; &lt;/span&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;u&gt;&lt;o:p&gt;&lt;span style="text-decoration: none;"&gt; &lt;/span&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;u&gt;SUMMARY:&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;In summary you have many options in terms of Interfaces and the core-platform provides for the HA, Scale, Visibility and other non-functional features that a distributed Cache demands - You can read more at http://www.terracotta.org. to get to an implementation with Terracotta looks something like what is depicted here:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__0dIuoFtHm0/SjPySvSNc1I/AAAAAAAAACY/nXwl20mAa1U/s1600-h/DistributedCachesWithTerracotta_Fig2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 293px;" src="http://1.bp.blogspot.com/__0dIuoFtHm0/SjPySvSNc1I/AAAAAAAAACY/nXwl20mAa1U/s400/DistributedCachesWithTerracotta_Fig2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5346883586363323218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt; Hope this was useful both in terms of an overview and in terms of useful pointers to specific issues in your march across the SDLC. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2040226002278485965-1593420901936850807?l=javamuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javamuse.blogspot.com/feeds/1593420901936850807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2040226002278485965&amp;postID=1593420901936850807&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/1593420901936850807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/1593420901936850807'/><link rel='alternate' type='text/html' href='http://javamuse.blogspot.com/2009/06/so-you-want-terracotta-based.html' title='So... you want a Terracotta-based Distributed Cache'/><author><name>Iyer</name><uri>http://www.blogger.com/profile/12680952740383422001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__0dIuoFtHm0/SjPzX_eAavI/AAAAAAAAACg/2p9KCkynrVA/s72-c/DistributedCachesWithTerracotta_Fig1.png.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2040226002278485965.post-3080561341723028751</id><published>2009-01-21T21:14:00.000-08:00</published><updated>2009-01-22T18:39:24.867-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Publishing'/><category scheme='http://www.blogger.com/atom/ns#' term='Newspapers Online'/><category scheme='http://www.blogger.com/atom/ns#' term='Content Portal'/><category scheme='http://www.blogger.com/atom/ns#' term='Session'/><category scheme='http://www.blogger.com/atom/ns#' term='Terracotta'/><category scheme='http://www.blogger.com/atom/ns#' term='Content Management System'/><category scheme='http://www.blogger.com/atom/ns#' term='HttpSession'/><title type='text'>Terracotta Usage Amongst Content Portals</title><content type='html'>&lt;b&gt;&lt;u&gt;TYPICAL REQUIREMENTS:&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;    &lt;li&gt; Content Creation: A combination of&lt;ul&gt;&lt;li&gt;User-Generated&lt;/li&gt;&lt;li&gt;Feeds from Content Providers (e.g. Movies, Weather from Yahoo etc.)&lt;/li&gt;&lt;li&gt;Editorially Generated Content&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;br /&gt;    &lt;li&gt; Content Publishing: On demand, once approved.&lt;/li&gt;&lt;br /&gt;    &lt;li&gt; Content Portal sites often feature pay-for-content  services that imply:&lt;ul&gt;&lt;li&gt; User Subscription/Registration.&lt;/li&gt;&lt;li&gt; User Authentication and Authorization&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;br /&gt;    &lt;li&gt; Traditional Distribution of Caches that query the DB for User Profile Data and/or Content-Attributes/Specific Content&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;TYPICAL IMPLEMENTATION:&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;    &lt;li&gt;Typically Content Creation/Publication has been implemented:&lt;/li&gt;&lt;br /&gt;    &lt;ul&gt;&lt;li&gt; Against the database in that the CMS publishes to the database and any concomitant caches are thereafter cleared.  This has 2 issues: &lt;br /&gt;             &lt;ul&gt;&lt;li&gt; Database can get overloaded depending on the amount of content streaming in and based on the fact that caches get cleared once the new content gets published, which then results in a spike in database queries.&lt;/li&gt; &lt;li&gt; To hedge against spikes, often the caches are cleared only at graveyard-hours on the site. So, often there is a delay between content publication and availability for consumption.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;        &lt;/li&gt;&lt;br /&gt;        &lt;li&gt; With Terracotta:&lt;br /&gt;             &lt;ul&gt;&lt;li&gt;You solve both problems.  THE CMS application would publish against in memory Java data-structures which are replicated to JVMs via Terracotta that serve up the content to users of the Content Portal.&lt;/li&gt;&lt;li&gt; One thus obviates the usage of the database and cache clearing and hence content is available as soon as possible.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;        &lt;/li&gt;&lt;br /&gt;        &lt;li&gt;Example:&lt;br /&gt;             &lt;ul&gt;&lt;li&gt; Portal consists of multiple portlets. One portlet displays weather. Content for the portlet streams in through a Yahoo Feed. Weather for 5 zip-codes change - publication is done in-memory to Java data-structures.  (e.g. to specific elements in a CHM where key is ZipCode, Value is Weather-Forecast Object and the CHM is shared between Publication JVMs and Consumption JVMs).&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;        &lt;/li&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__0dIuoFtHm0/SXktXGth4zI/AAAAAAAAAB4/VxvraXVW-pg/s1600-h/ContentPortalsFigure.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 317px;" src="http://1.bp.blogspot.com/__0dIuoFtHm0/SXktXGth4zI/AAAAAAAAAB4/VxvraXVW-pg/s400/ContentPortalsFigure.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5294312711912547122" /&gt;&lt;/a&gt;&lt;br /&gt;     &lt;li&gt;Terracotta Solution Considerations (see figure):&lt;br /&gt;     &lt;ul&gt;&lt;li&gt;Publishing Application and Consumption Application are implemented as two different applications. &lt;/li&gt;&lt;br /&gt;      &lt;li&gt;The applications MUST be factored in such a way that both share common data structures that represents the content.&lt;/li&gt;&lt;br /&gt;      &lt;li&gt;Class Loader issues: Since these are 2 different applications, they feature different class loaders - so a common classloader is needed &lt;/li&gt;&lt;br /&gt;      &lt;li&gt;EXAMPLE:      &lt;ul&gt;&lt;li&gt; Tomcat appserver. CMS app deployed as CMSApp Context Root and Consuming app deployed as UserApp ContextRoot.&lt;/li&gt;&lt;li&gt;A class loader is created for each web application. The CMSApp ClassLoader loads all Unpacked-Classes+Resources in the CMSApp/WEB-INF/classes directory &amp;amp; Classes+Jars in the CMSApp/WEB-INF/lib directory of your web application archive, and are made visible to the containing web application, but to no others. The UserApp ClassLoader loads all Unpacked-Classes+Resources in UserApp/WEB-INF/classes and Classes+Jars in UserApp/WEB-INF/lib directory of your web application&lt;/li&gt; &lt;li&gt;Given this visibility problem now, you would need to have classes loaded off the Shared ClassLoader, so that all unpacked classes and resources in $CATALINA_BASE/shared/classes, as well as classes and resources in JAR files under $CATALINA_BASE/shared/lib, are made visible to all (and thus CMSApp and UserApp) Web Applications and the Classloader name across CMSApp/ UserApp remain identical (Terracotta requirement) &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;   &lt;li&gt;Subscription and User Authentication and Authorization:&lt;br /&gt; &lt;ul&gt;&lt;li&gt;Typically authentication workflow and authorization managed via Http-session.Terracotta gives you multiple options here&lt;/li&gt;&lt;br /&gt;     &lt;ul&gt;&lt;li&gt; See &lt;a href="http://www.terracotta.org/web/display/orgsite/User+AuthC+AuthZ"&gt;http://www.terracotta.org/web/display/orgsite/User+AuthC+AuthZ&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;         &lt;li&gt;Examples:&lt;br /&gt;      &lt;ul&gt;&lt;br /&gt;      &lt;li&gt;See Terracotta Reference implementation at &lt;a href="https://www.terracotta.org/web/display/orgsite/Exam+App+Function+Register"&gt;https://www.terracotta.org/web/display/orgsite/Exam+App+Function+Register&lt;/a&gt; and &lt;a href="http://www.terracotta.org/web/display/orgsite/Exam+App+Function+Login"&gt;http://www.terracotta.org/web/display/orgsite/Exam+App+Function+Login&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;      &lt;li&gt;See SPRING SECURITY ready-made integration at &lt;a href="http://forge.terracotta.org/releases/projects/tim-spring-security/"&gt;http://forge.terracotta.org/releases/projects/tim-spring-security/&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;             &lt;li&gt;See &lt;a href="http://www.ja-sig.org/products/cas/"&gt;CAS&lt;/a&gt; ready-made integration at &lt;a href="http://www.ja-sig.org/wiki/display/CASUM/Terracotta"&gt;http://www.ja-sig.org/wiki/display/CASUM/Terracotta&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;      &lt;li&gt;See &lt;a href="http://shibboleth.internet2.edu/"&gt;Shibboleth&lt;/a&gt; ready-made integration at &lt;a href="http://www.terracotta.org/web/display/orgsite/Shibboleth+Integration"&gt;http://www.terracotta.org/web/display/orgsite/Shibboleth+Integration&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;      &lt;li&gt;Custom: With custom implementations, authc/authz/workflow is Often stored as state in Http-session. See &lt;a href="http://www.terracotta.org/web/display/orgsite/HTTP+Session+Clustering"&gt; Terracotta Session replication&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;     &lt;/li&gt;&lt;li&gt;Traditional Distributed Caching: See &lt;a href="http://www.terracotta.org/web/display/orgsite/Data+Caching"&gt;http://www.terracotta.org/web/display/orgsite/Data+Caching&lt;/a&gt; and &lt;a href="http://javamuse.blogspot.com/2008/11/distributed-cachingdatabase-offload.html"&gt;http://javamuse.blogspot.com/2008/11/distributed-cachingdatabase-offload.html&lt;/a&gt; for caching JDBC/ORM querying of the database for Specific Content&lt;/li&gt;&lt;br /&gt;     &lt;li&gt;Other examples of Terracotta being used in Content Portals include Message Board Clustering (e.g JForum and others) and special case usages.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Hope those of you in the Portal business find this useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2040226002278485965-3080561341723028751?l=javamuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javamuse.blogspot.com/feeds/3080561341723028751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2040226002278485965&amp;postID=3080561341723028751&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/3080561341723028751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/3080561341723028751'/><link rel='alternate' type='text/html' href='http://javamuse.blogspot.com/2009/01/terracotta-usage-amongst-content.html' title='Terracotta Usage Amongst Content Portals'/><author><name>Iyer</name><uri>http://www.blogger.com/profile/12680952740383422001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__0dIuoFtHm0/SXktXGth4zI/AAAAAAAAAB4/VxvraXVW-pg/s72-c/ContentPortalsFigure.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2040226002278485965.post-7224508508854725065</id><published>2009-01-13T14:56:00.000-08:00</published><updated>2009-01-15T15:09:37.860-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ECommerce'/><category scheme='http://www.blogger.com/atom/ns#' term='Scalability'/><category scheme='http://www.blogger.com/atom/ns#' term='Availability'/><category scheme='http://www.blogger.com/atom/ns#' term='Black Friday'/><category scheme='http://www.blogger.com/atom/ns#' term='Terracotta'/><title type='text'>Terracotta Usage in Ecommerce</title><content type='html'>As this &lt;a href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;taxonomyName=Development&amp;amp;articleId=9121982&amp;amp;taxonomyId=11&amp;amp;pageNumber=1"&gt;Computer-world article&lt;/a&gt; indicates, even as late as 2008, most E-Commerce sites have not yet solved their scale and availability issues, resulting in serious business losses, at a time they can ill afford to do so. Most ECommerce sites are implemented in Java and causes of outage of course vary widely, but typically usual suspects include (but are not limited to) the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;  Malicious DOS Attacks/ Unintentional but excessive "Spidering"&lt;/li&gt;&lt;li&gt;  Poor Capacity Planning at the network tier:&lt;br /&gt;  &lt;/li&gt;     &lt;ul&gt;&lt;li&gt;Poor or Non-Existent CDN strategy (so no traffic is deflected off Source site)&lt;/li&gt;     &lt;li&gt;Load Balancer being overwhelmed.&lt;/li&gt;     &lt;li&gt;Network Bandwidth saturation&lt;/li&gt;     &lt;/ul&gt;&lt;li&gt; Poor Systems infrastructure&lt;/li&gt;&lt;li&gt; Misconfigured HTTP Settings (i.e. the several parameters in httpd.conf,  if Apache)&lt;/li&gt;&lt;li&gt; Misconfigured App-Server Settings (i.e. the several parameters in web.xml/server.xml if Tomcat, Connector related settings etc.)&lt;/li&gt;&lt;li&gt; Poor Garbage Collection tuning on JVMs (e.g. large # GCs, long Full GCs).&lt;/li&gt;&lt;li&gt; Database/Application MisConfiguration (e.g. sizing of SGA, DB Connection Pool etc.)&lt;/li&gt;&lt;li&gt;Software Development Issues:&lt;/li&gt;&lt;ul&gt;&lt;li&gt; Database overwhelmed in terms of Reads/Writes; Quality of PL/SQL Algorithms/Code (e.g. DB Locks, Full table scans etc.)&lt;/li&gt;      &lt;li&gt;   Poor Application Architecture/ Design/ Implementation/ Configuration.&lt;/li&gt;&lt;br /&gt;   &lt;/ul&gt;&lt;/ol&gt;The last one - i.e. poor design and implementation of servlets that constitute the Commerce Site and Backend Systems is certainly something that consumes the bulk of the Development team's effort/time. A common theme here amongst front-end Java Developers is the over-dependence on a already heavily used database - given that it is there and provides persistence. This seriously limits scale, so that during traffic spikes, when the business needs the Systems to be most available (given the number of prospective customers) is exactly when the system &lt;b&gt;&lt;i&gt;blacks-out or browns-out.&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Terracotta can help reduce and obviate RDBMS usage in many cases and allow you to safely operate "in-memory", that is durable across JVM life-cycles - so that you get scale and HA while allowing you to maintain a POJO-based programming environment - see &lt;a href="http://www.terracotta.org/"&gt;http://www.terracotta.org&lt;/a&gt; and especially, &lt;a href="http://www.terracotta.org/web/display/orgsite/Kill+Your+Database"&gt;http://www.terracotta.org/web/display/orgsite/Kill+Your+Database&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;LET US SEE HOW, Terracotta would add value specifically in E-Commerce Applications. Typically, the E-commerce business involves both FRONT-END (Websites, SOAP services etc.) and BACK-END systems (Supply Chain Planning/Fulfillment/Warehousing) systems. i.e. &lt;br /&gt;&lt;br&gt;&lt;h2&gt; A&amp;gt; ORDER ACQUISITION SYSTEMS to enable:&lt;/h2&gt;&lt;br&gt;&lt;table border="1" rules="all" vspace="10" width="100%" frame="box" hspace="10"&gt;&lt;thead&gt;&lt;tr bgcolor="#99ccff"&gt;&lt;th valign="top" width="5%"&gt;SUB SYSTEM&lt;/th&gt;&lt;th valign="top" width="20%"&gt;PURPOSE&lt;/th&gt;&lt;th valign="top" width="20%"&gt;COMMON TERMINOLOGY/ PROBLEMS&lt;/th&gt;&lt;th valign="top" width="20%"&gt;COMMON SOLUTIONS/ PROBLEMS with the SOLUTIONS&lt;/th&gt;&lt;th valign="top" width="35%"&gt;TERRACOTTA VALUE-ADD&lt;/th&gt;&lt;/tr&gt;&lt;/thea&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;td valign="top" width="5%"&gt; &lt;b&gt;ELECTRONIC CATALOG CREATION/ MODIFICATION&lt;/b&gt; &lt;/td&gt;&lt;br /&gt;&lt;td valign="top" width="20%"&gt; MERCHANTS decide on what to sell. Procure inventory through BUYERS. Product goes through large workflow(akin to CMS) before ready for publication to catalog (e.g. copy, price,   description, photography etc.) as a saleable item.&lt;/td&gt;&lt;td valign="top" width="20%"&gt; ITEM CREATION/CATALOG MODIFICATION: Typically, each these state changes via this CMS-like Workflow are typically stored in a RDBMS.&lt;/td&gt;&lt;td valign="top" width="20%"&gt; Employ a home-grown or off-shelf CMS or Document Management System before final publication to the catalog - database.&lt;/td&gt;&lt;br /&gt;&lt;td valign="top" width="35%"&gt;&lt;ul&gt;&lt;li&gt;You could obviate the need for the RDBMS and maintain workflow state in Terracotta, given that Terracotta provides durable, Network Attached Memory for your Java Applications . See: &lt;a href="http://www.terracotta.org/web/display/orgsite/What+Is+Terracotta"&gt;http://www.terracotta.org/web/display/orgsite/What+Is+Terracotta&lt;/a&gt; and &lt;a href="http://orionl.blogspot.com/2008/03/terracotta-is-not-object-cache.html"&gt;http://orionl.blogspot.com/2008/03/terracotta-is-not-object-cache.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;HOWEVER, given the volumes and the fact that this is an internal company process, usually scale/HA is not a serious problem, so there may not be much ROI to be gained with Terracotta here.&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="5%"&gt; &lt;b&gt;&lt;u&gt;ELECTRONIC CATALOG PRESENTATION&lt;/u&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" width="20%"&gt; Users browse through a  pre-determined product classification hierarchy - Departments/Categories/Sub-Categories/Shelves &lt;/td&gt;&lt;td valign="top" width="20%"&gt;BROWSE: Not caching Browsing activity leads to RDBMS saturation especially under high volume.Most sites typically report that 90% of all activitiy on the site is BROWSE/SEARCH. &lt;/td&gt;&lt;td valign="top" width="20%"&gt;CATALOG CACHE - i.e. local Cache on each JVM of Catalog Database queries&lt;/td&gt;&lt;td valign="top" width="35%"&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Distribute the CATALAOG-CACHE via Terracotta with minimal / no work. This implies that the database sees the query for a given Key, just once and otherwise results are served from cache. Terracotta is about as efficient as it can get with regards to minimizing replication payload. CATALOG-CACHE is presumably mostly read, but with Terracotta distributing it and providing correctness guarantees across JVMs in the cluster, you could allow intra-day updates.&lt;/li&gt;&lt;li&gt;See: &lt;a href="https://www.terracotta.org/web/display/orgsite/Data+Caching"&gt;https://www.terracotta.org/web/display/orgsite/Data+Caching&lt;/a&gt;   and &lt;a href="http://javamuse.blogspot.com/2008/11/distributed-cachingdatabase-offload.html"&gt;http://javamuse.blogspot.com/2008/11/distributed-cachingdatabase-offload.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=""&gt;&lt;td valign="top" width="5%"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" width="20%"&gt;Users search for specific products. &lt;/td&gt;&lt;br /&gt;&lt;td valign="top" width="20%"&gt;SEARCH: Not caching Search activity leads to Search Engine saturation especially under high volume&lt;/td&gt;&lt;td valign="top" width="20%"&gt;Implement SEARCH CACHE on each local JVM&lt;/td&gt;&lt;td valign="top" width="35%"&gt;&lt;ul&gt;&lt;li&gt;Distribute the SEARCH CACHE via Terracotta. Search Engine sees a query for a given key just once and therafter results are served from cache. Terracotta is about as efficient as it can get with regards to minimizing replication payload. &lt;/li&gt;&lt;li&gt; Mostly read. See &lt;a href="https://www.terracotta.org/web/display/orgsite/Data+Caching"&gt;https://www.terracotta.org/web/display/orgsite/Data+Caching&lt;/a&gt;   and &lt;a href="http://javamuse.blogspot.com/2008/11/distributed-cachingdatabase-offload.html"&gt;http://javamuse.blogspot.com/2008/11/distributed-cachingdatabase-offload.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="5%"&gt;&lt;/td&gt;&lt;td valign="top" width="20%"&gt;Inventory position (i.e. Availability Status) being up to date is of utmost importance. If Out-Of-Stock displayed (if inventory currently exists) then lost sales imply opportunity cost. If In-Stock displayed and item out of stock, there is a   fulfillment issue &lt;/td&gt;&lt;td valign="top" width="20%"&gt;INVENTORY CACHE: If not cached, Database saturated. If cached - typically, Inventory cache not up to date vis-à-vis back-end systems and inconsistent across JVMs&lt;/td&gt;&lt;td valign="top" width="20%"&gt;INVENTORY CACHE is locally cached and when it changes within the database, the change is distributed via JMS. Alternatively, there is no change propagation but one could keep the INVENTORY CACHE TTL very low  (e.g. a few minutes). In either case, there is a risk of the CACHE position being incorrectly reflected across JVMs at any point in time. &lt;/td&gt;&lt;td valign="top" width="35%"&gt;&lt;ul&gt;&lt;li&gt;Distribute the Inventory Cache via Terracotta - you are guaranteed inter-JVM correctness and you simplify code by reducing dependency on JMS and other mechanisms of state replication.&lt;/li&gt;&lt;li&gt; High writes/reads (Comparison Shopping WebSites may involve frequent price changes as well) See &lt;a href="https://www.terracotta.org/web/display/orgsite/Data+Caching"&gt;https://www.terracotta.org/web/display/orgsite/Data+Caching&lt;/a&gt;   and &lt;a href="http://javamuse.blogspot.com/2008/11/distributed-cachingdatabase-offload.html"&gt;http://javamuse.blogspot.com/2008/11/distributed-cachingdatabase-offload.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr style=""&gt;&lt;td valign="top" width="5%"&gt; &lt;b&gt;&lt;u&gt;USER AUTHENTICATION, INTEREST and PURCHASE&lt;/u&gt;&lt;/b&gt; &lt;/td&gt; &lt;td valign="top" width="20%"&gt;Mechanisms to identify the user, and allowing the user to express Desire for a product and Enabling the retail Transaction.&lt;/td&gt;&lt;td valign="top" width="20%"&gt;AUTHENTICATION/ AUTHORIZATION information - needs to be preserved across requests since HTTP is a stateless protocol. Typically state preserved in a HTTP SESSION that is keyed off session-id and session-id is written as a cookie to the user's browser.&lt;/td&gt;&lt;td valign="top" width="20%"&gt; If HTTP Session is not replicated and persisted elsewhere- losing a JVM would imply a poor user experience, since the user would have to re-authenticate and/or re-establish their position in a workflow.  &lt;/td&gt;&lt;td valign="top" width="35%"&gt;&lt;ul&gt;&lt;li&gt;Cluster HTTP SESSIONS with Terracotta for High Availability.&lt;/li&gt;&lt;li&gt; See: &lt;a href="http://www.terracotta.org/web/display/orgsite/HTTP+Session+Clustering"&gt;http://www.terracotta.org/web/display/orgsite/HTTP+Session+Clustering&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=""&gt;&lt;td valign="top" width="5%"&gt;&lt;/td&gt;&lt;td valign="top" width="20%"&gt;Allow the user to express interest in a basket of products&lt;/td&gt;&lt;td valign="top" width="20%"&gt;SHOPPING CART/ WISH LISTS&lt;/td&gt;&lt;br /&gt;&lt;td valign="top" width="20%"&gt;Stored in HTTP Session or Cache keyed off customer-id (if registered customer) / visitor-id (if unregistered customer). If HTTP Session is not replicated and persisted elsewhere- losing a JVM would imply a poor user experience, since the user would lose his/her cart&lt;/td&gt;&lt;td valign="top" width="35%"&gt;&lt;ul&gt;&lt;li&gt;Cluster HTTP Session with Terracotta for high availability of HTTP Sessions. &lt;/li&gt;&lt;li&gt;See &lt;a href="http://www.terracotta.org/web/display/orgsite/HTTP+Session+Clustering"&gt;http://www.terracotta.org/web/display/orgsite/HTTP+Session+Clustering&lt;/a&gt;  and &lt;a href="https://www.terracotta.org/web/display/orgsite/User+Session"&gt;https://www.terracotta.org/web/display/orgsite/User+Session&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=""&gt;&lt;td valign="top" width="5%"&gt;&lt;/td&gt;&lt;td valign="top" width="20%"&gt; Enable execution of the buying transaction&lt;/td&gt;&lt;td valign="top" width="20%"&gt; CHECKOUT - typically implemented as a workflow since it is a multi-stage process across several HTTP Requests involving Credit-Card information, Shipping information etc.&lt;/td&gt;&lt;td valign="top" width="20%"&gt; Users position in the workflow and pre-validated input is typically stored in the HTTP Session.If HTTP Session is not replicated and persisted elsewhere- losing a JVM would imply a poor user experience, since the user would be thrown out of the checkout process and have to restart all over &lt;/td&gt;&lt;td valign="top" width="35%"&gt;&lt;ul&gt;&lt;li&gt;HTTP SESSIONS clustered with Terracotta for High Availability. One could even hedge against DB unavailability by collecting the orders in a LinkedBlockQueue for example (made durable by Terracotta) and later draining it asynchronously to the database&lt;/li&gt;&lt;li&gt; See &lt;a href="http://www.terracotta.org/web/display/orgsite/HTTP+Session+Clustering"&gt;http://www.terracotta.org/web/display/orgsite/HTTP+Session+Clustering&lt;/a&gt;  and &lt;a href="https://www.terracotta.org/web/display/orgsite/User+Session"&gt;https://www.terracotta.org/web/display/orgsite/User+Session&lt;/a&gt; and &lt;a href="http://forge.terracotta.org/releases/projects/tim-async/"&gt;http://forge.terracotta.org/releases/projects/tim-async&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt; B&gt; ORDER FULFILLMENT SYSTEMS:&lt;/h2&gt;&lt;br /&gt;&lt;table align="left" border="1" frame="box" rules="all" width="100%" hspace=10 vspace=10&gt;&lt;thead&gt;&lt;tr bgcolor="#99ccff"&gt;&lt;th valign="top" width="5%"&gt;SUB SYSTEM&lt;/th&gt;&lt;br /&gt;&lt;th valign="top" width="20%"&gt;PURPOSE&lt;/th&gt;&lt;th valign="top" width="20%"&gt;COMMON TERMINOLOGY/ PROBLEMS&lt;/th&gt;&lt;th valign="top" width="20%"&gt;COMMON SOLUTIONS/ PROBLEMS with the SOLUTIONS&lt;/th&gt;&lt;th valign="top" width="35%"&gt;TERRACOTTA VALUE-ADD&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="5%"&gt; &lt;b&gt;OMS (ORDER MANAGEMENT SYSTEMS)&lt;/b&gt; &lt;/td&gt;&lt;td valign="top" width="20%"&gt; Decomposition of the order into order line-items (e.g. an order may include flowers and basket balls each of which is fulfilled by a different distributor/warehouse)&lt;/td&gt;&lt;td valign="top" width="20%"&gt; OMS typically requires a fair bit of complex algorithmic knowledge to arrive at the right decomposition of Orders into Order-line items &lt;/td&gt;&lt;td valign="top" width="20%"&gt; Typically executed as a DBMS job&lt;/td&gt;&lt;td valign="top" width="35%"&gt; The database is the right place to do this work given the algorithmic complexity and the amount of data to be referenced.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="top" width="5%"&gt; &lt;b&gt;&lt;u&gt;FULFILLMENT SYSTEMS&lt;/u&gt;&lt;/b&gt; &lt;/td&gt;&lt;td valign="top" width="20%"&gt; Now that orders have been collected, there is a whole machinery needed to actually deliver the product to the customer.&lt;/td&gt;&lt;td valign="top" width="20%"&gt; FULFILLMENT SYSTEMS: Must handle B2B work with 3rd party distributors and warehouses along with order line-item lifecycle &lt;/td&gt;&lt;td valign="top" width="20%"&gt;Typically state-changes to the order-line-item lifecycle are reflected within a Fulfillment and Order Management database, which then results in backlogs from "Order Confirmation" Emails to updates of the status of the order line-item as it proceeds through the warehouse.&lt;/td&gt;&lt;td valign="top" width="35%"&gt;&lt;ul&gt;&lt;li&gt;By doing some of the computations around how order-line-items get divvied up and sequenced amongst distributors and absorbing state changes in memory and later asynchronously flushing these to the database, you can scale-out your fulfillment systems. Sending out emails to customers to keep them notified of fulfillment movement can be scaled out across multiple "Worker" JVMs.&lt;/li&gt;&lt;br /&gt;&lt;li&gt; See Terracotta Master Worker framework at &lt;a href="http://www.terracotta.org/web/display/orgsite/Master+Worker"&gt; http://www.terracotta.org/web/display/orgsite/Master+Worker&lt;/a&gt; and  &lt;a href="http://www.terracotta.org/web/display/orgsite/Batch+Processing"&gt;http://www.terracotta.org/web/display/orgsite/Batch+Processing&lt;/a&gt; which allows for a useful way to partition work amongst a set of participating JVMs and also see &lt;a href="http://forge.terracotta.org/releases/projects/tim-async/"&gt;http://forge.terracotta.org/releases/projects/tim-async/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="5%"&gt; &lt;b&gt; CUSTOMER SERVICE&lt;/b&gt; &lt;/td&gt;&lt;td valign="top" width="20%"&gt; Deal with customers who have had issues either during placement of the order or in terms of the order fulfillment i.e. returns, etc.&lt;/td&gt;&lt;td valign="top" width="20%"&gt; CUSTOMER SERVICE call spike could impact the Customer and Order Database in terms of read/write activity.&lt;/td&gt;&lt;td valign="top" width="20%"&gt; A complex set of entities (Customers, Order History, Fulfillment status of specific orders etc.) need to be cached. Problems with caching this data per customer is that cache-hit ratio is very low. (i.e. the customer profile is typically needed for just the one contact the customer may have with customer service).&lt;/td&gt;&lt;td valign="top" width="35%"&gt; One could pre-hydrate certain portions of the cache (e.g. if a spike of calls around a particular product) and/or Distribute a Reference Cache of Products to cut database latency to a certain extent.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;IN SUMMARY: You could use Terracotta for:&lt;/h2&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt; &lt;b&gt;HTTP SESSION CLUSTERING:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To provide high availability to your HTTP SESSION(which likely contains user-authentication information, shopping cart, position within checkout).&lt;/li&gt;&lt;li&gt;Terracotta's Session Clustering implementation is the best in the market in terms of minimizing session replication overhead, transparency and visibility.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;b&gt; CACHE DISTRIBUTION:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; To distribute CATALOG CACHE, SEARCH CACHE, INVENTORY CACHE and elements of the family of Caches needed for CUSTOMER SERVICE.&lt;/li&gt;&lt;li&gt; Terracotta supports a variety of distributed caches (from EHCache to Hibernate to POJOs implemented as Hashmaps, CHMs or any arbitrary collection grouping etc.)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;b&gt; INTER-JVM CO-ORDINATION/BATCH PROCESSING &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To co-ordinate amongst participating JVMS for Customer notification, Work allocation amongst warehouses, Update of Fulfillment life-cycle changes (asyncrhonously drained to the database), etc.&lt;/li&gt;&lt;li&gt; Terracotta master-worker framework encapsulates the distribution of work amongst "workers" and aggregation of the output of individual "workers" and exposes some interfaces for you to implement any application specific logic.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;In addition, there are several other systems that comprise a E-Commerce business:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; WAREHOUSE MANAGEMENT SOFTWARE: Planning for work for each shift of the warehouse and Enabling the execution of the Pick, Cartonization, Shipment of the packaged product. (e.g. Retek)&lt;/li&gt;&lt;li&gt; WAREHOUSE PLANNING: Linear Programming Exercise to minimize shipping costs given demand forecast and Warehouse Locations and Fulfillment portfolio (e.g. Manugistics, ILog).&lt;/li&gt;&lt;li&gt; DEMAND FORECASTING: Forecasting demand based on history and new trends. Grouping the demand temporally and geographically (e.g. Manugistics, i2 etc.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt; BUSINESS METRICS MANAGEMENT: Recording user click-trail and make marketing/merchandising decisions (e.g. Coremetrics, Omniture etc.) and SEVERAL OTHERS &lt;/li&gt;&lt;li&gt; However, these are often procured as shrink-wrapped software from other vendors. So you may have more luck persuading the vendor to partner with Terracotta if scale and HA of the solution are unsatisfactory. Alternatively, if these are home grown Java based systems, you could investigate what data-structures need to be DSO (Distributed Shared Objects), so that they become durable, Since Terracotta is a general purpose platform that clusters at the JVM-Level - it is applicable in any POJO based app. See &lt;a href="http://www.terracotta.org/web/display/orgsite/JVM+Level+Clustering"&gt;http://www.terracotta.org/web/display/orgsite/JVM+Level+Clustering&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;See &lt;a href="http://www.terracotta.org"&gt;http://www.terracotta.org&lt;/a&gt; and &lt;a href="http://www.terracottatech.com"&gt;http://www.terracottatech.com&lt;/a&gt; for more detail.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2040226002278485965-7224508508854725065?l=javamuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javamuse.blogspot.com/feeds/7224508508854725065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2040226002278485965&amp;postID=7224508508854725065&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/7224508508854725065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/7224508508854725065'/><link rel='alternate' type='text/html' href='http://javamuse.blogspot.com/2009/01/terracotta-usage-in-ecommerce.html' title='Terracotta Usage in Ecommerce'/><author><name>Iyer</name><uri>http://www.blogger.com/profile/12680952740383422001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2040226002278485965.post-3236115201734441674</id><published>2008-11-30T15:17:00.000-08:00</published><updated>2009-01-14T14:12:59.222-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database offload'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='ibatis'/><category scheme='http://www.blogger.com/atom/ns#' term='hashmap'/><category scheme='http://www.blogger.com/atom/ns#' term='toplink'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrent hashmap'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed cache'/><category scheme='http://www.blogger.com/atom/ns#' term='Terracotta'/><category scheme='http://www.blogger.com/atom/ns#' term='oscache'/><category scheme='http://www.blogger.com/atom/ns#' term='ehcache'/><category scheme='http://www.blogger.com/atom/ns#' term='swarmcache'/><title type='text'>Distributed Caching/Database Offload with Terracotta DSO</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/__0dIuoFtHm0/STq0ghXrxzI/AAAAAAAAABY/wPJrIW3DGuE/s1600-h/DistributedCache_DBOffLoad_Terracotta.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 311px; height: 400px;" src="http://2.bp.blogspot.com/__0dIuoFtHm0/STq0ghXrxzI/AAAAAAAAABY/wPJrIW3DGuE/s400/DistributedCache_DBOffLoad_Terracotta.jpg" alt="" id="BLOGGER_PHOTO_ID_5276728384224479026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;You've probably heard about how Terracotta DSO (Terracotta's flagship general purpose JVM-level clustering technology) can help you offload your database.   &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;You have a variety of choices depending on your implementation and your goals - This article tries to bring them all together in 1 place so you could more easily determine what Terracotta offering better suits your needs.&lt;br /&gt;&lt;br /&gt;See the attached diagram for a decision matrix of sorts. The Green Lozenges lead you to products on terracotta.org that might best fit your stack.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;In a nutshell:&lt;/span&gt; &lt;ul style="font-family: trebuchet ms;"&gt;&lt;li&gt;At a high-level, the first step is to acknowlede the problem with the implementation.&lt;/li&gt;&lt;li&gt;This problem will typically manifest itself as UNACCEPTABLE LATENCY associated with certain application transactions OR as DATABASE RESOURCES Being PEGGED (e.g. CPU running uncomfortably high, for the DBA/SysAdmin's comfort).&lt;/li&gt;&lt;li&gt;Now, it follows that if the data the App is mutating is "close" to the application then that is much better from a latency perspective, than if the data has to be fetched off the network from your SGA/Disk that comprises your Oracle Database Instance. This data may rightfully live on the database but it will still greatly improve latency if all operations were done in memory against pre-fabricated Domain Model Objects. &lt;span style="font-style: italic; font-weight: bold;"&gt;Enter CACHING&lt;/span&gt;.  Now your application presumably runs on a cluster of JVMs - so just caching locally on a given JVM, would render the caches inconsistent amongst the JVMs, if these caches and or the Database are also receiving updates to the underlying data. &lt;span style="font-weight: bold; font-style: italic;"&gt;Enter DISTRIBUTED CACHING &lt;/span&gt;- where all Read and Write access now occurs in Memory across all the cluster JVMs (and is kept in synch with the database - by "writing-through" or "writing-behind"). i.e. Decide if you just need Caching (e.g. read only data set), or you need Distributed Caching ( a data-set that is being modified by the application as well. A Distributed Cache for a read-only data-set only helps in reducing query load to the database by 1/N where N is the number of client-JVMs in the cluster).&lt;/li&gt;&lt;li&gt;Once you've established that Distributed Caching is the solution - decide on whether changes need to be persisted to the Database, and if so, need to be written synchronously (write through) or asynchronously (write behind).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Decide on whether the application can tolerate any incorrectness amongst threads on different JVMs reading/writing to the cache. Terracotta is really the only solution, in my opinion, if the application cannot tolerate ANY incoherent concurrent access, whilst still delivering scale/performance.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;In summary:&lt;/span&gt;&lt;br /&gt;A&gt; There are several technologies that enable "DISTRIBUTED CACHES". So in that usage - yes, Terracotta is one of many such "distributed cache" products in the market - but Terracotta's Networked Attached Memory innovation and implementation offer some unique and powerful advantages:&lt;/span&gt; &lt;ol style="font-family: trebuchet ms;"&gt;&lt;li&gt;Preservation of your Java Programming Model - you write natural Java - no new API to program to. You could thus cluster your own custom caches be they implemented as Hashmaps, Hastables, ConcurrentHashMaps, LinkedHashMaps etc.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Correctness guarantees (as defined by the Java Memory Model) of access across the cluster of participating JVMs.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ready Made clustering solutions (Terracotta Integration Modules - TIMs) for popular OSS caches (e.g. EHcache etc.).&lt;/li&gt;&lt;li&gt;Ready Made support for ORMs (Terracotta Integration Modules - TIMs): Hibernate (Detached-Mode, 2nd Level Cache); Ibatis etc.&lt;/li&gt;&lt;li&gt;"Intelligent replication" to minimize Network Chatter and Network Replication payloads (byte code injection gurantees only mutated Object Fields are shipped to at least 1 other element in the network - the Terracotta Server (and more than 1 if other elements in the cluster reference that field)). &lt;/li&gt;&lt;li&gt;Abilitity for the cache to exceed the size of HEAP on a given application JVM without the need for partitioning (assuming somewhat Gaussian access patterns across key-space).&lt;/li&gt;&lt;li&gt;In depth Monitoring and Visibility via the Developer Console and the Terracotta Operations Center.&lt;/li&gt;&lt;li&gt;L1 (component in client JVM), L2 (dedicated Terracotta JVM) design with persistence affords higher Level of HA - e.g. cache preserved even if all JVMs are lost. HA is in the box - in that no Shared Disk be provisioned.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;JMX Events and Hooks to respond programatically to cluster situations such as Client JVM failure or new Client JVM introduction.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;OSS Model of Distribution and many others..... &lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family:trebuchet ms;"&gt;In addition,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;B&gt; Evaluate if certain data sets in the database really needs to be persisted in the database or if the persistence afforded by Terracotta suffices. Typically - data should be in your RDBMS/System of Record&lt;/span&gt; &lt;ul style="font-family: trebuchet ms;"&gt;&lt;li&gt;If it is long-lived and business-critical. See &lt;a href="http://tech.puredanger.com/2008/08/01/thinking-about-data-lifetimes/"&gt;http://tech.puredanger.com/2008/08/01/thinking-about-data-lifetimes/&lt;/a&gt; &lt;/li&gt;&lt;li&gt;If the Data need to be Reported on?&lt;/li&gt;&lt;li&gt;If the Data need to be queried extensively along many diverse criteria - SQL is much more expressive than OQL or any such option? (e.g. if you have an entity X with 3 attributes and Y with 4 attributes where 1 attribute is common across them then you can query X alone in 3C1 + 3C2 + 3C3 = 7 ways and Y alone in 4C1 + 4C2 + 4C3 + 4C4 = 15 ways and X &amp;amp; Y together  in multiple other ways).&lt;/li&gt;&lt;/ul&gt; &lt;span style="font-family:trebuchet ms;"&gt;In cases other than the ones mentioned above - there is a strong possibility that you could just work off memory, assuming some technology like Terracotta gave you HA for that chunk of memory. Advantages apart from DB Offload is the simpler code base - since one simply works off the Java Domain Model, where Terracotta delivers HA and correctness of access for those data structures, without the need to involve a Database and the marshalling/unmarshalling code to overcome the impedance mismatch between the object world and the relational world.&lt;/span&gt;  &lt;span style="font-family:trebuchet ms;"&gt;This has been proven out on several occasions now - you can get more at &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.terracotta.org/web/display/orgsite/Common+Use+Patterns"&gt;http://www.terracotta.org/web/display/orgsite/Common+Use+Patterns&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So hopefully after reading this, it is easier for you to determine which Terracotta offering best solves your data-base offload problem....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2040226002278485965-3236115201734441674?l=javamuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javamuse.blogspot.com/feeds/3236115201734441674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2040226002278485965&amp;postID=3236115201734441674&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/3236115201734441674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/3236115201734441674'/><link rel='alternate' type='text/html' href='http://javamuse.blogspot.com/2008/11/distributed-cachingdatabase-offload.html' title='Distributed Caching/Database Offload with Terracotta DSO'/><author><name>Iyer</name><uri>http://www.blogger.com/profile/12680952740383422001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/__0dIuoFtHm0/STq0ghXrxzI/AAAAAAAAABY/wPJrIW3DGuE/s72-c/DistributedCache_DBOffLoad_Terracotta.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2040226002278485965.post-7883022443504034277</id><published>2008-06-25T20:56:00.000-07:00</published><updated>2009-01-16T16:34:53.439-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tuning'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Terracotta'/><title type='text'>Tuning, Testing, Deploying Terracotta Implementations - how does my application time-to-market change?</title><content type='html'>&lt;div&gt;  &lt;/div&gt;&lt;p style="text-align: left;" class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;I work at Terracotta with the Field-Engineering Team. What we have noticed over 100s of implementations, is that a lot of technology-adaptors thus far, are pretty adept at getting to Dev Completion with Terracotta-DSO on their own. This coupled with the Terracotta Integration Module strategy (see &lt;a href="http://www.terracotta.org/confluence/display/integrations/Home"&gt;http://www.terracotta.org/confluence/display/integrations/Home&lt;/a&gt; ) makes me believe that Terracotta’s promise of maintaining natural Java Semantics and hence reducing the level of effort needed by the Developer to cluster his/her app is, by and large, very real. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: left;" class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;Another observation though is that, self-adopters while successful at getting to Integration-Complete phases of their projects, have needed, relatively speaking, more hand-holding with regards to tuning, testing and deploying their applications into production. Reasons are: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;  &lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;For the most part, programming languages feature no specification of behavioral characteristics outside of the contractual interface specification of inputs and resultant outputs. As an example, let's take the notion of sizing collections. We all understand that one should pre-size collections, so as to avoid expensive rehashing at run-time. &lt;/span&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;At a default of 16 and load facotr of .75, as soon as the size of the Hashtable gets to 12, we are already paying the cost of a rehash (to roughly 32).&lt;/span&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;But very few developers actually size their collections due to whatever reason (ignorance, negligence, or genuine inability to predict the collection-size).  It becomes a later mop-up tuning task, as against being accounted for during implementation....Now a Hashtable/Hashmap with some self-correcting size related heuristics or some eventing on rehash (so one can react to it programmatically) would be useful - but in the absence of one, there is no substitute to competence when implementing.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;The above argument is to highlight that even with technologies (such as Terracotta) that modify byte-code to give you desirable characteristics of add-a-node-predictive-scale and High Availability,  there is really no substitute for thought and discipline when engineering, rigor during testing and scientific methodologies when stress-testing and deploying.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;Of course, Terracotta is a byte-code enhancing technology and is working on providing the end-user more tooling, more visibility and more rules/inference-engines to suggest possible root-causes – and hence ease the process across the entire SDLC. You already get the gist of this approach via the &lt;a href="http://www.terracotta.org/confluence/display/orgsite/Get+Snapshot+Visualization+Tool"&gt;Snapshot Visualization Tool&lt;/a&gt; and there is a lot more, coming down the pipe.&lt;/span&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;    &lt;/div&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p style="text-align: left;" class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;So then assuming that you have had to make some delta-changes to your application to get to Dev-Completion (e.g. initialize Terracotta transients , modify the coarse-ness of locks etc.) what is the typical time spent around Tuning, Testing, Deploying ?  Perhaps these comparisons between any Java Application and a Terracotta-integrated Java Application can highlight the delta involved - this way you could have a clearer  understanding of how time-to-market for your application changes, when you integrate Terracotta from POC-Production.&lt;br /&gt;(Note that java Performance tuning is such a vast topic – and so we aren’t talking about all possible ways to enhance performance/scale of your Java app itself, so no NIO or AWT improvements for example -  just identifying what one typically does during Terracotta tuning and how really a fair bit of it is similar to what one would do, without Terracotta in the picture, in the first place.) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p style="text-align: center;" class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p style="text-align: left;" class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;"&gt;&lt;span style="font-size:100%;"&gt;Tuning Terracotta:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt; See &lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-TUNINGTERRACOTTA"&gt;here &lt;/a&gt; for several common practices:&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: left;" class="MsoNormal"&gt;&lt;/p&gt; &lt;table class="MsoTableGrid" style="border: medium none ; border-collapse: collapse; width: 645px; height: 1955px;" border="1" cellpadding="0" cellspacing="0"&gt; &lt;tbody&gt; &lt;tr style=""&gt;  &lt;td style="border: 1pt solid black; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;b style=""&gt;Programmer   Consideration&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt; &lt;td style="border-style: solid solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;b style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;  &lt;td style="border-style: solid solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;b style=""&gt;Plain   Old Java Application (POJA)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;  &lt;td style="border-style: solid solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;span style="font-size:78%;"&gt;&lt;b style=""&gt;Terracotta   integrated Plain Old Java application (TI-POJA)&lt;/b&gt;&lt;/span&gt;   &lt;/td&gt;&lt;/tr&gt; &lt;tr style=""&gt;&lt;td style="border-style: none solid solid; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;    &lt;tr style="height: 15.25pt;"&gt;&lt;td style="border-style: none solid solid; padding: 0in 5.4pt; height: 15.25pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Data structures &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; height: 15.25pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Size&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; height: 15.25pt;" valign="top" width="75"&gt;&lt;div style="text-align: center;"&gt;   &lt;/div&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal; text-align: left;"&gt;&lt;span style="font-size:78%;"&gt;Validate right choices of Data   structure based on expected size of the structure.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; height: 15.25pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Similar to a POJA. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Additional Considerations:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0.0001pt 0.25in; text-indent: -0.25in; line-height: normal;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;·&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Whether a   collection is “partial” or not (Hashmap, CHM, Hashtable, LinkedHashMap,   Arrays are partial – others are not as of 2.6). &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;   &lt;p class="MsoListParagraphCxSpLast" style="margin: 0in 0in 0.0001pt 0.25in; text-indent: -0.25in; line-height: normal;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;·&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Does the object-graph   play well with the Terracotta Virtual Memory Manager&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Pattern of Access&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;If lookup based on key use associative   array (e.g. Hashmap) instead of a Vector etc. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Identical to a POJA&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Extent of I/O against the collection and Concurrency of Access&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; text-align: left;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Example: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoListParagraphCxSpFirst" style="margin-bottom: 0.0001pt; text-indent: -0.25in; line-height: normal;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:Symbol;font-size:78%;"  &gt;&lt;span style=""&gt;·&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:78%;"&gt;Hashtable or   Hashmap based on correctness needs?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoListParagraphCxSpLast" style="margin-bottom: 0.0001pt; text-indent: -0.25in; line-height: normal;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:Symbol;font-size:78%;"  &gt;&lt;span style=""&gt;·&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:78%;"&gt;&lt;span style=""&gt; &lt;/span&gt;Hashmap or ConcurrentHashMap based on how   concurrent the access needs to be?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; text-align: left;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Same concept how concurrent is the   access across the cluster.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;&lt;/tr&gt; &lt;tr style=""&gt;&lt;td style="border-style: none solid solid; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Data-structure implementation&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Myriad other considerations based on   how the data-structure is implemented and the domain-model under consideration. See  &lt;a href="http://java.sun.com/docs/books/performance/1st_edition/html/JPAlgorithms.fm.html#11521"&gt;here&lt;/a&gt;  for more discussion&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Identical to a POJA&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;&lt;/tr&gt; &lt;tr style=""&gt;&lt;td style="border-style: none solid solid; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style=""&gt;&lt;td style="border-style: none solid solid; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Synchronization (given a requirement of   a certain level of correctness)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Contention on monitor that you are   synchronizing on&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Be careful to lock on the right monitor.   May need&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;to stripe Lock.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Identical&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;    &lt;tr style=""&gt; &lt;td style="border-style: none solid solid; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Scope of lock&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Coarse grained versus Fine grained (is   it method level or can you just keep it local to a specific block of code).The more fine-grained the better. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Identical -  just  note that in most cases there maybe value to making the lock more coarse-grained to benefit from batching.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;&lt;/tr&gt;  &lt;tr style=""&gt;&lt;td style="border-style: none solid solid; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Type of lock&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Pessimistic Synchronization or lower   level synchronization semantics (volatile or Atomic or ReentrantReadWriteLock   etc.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;      &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Volatiles are not supported as of 2.6&lt;o:p&gt;&lt;/o:p&gt;.  In addition one has to look at lock-types e.g. Synchronous-Write, Write, Read, Concurrent, None. You can get more details on distributed locking &lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-SohowdoItunedistributedLocks."&gt;here &lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 16.6pt;"&gt;&lt;td style="border-style: none solid solid; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; height: 16.6pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; height: 16.6pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; height: 16.6pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; height: 16.6pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style=""&gt;&lt;td style="border-style: none solid solid; padding: 0in 5.4pt;" valign="top" width="75"&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Memory Management&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Garbage Collector: Choice of Collector.&lt;span style=""&gt;  &lt;/span&gt;Xms, Xmx, Ratio of Eden to Old etc.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;      &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;CMS or Parallel or both. &lt;o:p&gt;&lt;/o:p&gt; Appropriate sizing of Heap, Young, Old   etc.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;      &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Identical. See &lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-CanIgetdetailsofGarbageCollectionTuningwithTerracotta"&gt;here&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt; In addition one needs to consider DGC (&lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-WhatisDGCandwhyshouldItuneit.AndifIneedto%2ChowshouldItuneDGC"&gt;Distributed Garbage Collection&lt;/a&gt;) on the Terracotta Server. &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 16.15pt;"&gt; &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; height: 16.15pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; height: 16.15pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Soft References&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; height: 16.15pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Soft Reference Policy.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; height: 16.15pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-HowdoItuneVirtualMemoryManagerontheClientJVMandTerracottaServerJVM"&gt;Tune Virtual&lt;span style=""&gt;  &lt;/span&gt;Memory Manager &lt;/a&gt;on L1, L2. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt; &lt;tr style=""&gt; &lt;td style="border-style: none solid solid; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Virtual Memory Usage.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Avoid thrash with virtual memory monitor via vmstat&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Identical – some thrash is allowable as long as within Latency SLA–   between L1&lt;-&gt;L2&lt;-&gt;L2Disk. Tune &lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-HowdoItuneFaultingBehavior"&gt;faulting&lt;/a&gt;, &lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-IseefaultandflushrateasalmostidenticalontheTerracottaAdminConsole.HowdoIfixit%3F"&gt;fault-flush&lt;/a&gt;,&lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-Thebottleneckisincommitting%22Terracottatransactions%22totheTerracottaserver.WhatcanIdo%3F"&gt; committing-Terracotta transactions &lt;/a&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;&lt;/tr&gt;&lt;tr style=""&gt; &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;    &lt;tr style=""&gt;&lt;td style="border-style: none solid solid; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Traffic Patterns and Distribution.   Locality of Reference&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Based on data size - Partition Data across JVMs or not.Locality of reference is a good thing.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Identical (one can over come data-size limitation assuming trade-off on latency SLA is possible).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Delta: In several use-cases (but not   all) Terracotta VMM can mean that you do not need to partition (hence simpler app).  In some cases, given the data-volume and performance SLA, there may be no way to achieve Locality of Reference without partitioning. See &lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-HowcanIdeploytomultipleactiveTerracottaserversforscaleandHA%3F"&gt;here. &lt;/a&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;&lt;/tr&gt; &lt;tr style=""&gt; &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt; &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; background: rgb(166, 166, 166) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style=""&gt; &lt;td style="border-style: none solid solid; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Other Considerations&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt;" valign="top" width="75"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Instrumentation Scope. See &lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-HowdoItuneInstrumentationScope%3F"&gt;here&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="text-align: left;" class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p style="text-align: center;" class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Testing and Deployment:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt; See &lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-TESTINGWITHTERRACOTTA"&gt;here&lt;/a&gt; for several thoughts around how testing a distributed application is different from a non-distributed application.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p style="text-align: center;" class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;table class="MsoTableGrid" style="border: medium none ; border-collapse: collapse; text-align: left; margin-left: auto; margin-right: auto; width: 687px; height: 1356px;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid black; padding: 0in 5.4pt; width: 73.25pt; font-weight: bold;" valign="top" width="98"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Consideration&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 71.65pt; font-weight: bold;" valign="top" width="96"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;   &lt;td style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 157.4pt; font-weight: bold;" valign="top" width="210"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Any Plain Old Java Application (POJA)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 175.5pt; font-weight: bold;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Any Terracotta integrated Java  application (TI-POJA)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;   &lt;tr style="height: 15.25pt;"&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 73.25pt; height: 15.25pt;" valign="top" width="98"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Testing&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 71.65pt; height: 15.25pt;" valign="top" width="96"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Functional &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 157.4pt; height: 15.25pt;" valign="top" width="210"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Code-Coverage is important to determine thoroughness of testing.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt; height: 15.25pt;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Identical - to   ensure that there are no possible  Terracotta runtime exceptions (UnlockedSharedException and NonPortableExceptions)   lurking around.  &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 73.25pt;" valign="top" width="98"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 71.65pt;" valign="top" width="96"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Scale/Performance  Testing&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 157.4pt;" valign="top" width="210"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Need Test Script that mirrors   production load. Production Monitoring should also be on. Need quantitative measures (average, median, max)  of latencies for a basket of transactions and overall TPS measure. &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;" valign="top" width="234"&gt;      &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Testing a distributed app is a different ball-game. Ideally a framework to spin-up/tear-down JVMs is useful. You will t to consider throughput in the presence of various failover scenarios (e.g. when a client-JVM fails, when the Primary Terracotta-server fails etc.), state of distributed components (e.g. a client JVM is at 100% cpu utilization, network switch is in the middle of a re-boot sequence etc.), manifestation of the object graph across client JVMs , Terracotta Server JVMs and disk &lt;/span&gt;&lt;span style="font-size:78%;"&gt;(given that Terracotta has a Virtual Memory Feature which allows you to exceed physical limits of RAM on your client JVM) &lt;/span&gt;&lt;span style="font-size:78%;"&gt;etc. You probably also want to run your monitoring scripts  at the same time. See &lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-HowshouldIperformance%2FstresstestwithTerracotta.WhatmetricsamIlookingfor%3F"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 73.25pt;" valign="top" width="98"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 71.65pt;" valign="top" width="96"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Availability&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 157.4pt;" valign="top" width="210"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Need to identify Single Points of   Failures in the application deployment &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:78%;"&gt;Terracotta will provide you an  implementation with no single points of failure. Some  effort needed towards tuning parameters that determine failover times /behaviors of various components based on the type-of failure. See &lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-HowdoImakesurethatthereisnoSinglePointofFailureinmyarchitecture%3F"&gt;here&lt;/a&gt;. The Network Active/Passive Link also talks about all the availability tests you could execute to reconfirm no SpoF in you specific environment.&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;  &lt;/tr&gt;    &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 73.25pt;" valign="top" width="98"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Deployment&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 71.65pt;" valign="top" width="96"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 157.4pt;" valign="top" width="210"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 73.25pt;" valign="top" width="98"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 71.65pt;" valign="top" width="96"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Sizing of hosts on which JVM resides&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 157.4pt;" valign="top" width="210"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Based on capacity planning exercises  &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;Identical. Additionally need to &lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-HowdoIsizemyProductionTerracottaServers%3F"&gt;size Terracotta servers&lt;/a&gt; and &lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-PleaseenumeratediskstoragechoiceswithTerracotta."&gt;choose storage strategy&lt;/a&gt; for cluster state. You may need to determine how many client JVMs as well to support Application-TPS and based on latency SLAs (i.e. if faulting is not OK)&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 73.25pt;" valign="top" width="98"&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 71.65pt;" valign="top" width="96"&gt;&lt;span style="font-size:78%;"&gt;Monitoring&lt;/span&gt;&lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 157.4pt;" valign="top" width="210"&gt;&lt;span style="font-size:78%;"&gt;CPU, Memory, Disk, Network, GC, TPS of each client-JVM etc. &lt;/span&gt;&lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;" valign="top" width="234"&gt;&lt;span style="font-size:78%;"&gt;Identical. In addition probably 10-20 more &lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ#TechnicalFAQ-HowcanIdeploytomultipleactiveTerracottaserversforscaleandHA%3F"&gt;Terracotta specific parameter&lt;/a&gt;s to monitor and of course the Terracotta Servers/Disk they write to.&lt;/span&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 73.25pt;" valign="top" width="98"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 71.65pt;" valign="top" width="96"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;Run-book&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 157.4pt;" valign="top" width="210"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:78%;"&gt;Protocol for Recovery and Troubleshooting in case of situations.&lt;/span&gt;&lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 175.5pt;" valign="top" width="234"&gt;   &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-size:78%;"&gt;Identical. Given that the architecture will not have single points of failure, the run-book would probably feature more about what to do to restore HA to the environment.&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p style="text-align: center;" class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p style="text-align: left;" class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-size:78%;" &gt;As is evident from the above arguments, there is a fair bit of parallelism between tuning and deploying any Java Application and a Terracotta Integrated App...although distributing your app, necessarily requires a few changes around the entire software-manufacturing process. Hopefully based on the above list and your Dev-exercise, you can predict better the additional time-to-market (I would guesstimate typical ranges average around 3-12 weeks for mid-high complexity apps from start to finish and it will just get better with more TIMs, Visibility and specific Documentation). You can read more about specifics at &lt;a href="http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ"&gt;http://www.terracotta.org/confluence/display/wiki/TechnicalFAQ&lt;/a&gt; . We are in the process of cleaning up this documentation with links to supporting product features etc.– so keep an eye out for new content at &lt;a href="http://www.terracotta.org/"&gt;http://www.terracotta.org&lt;/a&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2040226002278485965-7883022443504034277?l=javamuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javamuse.blogspot.com/feeds/7883022443504034277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2040226002278485965&amp;postID=7883022443504034277&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/7883022443504034277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/7883022443504034277'/><link rel='alternate' type='text/html' href='http://javamuse.blogspot.com/2008/06/tuning-testing-deploying-terracotta.html' title='Tuning, Testing, Deploying Terracotta Implementations - how does my application time-to-market change?'/><author><name>Iyer</name><uri>http://www.blogger.com/profile/12680952740383422001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2040226002278485965.post-857027317889966061</id><published>2007-10-11T18:13:00.002-07:00</published><updated>2009-01-14T14:13:52.301-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Terrracotta'/><category scheme='http://www.blogger.com/atom/ns#' term='WeakReference'/><category scheme='http://www.blogger.com/atom/ns#' term='SoftReference'/><category scheme='http://www.blogger.com/atom/ns#' term='Network Attached Memory'/><title type='text'>Why is RAT a better mouse-trap?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/__0dIuoFtHm0/RxK_9yS4QAI/AAAAAAAAAAk/ZO8-IniioBc/s1600-h/VirtualHeapBlogDrawing.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp3.blogger.com/__0dIuoFtHm0/RxK_9yS4QAI/AAAAAAAAAAk/ZO8-IniioBc/s320/VirtualHeapBlogDrawing.jpg" alt="" id="BLOGGER_PHOTO_ID_5121366794467557378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_AZeP9BxGTVU/Rw7FEdIV1UI/AAAAAAAAAAU/sZOQPx7RkI8/s1600-h/VirtualHeapBlogDrawing.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_AZeP9BxGTVU/Rw7FEdIV1UI/AAAAAAAAAAU/sZOQPx7RkI8/s320/VirtualHeapBlogDrawing.jpg" alt="" id="BLOGGER_PHOTO_ID_5120246506696594754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;What is RAT and what is it better at?&lt;br /&gt;&lt;br /&gt;RAT = Remotely Attached Tenured (generation). You might have also heard of it as NAM (Network Attached Memory/Heap) for your Java applications. Bear with me for a moment as we go through a broad argument as to why RAT makes sense.&lt;br /&gt;&lt;br /&gt;Let’s assume you reference a Cache in your Java Application – as this cache fills up, your Java Heap is under pressure. So, what are your options to avoid an OOME (Out Of Memory Exception):&lt;br /&gt;&lt;br /&gt;1.    Implement an evictor ⇒&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Reapers remove Cache-Entries based on some LRU/LFU algorithm.&lt;/li&gt;&lt;li&gt;Problem is that these Cache-Entries were expensive-to construct in the first place. I suppose you have no choice if reaping is being done for cache-freshness but then doing it for getting around HEAP constraints – that hurts…&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;2.    Rely on Java’s SoftReference capabilities i.e.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create Cache-Entries as SoftReferences and&lt;/li&gt;&lt;li&gt;Then specify a SoftRefLRUPolicyMSPerMB (where essentially the JVM nulls your "carefully-constructed, expensive" data-structures) e.g. if set to 100 and if 200 MB is available on heap then =&gt; all SoftReferences that were created over 20,000 (200x100) ms ago – i.e. 20s ago, become eligible for collection...Again, hurts.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;3.    Rely on Java Serialization and overflow to disk.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Overflow leastRecentlyUsed/leastFrequentlyUsed Cache-Entries to disk based on some upper-watermark in terms of Heap utilization and pull them off disk, if the reference is not live on local Heap.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Cache-Entries and the object-graph associated with them need to implement java.io.Serializable and you need to marshall /unmarshall your object graph (at the very least Cache-Entry would feature 2 methods to serialize, deserialize itself).&lt;/li&gt;&lt;li&gt;So dosen't hurt as bad, although we had to “pollute” application code (with several classes having to implement java.io.Serializable and having to invest in “Marshalling /UnMarshalling from Domain Object Model &lt;-&gt; Disk Persistable Representation" code) and Java serialization isn’t cheap and local disk can’t be shared with other JVMs on other boxes.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;So now what if, instead of all these gyrations around losing "carefully-constructed, expensive" Cache-Entries, or polluting your code - your object references (Cache-Entries and the graph attached to them) were able to just automatically become &lt;span style="font-weight: bold;"&gt;“Semi SoftReferences” &lt;/span&gt;when you encounter HEAP pressures – i.e.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;LeastRecently/LeastFrequently used References just get nulled in the local JVM (so they become eligible for GC) and thus prevent the local JVM from throwing an OOME (similar to how Soft Reference would have worked).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;But, in fact you don’t permanently lose the “carefully-constructed, expensive” Cache-Entry – since unbeknownst to the application-developer, these object references were also being maintained on a remote JVM – and when the local JVM does need such a “nulled” reference, it gets transparently pulled in from the remote JVM.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Sounds neat – dosen’t it? Your local JVM does not OOME and you did not have to invest any effort in your application to get this behavior of not losing the Cache-Entry from within your Java Domain Model.&lt;br /&gt;&lt;br /&gt;That is precisely what is implemented as Terracotta’s virtual heap feature. The local JVM is your application JVM and the remote JVM is the “Terracotta Server” JVM and you get this behavior with just configuration. See:&lt;br /&gt;&lt;a href="http://www.terracotta.org/confluence/display/docs1/Concept+and+Architecture+Guide#ConceptandArchitectureGuide-VirtualHeap"&gt;http://www.terracotta.org/confluence/display/docs1/Concept+and+Architecture+Guide#ConceptandArchitectureGuide-VirtualHeap&lt;/a&gt;&lt;br /&gt;and&lt;br /&gt;&lt;a href="http://www.terracotta.org/confluence/display/orgsite/Virtual+Heap+for+Large+Datasets"&gt;http://www.terracotta.org/confluence/display/orgsite/Virtual+Heap+for+Large+Datasets&lt;/a&gt;&lt;br /&gt;and&lt;br /&gt;&lt;a href="http://www.terracotta.org/confluence/display/orgsite/How+Terracotta+Works"&gt;http://www.terracotta.org/confluence/display/orgsite/How+Terracotta+Works&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In fact the remote JVM (the Terracotta server) can additionally persist the object references it maintains to disk. You thus get sections of Tenured (Old) Generation to become&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Virtually unbounded (limited by only the size of disk you can attach to the remote JVM).&lt;/li&gt;&lt;li&gt;To become durable.&lt;/li&gt;&lt;li&gt; i.e. your Heap begins to look like what is attached in the picture (please ignore, Survivor, Perm etc. for the sake of this argument).&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Now, Assuming ON AVERAGE:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;World population for the past 50 years has averaged 5 billion at any one point in time &amp;amp;&amp;amp;&lt;/li&gt;&lt;li&gt;That 5% of the population on average have been programmers &amp;amp;&amp;amp;&lt;/li&gt;&lt;li&gt;That each programmer worked 300*8 = 2400 hours/year (I kid - the real no is probably more like 4800) &amp;amp;&amp;amp;&lt;/li&gt;&lt;li&gt;That 20% of all that time was devoted to managing memory and dealing with resultant issues:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Back in Mainframe days, it was about preserving every single byte you consumed; &lt;/li&gt;&lt;li&gt;In C/C++ days, it was about debugging “malloc”s without “free”s and pointer arithmetic gone haywire and &lt;/li&gt;&lt;li&gt;In these Java days, it is about tuning GC and avoiding OOMEs.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Therefore, time spent by humankind on Memory related issues = 5 * 50 * .05 * 2400 * .2 = 6 Trillion Man-hours – clearly not a trivial amount of time ☺. Now that you can use Terracotta Virtual heap and save yourself all the bother of writing all kinds of mechanisms to avoid OOMEs due to Heap constraints, hopefully we can make a dent on human-hours spent on dealing with this - 20% coming down to 19% itself is a saving today of 1 billion human-hours/year ;-) .&lt;/li&gt;&lt;/ul&gt;Of course, persist to a database a certain class of data (business critical data, data you need to query/report on) – databases are unmatched in terms of recovery, backup, check-pointing features and accessibility via SQL.&lt;br /&gt;&lt;br /&gt;But, now that you have this sliver of Tenured that can expand and expand (at the rate and cost of disk) and still stay persistent across JVM lifecycles, without you having modify Java code – you have this new weapon in your armory. Check it out at &lt;a href="http://www.terracotta.org/"&gt;http://www.terracotta.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(Will post more details on how to control virtual memory and a little bit about its inner workings on the next blog)....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2040226002278485965-857027317889966061?l=javamuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javamuse.blogspot.com/feeds/857027317889966061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2040226002278485965&amp;postID=857027317889966061&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/857027317889966061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/857027317889966061'/><link rel='alternate' type='text/html' href='http://javamuse.blogspot.com/2007/10/why-is-rat-better-mouse-trap.html' title='Why is RAT a better mouse-trap?'/><author><name>Iyer</name><uri>http://www.blogger.com/profile/12680952740383422001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/__0dIuoFtHm0/RxK_9yS4QAI/AAAAAAAAAAk/ZO8-IniioBc/s72-c/VirtualHeapBlogDrawing.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2040226002278485965.post-6163628034018091712</id><published>2007-07-11T16:31:00.000-07:00</published><updated>2009-01-14T14:14:26.369-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='cluster'/><category scheme='http://www.blogger.com/atom/ns#' term='operations'/><category scheme='http://www.blogger.com/atom/ns#' term='Terracotta'/><title type='text'>Clustered Java - Operational Needs</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/__0dIuoFtHm0/Rpaae8e6-QI/AAAAAAAAAAc/j5OKGVcvbOo/s1600-h/ITOrg.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/__0dIuoFtHm0/Rpaae8e6-QI/AAAAAAAAAAc/j5OKGVcvbOo/s320/ITOrg.png" alt="" id="BLOGGER_PHOTO_ID_5086422685584128258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Businesses are in constant flux and mutate in response to environmental stimuli - the Java application you deployed in the past has to change - new functionality, capacity, availability, monitorability requirements get tagged on.&lt;br /&gt;&lt;br /&gt;Typically, the operations management and team (sysadmins, network engineers, DBAs etc.) who get measured on uptime/scale and the overall smooth functioning of the data-center. But ofcourse, they rely very heavily on the application/ application-infrastructure developer to help them get there. What is the expected application behavior:&lt;br /&gt;1. When it gets deployed off 1 node to multiple nodes.&lt;br /&gt;2. When 1 of the JVMs crashes.&lt;br /&gt;3. When state gets out of synch across these nodes.&lt;br /&gt;4. Under load etc.&lt;br /&gt;&lt;br /&gt;Any stream-lining here will simplify the Development &lt;-&gt; Operations handoff i.e. fewer calls to you, the developer and lower maintenance costs to the organization as a whole. &lt;/span&gt;&lt;span style="font-size:100%;"&gt;So, then:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Where does the application developer’s job end and the software-infrastructure engineer’s job begin?&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Where does the software-infrastructure engineer’s job end and the operational-infrastructure engineer’s job begin ?  &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Now whether you are in an IT culture where &lt;/span&gt;&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;Roles are clearly demarcated across silos – as in the attached figure OR&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;You are in a culture/organization, where the above described roles don’t have clean boundaries… &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;t&lt;/o:p&gt;here is no denying that while there is an argument for “silo-ization” – concerns around application functionality, latency, scalability, availability and manageability cut across these boundaries.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="font-size:100%;"&gt;The characteristics of a successful, highly efficient IT organization arguably are:&lt;/span&gt;&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;Core-competencies within each silo.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;Clearly defined artifacts and interfaces across each boundary resulting in minimal friction /iterative loops across each boundary AND&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;A good understanding the up-stream/down-stream consequence of decisions within each silo.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;          &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;As an example, lets focus on a big, hard-to-tame beast of Availability and Scalability for Java Applications. Of course, as an application-developer you are bound by what requirements flow-downstream - but assuming reasonable business requirements/project- management ;-),&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="font-size:100%;"&gt;you would impact the final infrastructure/management foot-print of your application, based on decisions you execute around:&lt;br /&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;table class="MsoTableGrid" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid windowtext; padding: 0in 5.4pt; width: 4.45in;" valign="top" width="427"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;Task / Decision&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; padding: 0in 5.4pt; width: 1.7in;" valign="top" width="163"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;Downstream Impact&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 4.45in;" valign="top" width="427"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Modelling of real-world entities as Database-schema and as   a OO hierarchy in the Java-tier. And implementation of these entitites in the   Database and at the Java tier (Data-structures employed, package/class   organization, "garbage" created)&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.7in;" valign="top" width="163"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Latency, Scale &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 4.45in;" valign="top" width="427"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Marshalling/Unmarshalling across the OO-DB representations   (ORM).&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.7in;" valign="top" width="163"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Latency, Scale&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 4.45in;" valign="top" width="427"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Computational algorithms, control-flow&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.7in;" valign="top" width="163"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Latency, Scale&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 4.45in;" valign="top" width="427"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Dependency management.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.7in;" valign="top" width="163"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Maintainability,&lt;/span&gt;&lt;span style="font-size:100%;"&gt;    &lt;/span&gt;&lt;span style="font-size:100%;"&gt;Manageability&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 0in 5.4pt; width: 4.45in;" valign="top" width="427"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Management of state across JVMs and JVMs and DB/external   systems.&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 0in 5.4pt; width: 1.7in;" valign="top" width="163"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Availability, Scale&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;    &lt;span style="font-size:100%;"&gt;Wrong choices anywhere (e.g. an inappropriate data-structure, needless sql within a tight-loop, massive amounts of new objects instantiated/request etc.) can adversely impact “down-stream” concerns such as latency/scale/manageability.&lt;/span&gt;&lt;span style="font-size:100%;"&gt; In today’s environment, the first-4 bullet points on the list above are clearly better-contained within the application developer’s world and classic application trouble-shooting can get rid of reported problems.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Arguably however, the last bullet point on the list above around state-management across JVMs and external systems is the fuzziest – and routinely crosses the Development / Operations chasm.&lt;/span&gt;&lt;span style="font-size:100%;"&gt; The consequence of addressing this “downstream-concern” much later is that the current state-of-the-art is intrusive/labor-intensive, expensive, inconsistent and features frequent round-trips across the Dev/Ops interface – leading to inefficiencies and high support-overhead costs. i.e. one is better off taking a long-term view during the SDLC as against when maintaining the application (i.e. during SMLC – Software Maintenance LifeCycle).&lt;br /&gt;&lt;/span&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Focussing further on an application on a single-JVM now running on multiple JVMs, the interfaces between Ops and Dev (and at times between application-infrastructure-development and application-software development) are weakly defined - resulting in frequent traversals across the chasm and inefficiencies. So, what are some of these operational concerns/needs when running a Java application on a cluster of JVMs.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;  &lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Load      Balancing strategy:&lt;/span&gt;&lt;/li&gt;&lt;ol style="margin-top: 0in;" start="1" type="a"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;How       to ensure that the load gets appropriately partitioned across the JVMs in the cluster?&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Does       the application need Locality of Reference - i.e. do requests need to be stickily routed to the same JVM?&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;How to re-route and what       is user-experience when a JVM goes down?&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="2" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Application      Correctness: not synching state (e.g. caches) or any optimistic way of sending updates      over implies &lt;/span&gt;&lt;/li&gt;&lt;ol style="margin-top: 0in;" start="1" type="a"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Reacting       to potentially incoherent application/state (cache) across the cluster.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Non-guaranteed delivery of messaging across JVMs can easily       lead to the brain being split across the participants in the cluster. (e.g. if the cache reflected price on an item in an electronic catalog and is inconsistent on 2 different JVMs, which JVM then has the right cache value - how does operations recover, do they need to restart the cluster ?)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="3" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Capacity      Planning:&lt;/span&gt;&lt;/li&gt;&lt;ol style="margin-top: 0in;" start="1" type="a"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Operations       needs a deterministic way to scale. Today there is a lack of a       deterministic way to scale (e.g. add-a-node on demand).&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Few low clustering       overhead solutions are available in the market (or if home-grown) - since the majority use expensive Java-serialization. i.e. The requirement of more scale per operational-dollar in a clustered environment is still largely unmet by today's solutions.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Dynamic       Infrastructure Provisioning based on usage characteristics.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="4" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Breach      of Availability SLA (Unplanned downtime - i.e the fewer pages go off, the better):&lt;/span&gt;&lt;/li&gt;&lt;ol style="margin-top: 0in;" start="1" type="a"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Due to an Application       Server Failure (Industry Java-app availability ~ 98%)&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Cascading       Failure (1 JVM goes down and the others go down as well).&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Unpalatable       Recoverability (long restart, application/cache warming, infrastructure       abuse)&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Cluster       work-load balance/re-balance in response to outage/recovery.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="5" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Breach      of Availability SLA (Planned downtime) - i.e. can i continue to maintain business continuity:&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;ul&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Application       Release Processes: Rolling upgrades/Incompatible patches (e.g. apps that depend on Java Serialization)&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Content       Management (database/schema-related downtime).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;        &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="6" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Manageability      / Monitorability&lt;/span&gt;&lt;/li&gt;&lt;ol style="margin-top: 0in;" start="1" type="a"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Few/No Intrusions       into Release/Patch process &lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;No       comprehensive cluster visibility - Cluster management today is per node.&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Proliferation       of Tools/Mgmt Interfaces and complexity for the NOC.&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Running       Stateless with Stateful applications (arbitrary servers       out-of/in-rotation).&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="7" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Dev      &lt;-&gt; Ops HandOff&lt;/span&gt;&lt;/li&gt;&lt;ol style="margin-top: 0in;" start="1" type="a"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;High       Overhead/Friction in Dev&lt;-&gt;Ops Hand-Off&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Operational       Training costs &lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;NOC       and Production-Support Complexity/Errors&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="8" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Others      : Peculiar to a given IT/Organization’s culture.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:100%;"&gt;  Terracotta (the company behind the open-source clustering technology - DSO/Distributed Shared Objects) attempts (successfully, imho) to address all of the above operational concerns (with the exception of Load Balancing, Dynamic Infrastructure Provisioning 3-b) via a non-intrusive (simpilicity for Dev by clustering at the JVM), cost-effective (open-source) and consistent mechanism to cluster state across JVMs:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;The application architect identifies what is stateful and codifies the clustering behavior in a XML file. Application code is cleanly separated from the clustering concern.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Operations gets a standard terminology and a standard mechanism (i.e a clean interface from Dev) to cluster Java applications, efficiently (given the implementation) and cost-effectively (highly scalable and open-source).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;        &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;You can read more about it on the numerous blogs and the website at &lt;a href="http://www.terracotta.org/"&gt;http://www.terracotta.org&lt;/a&gt;. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2040226002278485965-6163628034018091712?l=javamuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javamuse.blogspot.com/feeds/6163628034018091712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2040226002278485965&amp;postID=6163628034018091712&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/6163628034018091712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/6163628034018091712'/><link rel='alternate' type='text/html' href='http://javamuse.blogspot.com/2007/07/why-cant-we-developmentoperations-get.html' title='Clustered Java - Operational Needs'/><author><name>Iyer</name><uri>http://www.blogger.com/profile/12680952740383422001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/__0dIuoFtHm0/Rpaae8e6-QI/AAAAAAAAAAc/j5OKGVcvbOo/s72-c/ITOrg.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2040226002278485965.post-5435851040672982644</id><published>2006-12-29T22:53:00.000-08:00</published><updated>2009-01-14T14:15:57.238-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='monitoring application'/><category scheme='http://www.blogger.com/atom/ns#' term='Terracotta'/><category scheme='http://www.blogger.com/atom/ns#' term='wily'/><category scheme='http://www.blogger.com/atom/ns#' term='glassbox'/><title type='text'>Clustering GlassBox</title><content type='html'>Anyone who has maintained an application, would agree that measuring and managing an application's runtime characteristics and diagnosing performance, scale issues is part art, part science. A fair bit of data needs to be collected but then aggregated at the appropriate level so as to be useful and actionable, especially when you are under the gun to solve a production issue.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/__0dIuoFtHm0/RaPAop6zxVI/AAAAAAAAAAM/TrQ6NvK0NGs/s1600-h/TroubleshooterScreenshotBig.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/__0dIuoFtHm0/RaPAop6zxVI/AAAAAAAAAAM/TrQ6NvK0NGs/s320/TroubleshooterScreenshotBig.png" alt="" id="BLOGGER_PHOTO_ID_5018066214500681042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.glassbox.com/"&gt;GlassBox&lt;/a&gt; is a cool open-source tool that promises exactly that for your Java applications in that it can give unprecedented visibility and adds on a diagnostic layer above this to summarize any potential issue succintly (see figure). Added bonus - it does this via AOP i.e. non-intrusive as far as your application is concerned.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;However all of the measurement that GlassBox provides are for a given JVM - so coming back to our earlier point around aggregating measurements, wouldn't it be cool if there was some way (with minimal code changes) to collect these stats across the entire cluster of JVMs - so that way when a problem occurs, you can correlate data across all JVMs and on the cluster as a whole, so as to easily identify if a problem is cluster-wide or is isolated to a single JVM(s).&lt;br /&gt;&lt;br /&gt;I sat with Ron Bodkin, CTO of Glassbox to see if we could cluster Glassbox with &lt;a href="http://www.terracotta.org/"&gt;Terracotta&lt;/a&gt;. Here is what we had to do :&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;We installed GlassBox and then Terracotta for Spring (since glassBox uses Spring internally)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Modified the catalina.sh script and passed in 4 additional JAVA OPTIONS (so Terracotta could get hooked in). Container was Tomcat 5.5.x.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ron then identified the Spring Bean that had all of the state (i.e. the per-JVM statistics).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;We ran into a few configuration issues, which had to get sorted. Upgraded Spring to 1.2.8 (1.2.8 and upwards is supported by Terracotta). Even so, we ran into some exceptions and then realized that there was another old spring.jar in the classpath that needed to get removed.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Filled out the terracotta config file (tc-config.xml) which is where you state what bean needs to be clustered. Added wild-card characters to the application name and the resources entry, so Terracotta could find the Spring application context file, which captures the bean definitions. tc-config.xml entries look like&lt;br /&gt;&lt;blockquote solid="" 1px="" red=""&gt;&lt;br /&gt;&amp;lt;jee-application name ="*glassbox*"&amp;gt;&lt;br /&gt;&amp;lt; paths&amp;gt;&amp;lt;path&amp;gt;*beans.xml&amp;lt;/path&amp;gt;&amp;lt;paths&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Also the requirements were such that cluster-wide stats needed to be updated on a timed basis and not in real-time (i.e. as soon as a given statistic changed on any JVM in the cluster).  So, Ron then wrote a method that essentially made an intelligent deep clone of the object graph that needed to be clustered - this method would fire off every few seconds. And we then clustered the bean that wrapped this deep clone instead. Config entries were:&lt;br /&gt;&lt;blockquote solid="" 1px="" red=""&gt;&lt;br /&gt;&amp;lt;beans&amp;gt;&lt;br /&gt;&amp;lt;bean name = "distributedRegistryHolder"&amp;gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;lt;beans&amp;gt;&lt;br /&gt;&amp;lt;locks&amp;gt;&amp;lt;autolock&amp;gt;&lt;br /&gt;&amp;lt;method-expression&amp;gt; *glassbox.track.api.StatisticsRegistryHolderImpl.copy(..)&amp;lt;/method-expression&amp;gt;&lt;br /&gt;&amp;lt;lock-level&amp;gt;write&amp;lt;/lock-level&amp;gt;&lt;br /&gt;&amp;lt;/autolock&amp;gt;&amp;lt;/locks&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Terracotta for Spring also has a feature where with a one-line config entry, you could cluster HttpSessions. So we turned that on.  Something like  adding a &lt;blockquote solid="" 1px="" red=""&gt; &amp;lt;session-support&amp;gt;true&amp;lt;/session-support&amp;gt;&lt;/blockquote&gt; element to the tc-config.xml. A GlassBox User can used a Web-based client to monitor your App - not a whole lot of state is in HttpSession, except for things such as GUI preferences - so those would now get preserved in case of loss of a given app-server. Not much but 1 less minor inconvenience in the world.&lt;/li&gt;&lt;/ol&gt;And it took us all of 4 hours to complete all of this. A satisfying 4 hours I might add. Now we get cluster wide monitoring by just integrating 2 open source products without modifying a line of application code. And you as the application architect can breathe a little easier, in that should things go south, you have a dashboard that helps you zero in on the issue instead of having to grep through logs across disparate machines and doing a ton of correlation work...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2040226002278485965-5435851040672982644?l=javamuse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javamuse.blogspot.com/feeds/5435851040672982644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2040226002278485965&amp;postID=5435851040672982644&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/5435851040672982644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2040226002278485965/posts/default/5435851040672982644'/><link rel='alternate' type='text/html' href='http://javamuse.blogspot.com/2006/12/clustering-glassbox.html' title='Clustering GlassBox'/><author><name>Iyer</name><uri>http://www.blogger.com/profile/12680952740383422001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/__0dIuoFtHm0/RaPAop6zxVI/AAAAAAAAAAM/TrQ6NvK0NGs/s72-c/TroubleshooterScreenshotBig.png' height='72' width='72'/><thr:total>4</thr:total></entry></feed>
