<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>KimchyBlog</title>
	
	<link>http://www.kimchy.org</link>
	<description>Here we go. Here comes the Prozac.</description>
	<lastBuildDate>Wed, 22 Jul 2009 13:39:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/kimchyblog" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Distributed Autowiring with GigaSpaces Executors</title>
		<link>http://www.kimchy.org/distributed-autowiring-with-gigaspaces-executors/</link>
		<comments>http://www.kimchy.org/distributed-autowiring-with-gigaspaces-executors/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 13:39:18 +0000</pubDate>
		<dc:creator>Shay Banon</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[gigaspaces]]></category>

		<guid isPermaLink="false">http://www.kimchy.org/?p=617</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/distributed-autowiring-with-gigaspaces-executors/";</script>With the 7.0 release of GigaSpaces, I thought I would write some blogs about the new and exciting new features that are part of the release. The first feature that I would like to talk about is GigaSpaces executors support (which premiered in 6.6) and one of the cool things you can do with it.
In [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/distributed-autowiring-with-gigaspaces-executors/";</script><p>With the <a href="http://www.gigaspaces.com/newsletter/GigaSpaces-XAP-7.0-Released.html">7.0 release of GigaSpaces</a>, I thought I would write some blogs about the new and exciting new features that are part of the release. The first feature that I would like to talk about is <a href="http://www.gigaspaces.com/wiki/display/XAP7/Task+Execution+over+the+Space">GigaSpaces executors</a> support (which premiered in 6.6) and one of the cool things you can do with it.</p>
<p>In essence, GigaSpaces executor support allows to define custom Tasks that will be executed within GigaSpaces in a collocated manner with data. Aside from collocation, one of the nice feature of it is the fact that the code does not have to be predefined within the GigaSpaces cluster, but instead it is loaded on demand. Here is an example of such a simple task:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">class</span> TradeValueTask <span style="color: #000000; font-weight: bold;">implements</span> Task<span style="color: #339933;">&lt;</span>Float<span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">long</span> tradeId<span style="color: #339933;">;</span>
&nbsp;
    @TaskGigaSpace
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">transient</span> GigaSpace gigaSpace<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> TradeValueTask<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">long</span> tradeId<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">tradeId</span> <span style="color: #339933;">=</span> tradeId<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @SpaceRouting
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">long</span> getTradeId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> tradeId<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Float</span> execute<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
        Trade trade <span style="color: #339933;">=</span> gigaSpace.<span style="color: #006633;">readById</span><span style="color: #009900;">&#40;</span>Trade.<span style="color: #000000; font-weight: bold;">class</span>, tradeId<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">return</span> trade.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>The above task allows one to actually get *just* the trade value for a given trade id, instead of reading the whole trade and extracting the value from it on the client side.</p>
<p>The execution will be directed to the same partition that trade exists on (assuming that the trade id is also the routing field for Trade) and executed there. This means that the <strong>readByid</strong> operation will be executed in a collocated manner with the space instance.</p>
<p>Here is an example of how it can be executed:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// gigaSpace here is a clustered proxy of the whole cluster</span>
AsyncFuture<span style="color: #339933;">&lt;</span>Float<span style="color: #339933;">&gt;</span> result <span style="color: #339933;">=</span> gigaSpace.<span style="color: #006633;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> TradeValueTask<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">float</span> value <span style="color: #339933;">=</span> result.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Now, lets assume that calculating the trade value is complex and we already have a service that knows how to configure it in the Processing Unit descriptor file:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;traveValueCalulator&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;eg.TradeValueCalulator&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></td></tr></table></div>

<p>We would love to be able to use it in order to calculate the trade value from within the processing unit. What we actually want to do is be able to get a handle to the TradeValueCalculator from within our class. There are several ways to do so, but one of the nicest is to actually use Spring autowiring capabilities to inject it, which we can easily do:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">@AutowiredTask
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">class</span> TradeValueTask <span style="color: #000000; font-weight: bold;">implements</span> Task<span style="color: #339933;">&lt;</span>Float<span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">long</span> tradeId<span style="color: #339933;">;</span>
&nbsp;
    @TaskGigaSpace
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">transient</span> GigaSpace gigaSpace<span style="color: #339933;">;</span>
&nbsp;
    @Autowired
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">transient</span> TradeValueCalulator tradeValueCalulator<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> TradeValueTask<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">long</span> tradeId<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">tradeId</span> <span style="color: #339933;">=</span> tradeId<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @SpaceRouting
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">long</span> getTradeId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> tradeId<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Float</span> execute<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
        Trade trade <span style="color: #339933;">=</span> gigaSpace.<span style="color: #006633;">readById</span><span style="color: #009900;">&#40;</span>Trade.<span style="color: #000000; font-weight: bold;">class</span>, tradeId<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">return</span> tradeValueCalculator.<span style="color: #006633;">calculate</span><span style="color: #009900;">&#40;</span>trade<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>By marking the class with the @AutowiredTask annotation, it will automatically get autowired with the beans defined within the processing unit. Pretty cool, no?</p>
<p>(As a side note, of course, autowiring takes time, which might be of essence ;). Another option is just implement ApplicatiobnContextAware, and use the ApplicationContext to get the bean based on its id).</p>
<p>So we can autowire beans into a Task executed using GigaSpaces. One last thing before we end this post, I would like to show another nifty feature of GigaSpaces executors, which is the executor builder.</p>
<p>Lets assume that we now want to calculate the sum of several trades by their ids. We could have gone ahead and execute each task, wait on all the futures, and sum the results. But, why work hard when we (GigaSpaceians) can work hard for you (my personal motto):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">AsyncFuture<span style="color: #339933;">&lt;</span>Float<span style="color: #339933;">&gt;</span> result <span style="color: #339933;">=</span> 
          gigaSpace.<span style="color: #006633;">executorBuilder</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> SumReducer<span style="color: #339933;">&lt;</span>Float, Float<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Float</span>.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                                 .<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> TradeValueTask<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> 
                                 .<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> TradeValueTask<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> 
                                 .<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> TradeValueTask<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                                 .<span style="color: #006633;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000066; font-weight: bold;">float</span> value <span style="color: #339933;">=</span> result.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>All three tasks will be executed in parallel, in a none blocking mode, each on its respective partition, and the results will be automatically reduced using our built in SumReducer.</p>
<p>Enjoy!</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><img src="http://feeds.feedburner.com/~r/kimchyblog/~4/0GE-fpeMd3w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kimchy.org/distributed-autowiring-with-gigaspaces-executors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quantum Physics and Data Grids</title>
		<link>http://www.kimchy.org/quantum-physics-and-data-grids/</link>
		<comments>http://www.kimchy.org/quantum-physics-and-data-grids/#comments</comments>
		<pubDate>Wed, 06 May 2009 03:29:55 +0000</pubDate>
		<dc:creator>Shay Banon</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[musings]]></category>

		<guid isPermaLink="false">http://www.kimchy.org/?p=603</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/quantum-physics-and-data-grids/";</script>One of quantum physics&#8217; crazier notions is that two particles seem to communicate with each other instantly, even when they&#8217;re billions of miles apart. Albert Einstein, arguing that nothing travels faster than light, dismissed this as impossible &#8220;spooky action at a distance.&#8221;
The great man may have been wrong. A series of recent mind-bending laboratory experiments [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/quantum-physics-and-data-grids/";</script><p>One of quantum physics&#8217; crazier notions is that two particles seem to communicate with each other instantly, even when they&#8217;re billions of miles apart. Albert Einstein, arguing that nothing travels faster than light, dismissed this as impossible &#8220;spooky action at a distance.&#8221;</p>
<p>The great man may have been wrong. A series of recent mind-bending laboratory experiments has given scientists an unprecedented peek behind the quantum veil, confirming that this realm is as mysterious as imagined.</p>
<p><img src="http://www.kimchy.org/wp-content/uploads/2009/05/quantum1.jpeg" alt="quantum1" title="quantum1" width="359" height="239" class="aligncenter size-full wp-image-604" /><br />
<img src="http://www.kimchy.org/wp-content/uploads/2009/05/quantum2.jpeg" alt="quantum2" title="quantum2" width="359" height="239" class="aligncenter size-full wp-image-605" /></p>
<p>Based off this theory, there has been several computer science related experiments, especially revolving around <a href="http://en.wikipedia.org/wiki/Quantum_computing">Quantum Computer</a> and different encryption algorithms that I won&#8217;t get into in this blog post. What I would like to suggest is how Quantum Physics can revolutionize the area of (In Memory ;) ) Data Grids.</p>
<p>One of the main problems of Data Grids is the ability to replicate state changes from one instance to the other, especially when using WAN. This highly ties into Brewer&#8217;s CAP Theorem, which states that:</p>
<blockquote><p>When designing distributed web services, there are three properties that are commonly desired: consistency, availability, and partition tolerance. It is impossible to achieve all three. In this note, we prove this conjecture in the asynchronous network model, and then discuss solutions to this dilemma in the partially synchronous model.</p></blockquote>
<p>What I am suggesting is that once the ability (and it very close, there are already companies building highly secure computer systems using Quantum Physics), CAP theorem will no longer be applicable.</p>
<p>As a thought experiment, imagine that a photon has an up spin, and that represents binary 1 (I know, it can get much more advance than that, I am simplifying things). A down spin represent binary 0. Once photons are &#8220;entangled&#8221; (we bring up our data grid), and then we separate them (across the building or across the ocean, does not really matter), we can get &#8220;instantaneous replication&#8221;. Once we change the state of one photon, the other will change its state instantaneously (only when we check its state, but that is when we really care about it ;) ). By exhibiting this behavior, we actually can get all three properties of CAP theorem. </p>
<p>Imagine as well the ability to store a &#8220;local cache&#8221; of the data. Since the size of data that can be &#8220;store&#8221; is exponentially bigger than current technology, and the fact that &#8220;state change&#8221; is not bounded by current technology (no need for wires), most people can have most of the data locally most of the time (which in itself, is relative). Once local data is changed, there is no need for 2PC or something like that in order to update the master data. For all intent and purposes, we hold the master data :).</p>
<p>Quantum Physics is going to revolutionize the way we go about and use technology. What I talked about is just the tip of the iceberg, but I personally believe that once the technology starts maturing, the impact it will have on the world will dwarf the arrival of computers, the industrial revolution, or any other major event that occurred in our not so long history.</p>
<p>One of Einstein famous quotes regarding Quantum physics is &#8220;God doesn&#8217;t play dice with the universe&#8221;. I personally like better Neils Bohr, a big proponent of quantum uncertainty, rebuttal: &#8220;Quit telling God what to do.&#8221;</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><img src="http://feeds.feedburner.com/~r/kimchyblog/~4/aJa6P0eA8K4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kimchy.org/quantum-physics-and-data-grids/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Compass moves back form Google Group</title>
		<link>http://www.kimchy.org/compass-moves-back-form-google-group/</link>
		<comments>http://www.kimchy.org/compass-moves-back-form-google-group/#comments</comments>
		<pubDate>Tue, 05 May 2009 02:29:17 +0000</pubDate>
		<dc:creator>Shay Banon</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[compass]]></category>

		<guid isPermaLink="false">http://www.kimchy.org/?p=599</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/compass-moves-back-form-google-group/";</script>Seems like several Compass users did not like the move to Google groups (can&#8217;t access it from work and so on), so we are back to the old forums. Sorry for the trouble&#8230;
Cheers,
Shay
var dzone_style="2";]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/compass-moves-back-form-google-group/";</script><p>Seems like several Compass users did not like the move to Google groups (can&#8217;t access it from work and so on), so we are back to the old <a href="http://forum.compass-project.org">forums</a>. Sorry for the trouble&#8230;</p>
<p>Cheers,<br />
Shay</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><img src="http://feeds.feedburner.com/~r/kimchyblog/~4/aoOX9oqXKho" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kimchy.org/compass-moves-back-form-google-group/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Searchable Google AppEngine with Compass</title>
		<link>http://www.kimchy.org/searchable-google-appengine-with-compass/</link>
		<comments>http://www.kimchy.org/searchable-google-appengine-with-compass/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 15:21:37 +0000</pubDate>
		<dc:creator>Shay Banon</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[compass]]></category>
		<category><![CDATA[google appengine]]></category>

		<guid isPermaLink="false">http://www.kimchy.org/?p=580</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/searchable-google-appengine-with-compass/";</script> Google App Engine was released yesterday for Java. It provides the ability to deploy Java based web applications onto the App Engine, and provides a data store service (with JPA and JDO on top of it), memcached, and others. 
So, what I decided to do is try and get Compass integrated with Google App [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/searchable-google-appengine-with-compass/";</script><p><img src="http://www.kimchy.org/wp-content/uploads/2009/04/appengine_lowresjpg.gif" alt="appengine" title="appengine" width="142" height="109" class="alignleft size-full wp-image-581" /> Google App Engine was released yesterday for Java. It provides the ability to deploy Java based web applications onto the App Engine, and provides a data store service (with JPA and JDO on top of it), memcached, and others. </p>
<p>So, what I decided to do is try and get Compass integrated with Google App Engine to allow for easy full text search of Google App Engine apps (yea, the irony). Basically, it took me a couple of hours (most of them spent on <a href="http://groups.google.com/group/google-appengine-java/browse_thread/thread/ec8817ca69b6f498">this bug</a> in gae), and we have something ready to use. Here is a screencast showing how the Guestbook app can be made searchable easily (use full screen mode when code is shown):</p>
<p><embed src="http://blip.tv/play/g5EI+ZYzldkK" type="application/x-shockwave-flash" width="590" height="400" allowscriptaccess="always" allowfullscreen="true"></embed> </p>
<p>What are the steps needed?</p>
<ul>
<li>Make your domain model searchable.</li>
<li>Create a Compass instance. Configure it to store the index using GAE data store (there is also support for native Lucene applications). Configure it not to use threads.</li>
<li>Create a Compass Gps, have it automatically mirror changes done using the JDO/JPA API to the search engine. Call index operation to completely reindex your application.</li>
</ul>
<p>Thats it. Pretty simple no? Especially since these are the steps you use to enable any Java application with full text search using Compass :).</p>
<p>Of course, there are some leftovers. The first is better support for JPA (built on top of Compass generic support for JPA). Another enhancement is to use memcache service to cache heavily used index portions.</p>
<p><strong>Update: Questions regarding the integration are best asked on the <a href="http://forum.compass-project.org">Compass forums</a>. Its hard to have a conversation using the blog comments.</strong></p>
<p>Enjoy!</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><img src="http://feeds.feedburner.com/~r/kimchyblog/~4/UFuBLoiX4KU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kimchy.org/searchable-google-appengine-with-compass/feed/</wfw:commentRss>
		<slash:comments>45</slash:comments>
		</item>
		<item>
		<title>Compass 2.2.0 GA Released</title>
		<link>http://www.kimchy.org/compass-220-ga-released/</link>
		<comments>http://www.kimchy.org/compass-220-ga-released/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 23:46:27 +0000</pubDate>
		<dc:creator>Shay Banon</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[compass]]></category>

		<guid isPermaLink="false">http://www.kimchy.org/?p=576</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/compass-220-ga-released/";</script> Compass version 2.2.0 GA released. There are many features included in the release which I covered in the different milestone and release candidates announcements. Here is a link to the user group announcement.
I already have several things lined up for Compass 3.0, with the first thing on the plan is a complete restructuring of [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/compass-220-ga-released/";</script><p><img src="http://www.kimchy.org/wp-content/uploads/2009/03/breaking-news.jpeg" alt="breaking-news" title="breaking-news" width="130" height="74" class="alignleft size-full wp-image-557" /> <a href="http://www.compass-project.org">Compass</a> version 2.2.0 GA released. There are many features included in the release which I covered in the different milestone and release candidates announcements. Here is a link to the <a href="http://groups.google.com/group/compass-project-user/browse_thread/thread/9c9be09b7cccdbd0">user group announcement</a>.</p>
<p>I already have several things lined up for Compass 3.0, with the first thing on the plan is a complete restructuring of the codebase to a more modular one (should not be a breaking change, maybe some package renaming, will try to keep that to a minimum). Compass integrates with many libraries now, and its time to make the structure/build more modular (it is already mostly modular internally). Will report back on how it goes.</p>
<p>Enjoy!</p>
<p>p.s. Compass is now on maven repo central, all maven lovers rejoice!.</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><img src="http://feeds.feedburner.com/~r/kimchyblog/~4/8Y4BGfHfI5o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kimchy.org/compass-220-ga-released/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Compass 2.1.4 Released</title>
		<link>http://www.kimchy.org/compass-214-released/</link>
		<comments>http://www.kimchy.org/compass-214-released/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 16:57:54 +0000</pubDate>
		<dc:creator>Shay Banon</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[compass]]></category>

		<guid isPermaLink="false">http://www.kimchy.org/?p=572</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/compass-214-released/";</script> Compass version 2.1.4 released. The version fixes one major bug revolving around how Compass manages read committed transactions, it is highly recommended to upgrade to it.
Enjoy!
var dzone_style="2";]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/compass-214-released/";</script><p><img src="http://www.kimchy.org/wp-content/uploads/2009/01/hot-off-the-press1.jpeg" alt="hot-off-the-press1" title="hot-off-the-press1" width="135" height="60" class="alignleft size-full wp-image-322" /> <a href="http://www.compass-project.org">Compass</a> version 2.1.4 released. The version fixes one major bug revolving around how Compass manages read committed transactions, it is highly recommended to upgrade to it.</p>
<p>Enjoy!</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><img src="http://feeds.feedburner.com/~r/kimchyblog/~4/y7ObKIvp8ow" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kimchy.org/compass-214-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compass Forum Moving to Google Group</title>
		<link>http://www.kimchy.org/compass-forum-moving-to-google-group/</link>
		<comments>http://www.kimchy.org/compass-forum-moving-to-google-group/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 20:53:41 +0000</pubDate>
		<dc:creator>Shay Banon</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[compass]]></category>

		<guid isPermaLink="false">http://www.kimchy.org/?p=569</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/compass-forum-moving-to-google-group/";</script>Compass forums have moved to Google Groups, the group name is compass-project-user, and the link is http://groups.google.com/group/compass-project-user.
Why? Well, basically, Jive is no more, and it seems like Clear Space or something like that is the new way for the company to go. Also, no more open source license. So, I thought it was a good [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/compass-forum-moving-to-google-group/";</script><p>Compass forums have moved to Google Groups, the group name is <strong>compass-project-user</strong>, and the link is <a href="http://groups.google.com/group/compass-project-user">http://groups.google.com/group/compass-project-user</a>.</p>
<p>Why? Well, basically, Jive is no more, and it seems like Clear Space or something like that is the new way for the company to go. Also, no more open source license. So, I thought it was a good time to move to Google groups. </p>
<p>I managed to migrate most of the forum posts to Google groups, but, if you want to be sure that I will answer a question, please repost a question you have again. Sorry for the inconvenience.</p>
<p>Cheers,<br />
Shay</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><img src="http://feeds.feedburner.com/~r/kimchyblog/~4/2dMssKSF_rA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kimchy.org/compass-forum-moving-to-google-group/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compass 2.2.0 RC2 Released</title>
		<link>http://www.kimchy.org/compass-220-rc2-released/</link>
		<comments>http://www.kimchy.org/compass-220-rc2-released/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 07:38:17 +0000</pubDate>
		<dc:creator>Shay Banon</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[compass]]></category>

		<guid isPermaLink="false">http://www.kimchy.org/?p=566</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/compass-220-rc2-released/";</script> Compass version 2.2.0 RC2 released. The version fixes several bugs, including the two bugs described in the 2.1.3 post.
Full release notes can be found here.
Enjoy!
var dzone_style="2";]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/compass-220-rc2-released/";</script><p><img src="http://www.kimchy.org/wp-content/uploads/2009/01/hot-off-the-press1.jpeg" alt="hot-off-the-press1" title="hot-off-the-press1" width="135" height="60" class="alignleft size-full wp-image-322" /> <a href="http://www.compass-project.org">Compass</a> version 2.2.0 RC2 released. The version fixes several bugs, including the two bugs described in the <a href="http://www.kimchy.org/compass-213-released/">2.1.3 post</a>.</p>
<p>Full release notes can be found <a href="http://issues.compass-project.org/secure/ReleaseNote.jspa?projectId=10000&#038;styleName=Html&#038;version=10181">here</a>.</p>
<p>Enjoy!</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><img src="http://feeds.feedburner.com/~r/kimchyblog/~4/L3G-PwcQuSM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kimchy.org/compass-220-rc2-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compass 2.1.3 Released</title>
		<link>http://www.kimchy.org/compass-213-released/</link>
		<comments>http://www.kimchy.org/compass-213-released/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 23:53:41 +0000</pubDate>
		<dc:creator>Shay Banon</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[compass]]></category>

		<guid isPermaLink="false">http://www.kimchy.org/?p=563</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/compass-213-released/";</script> Compass version 2.1.3 released. The version fixes two important bugs. The first fixes a problem when using Compass support unmarshall flag set to false (OSEM) and using analyzer property controller or boost property controller (basically, it did not work&#8230;).
The second one revolves around Compass integration with TopLink and EclipseLink. Basically, with complex hierarchy of [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/compass-213-released/";</script><p><img src="http://www.kimchy.org/wp-content/uploads/2009/01/hot-off-the-press1.jpeg" alt="hot-off-the-press1" title="hot-off-the-press1" width="135" height="60" class="alignleft size-full wp-image-322" /> <a href="http://www.compass-project.org">Compass</a> version 2.1.3 released. The version fixes two important bugs. The first fixes a problem when using Compass support unmarshall flag set to false (OSEM) and using analyzer property controller or boost property controller (basically, it did not work&#8230;).</p>
<p>The second one revolves around Compass integration with TopLink and EclipseLink. Basically, with complex hierarchy of mappings, objects would be created twice in the index. It boiled down to how TopLink and EclipseLink fire up events for such cases. An event on class B that extends A is also fired for A&#8230;, so Compass needs to take that into account when registering event listeners. Surprisingly, there was an extra fix required for EclipseLink, as the logic of firing events changed a bit between EclipseLink and TopLink.</p>
<p>Full release notes can be found <a href="http://issues.compass-project.org/secure/ReleaseNote.jspa?projectId=10000&#038;styleName=Html&#038;version=10180">here</a>.</p>
<p>Enjoy!.</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><img src="http://feeds.feedburner.com/~r/kimchyblog/~4/eWUoHv25cRs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kimchy.org/compass-213-released/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Compass 2.2.0 RC1 Released</title>
		<link>http://www.kimchy.org/compass-220-rc1-released/</link>
		<comments>http://www.kimchy.org/compass-220-rc1-released/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 22:53:26 +0000</pubDate>
		<dc:creator>Shay Banon</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[compass]]></category>

		<guid isPermaLink="false">http://www.kimchy.org/?p=554</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/compass-220-rc1-released/";</script> Compass version 2.2.0 RC1 released. Main features include simplified index and search session, mt transaction processor, and dynamic properties. Full release notes can be found here.
Enjoy!
var dzone_style="2";]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.kimchy.org/compass-220-rc1-released/";</script><p><img src="http://www.kimchy.org/wp-content/uploads/2009/03/breaking-news.jpeg" alt="breaking-news" title="breaking-news" width="130" height="74" class="alignleft size-full wp-image-557" /> <a href="http://www.compass-project.org">Compass</a> version 2.2.0 RC1 released. Main features include <a href="http://www.kimchy.org/compass-index-and-search-session/">simplified index and search session</a>, <a href="http://www.kimchy.org/compass-mt-transaction-processor/">mt transaction processor</a>, and <a href="http://www.kimchy.org/compass-dynamic-properties/">dynamic properties</a>. Full release notes can be found <a href="http://issues.compass-project.org/secure/ReleaseNote.jspa?projectId=10000&#038;styleName=Html&#038;version=10172">here</a>.</p>
<p>Enjoy!</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><img src="http://feeds.feedburner.com/~r/kimchyblog/~4/jTrPL5gCtqs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kimchy.org/compass-220-rc1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 1.876 seconds. --><!-- Cached page generated by WP-Super-Cache on 2009-11-11 10:11:48 -->
