<?xml version="1.0" encoding="iso-8859-1"?>

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:cc="http://web.resource.org/cc/"
  xmlns="http://purl.org/rss/1.0/">

<channel rdf:about="http://blogs.codehaus.org/people/bamboo//archives/db4o.html">
<title>bamboozled - db4o</title>
<link>http://blogs.codehaus.org/people/bamboo//archives/db4o.html</link>
<description></description>
<dc:language>en-us</dc:language>
<dc:creator></dc:creator>
<dc:date>2008-05-20T16:41:56-03:00</dc:date>
<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=2.661" />

<items>
<rdf:Seq><rdf:li rdf:resource="http://blogs.codehaus.org/people/bamboo/archives/001697_write_once_sharpen_run_anywhere.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/bamboo/archives/001648_make_the_world_a_better_place_with_boo.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/bamboo/archives/001640_back_from_the_mono_summit_07.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/bamboo/archives/001637_mono_summit_2007.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/bamboo/archives/001606_one_week_with_scala.html" />
<rdf:li rdf:resource="http://blogs.codehaus.org/people/bamboo/archives/001573_db4o_activation_and_transparent_activation_i.html" />
</rdf:Seq>
</items>

</channel>

<item rdf:about="http://blogs.codehaus.org/people/bamboo/archives/001697_write_once_sharpen_run_anywhere.html">
<title>Write Once, Sharpen, Run Anywhere</title>
<link>http://blogs.codehaus.org/people/bamboo/archives/001697_write_once_sharpen_run_anywhere.html</link>
<description><![CDATA[<p style="font-size: 14px;">When I joined <a href="http://www.db4o.com/">Db4objects</a> a few years ago my first assignment was to research and implement a decent solution for getting db4o to work on the .net platform.</p>
<p style="font-size: 14px;">There was already some investigation going on on using the <a href="http://www.eclipse.org/jdt/">Eclipse JDT API</a> as the basis for a source to source translator which proved to be a wise choice in the long run.</p>
<p style="font-size: 14px;">Eventually <a href="https://source.db4o.com/db4o/trunk/sharpen/">sharpen</a> was born and after <a href="http://developer.db4o.com/blogs/product_news/archive/2006/11/15/new-conventions-for-db4o-on-net.aspx">a lot of love</a> we finally reached a point where <a href="https://source.db4o.com/db4o/trunk/db4oj/core/src/com/db4o/activation/Activator.java">the translated</a> <a href="https://source.db4o.com/db4o/trunk/db4o.net/Db4objects.Db4o/Db4objects.Db4o/Activation/IActivator.cs">c# code</a> would look really good.</p>
<p style="font-size: 14px;">People would get really interested every time sharpen was mentioned but for several reasons it wasn't publicly available.</p>
<p style="font-size: 14px;">Until <a href="http://developer.db4o.com/blogs/product_news/archive/2008/05/20/smart-java-to-c-conversion-for-the-masses-with-sharpen.aspx">now</a>. Hooray!</p>
<p style="font-size: 14px;">I'm really looking forward to what people will build on top of that.</p>
<p style="font-size: 14px;"><br /></p>
]]></description>
<dc:subject></dc:subject>
<dc:creator>bamboo</dc:creator>
<dc:date>2008-05-20T16:41:56-03:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/bamboo/archives/001648_make_the_world_a_better_place_with_boo.html">
<title>Make the world a better place with boo</title>
<link>http://blogs.codehaus.org/people/bamboo/archives/001648_make_the_world_a_better_place_with_boo.html</link>
<description><![CDATA[<p></p> <p>Gaiaware has just announced the <a href="http://ajaxwidgets.com/news_gaia_programming_contest.aa">Gaia Programming Contest</a>. A contest "... about creating an Ajax Application that will serve as a meeting place for people dedicated to solving environmental issues...". </p> <p>Very good but there's more: "... no Close Source dependencies can be used which means that the end product must be compilable on <a href="http://www.mono-project.com/Main_Page">Mono</a> ...". Great!</p> <p>Of course people using <a href="http://boo.codehaus.org/">boo</a> and <a href="http://www.db4o.com/">db4o</a> have a huge headstart. So what are you waiting for?</p>]]></description>
<dc:subject>boo</dc:subject>
<dc:creator>bamboo</dc:creator>
<dc:date>2007-12-20T17:19:31-03:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/bamboo/archives/001640_back_from_the_mono_summit_07.html">
<title>Back From the Mono Summit 07</title>
<link>http://blogs.codehaus.org/people/bamboo/archives/001640_back_from_the_mono_summit_07.html</link>
<description><![CDATA[<p><img src="http://www.mono-project.com/files/4/42/Summit.png" align="right"> </p> <p>What a great experience.  <p>A chance to interact live with a <a href="http://evain.net/blog/">dear friend</a>. Free Software, Hacking, Women, Futurama, McDonalds, love spreading, Militant Atheism, Monty Python, Douglas Adams and the French Way.  <p>Had lots of interesting exchange of ideas with <a href="http://primates.ximian.com/~massi/all.html">Massi</a>, ranging from "extensible parsing through composeable PEGs with&nbsp; optimal performance" to Carlos Castañeda, Jesus Christ, meta-physics, religion and Pink Floyd. The <a href="http://en.wikipedia.org/wiki/Cryptonomicon">Cryptonomicon</a> really got me.  <p>Got to put a face on <a href="http://forum.unity3d.com/profile.php?mode=viewprofile&amp;u=3">Joachim</a> and see how really cool <a href="http://otee.dk/">Unity</a> is.  <p><a href="http://weblog.ikvm.net/">Jeroen IKVM Frijters</a> is a funny guy!  <p>On Thursday I got to <a href="http://codehaus.org/~bamboo/MonoSummit07-db4o.pdf">talk</a> about <a href="http://www.db4o.com/">db4o</a> which led me to meet a few db4o users hanging around the conference.  <blockquote> <p>Pedro Santos had an interesting question, how to monitor and control the usage of computational resources in a managed client/server application? In other words, how a sysadmin can make sure a specific client won't DOS the application?  <p>For .NET servers running on Windows there are performance counters, what about Mono servers running on Linux?</p></blockquote> <p>I've also got to spread the gospel about <a href="http://boo.codehaus.org/">boo</a> for which I got a hugely positive response.  <blockquote> <p><a href="http://ajaxwidgets.com/Blogs/thomas.bb">Thomas "Gaia" Hansen</a> seemed to really get it and so we had lots of interesting discussions on how to take over the world boo style.</p> <p><a href="http://jacksonito.blogspot.com/">Jackson</a> wants to hack on better nullable type support for boo!</p> <p><a href="http://schani.wordpress.com/">Mark</a> wants an extensible language where NullReferenceExceptions are impossible.</p> <p><a href="http://tirania.org/blog/index.html">Miguel</a> reassured me once again mcs won't be rewritten on top of the boo compiler infrastructure :)</p></blockquote> <p>The presentation material is <a href="http://boo.codehaus.org/MonoSummit2007/">here</a>.  <p>Looking forward to the next one.  ]]></description>
<dc:subject>boo</dc:subject>
<dc:creator>bamboo</dc:creator>
<dc:date>2007-12-04T09:43:44-03:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/bamboo/archives/001637_mono_summit_2007.html">
<title>Mono Summit 2007</title>
<link>http://blogs.codehaus.org/people/bamboo/archives/001637_mono_summit_2007.html</link>
<description><![CDATA[<p>
So it's official now, I'll be speaking at the <a href="http://www.mono-project.com/Mono_Summit_2007_Schedule">Mono Summit 2007</a>. <br /><br />
It will be great to see you there!<br /><br />

Many thanks to the great folks at <a href="http://www.db4o.com/">db4o</a> for sponsoring my trip.</br >
</p>]]></description>
<dc:subject>technology</dc:subject>
<dc:creator>bamboo</dc:creator>
<dc:date>2007-11-13T14:54:04-03:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/bamboo/archives/001606_one_week_with_scala.html">
<title>One Week With Scala</title>
<link>http://blogs.codehaus.org/people/bamboo/archives/001606_one_week_with_scala.html</link>
<description><![CDATA[<p>It all really started when Bob Pasker asked me if <a href="http://www.db4o.com/">db4o </a>worked with <a href="http://www.scala-lang.org/">scala</a>. That kind of subtext is usually all I need to start exploring another programming language. Specially one of such a tasty functional flavor.</p>

<p>My experiment was to port a simple time tracking application I wrote for myself some time ago from .net/boo to jvm/scala.</p>

<p>The application works as a tray icon that lets you right-click your way through projects and tasks. There's no reporting interface other than a REPL window that allows you to execute arbitrary code against the app's object model :)</p>

<p>It actually took me only a week to get it up and running on the three major platforms I work with (windows, linux and macosx) thanks to scala, db4o and swt.</p>

<p>My impression so far is pretty darn good. </p>

<p>Scala is a beautiful language.</p>

<p>The tight integration with java means great tools such as db4o work out of the box.</p>

<p>And the eclipse support goes as far as supporting eclipse plugins written in scala (niiiice).</p>

<p>If you do java you should really be giving scala a ride.</p>

<p>You can find the application at <a href="http://code.google.com/p/sttracker/">http://code.google.com/p/sttracker/</a>.</p>

<p>There's a readme with instructions on how to get it running either through eclipse or ant.</p>

<p>Even if you dont care about the time tracking functionality at all I think the SWT REPL window should give you some fun :)<br />
</p>]]></description>
<dc:subject>db4o</dc:subject>
<dc:creator>bamboo</dc:creator>
<dc:date>2007-08-07T14:40:18-03:00</dc:date>
</item>
<item rdf:about="http://blogs.codehaus.org/people/bamboo/archives/001573_db4o_activation_and_transparent_activation_i.html">
<title>Db4o, Activation and Transparent Activation I</title>
<link>http://blogs.codehaus.org/people/bamboo/archives/001573_db4o_activation_and_transparent_activation_i.html</link>
<description><![CDATA[<style type="text/css"><!--
.syntax0 {
color: #000000;
}
.syntax1 {
color: #cc0000;
}
.syntax2 {
color: #ff8400;
}
.syntax3 {
color: #6600cc;
}
.syntax4 {
color: #cc6600;
}
.syntax5 {
color: #ff0000;
}
.syntax6 {
color: #9966ff;
}
.syntax7 {
background: #ffffcc;
color: #ff0066;
}
.syntax8 {
color: #006699;
font-weight: bold;
}
.syntax9 {
color: #009966;
font-weight: bold;
}
.syntax10 {
color: #0099ff;
font-weight: bold;
}
.syntax11 {
color: #66ccff;
font-weight: bold;
}
.syntax12 {
color: #02b902;
}
.syntax13 {
color: #ff00cc;
}
.syntax14 {
color: #cc00cc;
}
.syntax15 {
color: #9900cc;
}
.syntax16 {
color: #6600cc;
}
.syntax17 {
color: #0000ff;
}
.syntax18 {
color: #000000;
font-weight: bold;
}
.gutter {
background: #dbdbdb;
color: #000000;
}
.gutterH {
background: #dbdbdb;
color: #990066;
}
--></style>
<p>
Life looks good so let's consider a very simple data structure. A linked list:
</p><pre><span class="syntax0"><span class="gutter">   1:</span><span class="syntax8">import</span> System.Collections
<span class="gutter">   2:</span>
<span class="gutter">   3:</span><span class="syntax8">class</span> LinkedList<span class="syntax18">(</span>IEnumerable<span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">   4:</span>    
<span class="gutterH">   5:</span>    _head <span class="syntax8">as</span> Node
<span class="gutter">   6:</span>    
<span class="gutter">   7:</span>    <span class="syntax8">def</span> <span class="syntax8">constructor</span><span class="syntax18">(</span><span class="syntax18">*</span>values<span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">   8:</span>        <span class="syntax8">for</span> value <span class="syntax8">in</span> values<span class="syntax18">:</span>
<span class="gutter">   9:</span>            Add<span class="syntax18">(</span>value<span class="syntax18">)</span>
<span class="gutterH">  10:</span>    
<span class="gutter">  11:</span>    <span class="syntax8">def</span> Add<span class="syntax18">(</span>value<span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">  12:</span>        _head <span class="syntax18">=</span> Node<span class="syntax18">(</span>value, _head<span class="syntax18">)</span>
<span class="gutter">  13:</span>        
<span class="gutter">  14:</span>    <span class="syntax8">def</span> GetEnumerator<span class="syntax18">(</span><span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutterH">  15:</span>        node <span class="syntax18">=</span> _head
<span class="gutter">  16:</span>        <span class="syntax8">while</span> node <span class="syntax8">is</span> <span class="syntax8">not</span> <span class="syntax14">null</span><span class="syntax18">:</span>
<span class="gutter">  17:</span>            <span class="syntax8">yield</span> node.Value
<span class="gutter">  18:</span>            node <span class="syntax18">=</span> node.Next
<span class="gutter">  19:</span>            
<span class="gutterH">  20:</span>    <span class="syntax8">class</span> Node<span class="syntax18">:</span>
<span class="gutter">  21:</span>    
<span class="gutter">  22:</span>        _value <span class="syntax8">as</span> <span class="syntax9">object</span>    
<span class="gutter">  23:</span>        _next <span class="syntax8">as</span> Node
<span class="gutter">  24:</span>        
<span class="gutterH">  25:</span>        <span class="syntax8">def</span> <span class="syntax8">constructor</span><span class="syntax18">(</span>value, next <span class="syntax8">as</span> Node<span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">  26:</span>            _value <span class="syntax18">=</span> value
<span class="gutter">  27:</span>            _next <span class="syntax18">=</span> next
<span class="gutter">  28:</span>
<span class="gutter">  29:</span>        Value<span class="syntax18">:</span>
<span class="gutterH">  30:</span>            <span class="syntax8">get</span><span class="syntax18">:</span>
<span class="gutter">  31:</span>                <span class="syntax8">return</span> _value
<span class="gutter">  32:</span>            
<span class="gutter">  33:</span>        Next<span class="syntax18">:</span>
<span class="gutter">  34:</span>            <span class="syntax8">get</span><span class="syntax18">:</span>
<span class="gutterH">  35:</span>                <span class="syntax8">return</span> _next
</span></pre><p>
Our LinkedList class can be used like this:
</p><pre><span class="syntax0"><span class="gutter">   1:</span>list <span class="syntax18">=</span> LinkedList<span class="syntax18">(</span><span class="syntax13">&quot;</span><span class="syntax13">Eric</span><span class="syntax13"> </span><span class="syntax13">Idle</span><span class="syntax13">&quot;</span>,
<span class="gutter">   2:</span>                <span class="syntax13">&quot;</span><span class="syntax13">John</span><span class="syntax13"> </span><span class="syntax13">Cleese</span><span class="syntax13">&quot;</span>,
<span class="gutter">   3:</span>                <span class="syntax13">&quot;</span><span class="syntax13">Graham</span><span class="syntax13"> </span><span class="syntax13">Chapman</span><span class="syntax13">&quot;</span>,
<span class="gutter">   4:</span>                <span class="syntax13">&quot;</span><span class="syntax13">Terry</span><span class="syntax13"> </span><span class="syntax13">Gilliam</span><span class="syntax13">&quot;</span>,
<span class="gutterH">   5:</span>                <span class="syntax13">&quot;</span><span class="syntax13">Terry</span><span class="syntax13"> </span><span class="syntax13">Jones</span><span class="syntax13">&quot;</span>,
<span class="gutter">   6:</span>                <span class="syntax13">&quot;</span><span class="syntax13">Michael</span><span class="syntax13"> </span><span class="syntax13">Palim</span><span class="syntax13">&quot;</span><span class="syntax18">)</span>
<span class="gutter">   7:</span><span class="syntax8">for</span> item <span class="syntax8">in</span> list<span class="syntax18">:</span>
<span class="gutter">   8:</span>    <span class="syntax10">print</span> item
</span></pre>
<p>Which unsurprisingly gives the following output:</p>
<pre style="background-color: black; color: white">
Michael Palim
Terry Jones
Terry Gilliam
Graham Chapman
John Cleese
Eric Idle
</pre>
<p>
Now let's move on and store our beautifully crafted LinkedList instance with Db4o:
</p>
<pre><span class="syntax0"><span class="gutter">   1:</span>
<span class="gutter">   2:</span><span class="syntax10">using</span> container <span class="syntax18">=</span> Db4oFactory.OpenFile<span class="syntax18">(</span>fname<span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">   3:</span>    container.Set<span class="syntax18">(</span>list<span class="syntax18">)</span>
<span class="gutter">   4:</span>
</span></pre>
<p>
Some time later:
</p>
<pre><span class="syntax0"><span class="gutter">   1:</span>
<span class="gutter">   2:</span><span class="syntax10">using</span> container <span class="syntax18">=</span> Db4oFactory.OpenFile<span class="syntax18">(</span>fname<span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">   3:</span>    list <span class="syntax18">=</span> container.Query<span class="syntax18">(</span>LinkedList<span class="syntax18">)</span>.Next<span class="syntax18">(</span><span class="syntax18">)</span>
<span class="gutter">   4:</span>    <span class="syntax8">for</span> item <span class="syntax8">in</span> list<span class="syntax18">:</span>
<span class="gutterH">   5:</span>        <span class="syntax10">print</span> item <span class="syntax8">or</span> <span class="syntax13">&quot;</span><span class="syntax13">&lt;</span><span class="syntax13">null</span><span class="syntax13">&gt;</span><span class="syntax13">&quot;</span>
<span class="gutter">   6:</span>
</span></pre>
<p>Which gives:</p>
<pre style="background-color: black; color: white">
Michael Palim
Terry Jones
Terry Gilliam
Graham Chapman
&lt;null&gt;
</pre>
<p>Uh, oh... What's going on?</p>
<p><b>Activation</b> is going on, that's what it is.</p>
<p>
<strong>Activation</strong> is the process of populating the attributes of an object with previously stored data.
</p><p>
Db4o activates an object the first time it is retrieved from the database and whenever instructed to do so by the application through IObjectContainer.Activate.
</p><p>
During activation Db4o will also follow the references in the object graph activating any referenced objects until a configured <strong>activation depth </strong>is reached.
</p>
<p>We can make sense of the output if we consider  that Db4o has its <b>default activation depth</b> set to 5.</p>
<p>When activating the list Db4o will follow the LinkedList._head reference and activate the first node, then follow the Node._next reference and so on until it reaches the 5th node which it's not activated further and has its members set to <b>null</b>.</p>
<p>Now that we can understand the output has life gotten any easier?</p>
<p>Well, we can ask Db4o to activate the list to the depth of 7:</p>
<pre><span class="syntax0"><span class="gutter">   1:</span>
<span class="gutter">   2:</span><span class="syntax10">using</span> container <span class="syntax18">=</span> Db4oFactory.OpenFile<span class="syntax18">(</span>configuration, fname<span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">   3:</span>    list <span class="syntax18">=</span> container.Query<span class="syntax18">(</span>LinkedList<span class="syntax18">)</span>.Next<span class="syntax18">(</span><span class="syntax18">)</span>
<span class="gutter">   4:</span><span style="background-color: yellow">    container.Activate<span class="syntax18">(</span>list, <span class="syntax5">7</span><span class="syntax18">)</span></span>
<span class="gutterH">   5:</span>    <span class="syntax8">for</span> item <span class="syntax8">in</span> list<span class="syntax18">:</span>
<span class="gutter">   6:</span>        <span class="syntax10">print</span> item <span class="syntax8">or</span> <span class="syntax13">&quot;</span><span class="syntax13">&lt;</span><span class="syntax13">null</span><span class="syntax13">&gt;</span><span class="syntax13">&quot;</span>
</span></pre>
<p>Which gives us the correct output but smells funny.</p>
<p>Application logic shouldn't have to worry about activation depth and all that. And how are we supposed to track the required activation depth for these dynamic object graphs?</p>
<p>Enter <b>Transparent Activation</b>.</p>
<p>Transparent Activation works by giving the objects in the system the responsibility of activating themselves before accessing any attribute. The activation must happen through a provided <b>activator object</b> which keeps track of everything needed for activation to work. The <b>activator object</b> is made available to any object that implements the <b>IActivatable</b> interface:</p>
<pre><span class="syntax0"><span class="gutter">   1:</span>
<span class="gutter">   2:</span><span class="syntax8">class</span> LinkedList<span class="syntax18">(</span>IEnumerable <span style="background-color: yellow">, IActivatable</span><span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">   3:</span>    
<span class="gutter">   4:</span>    _head <span class="syntax8">as</span> Node
<span class="gutterH">   5:</span>    
<span style="background-color: yellow"><span class="gutter">   6:</span>    <span class="syntax8">transient</span> _activator <span class="syntax8">as</span> IActivator</span>
<span class="gutter">   7:</span>    
<span class="gutter">   8:</span>    <span class="syntax8">def</span> <span class="syntax8">constructor</span><span class="syntax18">(</span><span class="syntax18">*</span>values<span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">   9:</span>        <span class="syntax8">for</span> value <span class="syntax8">in</span> values<span class="syntax18">:</span>
<span class="gutterH">  10:</span>            Add<span class="syntax18">(</span>value<span class="syntax18">)</span>
<span class="gutter">  11:</span>    
<span class="gutter">  12:</span>    <span class="syntax8">def</span> Add<span class="syntax18">(</span>value<span class="syntax18">)</span><span class="syntax18">:</span>
<span style="background-color: yellow"><span class="gutter">  13:</span>        Activate<span class="syntax18">(</span><span class="syntax18">)</span></span>
<span class="gutter">  14:</span>        _head <span class="syntax18">=</span> Node<span class="syntax18">(</span>value, _head<span class="syntax18">)</span>
<span class="gutterH">  15:</span>        
<span class="gutter">  16:</span>    <span class="syntax8">def</span> GetEnumerator<span class="syntax18">(</span><span class="syntax18">)</span><span class="syntax18">:</span>
<span style="background-color: yellow"><span class="gutter">  17:</span>        Activate<span class="syntax18">(</span><span class="syntax18">)</span></span>
<span class="gutter">  18:</span>        node <span class="syntax18">=</span> _head
<span class="gutter">  19:</span>        <span class="syntax8">while</span> node <span class="syntax8">is</span> <span class="syntax8">not</span> <span class="syntax14">null</span><span class="syntax18">:</span>
<span class="gutterH">  20:</span>            <span class="syntax8">yield</span> node.Value
<span class="gutter">  21:</span>            node <span class="syntax18">=</span> node.Next
<span class="gutter">  22:</span>  
<span style="background-color: yellow">
<span class="gutter">  23:</span>    <span class="syntax8">def</span> IActivatable.Bind<span class="syntax18">(</span>activator <span class="syntax8">as</span> IActivator<span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">  24:</span>        _activator <span class="syntax18">=</span> activator
<span class="gutterH">  25:</span>        
<span class="gutter">  26:</span>    <span class="syntax8">def</span> Activate<span class="syntax18">(</span><span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">  27:</span>        <span class="syntax8">if</span> _activator <span class="syntax8">is</span> <span class="syntax14">null</span><span class="syntax18">:</span> <span class="syntax8">return</span>
<span class="gutter">  28:</span>        _activator.Activate<span class="syntax18">(</span><span class="syntax18">)</span>
<span class="gutter">  29:</span>        
</span>
<span class="gutterH">  30:</span>    <span class="syntax8">class</span> Node<span class="syntax18">(</span><span style="background-color: yellow">IActivatable</span><span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">  31:</span>
<span class="gutter">  32:</span>        _value <span class="syntax8">as</span> <span class="syntax9">object</span>
<span class="gutter">  33:</span>
<span class="gutter">  34:</span>        _next <span class="syntax8">as</span> Node
<span class="gutterH">  35:</span>        
<span style="background-color: yellow"><span class="gutter">  36:</span>        <span class="syntax8">transient</span> _activator <span class="syntax8">as</span> IActivator</span>
<span class="gutter">  37:</span>        
<span class="gutter">  38:</span>        <span class="syntax8">def</span> <span class="syntax8">constructor</span><span class="syntax18">(</span>value, next <span class="syntax8">as</span> Node<span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">  39:</span>            _value <span class="syntax18">=</span> value
<span class="gutterH">  40:</span>            _next <span class="syntax18">=</span> next
<span class="gutter">  41:</span>
<span class="gutter">  42:</span>        Value<span class="syntax18">:</span>
<span class="gutter">  43:</span>            <span class="syntax8">get</span><span class="syntax18">:</span>
<span style="background-color: yellow"><span class="gutter">  44:</span>                Activate<span class="syntax18">(</span><span class="syntax18">)</span></span>
<span class="gutterH">  45:</span>                <span class="syntax8">return</span> _value
<span class="gutter">  46:</span>            
<span class="gutter">  47:</span>        Next<span class="syntax18">:</span>
<span class="gutter">  48:</span>            <span class="syntax8">get</span><span class="syntax18">:</span>
<span style="background-color: yellow"><span class="gutter">  49:</span>                Activate<span class="syntax18">(</span><span class="syntax18">)</span></span>
<span class="gutterH">  50:</span>                <span class="syntax8">return</span> _next
<span class="gutter">  51:</span>        
<span style="background-color: yellow">
<span class="gutter">  52:</span>        <span class="syntax8">def</span> IActivatable.Bind<span class="syntax18">(</span>activator <span class="syntax8">as</span> IActivator<span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">  53:</span>            _activator <span class="syntax18">=</span> activator
<span class="gutter">  54:</span>            
<span class="gutterH">  55:</span>        <span class="syntax8">private</span> <span class="syntax8">def</span> Activate<span class="syntax18">(</span><span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">  56:</span>            <span class="syntax8">if</span> _activator <span class="syntax8">is</span> <span class="syntax14">null</span><span class="syntax18">:</span> <span class="syntax8">return</span>
<span class="gutter">  57:</span>            _activator.Activate<span class="syntax18">(</span><span class="syntax18">)</span>
</span>
<span class="gutter">  58:</span>            
</span></pre>
<p>The application just needs to enable Transparent Activation once and then everything should work as expected (no more explicit Activate calls from the application):</p>
<pre><span class="syntax0"><span class="gutter">   1:</span>                    
<span style="background-color: yellow"><span class="gutter">   2:</span>configuration <span class="syntax18">=</span> Db4oFactory.NewConfiguration<span class="syntax18">(</span><span class="syntax18">)</span>
<span class="gutter">   3:</span>configuration.Add<span class="syntax18">(</span>TransparentActivationSupport<span class="syntax18">(</span><span class="syntax18">)</span><span class="syntax18">)</span></span>
<span class="gutter">   4:</span>
<span class="gutterH">   5:</span><span class="syntax10">using</span> container <span class="syntax18">=</span> Db4oFactory.OpenFile<span class="syntax18">(</span>configuration, fname<span class="syntax18">)</span><span class="syntax18">:</span>
<span class="gutter">   6:</span>    list <span class="syntax18">=</span> container.Query<span class="syntax18">(</span>LinkedList<span class="syntax18">)</span>.Next<span class="syntax18">(</span><span class="syntax18">)</span>
<span class="gutter">   7:</span>    <span class="syntax8">for</span> item <span class="syntax8">in</span> list<span class="syntax18">:</span>
<span class="gutter">   8:</span>        <span class="syntax10">print</span> item <span class="syntax8">or</span> <span class="syntax13">&quot;</span><span class="syntax13">&lt;</span><span class="syntax13">null</span><span class="syntax13">&gt;</span><span class="syntax13">&quot;</span>
</span></pre>
<p></p>
<p>Life looks better but what about all that boilerplate code that must go into the object model?</p>
<p>The next Db4o release will ship with an instrumentation tool capable of injecting the right IL instructions into an object model to make it Transparent Activation ready.</p>
<p>If you are curious to see this code in action grab it <a href="http://codehaus.org/~bamboo/TABlog.zip">here</a>.</p>
<p>In a next blog entry I'll go into how to encapsulate this logic behind a smart boo attribute.</p>]]></description>
<dc:subject>boo</dc:subject>
<dc:creator>bamboo</dc:creator>
<dc:date>2007-05-16T21:58:32-03:00</dc:date>
</item>


</rdf:RDF>
