<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://developer.db4o.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Product News from the Core Team</title><link>http://developer.db4o.com/blogs/product_news/default.aspx</link><description>This blog features product news right from the core developer team, once new features and functions get checked into &lt;a href="http://docs.db4o.com/"&gt;Subversion&lt;/a&gt;, available as &lt;a href="http://developer.db4o.com/files/19/default.aspx"&gt;Continuous Build&lt;/a&gt; every 2 hours.</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Debug Build: 61019.2)</generator><item><title>Storing PowerShell objects into a Db4o database</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/12/30/storing-powershell-objects-into-a-db4o-database.aspx</link><pubDate>Tue, 30 Dec 2008 18:59:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:52551</guid><dc:creator>Adriano Verona</dc:creator><slash:comments>2</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/52551.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=52551</wfw:commentRss><description>&lt;p&gt;Any (Windows user) &lt;a href="http://en.wikipedia.org/wiki/Character_user_interface"&gt;CLI&lt;/a&gt; enthusiast should already be aware about &lt;a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx" title="PowerShell home"&gt;PowerShell&lt;/a&gt;, MS latest bet in this area. &lt;/p&gt;

&lt;p&gt;I must confess that even being aware about it I haven't had the time to use it other than for really simple tests. You know,&lt;/p&gt;

&lt;p&gt;most of the time we need to get something done instead of learning a new set of shell commands, syntax, philosophy, etc.&lt;/p&gt;

&lt;p&gt;But this changed recently due to some cool &lt;a href="http://powershellcommunity.org/Forums/tabid/54/aff/6/aft/3413/afv/topic/afpgj/1/Default.aspx#3827"&gt;guys asking about how they could use Db4o to store PowerShell objects&lt;/a&gt;.Now&lt;/p&gt;

&lt;p&gt;I have the motivation (and some allocated time) to pursue this goal, cool!&lt;/p&gt;

&lt;p&gt;I do suggest that you give PowerShell a serious try (this way you'll gain some familiarity with it) before you continue to read this post.&lt;/p&gt;Among other places, you can find a lot of information regarding PowerShell &lt;a href="http://www.microsoft.com/technet/scriptcenter/topics/winpsh/manual/default.mspx"&gt;here&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/powershell/default.aspx" title="In depth information."&gt;here&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/ms714674%28VS.85%29.aspx" title="Programming PowerShell"&gt;here&lt;/a&gt; (for programing purposes). I am not a expert in the subject, so I am going to explain only the basics to get the code in this post to work.&lt;p&gt;Have you gotten yourself comfortable with PowerShell already? Ok, &lt;a href="https://source.db4o.com/db4o/trunk/sandbox/Adriano/Blogs/PowerShell/" title="SVN Repository"&gt;grab the source&lt;/a&gt; code for this post and have fun :)&amp;nbsp; (&lt;i&gt;svn co https://source.db4o.com/db4o/trunk/sandbox/Adriano/Blogs/PowerShell/&lt;/i&gt;)&lt;/p&gt;&lt;p&gt;My first step was to &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c913aeab-d7b4-4bb1-a958-ee6d7fe307bc&amp;amp;displaylang=en"&gt;download PowerShell 2 (CTP 3)&lt;/a&gt; and install it. Then I just took a sample from the &lt;a href="http://powershellcommunity.org" title="PowerShell Community"&gt;powershell community&lt;/a&gt;, compiled&lt;/p&gt;

&lt;p&gt;and installed the new cmdlet.&lt;/p&gt;

&lt;p&gt;Well, "&lt;b&gt;just&lt;/b&gt;" is an euphemism of course. It took me some time to understand what was required, so, in order to make it simple to you, I'll give a short explanation about what's required:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In order to compile the code you need to set references to PowerShell assemblies located under "%ProgramFiles%\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0"&amp;nbsp; (or, in PowerShell syntax: "$env:ProgramFiles\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0")&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;Register your &lt;a href="http://technet.microsoft.com/en-us/library/bb978571.aspx"&gt;cmdlet&lt;/a&gt; (i.e, make PowerShell aware of our new cmdlet). In a "PowerShell" type (&lt;b&gt;this requires administrator privileges&lt;/b&gt;):&lt;br&gt;&lt;br&gt;PS C:\&amp;gt; $env:windir\Microsoft.Net\Framework\V2.0.50727\InstallUtil.exe PATH-TO-YOUR-CMDLET-DLL&amp;lt;enter&amp;gt;&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;Finally, add your cmdlet to the current shell (take a look in &lt;b&gt;export-console&lt;/b&gt; cmdlet if you don't want to repeat this everytime you open a shell):&lt;br&gt;&lt;br&gt;PS C:\&amp;gt; Add-PSSnapin Db4o.PowerShellSnapin&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now we are ready to run our cmdlet.&lt;br&gt;&lt;br&gt;PS C:\Users\adriano&amp;gt; select-db4o-object&lt;/p&gt;

&lt;p&gt;Once I get past this step I just tried to store / query a simple &lt;a href="http://en.wikipedia.org/wiki/POCO"&gt;POCO&lt;/a&gt; (defined in the same project) using Db4o and it just worked ®. &lt;/p&gt;&lt;p&gt;Since it worked flawlessly I started to dig into how to define objects dynamically inside PowerShell as this could pose problems for Db4o. After some research&lt;/p&gt;&lt;p&gt;I found the add-member cmdlet, which is used to dynamically add members to objects. So, the next thing I've tried was:&lt;/p&gt;&lt;p&gt;PS C:\&amp;gt; $obj = ""&lt;br&gt;PS C:\&amp;gt; $obj = $obj | add-member -membertype noteproperty Name Adriano -passthru&lt;br&gt;PS C:\&amp;gt; $obj = $obj | add-member -membertype noteproperty Country Brazil -passthru&lt;br&gt;PS C:\&amp;gt; $obj = $obj | add-member -membertype scriptmethod Print {$this.Name + ": " + $this.Country} -passthru&lt;br&gt;&lt;/p&gt;&lt;p&gt;This creates a new object with properties &lt;b&gt;Name&lt;/b&gt; and &lt;b&gt;Country&lt;/b&gt; and a &lt;b&gt;Print()&lt;/b&gt; method .&lt;/p&gt;&lt;p&gt;Then I've tried to persist this object into Db4o and got an exception back saying that some collection object could not be stored in Db4o because it had no usable public constructors (a constructor that doesn't throw when called with default values (null for references, 0 for int, etc.). As explained here, some classes (for instance collections) require their constructor to be called in order to get a valid object &lt;/p&gt;&lt;p&gt;so this was a show stopper for me. Again, after some investigation I realized that I could write a custom typehandler and persist only PSObject's "interesting" bits. At least for the basic&amp;nbsp;&lt;/p&gt;&lt;p&gt;scenario it worked fine: &lt;br&gt;&lt;/p&gt;&lt;p&gt;PS C:\&amp;gt; add-db4o-object -DatabasePath test.odb -Item $obj&lt;br&gt;PS C:\&amp;gt; $t = select-db4o-object -DatabasePath test.odb&lt;br&gt;
PS C:\&amp;gt; $t.Print()&lt;br&gt;Adriano: Brazil&lt;br&gt;&lt;/p&gt;&lt;p&gt;(note that the database file [in this sample, test.odb] will always be created / looked up in the user home folder, i.e, &lt;b&gt;$env:homepath&lt;/b&gt;) (of course you can change this behavior passing a full path to Db4o)&lt;br&gt;&lt;/p&gt;&lt;p&gt;Basically this typehandler just acts as a translator, creating (and storing) an instance of PSObjectWrapper (a more Db4o friendly class) for each PSObject. When reading it just goes trough the inverse path: it reads a PSObjectWrapper from the database, instantiate a new PSObject and set its properties based on the just read object; finally it returns this new object as if it was read from the database.&lt;br&gt;&lt;/p&gt;&lt;p&gt;What is still missing in this cmdlet is a way to query for objects in
the database and to handle multiple references to an object correctly but I'll leave this as an exercise for the reader ;) &lt;br&gt;&lt;/p&gt;Another possible approach&amp;nbsp; would be to emit a "strong" type for
every PSObject in a object graph; this would make querying simpler and
faster but would not fix the issue with multiple references for objects.&lt;br&gt;&lt;p&gt;Let me know if you have ideas, suggestions or questions.&lt;/p&gt;&lt;p&gt;Best&lt;/p&gt;&lt;p&gt;Adriano &lt;br&gt;&lt;/p&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=52551" width="1" height="1"&gt;</description><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>7.4 - Release Notes</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/11/29/7-4-release-notes.aspx</link><pubDate>Sat, 29 Nov 2008 11:45:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:52181</guid><dc:creator>Tetyana Loskutova</dc:creator><slash:comments>1</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/52181.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=52181</wfw:commentRss><description>&lt;p&gt;Now is the time for the newer and better Stable version - &lt;a href="http://developer.db4o.com/files/folders/db4o_74/default.aspx"&gt;7.4&lt;/a&gt;. As usual it is available in &lt;a href="http://developer.db4o.com/files/"&gt;download center&lt;/a&gt; and recommended for product shipment. Note, that the production release did not change and is also 7.4.&lt;/p&gt;
&lt;p&gt;The most prominent db4o features introduced since &lt;a href="http://developer.db4o.com/files/folders/db4o_64/default.aspx"&gt;6.4 release&lt;/a&gt; are: &lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://developer.db4o.com/blogs/product_news/archive/2008/01/10/from-transparent-activation-to-transparent-persistence.aspx"&gt;Transparent Persistence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.db4o.com/blogs/product_news/archive/2008/02/02/pluggable-typehandlers-custom-object-handling-made-easy.aspx"&gt;New Typehandler Interface for Optimal Storage and Retrieval&lt;/a&gt;&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.db4o.com/blogs/product_news/archive/2008/02/12/linq-is-here.aspx"&gt;LINQ support&lt;/a&gt;&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.db4o.com/blogs/product_news/archive/2008/01/04/set-store-get-querybyexample.aspx"&gt;API change: set() =&amp;gt; store(), get() =&amp;gt; queryByExample() &amp;nbsp; &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.db4o.com/blogs/product_news/archive/2008/04/15/drs-does-collections.aspx"&gt;dRS collections support&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;li&gt;And here is the list of Jira issues resolved since the previous Stable release (&lt;a href="http://developer.db4o.com/blogs/product_news/archive/2008/04/23/6-4-stable-release-notes.aspx"&gt;6.4&lt;/a&gt;): &lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1451"&gt;COR-1451&lt;/a&gt; - garbage collection breaks transparent persistence &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1441"&gt;COR-1441&lt;/a&gt; - Memory Leak in ClientTransactionPool &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1439"&gt;COR-1439&lt;/a&gt; - schema evolution not working correctly for client server mode. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1412"&gt;COR-1412&lt;/a&gt; - IStoredField.Get() returns null when attempting to retrieve a stored field that's been removed from class &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1396"&gt;COR-1396&lt;/a&gt; - Updating from 6.4 to 7.4, some queries throw NullPointerExceptions &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1394"&gt;COR-1394&lt;/a&gt; - Defrag does not check super classes for field indices when deciding on address mapping for an object slot &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1388"&gt;COR-1388&lt;/a&gt; - Public API to query for number of objects of a given type &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1362"&gt;COR-1362&lt;/a&gt; - Unable to get refactored field values due to wrong state in field meta data &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1353"&gt;COR-1353&lt;/a&gt; - NRE with LINQ in Visual Basic &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1341"&gt;COR-1341&lt;/a&gt; - Version handling for ClassAspects &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1337"&gt;COR-1337&lt;/a&gt; - Custom Typehandler implementation as Class Aspects &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1335"&gt;COR-1335&lt;/a&gt; - patch for adding maven deployment to build &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1334"&gt;COR-1334&lt;/a&gt; - Deleting an object from one client and updating from another the object is lost &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1321"&gt;COR-1321&lt;/a&gt; - [Java] Use ListTypeHandler for ArrayList &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1319"&gt;COR-1319&lt;/a&gt; - NPE on ExtObjectContainer#storedClasses, if class is not present &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1318"&gt;COR-1318&lt;/a&gt; - db4o 7.4 .NET 2 Development release download link is broken &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1313"&gt;COR-1313&lt;/a&gt; - Remove flushFileBuffers(false) configuration setting. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1311"&gt;COR-1311&lt;/a&gt; - partial activated item when querying with a hashmap &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1301"&gt;COR-1301&lt;/a&gt; - TracerBullet: Implement generic Map Typehandler &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1299"&gt;COR-1299&lt;/a&gt; - Rename FirstClassHandler#readArrayHandler() and use context as parameter &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1298"&gt;COR-1298&lt;/a&gt; - TypeHandler API: #cascadeActivation() should have an ActivationContext as parameter. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1297"&gt;COR-1297&lt;/a&gt; - Spike: Class derived from ArrayList using custom Typehandler &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1284"&gt;COR-1284&lt;/a&gt; - Defragment against unknown classes runs into NPE on btree index lookup &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1282"&gt;COR-1282&lt;/a&gt; - [decaf] functional test for resolving db4oj/db4ojdk1.2 conversion issues &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1281"&gt;COR-1281&lt;/a&gt; - Running out of disk space causes unrecoverable data corruption &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1280"&gt;COR-1280&lt;/a&gt; - Transparent Update Won't Work On Iterative Updates &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1279"&gt;COR-1279&lt;/a&gt; - Delegate in untyped arrays cause ObjectNotStorableException &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1265"&gt;COR-1265&lt;/a&gt; - ArrayHandler: Defragment old databases &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1264"&gt;COR-1264&lt;/a&gt; - ArrayHandler: Updating from old databases to new format &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1262"&gt;COR-1262&lt;/a&gt; - Pass configuration on to reflector on startup &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1261"&gt;COR-1261&lt;/a&gt; - Move constructor handling into reflector &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1252"&gt;COR-1252&lt;/a&gt; - Db4objects.Db4o.Tools-CF-2008 projects missing in Db4objects.Db4o.Tests-CF-2008.sln db4o-7.3.38.10577-net35.msi &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1248"&gt;COR-1248&lt;/a&gt; - dll missing in db4o-7.3\bin\compact-3.5 for db4o-7.3.38.10577-net35.msi &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1238"&gt;COR-1238&lt;/a&gt; - Trunk Version throws NullPointerException when using UniqueFieldValueConstraint and VersionNumbers &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1236"&gt;COR-1236&lt;/a&gt; - Linq OrderBy operator fails when using TA enabled assemblies &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1234"&gt;COR-1234&lt;/a&gt; - Port COR-1126 (explicit AND joins to implicit) to 6.4 branch &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1231"&gt;COR-1231&lt;/a&gt; - Proper support for generic lists of nullable types &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1225"&gt;COR-1225&lt;/a&gt; - For db4o-6.4.36.10458-net2.msi testcases not executed for Db4objects.Db4o.Tests-CF-2005.sln &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1223"&gt;COR-1223&lt;/a&gt; - for db4o-6.4.36.10458-net2.msi few testcase fails for Db4objects.Db4o.Tests-2005.sln &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1219"&gt;COR-1219&lt;/a&gt; - Linq Exception whne using TA enabled assemblies &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1218"&gt;COR-1218&lt;/a&gt; - [Release 6.4] com.db4o.db4ounit.common.concurrency.query.ConcurrentQueryTestCase failed &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1217"&gt;COR-1217&lt;/a&gt; - TracerBullet: Defragment for Java ArrayList using the new Typehandler &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1216"&gt;COR-1216&lt;/a&gt; - TracerBullet: Deletion for Java ArrayList using the new Typehandler &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1214"&gt;COR-1214&lt;/a&gt; - Db server closed when upgraded from 5.5 version to 6.4.14.8331 with btree based freespace management system &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1204"&gt;COR-1204&lt;/a&gt; - Define release 7.3 for April &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1187"&gt;COR-1187&lt;/a&gt; - Lazy queries returned by ObjectSet.iterator don't respect the db4o lock &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1186"&gt;COR-1186&lt;/a&gt; - Fully remove second write indirection logic from Marshalling &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1179"&gt;COR-1179&lt;/a&gt; - Linq 'orderby' throwing exceptions &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1174"&gt;COR-1174&lt;/a&gt; - Mark factory methods using global configuration as deprecated &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1173"&gt;COR-1173&lt;/a&gt; - OSGi class loading configuration fails when global configuration is used &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1170"&gt;COR-1170&lt;/a&gt; - Version update for System.Collections.Generic.List &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1169"&gt;COR-1169&lt;/a&gt; - Reading and Writing of System.Collections.Generic.List &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1167"&gt;COR-1167&lt;/a&gt; - Send only the Db4oDatabase id intestead of the full signature when sending the UUID of deleted objects to the committed callback &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1161"&gt;COR-1161&lt;/a&gt; - Files missing in \db4o-7.2\bin\net-3.5 of db4o-7.2.30.10211-net35.msi &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1160"&gt;COR-1160&lt;/a&gt; - Files missing in \bin\compact-3.5 of db4o-7.2.30.10211-net35.msi &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1157"&gt;COR-1157&lt;/a&gt; - Files missing in \bin\compact-2.0 of db4o-7.2.30.10211 &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1152"&gt;COR-1152&lt;/a&gt; - [Linq] Query caching yielding wrong results &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1147"&gt;COR-1147&lt;/a&gt; - Solution doesn't compile &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1146"&gt;COR-1146&lt;/a&gt; - db4o.chm documentation is not generated &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1145"&gt;COR-1145&lt;/a&gt; - Issues in the .NET 35 LINQ build &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1141"&gt;COR-1141&lt;/a&gt; - Produce plan for Generic Collections and Fast Collections &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1140"&gt;COR-1140&lt;/a&gt; - Blog about optimized LINQ for db4o &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1128"&gt;COR-1128&lt;/a&gt; - TracerBullet: Query Java ArrayList using the new Typehandler &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1126"&gt;COR-1126&lt;/a&gt; - Optimize constraint graph to remove ANDs between constraints if not needed &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1123"&gt;COR-1123&lt;/a&gt; - TracerBullet: Store and Retrieve Java ArrayList using the new Typehandler &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1117"&gt;COR-1117&lt;/a&gt; - Callback API gets reference of a new ObjectContainer &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1114"&gt;COR-1114&lt;/a&gt; - Adapt TA/TP .NET bytecode instrumentation to new Activatable#bind() semantics &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1113"&gt;COR-1113&lt;/a&gt; - blog about RollbackStrategy with deactivate example &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1110"&gt;COR-1110&lt;/a&gt; - Adapt TA/TP Java bytecode instrumentation to new Activatable#bind() semantics &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1109"&gt;COR-1109&lt;/a&gt; - Benchmark unoptimized linq to optimized linq &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1108"&gt;COR-1108&lt;/a&gt; - integrate linq on the build &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1107"&gt;COR-1107&lt;/a&gt; - Transparent Persistence (manual implementation) does not work in VB.NET &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1105"&gt;COR-1105&lt;/a&gt; - [TA] java.lang.IllegalStateException if unbind is called &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1097"&gt;COR-1097&lt;/a&gt; - Corrupted class index in some delete/re-add scenarios &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1094"&gt;COR-1094&lt;/a&gt; - ArrayList4.CopyTo doesn't activate &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1086"&gt;COR-1086&lt;/a&gt; - SODA query returns wrong query result for .NET interfaces &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1085"&gt;COR-1085&lt;/a&gt; - Implement databaseGrowthSize configuration to reduce fragmentation &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1083"&gt;COR-1083&lt;/a&gt; - Code review/refactoring for legacy handler defrag &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1081"&gt;COR-1081&lt;/a&gt; - [NQ] Native query does no longer work with current svn version: InvalidIteratorException &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1079"&gt;COR-1079&lt;/a&gt; - Configuration interface for creating custom Typehandlers &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1074"&gt;COR-1074&lt;/a&gt; - unbind Activatable objects when the ObjectContainer is closed &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1073"&gt;COR-1073&lt;/a&gt; - 'closing' event to notify interested parties that an ObjectContainer is being closed &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1072"&gt;COR-1072&lt;/a&gt; - Activatable objects should be bound to their Activator upon Store &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1071"&gt;COR-1071&lt;/a&gt; - introduce TransparentUpdateSupport configuration option &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1070"&gt;COR-1070&lt;/a&gt; - introduce RollbackStrategy interface for Transparent Update &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1066"&gt;COR-1066&lt;/a&gt; - [TA] FileEnhancer doesn't work anymore &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1065"&gt;COR-1065&lt;/a&gt; - Transparent Update for ArrayList4 &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1064"&gt;COR-1064&lt;/a&gt; - Transparent Update for ArrayMap4 &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1063"&gt;COR-1063&lt;/a&gt; - Clean up FreeSpaceManager interface &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1047"&gt;COR-1047&lt;/a&gt; - Ability to reply to client messages using MessageRecipient &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1043"&gt;COR-1043&lt;/a&gt; - [.JAVA] Transparent Update Instrumentation &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1042"&gt;COR-1042&lt;/a&gt; - [.NET] Transparent Update Instrumentation &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1041"&gt;COR-1041&lt;/a&gt; - Transparent Update Infrastructure &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1040"&gt;COR-1040&lt;/a&gt; - Remove 'useIndexSystem' freespace system &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1038"&gt;COR-1038&lt;/a&gt; - Improve ObjectContainer interface &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1033"&gt;COR-1033&lt;/a&gt; - extract TypeHandler4 from ClassMetadata &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1027"&gt;COR-1027&lt;/a&gt; - Generic Collection Design and Store/Retrieve "Tracer bullet" &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1025"&gt;COR-1025&lt;/a&gt; - Defragment with StoredClassFilter corrupts the database &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1020"&gt;COR-1020&lt;/a&gt; - Finalize Typehandler4 interface, implement compare(obj, obj) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1019"&gt;COR-1019&lt;/a&gt; - [TA] Setter Methods doesn't get instrumented for transparent activation &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1013"&gt;COR-1013&lt;/a&gt; - [.NET CF 2.0] Make sure ArrayList4 ta tests passes on .NET CF 2.0 &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-997"&gt;COR-997&lt;/a&gt; - Pass all test cases on Android &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-990"&gt;COR-990&lt;/a&gt; - [.NET] Build time NQ optimization &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-989"&gt;COR-989&lt;/a&gt; - [.NET] TA instrumentation should skip non storable field types &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-988"&gt;COR-988&lt;/a&gt; - Refactor Db4oAdmin &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-987"&gt;COR-987&lt;/a&gt; - [.NET] Respecting the filter for the field's DeclaringType &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-986"&gt;COR-986&lt;/a&gt; - .NET MSBuild task - implement options by-name, by-filter and by-attribute &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-983"&gt;COR-983&lt;/a&gt; - [.NET] Instrumenting Db4objects.Db4o.Tests leads to peverify errors &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-981"&gt;COR-981&lt;/a&gt; - Enhancing DTrace to be able to log exceptional conditions to files &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-980"&gt;COR-980&lt;/a&gt; - [.NET] TA instrumentation for type hierarchies that contains generic base classes and generic fields &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-975"&gt;COR-975&lt;/a&gt; - #deactivate and #refresh test cases fail &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-961"&gt;COR-961&lt;/a&gt; - Simplest Possible Ant Script on Instrumentation &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-960"&gt;COR-960&lt;/a&gt; - [TA] add TAFixtureConfiguration to cruise control build &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-958"&gt;COR-958&lt;/a&gt; - New ExtObjectContainer#activate(obj) without parameters that respects activation settings &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-956"&gt;COR-956&lt;/a&gt; - Diagnostic events for query engine are misleading when it fails to load Db4objects.Db4o.Tools.dll assembly &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-955"&gt;COR-955&lt;/a&gt; - [.Net] Diagnostic events for query engine are misleading when it is unable to optimize a NQ. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-953"&gt;COR-953&lt;/a&gt; - [TA] Make sure TA mode respects cascading() event cancellation &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-951"&gt;COR-951&lt;/a&gt; - Ensure correct Bloat handling of JDK5 class file format specifics &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-948"&gt;COR-948&lt;/a&gt; - TA tests for second classes types &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-947"&gt;COR-947&lt;/a&gt; - Finalize Typehandler4 interface: Refactor defrag() method &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-946"&gt;COR-946&lt;/a&gt; - Finalize Typehandler4 interface: Refactor delete() method. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-945"&gt;COR-945&lt;/a&gt; - Finalize Typehandler4 interface, use design as spec'd in forums &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-944"&gt;COR-944&lt;/a&gt; - Run db4o tests in TA mode &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-941"&gt;COR-941&lt;/a&gt; - AssemblyInfo.cs in deployed sources shows the wrong version number &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-940"&gt;COR-940&lt;/a&gt; - Integrate TA with RSSOwl &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-939"&gt;COR-939&lt;/a&gt; - Updates to Map cause database to grow unexpectedly &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-936"&gt;COR-936&lt;/a&gt; - TA/Java: Ensure Jars are accepted as instrumentation source &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-932"&gt;COR-932&lt;/a&gt; - TA tests for multi-dimensional arrays &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-931"&gt;COR-931&lt;/a&gt; - TA tests for String, Date, and Array &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-929"&gt;COR-929&lt;/a&gt; - TA tests for different data types &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-927"&gt;COR-927&lt;/a&gt; - Move TA code to core, move TA collection code to JDK5 &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-926"&gt;COR-926&lt;/a&gt; - TA/Java: Sample project for instrumentation usage &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-910"&gt;COR-910&lt;/a&gt; - TACol: Concurrency tests for ArrayMap4 &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-909"&gt;COR-909&lt;/a&gt; - TACol: Concurrency tests for ArrayList4 &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-900"&gt;COR-900&lt;/a&gt; - activateDepth(0) doesn't work in c/s mode &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-896"&gt;COR-896&lt;/a&gt; - [.NET] Review DateTime Handler Upgrade test case &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-892"&gt;COR-892&lt;/a&gt; - Simplify Typehandler4, remove read(MarshallerFamily) and delete all old reading code &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-888"&gt;COR-888&lt;/a&gt; - [.NET] Run TypeHandler upgrade tests against libraries providing the legacy API &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-882"&gt;COR-882&lt;/a&gt; - Defrag causes data loss in 6.3 &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-879"&gt;COR-879&lt;/a&gt; - JAVA: Improve mechanism to specify classes to be persisted/instrumented &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-878"&gt;COR-878&lt;/a&gt; - Simplify Typehandler4, remove readQuery(), readSubCandidate() &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-874"&gt;COR-874&lt;/a&gt; - [.NET] NewTypehandler: Database file creation for upgrade tests &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-873"&gt;COR-873&lt;/a&gt; - Simplify Typehandler4, remove classReflector(), getID(), linkLength() &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-872"&gt;COR-872&lt;/a&gt; - java packages should include the full version name (e.g.: db4o-java5-6.4.8.2078.zip, etc...) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-870"&gt;COR-870&lt;/a&gt; - add svn.revision to Db4oVersion &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-869"&gt;COR-869&lt;/a&gt; - Typehandler updates for .NET structs &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-868"&gt;COR-868&lt;/a&gt; - Typehandler updates for .NET primitive types &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-867"&gt;COR-867&lt;/a&gt; - TypeHandler updates for arrays and multi-dimensional arrays &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-866"&gt;COR-866&lt;/a&gt; - Typehandler updates for String, Date and double &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-865"&gt;COR-865&lt;/a&gt; - TypeHandler updates for boolean, byte, char &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-860"&gt;COR-860&lt;/a&gt; - NewTypehandler: Database file creation for upgrade tests &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-859"&gt;COR-859&lt;/a&gt; - TypeHandler upgrade tests for short long float &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-856"&gt;COR-856&lt;/a&gt; - TypeHandler upgrade tests for int &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-855"&gt;COR-855&lt;/a&gt; - TypeHandler Version sets to replace MarshallerFamily &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-843"&gt;COR-843&lt;/a&gt; - Complete new TypeHandler reading for all Types &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-840"&gt;COR-840&lt;/a&gt; - New Simple TypeHandler &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-839"&gt;COR-839&lt;/a&gt; - TA/JAVA: Provide Ant task for build time TA instrumentation &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-838"&gt;COR-838&lt;/a&gt; - Factor out common Bloat bytecode abstraction library from NQ, TA, CLDC,... &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-829"&gt;COR-829&lt;/a&gt; - .NET: Support for multiple assemblies &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-827"&gt;COR-827&lt;/a&gt; - .NET: Change instrumentation from method to field access (self encapsulate field) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-826"&gt;COR-826&lt;/a&gt; - Java: Change instrumentation from method to field access (self encapsulate field) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-824"&gt;COR-824&lt;/a&gt; - Java: add TA test suite to cruise control &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-823"&gt;COR-823&lt;/a&gt; - .NET: add TA test suite to cruise control &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-822"&gt;COR-822&lt;/a&gt; - TAStrategy: Break cascading when TA aware class is found &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-821"&gt;COR-821&lt;/a&gt; - TAStrategy: Implement configurations &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-820"&gt;COR-820&lt;/a&gt; - TAStrategy: Configuration API Design &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-819"&gt;COR-819&lt;/a&gt; - Activation Strategies for Transparent Activation &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-818"&gt;COR-818&lt;/a&gt; - TACol: .NET Dictionary &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-817"&gt;COR-817&lt;/a&gt; - TACol: .NET ArrayList &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-816"&gt;COR-816&lt;/a&gt; - TACol: Java Map &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-815"&gt;COR-815&lt;/a&gt; - TACol: Java ArrayList &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-805"&gt;COR-805&lt;/a&gt; - TypeHandlerRepository: Dynamic Typehandler generation &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-804"&gt;COR-804&lt;/a&gt; - TypeHandlerRepository: Create basic hardwired repository &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-803"&gt;COR-803&lt;/a&gt; - Versioned Typehandler4 Repository &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-800"&gt;COR-800&lt;/a&gt; - NET: preserving debugging information &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-797"&gt;COR-797&lt;/a&gt; - Java: Proper handling of inheritance hierarchies &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-795"&gt;COR-795&lt;/a&gt; - dont instrument compiler generated classes &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-781"&gt;COR-781&lt;/a&gt; - FastCollections: New TypeHandler4 writing for .NET types &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-780"&gt;COR-780&lt;/a&gt; - FastCollections: New TypeHandler reading primitive types Java &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-775"&gt;COR-775&lt;/a&gt; - Defragmenting an encrypted DB produces unencrypted DB &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-770"&gt;COR-770&lt;/a&gt; - Defrag on 5.2 database after upgrade results in data loss -&amp;gt; Legacy Handler Defrag &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-765"&gt;COR-765&lt;/a&gt; - Java client does not work with .NET server and vice versa &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-755"&gt;COR-755&lt;/a&gt; - .NET: Proper handling of inheritance hierarchies &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-618"&gt;COR-618&lt;/a&gt; - Investigate handling of non-private field access for Transparent Activation &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-591"&gt;COR-591&lt;/a&gt; - Extract Java bytecode instrumentation tool &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-547"&gt;COR-547&lt;/a&gt; - Storing String value in a field declared as Comparable gives unexpected results &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-546"&gt;COR-546&lt;/a&gt; - ObjectInfo.getUUID for deleted object throws NPE in a committed callback &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-536"&gt;COR-536&lt;/a&gt; - Don't catch Exception if unnecessary &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-505"&gt;COR-505&lt;/a&gt; - Add configuration item for accessing java databases from .net &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-242"&gt;COR-242&lt;/a&gt; - C#, Generic IList property that is a string[] does not get stored &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-240"&gt;COR-240&lt;/a&gt; - Fields of type java.lang.Number cannot be stored &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-199"&gt;COR-199&lt;/a&gt; - StackOverflow occurs when storing a plain object instance as a field. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-147"&gt;COR-147&lt;/a&gt; - sensible exception handling &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-102"&gt;COR-102&lt;/a&gt; - Performance and memory progress needs to be constantly visible &lt;/li&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=52181" width="1" height="1"&gt;</description><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/7.4+Stable/default.aspx">7.4 Stable</category></item><item><title>New db4o library structure in db4o 7.7</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/11/18/new-db4o-library-structure-in-db4o-7-7.aspx</link><pubDate>Tue, 18 Nov 2008 13:31:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:52062</guid><dc:creator>Carl Rosenberger</dc:creator><slash:comments>4</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/52062.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=52062</wfw:commentRss><description>&lt;P&gt;The db4o core engine used to get built to one big fat .jar/.dll.&lt;/P&gt;
&lt;P&gt;From our users on low resource devices we constantly hear requests for a smaller library size. For people using db4o on handhelds and phones like Android, 1 MB seems to be a critical size for an input component. We decided to respond: &lt;BR&gt;We have made the db4o distribution more modular.&lt;/P&gt;
&lt;P&gt;For db4o 7.7 we have factored out ClientServer functionality and some optional functionality into two separate Jars/DLLs. The&amp;nbsp;optional package contains primitive Cluster querying, support for working with .NET and Java against the same database, IoAdapters to Debug and for Symbian, a SelfReflector package and all the old tools like Logger, MemoryStats, QueryStats and Statistics.&lt;/P&gt;
&lt;P&gt;The names of the new libraries should be fairly self-explaining, but here is a little overview. Assuming you want to work with Java on JDK5, you will need the following Jars, if you rely on the previous functionality of db4o-[version]-java5.jar:&lt;BR&gt;db4o-[version]-core-java5.jar&lt;BR&gt;db4o-[version]-cs-java5.jar&lt;BR&gt;db4o-[version]-optional-java5.jar&lt;/P&gt;
&lt;P&gt;Please make sure you don't blindly use all db4o libraries in the /lib/ folder of the download. You would mix db4o versions for different Java versions in that case.&lt;/P&gt;
&lt;P&gt;The "java5" in the above names means that the libraries are compiled for Java JDK 5 or higher. You will also find versions for "java1.1" and "java1.2" in the same lib folder. For all Jars that have a "java" in their name, please choose only the one for the platform that you need. All Jars without a "java" in their&amp;nbsp;name are generic and should work for all Java platforms that we support.&lt;/P&gt;
&lt;P&gt;On .NET you will have to add the following three DLLs to your project references, to get the same functionality that previously&lt;BR&gt;was completely in Db4objects.Db4o.dll:&lt;BR&gt;Db4objects.Db4o.dll&lt;BR&gt;Db4objects.Db4o.CS.dll&lt;BR&gt;Db4objects.Db4o.Optional.dll&lt;/P&gt;
&lt;P&gt;Our embedded users are probably happy with the change. We hope we have not created a big hurdle for all others.&lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=52062" width="1" height="1"&gt;</description></item><item><title>Changes in Db4o Configuration API</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/11/18/changes-in-db4o-configuration-api.aspx</link><pubDate>Tue, 18 Nov 2008 11:00:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:52052</guid><dc:creator>Adriano Verona</dc:creator><slash:comments>0</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/52052.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=52052</wfw:commentRss><description>&lt;p&gt;Hi.&lt;/p&gt;&lt;p&gt;Recently we introduced some changes to our configuration APIs striving for simplicity.&lt;/p&gt;&lt;p&gt;You can read more about these changes &lt;a href="http://programing-fun.blogspot.com/2008/10/changes-in-db4o-configuration.html" title="Changes in Db4o Configuration API"&gt;here&lt;/a&gt;.&lt;/p&gt;Best&lt;p&gt;&amp;nbsp;Adriano &lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br&gt;&lt;/p&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=52052" width="1" height="1"&gt;</description></item><item><title>Fast Reflection for .Net</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/11/10/fast-reflection-for-net.aspx</link><pubDate>Mon, 10 Nov 2008 12:30:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:51960</guid><dc:creator>Adriano Verona</dc:creator><slash:comments>2</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/51960.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=51960</wfw:commentRss><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Recently we decided to evaluate how much impact (in performance) reflection represented in db4o. &lt;/p&gt;&lt;p&gt;In .Net side we already knew (due to previous experience) that reflection is not as fast as we would like to.&lt;/p&gt;
&lt;p&gt;At the same time, &lt;a href="http://developer.db4o.com/blogs/paircasts/archive/2008/05/20/jprobe-profiling-session-on-reflection-and-read-performance.aspx" title="Profiling"&gt;profiling&lt;/a&gt; proved that reflection was not a bottleneck in Java side.&lt;/p&gt;
&lt;p&gt;So we settled up for trying to replace the reflection layer (in .Net) used to set / get field values at store / retrieval time. &lt;/p&gt;
&lt;p&gt;What we did was basically emit a setter / getter method dynamically (using &lt;a href="http://msdn.microsoft.com/en-us/library/system.reflection.emit.dynamicmethod.aspx" title="DynamicMethod"&gt;DynamicMethod&lt;/a&gt;) for each field. These setters/getters are able to directly access object's fields (even private ones),completly avoiding reflection (to be more precise, reflection is used to some extent to generate the setter/getter methods). Once generated we keep these setter/getter methods cached to avoid regenerating them needlessly. In other words we are &lt;b&gt;trading space (memory) for performance&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;One aspect of current implementation is that the getter/setters cache grows indefinitely. If we do get reports about performance improvements, and so we decide to use this mechanism (either by default or through a configuration) we can introduce MRU (or MFU) and cache expiration strategies to keep memory usage as low as possible). &lt;/p&gt;
&lt;p&gt;Even doing some benchmarks we don't have enough data to take conclusions. For instance, our benchmarks pointed to a 8 ~ 10% improvement but when we tried to run our full test suite with this new "reflection" layer we got worst results (more time to run) (but surely our test suite is not a good candidate as a benchmark for this setting; it has lots of different classes and do lots of disk accesses to emit assemblies for regression tests and the like).&lt;/p&gt;
&lt;p&gt;The version in trunk still uses the traditional reflection layer by default. You can configure your application to use the fast reflection layer with:&lt;br&gt;&lt;font&gt;&lt;br&gt;IEmbeddedConfiguration config = Db4oEmbedded.NewConfiguration();&lt;br&gt;config.Common.ReflectWith(new FastNetReflector());&lt;br&gt;IObjectContainer db = Db4oEmbedded.OpenFile(config, "database.odb");&lt;br&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Alternatively you can recompile the Db4objects.Db4o assembly so it uses the new reflection by default. All you have to do is to define a USE_FAST_REFLECTION symbol and recompile db4o assembly.&lt;/p&gt;
&lt;p&gt;So, if you think this "reflection less" getters/setters could improve performance for you and you are willing to help db4o community, please, use it (either by configuring the reflector or by recompiling db4o with USE_FAST_REFLECTION) and deploy your application to an environment as close to a live one as possible and gather some data regarding performance and let us known.&lt;/p&gt;
&lt;p&gt;Best&lt;/p&gt;
&lt;p&gt;Adriano / Rodrigo&lt;/p&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=51960" width="1" height="1"&gt;</description><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/.NET/default.aspx">.NET</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Memory/default.aspx">Memory</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Performance/default.aspx">Performance</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>New fast collection implementation for huge sets: BigSet </title><link>http://developer.db4o.com/blogs/product_news/archive/2008/10/28/new-fast-collection-implementation-for-huge-sets-bigset.aspx</link><pubDate>Tue, 28 Oct 2008 12:01:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:51768</guid><dc:creator>Carl Rosenberger</dc:creator><slash:comments>1</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/51768.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=51768</wfw:commentRss><description>&lt;P&gt;Isn't it fun that you don't have to write any "INNER JOIN" SQL syntax in db4o whenever you want to describe that a set of objects is linked from another object? Instead db4o allows you to work with collections and to simply traverse the graph of objects contained in the collection.&lt;/P&gt;
&lt;P&gt;The multiple different collection types that come with Java/.NET have different performance characteristics. Some may allow faster inserts. Some may allow faster access to elements.&lt;/P&gt;
&lt;P&gt;Two recommendations to be able to tune your application with the right collection as it evolves:&lt;/P&gt;
&lt;P&gt;(1) Use interface declararations only when you add references to collection objects to your application classes.&lt;/P&gt;
&lt;P&gt;Good:&lt;BR&gt;class Company{&lt;BR&gt;&amp;nbsp; Collection employees;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;Bad:&lt;BR&gt;class Company{&lt;BR&gt;&amp;nbsp; ArrayList employees;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;(2) Use a single collection factory in one place in your code so you can easily exchange the concrete collection implementation to try out alternatives:&lt;/P&gt;
&lt;P&gt;company.employees = CollectionFactory.newCollection();&lt;/P&gt;
&lt;P&gt;CollectionFactory would be a class that you would write and where you could simply exchange one line of code to create a db4o ArrayList4 with Transparent Persistence support instead of a normal ArrayList.&lt;/P&gt;
&lt;P&gt;db4o comes with some built-in collections that will work better for specific usescases. In the latest build we have added a new species to this list: BigSet.&lt;/P&gt;
&lt;P&gt;This is a highly specialized class to hold large and huge sets of references to other first class objects. Internally the implementation is based on the same fast BTrees that are also in use for db4o class and field indexes.&lt;/P&gt;
&lt;P&gt;Our benchmark results from comparing BigSet to a normal JDK ArrayList are very promising: Especially when you make small changes to huge sets, the advantage can be multiple orders of magnitude.&lt;/P&gt;
&lt;P&gt;For now we have only completed a BigSet for embedded use in single user mode. A Client/Server implementation with a BigSet proxy is being thought about.&lt;/P&gt;
&lt;P&gt;BigSet is very easy to use:&lt;BR&gt;CollectionFactory.forObjectContainer(objectContainer).&amp;lt;Item&amp;gt;newBigSet();&lt;/P&gt;
&lt;P&gt;Please let us know how fast it works for you! Enjoy!&lt;/P&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=51768" width="1" height="1"&gt;</description></item><item><title>New pluggable StringEncoding interface</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/10/09/new-pluggable-stringencoding-interface.aspx</link><pubDate>Thu, 09 Oct 2008 13:21:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:51454</guid><dc:creator>Carl Rosenberger</dc:creator><slash:comments>0</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/51454.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=51454</wfw:commentRss><description>&lt;P&gt;When db4o stores and loads strings it has to convert them to and from bytes. Until recently db4o only used to supply 2 encodings to do this work: &lt;BR&gt;One for 16-bit Unicode, the other for ISO 8859-1. To decide for one or the other you would call Configuration#unicode() and pass true for Unicode and false for ISO 8859-1.&lt;/P&gt;
&lt;P&gt;To supply more encodings and to allow the creation of own string encodings we deprecated the old configuration interface and supply a new one. Now you can either use one of the built-in encodings from the StringEncodings class or pass your own encoding. Examples:&lt;/P&gt;
&lt;PRE&gt;
Configuration config = Db4o.newConfiguration();
config.stringEncoding(StringEncodings.utf8());
Db4o.openFile(config, "myDB.db4o");

or

Configuration config = Db4o.newConfiguration();
config.stringEncoding(new StringEncoding() {
	public byte[] encode(String str) {
		// TODO: implement
		return null;
	}
	public String decode(byte[] bytes, int start, int length) {
		// TODO: implement
		return null;
	}
});
Db4o.openFile(config, "myDB.db4o");
&lt;/PRE&gt;
&lt;P&gt;Please note that you should configure the string encoding before you create the database file, in the first call to #openFile() or #openServer(). If you use one of the built-in encodings, db4o will remember the encoding for all subsequent open calls. If you use a StringEncoding class that you have written yourself, you have to supply the same StringEncoding and configure it for all subsequent open calls, otherwise db4o will not be able to read and write strings correctly. Since db4o also uses the string encodings for metadata like classnames and fieldnames, you are likely to notice any misconfiguration very quickly by not being able to read any objects at all.&lt;/P&gt;
&lt;P&gt;The StringEncoding used has to stay the same for the lifetime of a database.&lt;/P&gt;
&lt;P&gt;Although we keep the Unicode string encoding as the standard setting, we encourage the use of the new built-in UTF-8 string encoding for smaller and faster database files.&lt;/P&gt;
&lt;P&gt;We also hope that the pluggable interface will be useful for you, especially if you want db4o to work with Chinese or Japanese character sets.&lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=51454" width="1" height="1"&gt;</description></item><item><title>LINQ for the Compact Framework 3.5</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/09/24/linq-for-the-compact-framework-3-5.aspx</link><pubDate>Wed, 24 Sep 2008 11:40:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:51204</guid><dc:creator>Rodrigo B. de Oliveira</dc:creator><slash:comments>2</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/51204.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=51204</wfw:commentRss><description>Db4o for .NET 3.5 ships with an optimizing LINQ provider. This provider is able to optimize the execution of a query by analyzing the LINQ expression tree emitted by the C# (or VB.NET) compiler to produce an equivalent SODA query which can be executed by db4o at full speed.&lt;br&gt;&lt;br&gt;The Compact Framework 3.5 however includes no support for expression trees. No expression trees, no optimizing LINQ provider. A saddening state of affairs for Compact Framework db4o users.&lt;br&gt;&lt;br&gt;As it turns out, expression trees are provided by the System.Linq.Expressions namespace which is not available in the standard Compact Framework 3.5 distribution.&lt;br&gt;&lt;br&gt;&lt;b&gt;Mono to the rescue&lt;/b&gt;&lt;br&gt;&lt;br&gt;The Mono project provides a free software implementation of the .net framework including LINQ and the System.Linq.Expressions namespace.&lt;br&gt;&lt;br&gt;Hypothesis: will the Compact Framework compiler emit expression trees if it sees a reference to a compatible assembly that provides a System.Linq.Expressions namespace?&lt;br&gt;&lt;br&gt;Yes it will. LINQ for Compact Framework seemed to be possible.&lt;br&gt;&lt;br&gt;There was a remaining issue. When the db4o LINQ provider cannot optimize a query down to SODA it can simply execute it as a LINQ for Objects query. This is accomplished by invoking the Compile method on the expression tree. The returned delegate can be used to evaluate the expression whenever needed. But the Compile method relies on System.Reflection.Emit which is again not supported by the Compact Framework. Hmpf.&lt;br&gt;&lt;br&gt;The final piece of the puzzle appeared when &lt;a href="http://www.mainsoft.com/"&gt;Mainsoft&lt;/a&gt; contributed an expression tree interpreter to Mono. Expression tree evaluation that didn't rely on System.Reflection.Emit. Yummy.&lt;br&gt;&lt;br&gt;So thanks to the hard and loving work of the Mono and Mainsoft guys we are able to ship to you &lt;b&gt;the first optimizing LINQ provider for the Compact Framework&lt;/b&gt;.&lt;br&gt;&lt;br&gt;&lt;a href="http://evain.net/blog/articles/2008/09/22/linq-expression-trees-on-the-compact-framework"&gt;A nice hack indeed&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=51204" width="1" height="1"&gt;</description><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Linq/default.aspx">Linq</category></item><item><title>Collected Generics, Volume 1</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/09/12/collected-generics-volume-1.aspx</link><pubDate>Fri, 12 Sep 2008 11:49:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:51051</guid><dc:creator>Patrick Roemer</dc:creator><slash:comments>7</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/51051.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=51051</wfw:commentRss><description>Finally we are starting to harvest the fruits of our work on pluggable type handlers. As a first step, please welcome .NET generic collections to the exclusive club of types natively supported by db4o in the upcoming 7.6 build.&lt;br&gt;&lt;br&gt;In principle, .NET generic collections could already be persisted in previous versions, but there was no dedicated handling in place for them. db4o would not recognize them as collections and would simply handle them as any other object - inspect their internal layout and persist the field values found. This approach came with some pitfalls. Most notably, db4o would not recognize the collection's internal state objects as parts of a single, atomic unit - in C/S mode, concurrent updates from multiple clients against the same collections could have resulted in inconsistent internal collection state in the worst case. Furthermore, issues could arise with specific collection implementations: Dictionaries, for example, would persist hash codes alongside keys/values and could stumble when attempting to reload this data in a different runtime version (as GetHashCode() implementations may change yielding different hash values). Plus, last but not least, dedicated collection handling opens the path for performance optimizations.&lt;br&gt;&lt;br&gt;With the current type handler infrastructure in place, providing custom handling for .NET generic collections as its first "real world" application went pretty smooth - actually the bulk of the effort was spent on the implementation of combinatorial regression testing of permutations of collection, field and element types - take a look at &lt;a href="https://source.db4o.com/db4o/trunk/db4o.net/Db4objects.Db4o.Tests/native/Db4objects.Db4o.Tests/CLI2/Handlers/"&gt;GenericCollectionTypeHandlerTestSuite&lt;/a&gt;, if you're interested. As of now, dedicated type handler support is available for the following collection flavors:&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;List&amp;lt;T&amp;gt;&lt;/li&gt;&lt;li&gt;LinkedList&amp;lt;T&amp;gt;&lt;/li&gt;&lt;li&gt;Stack&amp;lt;T&amp;gt;&lt;/li&gt;&lt;li&gt;Queue&amp;lt;T&amp;gt;&lt;/li&gt;&lt;li&gt;Dictionary&amp;lt;K,V&amp;gt;&lt;/li&gt;&lt;li&gt;SortedList&amp;lt;K,V&amp;gt;&lt;/li&gt;&lt;li&gt;SortedDictionary&amp;lt;K,V&amp;gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;These collections now should blend in seamlessly with the behavior of non-generic collections. More to come - but if you're missing a dedicated type handler for a specific flavor, of course you're also invited to &lt;a href="http://developer.db4o.com/blogs/product_news/archive/2008/08/23/wanted-typehandlers.aspx"&gt;contribute&lt;/a&gt;. ;)&lt;br&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=51051" width="1" height="1"&gt;</description><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/.NET/default.aspx">.NET</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/TypeHandler/default.aspx">TypeHandler</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Collections/default.aspx">Collections</category></item><item><title>Latest production build: 7.4.58.11547</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/09/02/latest-production-build-7-4-58-11547.aspx</link><pubDate>Tue, 02 Sep 2008 10:51:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:50874</guid><dc:creator>Carl Rosenberger</dc:creator><slash:comments>0</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/50874.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=50874</wfw:commentRss><description>&lt;P&gt;here is a short info to resolve a race condition between our newsletter sendout and the very latest production build:&lt;/P&gt;
&lt;P&gt;We got informed about a serious (blocker) bug with a deadlock in committed callbacks after our newsletter had already been released to marketing: &lt;A href="http://tracker.db4o.com/browse/COR-1377"&gt;COR-1377&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;This bug received the highest priority and it has has been fixed immediately.&lt;/P&gt;
&lt;P&gt;A new production build with the build number 7.4.58.11547 is online in the meanwhile. If you downloaded 7.4 right after the newsletter and if you use committed callbacks or UUIDs, we recommend to check the build number you are using (call Db4o#version() / Db4oFactory#Version() ) and to download the very latest build once again if it is lower than 7.4.58.&lt;/P&gt;
&lt;P&gt;To our knowledge this bug has been present in all 7.2 builds.&lt;/P&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=50874" width="1" height="1"&gt;</description></item><item><title>Performance Contest Results</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/08/27/performance-contest-results.aspx</link><pubDate>Wed, 27 Aug 2008 10:16:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:50783</guid><dc:creator>Carl Rosenberger</dc:creator><slash:comments>5</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/50783.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=50783</wfw:commentRss><description>&lt;P&gt;Two months ago &lt;A href="http://developer.db4o.com/blogs/community/archive/2008/06/28/new-performance-contest-help-us-make-db4o-ultra-fast.aspx"&gt;we invited&lt;/A&gt; the db4o community to take part in the first db4o performance contest. Now the contest has been completed. Here are the results.&lt;/P&gt;
&lt;P&gt;Three entries are eligible for prizes:&lt;/P&gt;
&lt;P&gt;June 15&lt;BR&gt;Andrew Zhang &lt;A href="http://developer.db4o.com/forums/thread/49670.aspx"&gt;submitted&lt;/A&gt; a patch that improves the speed to sort queries.&lt;/P&gt;
&lt;P&gt;June 19&lt;BR&gt;Andrew Zhang &lt;A href="http://developer.db4o.com/forums/thread/49739.aspx"&gt;submitted&lt;/A&gt; a UTF-8 string encoder.&lt;/P&gt;
&lt;P&gt;July 17&lt;BR&gt;Erik Putrycz &lt;A href="http://developer.db4o.com/forums/thread/50189.aspx"&gt;submitted&lt;/A&gt; a patch to reuse query results in subsequent similar queries.&lt;/P&gt;
&lt;P&gt;Andrew and Erik wrote own Poleposition circuits for their patches to be able to measure performance improvements. They have been incorporated into the db4opolepos project in our SVN as circuits "Hockenheim" and "Hungaroring".&lt;/P&gt;
&lt;P&gt;The three patched jars that Andrew and Eric supplied have been renamed to db4o-7.2-sortedquery.jar, db4o-7.2-utf8.jar, and db4o-7.4-cachedqueries.jar to make it easy to distinguish the results. These jars have also been checked into the db4opolepos project. Anyone can easily reproduce the performance race by running org.polpos.AllRacesRunner from this project.&lt;/P&gt;
&lt;P&gt;The results from running this benchmark on our hardware are attached to this posting as PerformanceContest.pdf.&lt;/P&gt;
&lt;P&gt;Our impression from reviewing the results and the patches:&lt;/P&gt;
&lt;P&gt;- The effect of the tuned quicksort algorithm on query sorting is absolutely amazing. Improvements are indeed in the range of 20x to 300x as you can see in Hockenheim#query_ascending and #query_descending on pages 52 and 53 of the attached Poleposition results. The patch is very straightforward and very nice, so it can immediately go into production code as is. A perfect submission.&lt;/P&gt;
&lt;P&gt;- The UTF-8 string encoder reduces the required slot length for stored strings. Shorter slots result in faster writes as you can see in Nurburgring#write on page 24 of the attached Poleposition run. A performance improvement of about 20% is measurable. Incorporation of the patch code into the db4o core would require some more work: Probably we would add UTF-8 as a third configurable string encoding. Possibly we could make it the default. In any case we would have to continue to support the existing Unicode string encoding. The submission shows very nicely how easy a UTF-8 string encoder is. We should make one available soon.&lt;/P&gt;
&lt;P&gt;- The idea to cache query results is great. A working implementation is certainly an order of magnitude more difficult to write than the other two submitted patches. Somehow the Hungaroring benchmark shows a slowdown instead of an improvement. After Erik's comments that our Trunk code got slower for concurrent queries, we have also compared running the patched Jar against Trunk and Trunk still turns out to be faster. Erik's submission also does not exactly follow the rules of the contest: &lt;BR&gt;The patch is not applied to the 7.2 workspace, so a direct comparison run to other submissions is not completely fair. In any case we really liked the idea and we have to give credit for trying.&lt;/P&gt;
&lt;P&gt;So how do we judge the three submissions and who gets first, second and third prize?&lt;/P&gt;
&lt;P&gt;Andrew's submissions both are measurable and they are both in compliance with the rules that we have set up. Erik's submission is a great idea, but it is not 100% complete and we have not yet seen the improvement clearly documented in a Poleposition run.&lt;/P&gt;
&lt;P&gt;The core team reviewers suggest to award prizes as follows:&lt;BR&gt;1st USD 3000 Andrew Zhang&lt;BR&gt;2nd USD 2000 Andrew Zhang&lt;BR&gt;3rd USD 1000 Erik Putrycz&lt;/P&gt;
&lt;P&gt;If anyone in our community has a different opinion, please post it to our performance forum.&lt;/P&gt;
&lt;P&gt;Andrew and Erik: Thank you very much for your submissions. You have deserved the prizes!&lt;/P&gt;
&lt;P&gt;For all other developers that tried to improve performance but did not complete a submission on time: Thank you for trying!&lt;BR&gt;If you have suggestions how to improve the Performance Contest, please tell us about them. Maybe it would make sense to let the contest run for a longer period of time than 2 months? What do you think?&lt;/P&gt;
&lt;P&gt;We are very happy to have received usable patches in this first db4o performance contest. Hopefully we will get even more contributions the next time.&lt;/P&gt;
&lt;P&gt;It is great to work with such a nice community!&lt;/P&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=50783" width="1" height="1"&gt;</description><enclosure url="http://developer.db4o.com/blogs/product_news/attachment/50783.ashx" length="814586" type="application/pdf" /></item><item><title>Wanted: TypeHandlers</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/08/23/wanted-typehandlers.aspx</link><pubDate>Fri, 22 Aug 2008 16:29:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:50725</guid><dc:creator>Carl Rosenberger</dc:creator><slash:comments>2</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/50725.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=50725</wfw:commentRss><description>&lt;P&gt;You were playing with the idea to contribute to db4o? So far you did not find a nice, easy and short task to take on? Here is your chance: Write a TypeHandler for db4o and get your code included in the db4o core distribution tomorrow.&lt;/P&gt;
&lt;P&gt;db4o comes with a big promise: Just call ObjectContainer#store() and any object and all attached objects will be automagically stored. The challenge to do this is high: Every possible class out there needs to be "understood" by db4o and an efficient byte array representation needs to be created on storage media. Indexing of "parts" of objects and querying is part of the task. With evolving languages and an increasing number of class constructs that&amp;nbsp; need to be supported we decided to make it easier to write the code for marshalling and unmarshalling: Enter TypeHandlers.&lt;/P&gt;
&lt;P&gt;TypeHandlers define how objects of a specific class are stored, loaded and queried by db4o. &lt;/P&gt;
&lt;P&gt;By default db4o stores and restores all non-transient fields of an object. By writing TypeHandlers it is possible to alter the behaviour. A TypeHandler could decide to store only some members of a class or it could decide to store a completely different and more efficient representation.&lt;/P&gt;
&lt;P&gt;The possible benefits of using a Typehandler:&lt;BR&gt;- Storing and restoring objects can be faster.&lt;BR&gt;- The database file can be smaller.&lt;BR&gt;- Objects that consist of sub-objects (Example: collections) can be guarded against inconsistencies in concurrent multi-user environments by preventing "the object" from being split, but using one single contiguous slot as the marshalled representation. ( We will soon also demonstrate a stateful collection implementation over multiple pages, also powered by a Typehandler.)&lt;BR&gt;- Fields that are intended to be transient do not need to be stored.&lt;BR&gt;- Typehandlers can alter behaviour even if the sources of the persistent classes are not available or can not be altered.&lt;BR&gt;- Querying support.&lt;/P&gt;
&lt;P&gt;TypeHandlers are expected to do the complete marshalling of an object by writing/reading directly to/from the marshalling buffer.&lt;/P&gt;
&lt;P&gt;About a year ago the TypeHandler4 interface consisted of more than 40 methods. Today only 5 methods remain. To make sure that the TypeHandler interface is ready for heavy duty use, we have already used it ourselves to implement some collection typehandlers. See:&lt;BR&gt;com.db4o.typehandlers.CollectionTypeHandler&amp;nbsp; (Java)&lt;BR&gt;com.db4o.typehandlers.MapTypeHandler (Java)&lt;BR&gt;Db4objects.Db4o.Typehandlers.ListTypeHandler (.NET)&lt;BR&gt;Db4objects.Db4o.Typehandlers.MapTypeHandler (.NET)&lt;/P&gt;
&lt;P&gt;In the latest development build (7.5.x.y) these TypeHandlers are already turned on to do real work storing, loading and querying some selected collections. To see how internal TypeHandlers are configured, take a look at:&lt;BR&gt;com.db4o.internal.TypeHandlerConfigurationJDK_1_2 (Java)&lt;BR&gt;Db4objects.Db4o.Internal.TypeHandlerConfigurationDotNet (.NET)&lt;/P&gt;
&lt;P&gt;You will notice that many TypeHandlers are still missing if the full featureset of JDK and .NET collections is to be supported. Here is where we would like to ask you for your help:&lt;BR&gt;Could you write a TypeHandler for us for a collection class that you think we need to support?&lt;/P&gt;
&lt;P&gt;Adapting and registering one of the already existing typehandlers for your favourite collection will probably take you less than an hour of work. You can simply follow the pattern that is already there.&lt;/P&gt;
&lt;P&gt;However writing the TypeHandler code is not the complete story. Since we want to be absolutely sure that a new TypeHandler works correctly, the bigger part of the implementation work is required for testing. We want to make sure that objects stored with an older version of db4o can be read and stored even after your new TypeHandler is installed.&lt;/P&gt;
&lt;P&gt;For this purpose we developed the "Db4oMigrationTestSuite" test.&lt;BR&gt;On Java you can run this class directly. You will find it in our SVN in the db4ojdk1.2 project.&amp;nbsp;&lt;BR&gt;( If you have not worked with the db4o sources before, &lt;A href="http://developer.db4o.com/Resources/view.aspx/Reference/Working_With_Source_Code"&gt;here&lt;/A&gt; is a guide to get started. )&lt;/P&gt;
&lt;P&gt;If you develop for .NET you would check out the db4o.net project from our SVN. You would typically work with the Db4o-2008.sln solution in the top level folder. To run the tests, the Db4objects.Db4o.Tests-2008 project would be your startup project. To save time by not running all the tests every time you can edit Db4objects.Db4o.Tests.AllTests in the Db4objects.Db4o.Tests-2008 project: If you want to run migration tests only, you can comment out all the entries in the #TestCases() method and add the following instead:&lt;BR&gt;typeof(Db4objects.Db4o.Tests.Common.Migration.Db4oNETMigrationTestSuite)&lt;/P&gt;
&lt;P&gt;Both for Java and .NET: &lt;BR&gt;If you want the Db4oMigrationTestSuite to truely run against all relevant old db4o engines, you should check out the db4o.archives project from our SVN also.&lt;/P&gt;
&lt;P&gt;Once you have testing set up and running, you are ready to go to write your own test for updating your favourite collection. &lt;/P&gt;
&lt;P&gt;For an example how an update test could look like, please see:&lt;BR&gt;com.db4o.db4ounit.common.handlers.ArrayListUpdateTestCase (Java)&lt;BR&gt;Db4objects.Db4o.Tests.CLI2.Handlers.GenericListVersionUpdateTestCase (.NET)&lt;/P&gt;
&lt;P&gt;Only when you have the test in place it makes start to implement your own TypeHandler as a more efficient method to store the collection. Test first, remember?&lt;/P&gt;
&lt;P&gt;Should you have any problems to get started, please ask for help in the db4o product developer forum. It is a good idea to announce any work that you are about to do in the forum in any case. That will ensure that the work for a specific collection is only done once.&lt;/P&gt;
&lt;P&gt;Now that you are all set to start:&lt;BR&gt;Good luck for writing your TypeHandler!&lt;/P&gt;
&lt;P&gt;All the new Typehandlers we have built so far are now available in the &lt;A href="http://developer.db4o.com/Resources/view.aspx/Reference/Working_With_Source_Code"&gt;TRUNK of our SVN&lt;/A&gt; and with our &lt;A href="http://developer.db4o.com/files/19/default.aspx"&gt;continous build&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;They help to make storage of collections more efficient:&lt;BR&gt;- Less state is pushed around than with our previous translator approach.&lt;BR&gt;- Maps no longer store an internal Entry object for each entry.&lt;BR&gt;- All .NET collections, including all .NET generic collections will soon be handled efficiently with Typehandlers. Current issues with .NET generic collections in concurrent multi-user setups will soon be history.&lt;BR&gt;- Old database files can be read with new Typehandlers installed. Future marshalling format changes are easily possible by writing and installing yet further new Typehandlers.&lt;BR&gt;- We have a very nice hook into collection treatment that we will be able to use for much faster collections.&lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=50725" width="1" height="1"&gt;</description></item><item><title>Synchronization issues in networking C/S fixed</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/08/02/synchronization-issues-in-networking-c-s-fixed.aspx</link><pubDate>Sat, 02 Aug 2008 13:32:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:50483</guid><dc:creator>Patrick Roemer</dc:creator><slash:comments>0</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/50483.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=50483</wfw:commentRss><description>We have fixed some thread synchronization issues in the C/S protocol and put  new versions (rev. x.y.54.11278) for all branches online in the &lt;a href="http://developer.db4o.com/files/default.aspx"&gt;download center&lt;/a&gt;. Users with concurrent networking C/S in connection with lazy queries are recommended to upgrade. For more information, please refer to the corresponding &lt;a href="http://tracker.db4o.com/browse/COR-1346"&gt;tracker entry&lt;/a&gt;.&lt;br&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=50483" width="1" height="1"&gt;</description></item><item><title>Debugging TA Enhanced Code and the Observer Effect</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/07/29/debugging-ta-enhanced-code-and-the-observer-effect.aspx</link><pubDate>Tue, 29 Jul 2008 00:03:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:50366</guid><dc:creator>Rodrigo B. de Oliveira</dc:creator><slash:comments>3</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/50366.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=50366</wfw:commentRss><description>&lt;p&gt;
Most of those who pair programmed with me know that I'm not very fond of debugging code by stepping through breakpoints inside an IDE. I'd much rather construct hypotheses on why the code is failing and systematically test them with carefully placed assertions and print statements.
&lt;/p&gt;
&lt;p&gt;
One reason for that is the &lt;a href="http://en.wikipedia.org/wiki/Observer_effect"&gt;observer effect&lt;/a&gt; of debugging: the execution environment can be a little different, timings are usually changed, object inspectors might end up calling methods with unwanted side-effects and so on.
&lt;/p&gt;
&lt;p&gt;
The last point is a particularly important one to keep in mind when dealing with code that's been enhanced for &lt;a href="http://developer.db4o.com/blogs/product_news/archive/2008/01/10/from-transparent-activation-to-transparent-persistence.aspx"&gt;Transparent Persistence&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Let's say we have built the latest and greatest library management application and now want to put a web front end on top of it. We've been following web development trends and so we know AJAX is a must these days. We just need some simple way to transfer the objects from the server to the browser javascript runtime: &lt;a href="http://www.json.org/"&gt;JSON&lt;/a&gt; to the rescue. Good thing we can reuse some reflection based &lt;a href="https://source.db4o.com/db4o/trunk/sandbox/rodrigo/blogs/DebuggingTA/JSON/JSONSerializer.vb"&gt;JSON serialization code&lt;/a&gt; we had laying around.
&lt;/p&gt;
&lt;p&gt;
We write a quick spike to see how well it works:&lt;br&gt;&lt;/p&gt;&lt;pre&gt;&lt;font color="#000000"&gt;    &lt;font color="#006699"&gt;&lt;b&gt;Dim&lt;/b&gt;&lt;/font&gt; book &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; &lt;font color="#006699"&gt;&lt;b&gt;New&lt;/b&gt;&lt;/font&gt; Book(&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;The&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;God&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;Delusion&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;)&lt;br&gt;    book&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;AddAuthor(&lt;font color="#006699"&gt;&lt;b&gt;New&lt;/b&gt;&lt;/font&gt; Author(&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;Richard&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;Dawkins&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;))&lt;br&gt;    &lt;br&gt;    Console&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;WriteLine(&lt;font color="#006699"&gt;&lt;b&gt;New&lt;/b&gt;&lt;/font&gt; JSONSerializer()&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Serialize(book))&lt;br&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;
Which give us the expected output: &lt;br&gt;&lt;/p&gt;&lt;pre style="background-color:black;color:white;"&gt;	{ _title: "The God Delusion", _authors: [{ _name: "Richard Dawkins" }] }&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
We try one more spike to convince us we can get JSON out of a db4o query result:&lt;br&gt;&lt;/p&gt;&lt;pre&gt;&lt;font color="#000000"&gt;    &lt;font color="#006699"&gt;&lt;b&gt;Using&lt;/b&gt;&lt;/font&gt; db &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; OpenDatabase()&lt;br&gt;        &lt;font color="#006699"&gt;&lt;b&gt;For&lt;/b&gt;&lt;/font&gt; &lt;font color="#006699"&gt;&lt;b&gt;Each&lt;/b&gt;&lt;/font&gt; book &lt;font color="#006699"&gt;&lt;b&gt;In&lt;/b&gt;&lt;/font&gt; db&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Query(of Book)()&lt;br&gt;            Console&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;WriteLine(&lt;font color="#006699"&gt;&lt;b&gt;New&lt;/b&gt;&lt;/font&gt; JSONSerializer()&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Serialize(book))&lt;br&gt;        &lt;font color="#006699"&gt;&lt;b&gt;Next&lt;/b&gt;&lt;/font&gt;&lt;br&gt;    &lt;font color="#006699"&gt;&lt;b&gt;End&lt;/b&gt;&lt;/font&gt; Using&lt;br&gt;    &lt;br&gt;&lt;/font&gt;&lt;/pre&gt;
Unfortunately this gives us something completely unexpected and it's not the &lt;a href="http://www.youtube.com/watch?v=Tym0MObFpTI&amp;amp;feature=related" target="_blank"&gt;Spanish Inquisition&lt;/a&gt;:
&lt;pre style="background-color:black;color:white;"&gt;	{ _title: null, _authors: null }&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
We place a breakpoint inside the loop so we can inspect the book instance:

   &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.flickr.com/photos/94072001@N00/2712473580/" title="Debugging TA With VB by Rodrigo B. de Oliveira, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3060/2712473580_f596c73b01.jpg" alt="Debugging TA With VB" height="284" width="500"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;
   
It sure looks right and oddly enough we get the right output this time: &lt;br&gt;&lt;/p&gt;&lt;pre style="background-color:black;color:white;"&gt;	{ _title: "The God Delusion", _authors: [{ _name: "Richard Dawkins" }] }&lt;br&gt;&lt;/pre&gt;
&lt;p&gt;
What's going on?
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://developer.db4o.com/blogs/product_news/archive/2007/12/11/object-activation-in-depth.aspx"&gt;Transparent Activation&lt;/a&gt; is going on or rather NOT going on:
&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Our Book and Author classes were enhanced for Transparent Activation, Db4oTool injected the code required to implement IActivatable as well as the code that transparently activates the object before any field access;&lt;/li&gt;
&lt;li&gt;JSONSerializer uses reflection to access objects fields;&lt;/li&gt;
&lt;li&gt;Reflection completely bypasses any code introduced by Db4oTool which explains the "{ _title: null, _authors: null }" output, the object was never activated;&lt;/li&gt;
&lt;li&gt;When inspecting an object in the debugger watch window its properties are accessed;&lt;/li&gt;
&lt;li&gt;Accessing a property of our enhanced Book object causes its *transparent* activation which also explains why we got the right output aftewards;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Ok, now that we have a logical explanation for what's happening how do we get our application to work as expected?
&lt;/p&gt;
&lt;p&gt;
Since JSONSerializer bypasses activation we have to ensure the object graph is completely activated before JSONSerializer gets to see it:&lt;br&gt;&lt;/p&gt;&lt;pre&gt;&lt;font color="#000000"&gt;    &lt;font color="#006699"&gt;&lt;b&gt;Using&lt;/b&gt;&lt;/font&gt; db &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; OpenDatabase()&lt;br&gt;        &lt;font color="#006699"&gt;&lt;b&gt;For&lt;/b&gt;&lt;/font&gt; &lt;font color="#006699"&gt;&lt;b&gt;Each&lt;/b&gt;&lt;/font&gt; book &lt;font color="#006699"&gt;&lt;b&gt;In&lt;/b&gt;&lt;/font&gt; db&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Query(of Book)()&lt;br&gt;            db&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Activate(book, Integer&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;MaxValue)&lt;br&gt;            Console&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;WriteLine(&lt;font color="#006699"&gt;&lt;b&gt;New&lt;/b&gt;&lt;/font&gt; JSONSerializer()&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Serialize(book))&lt;br&gt;        &lt;font color="#006699"&gt;&lt;b&gt;Next&lt;/b&gt;&lt;/font&gt;&lt;br&gt;    &lt;font color="#006699"&gt;&lt;b&gt;End&lt;/b&gt;&lt;/font&gt; Using&lt;br&gt;&lt;/font&gt;&lt;/pre&gt;
And that's it.

&lt;p&gt;
Hopefully that will save you some frustration next time you need to debug Transparent Persistence enhanced code or to have it interacting with reflection based libraries.
&lt;br&gt;&lt;br&gt;
The complete code can be found &lt;a href="https://source.db4o.com/db4o/trunk/sandbox/rodrigo/blogs/DebuggingTA/"&gt;here&lt;/a&gt;.
&lt;br&gt;&lt;br&gt;
Have fun!&lt;/p&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=50366" width="1" height="1"&gt;</description><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Transparent+Activation/default.aspx">Transparent Activation</category></item><item><title>Performance Contest - for one more month</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/07/17/performance-contest-for-one-more-month.aspx</link><pubDate>Thu, 17 Jul 2008 10:38:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:50178</guid><dc:creator>Carl Rosenberger</dc:creator><slash:comments>2</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/50178.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=50178</wfw:commentRss><description>&lt;P&gt;Do you like profiling? Do you like tuning code? If you do, how about taking part in the db4o performance contest? We offer USD 6000 in prizes for the best contributions to make db4o faster.&lt;/P&gt;
&lt;P&gt;We have made it very easy for you to get started by providing an Eclipse workspace set up with the db4o sources and the Poleposition benchmark.&lt;/P&gt;
&lt;P&gt;Links to get you started:&lt;BR&gt;&lt;a href="http://developer.db4o.com/ProjectSpaces/view.aspx/PerformanceContest"&gt;Performance Contest page&lt;/a&gt;&lt;BR&gt;&lt;a href="http://developer.db4o.com/blogs/paircasts/archive/2008/06/13/performance-contest.aspx"&gt;"Getting Started" video&lt;/a&gt;&lt;BR&gt;&lt;a href="http://developer.db4o.com/forums/159/ShowForum.aspx"&gt;Performance Contest Forum&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;The contest has been running for a month already and we are seeing first contributions coming in.&lt;/P&gt;
&lt;P&gt;Andrew has improved sorted queries and provides a UTF-8 string encoder.&lt;BR&gt;Erik is working on a query cache to make queries reusable.&lt;/P&gt;
&lt;P&gt;Can you beat their patches? I am sure you can.&lt;BR&gt;The contest is still open for contributions for one more month until August 15.&lt;/P&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=50178" width="1" height="1"&gt;</description></item></channel></rss>