<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><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><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/db4o_product_news" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Release Notes - 7.12 Development Release</title><link>http://feedproxy.google.com/~r/db4o_product_news/~3/05AFfVxJMVg/release-notes-7-12-development-release.aspx</link><pubDate>Tue, 20 Oct 2009 14:36:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:57187</guid><dc:creator>Tetyana Loskutova</dc:creator><slash:comments>0</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/57187.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=57187</wfw:commentRss><description>&lt;p&gt;Hi!
A new db4o version is out - 7.12 Development.&lt;/p&gt;

&lt;p&gt;Here is what is in it:&lt;/p&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/OMN-178"&gt;OMN-178&lt;/a&gt; - Reviewing OMN code. Changes made in code so that OMN works for java db 
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/OMJ-149"&gt;OMJ-149&lt;/a&gt; - Include OMJ in 7.4 Production and Stable downloadable db4o distribution
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1793"&gt;COR-1793&lt;/a&gt; - BlockingQueue may throw BlockingQueueStoppedException in case of spurious wakeups
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1789"&gt;COR-1789&lt;/a&gt; - Introduce PerformanceCounters/JMX statistics for activation/deactivation, objects stored/deleted
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1787"&gt;COR-1787&lt;/a&gt; - [.Net] Make sure PerformanceCounters instance are removed at ObjectContainer.Close()
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1781"&gt;COR-1781&lt;/a&gt; - Blog about Silverlight assembly loading issue fixed
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1780"&gt;COR-1780&lt;/a&gt; - Blog about Guid typehandler
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1778"&gt;COR-1778&lt;/a&gt; - Introduce optional, user-specified name/label for databases
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1775"&gt;COR-1775&lt;/a&gt; - Separate sorting/ordering step from SODA processing
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1773"&gt;COR-1773&lt;/a&gt; - Enable defragment before actual migration in format migration tests.
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1768"&gt;COR-1768&lt;/a&gt; - Base class classmetadata should not be take into account while storing derived ones
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1765"&gt;COR-1765&lt;/a&gt; - JMX/perfmon: WeakReferences and FreespaceManager
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1761"&gt;COR-1761&lt;/a&gt; - LINQ-Ordering on multiple properties throws a Db4oException: Unexpected exception: this..size()=1, other.size()=0
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1760"&gt;COR-1760&lt;/a&gt; - ArrayList4 Generic IEnumerableGetEnumerator() should be implicity declared and the IEnumerable.GetEnumerator() explicitly declared
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1759"&gt;COR-1759&lt;/a&gt; - [LINQ] Calls to String.Contains() produce wrong results
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1755"&gt;COR-1755&lt;/a&gt; - Refactor deep prefetching client slot cache to use Cache4
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1752"&gt;COR-1752&lt;/a&gt; - [.Net] Expose performance counter instances for each container
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1749"&gt;COR-1749&lt;/a&gt; - JMX/perfmon: Networking statistics
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1748"&gt;COR-1748&lt;/a&gt; - Investigate system assembly not being resolved in OMN
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1730"&gt;COR-1730&lt;/a&gt; - create proper bundles with OSGi headers
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1678"&gt;COR-1678&lt;/a&gt; - [Silverlight] Profile application to spot bottlenecks
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1646"&gt;COR-1646&lt;/a&gt; - File lock must be released after emergency shutdown
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1637"&gt;COR-1637&lt;/a&gt; - Prepare Silverlight tests for running in CC build
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1519"&gt;COR-1519&lt;/a&gt; - Typehandler for System.Guid
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1062"&gt;COR-1062&lt;/a&gt; - Sort result incorrect after OR
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-377"&gt;COR-377&lt;/a&gt; - InMemoryObjectContainer creates a lot of short lived byte[]
&lt;/li&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=57187" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/db4o_product_news/~4/05AFfVxJMVg" height="1" width="1"/&gt;</description><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/7.12+Development+Release/default.aspx">7.12 Development Release</category><feedburner:origLink>http://developer.db4o.com/blogs/product_news/archive/2009/10/20/release-notes-7-12-development-release.aspx</feedburner:origLink></item><item><title>Watching over db4o's shoulders the .NET way</title><link>http://feedproxy.google.com/~r/db4o_product_news/~3/IIIzqCI4BqU/watching-over-db4o-s-shoulders-the-net-way.aspx</link><pubDate>Tue, 13 Oct 2009 11:40:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:57079</guid><dc:creator>Adriano Verona</dc:creator><slash:comments>3</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/57079.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=57079</wfw:commentRss><description>&lt;font face="tahoma"&gt;
Hi.
&lt;p&gt;This post presents a .Net centric view of the newly introduced support for better runtime monitoring into db4o (&lt;a href="http://developer.db4o.com/blogs/product_news/archive/2009/10/12/db4o-runtime-statistics.aspx" title="Db4o runtime statistics" target="_blank"&gt;as described in this post&lt;/a&gt;), so, before you continue reading please, go read the aforementioned post! I'll assume you've read it. &lt;/p&gt;

&lt;p&gt;Have you read it yet? &lt;/p&gt;

&lt;p&gt;No? Go there, I'll wait for you. &lt;/p&gt;

&lt;p&gt;Ok. let's continue... &lt;/p&gt;

&lt;p&gt;As you may already know for now, in the last few weeks, we have been busy adding more sophisticated monitoring support to db4o in the form of "&lt;span style="font-weight:bold;"&gt;Runtime Statistics&lt;/span&gt;" a term that we coined because we needed a common way to refer to "&lt;i&gt;these things&lt;/i&gt;" in a platform agnostic way (you know, Java developers would not be happy if we just used "&lt;i&gt;Performance Counters&lt;/i&gt;" and .Net developers would not be happy either had we choose &lt;i&gt;MBean&lt;/i&gt; :); in this post I'm going to use the more natural name in the platform: &lt;span style="font-weight:bold;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa373083%28VS.85%29.aspx" target="_blank"&gt;Performance Counters&lt;/a&gt;&lt;/span&gt;. If, for some reason, you are not familiar with this concept or want to refresh your knowledge on the subject we recommend to read the&amp;nbsp;MSDN documentation &lt;a href="http://msdn.microsoft.com/en-us/library/aa373083%28VS.85%29.aspx" target="_blank"&gt;here&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx" target="_blank"&gt;here&lt;/a&gt; and also this &lt;a href="http://www.codeproject.com/KB/dotnet/perfcounter.aspx" target="_blank"&gt;article on codeproject&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;After reading the companion post you should already have a good idea about what monitoring data db4o allows you to collect and how&amp;nbsp;it can be useful but we intentionally&amp;nbsp;omitted a description of&amp;nbsp;how to configure and consume this information which&amp;nbsp;is the goal of this post.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;The first step to be able consume monitoring information is to let windows know about the counters which means that you either run Db4oTool with the&amp;nbsp;&lt;b&gt;install-performance-counters&lt;/b&gt; command line parameter or call the method &lt;b&gt;Db4oPerformanceCounters.Install()&lt;/b&gt; from your code. Note that this step is required only once per machine running db4o and also that &lt;font color="green"&gt;&lt;b&gt;&lt;i&gt;it requires administrative rights&lt;/i&gt;&lt;/b&gt;&lt;/font&gt; so you probably will perform it at application install time (as opposed to&amp;nbsp;runtime).&lt;br&gt;&lt;/p&gt;

&lt;p&gt;With the counters in place, the next step is to configure db4o to start collecting the data. As we explained in the companion post, the process of collecting such information does pose some overhead so we adopted an &lt;span style="font-weight:bold;"&gt;opt in&lt;/span&gt; model grouping counters in the following categories (each category in bold configures db4o to collect statistics for the respective set of counters): &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Queries&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;b&gt;General&lt;/b&gt; &lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;
&lt;p&gt;Native Queries / LINQ&lt;/p&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;&lt;p&gt;FreeSpaceManager&lt;/p&gt;&lt;/b&gt;
&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;b&gt;Reference System &lt;/b&gt;&lt;br&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;b&gt;IO &lt;/b&gt;&lt;br&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;b&gt;Networking &lt;/b&gt;(x Connected Clients) &lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;br&gt;In order to select the category/categories you are interested in,&amp;nbsp;add an&amp;nbsp;instance of the respective &lt;b&gt;xxxxxMonitoringSupport&lt;/b&gt;() class to db4o configuration as in the following sample: &lt;/p&gt;

&lt;p&gt;IEmbeddedConfiguration config = Db4oEmbedded.NewConfiguration(); &lt;br&gt;&lt;/p&gt;

&lt;p&gt;// Query&lt;br&gt;config.Common.Add(new QueryMonitoringSupport());&lt;br&gt;config.Common.Add(new NativeQueryMonitoringSupport()); &lt;/p&gt;

&lt;p&gt;// Networking&lt;br&gt;config.Common.Add(new NetworkingMonitoringSupport());&amp;nbsp;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;// IO&lt;br&gt;config.Common.Add(new IOMonitoringSupport()); &lt;/p&gt;

&lt;p&gt;// Reference System: &lt;br&gt;config.Common.Add(new ReferenceSystemMonitoringSupport()); &lt;br&gt;&lt;/p&gt;

&lt;p&gt;// FreeSpaceManager &lt;br&gt;config.Common.Add(new FreespaceMonitoringSupport()); &lt;br&gt;&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Thats it! &lt;/p&gt;

&lt;p&gt;Once configured no other action is required to start collecting the information (other than exercising the pieces of code that triggers the interesting counters :) &lt;/p&gt;

&lt;p&gt;Next step is to consume the information being collected which can be done either through &lt;a href="http://technet.microsoft.com/en-us/library/bb490957.aspx" title="PerfMon" target="_blank"&gt;PerfMon&lt;/a&gt; (the main tool in Windows designed to view such counters) or programmatically. We are going to show you how to see the counters using &lt;a href="http://technet.microsoft.com/en-us/library/bb490957.aspx" title="PerfMon" target="_blank"&gt;PerfMon&lt;/a&gt; first, so start &lt;a href="http://technet.microsoft.com/en-us/library/bb490957.aspx" title="PerfMon" target="_blank"&gt;PerfMon&lt;/a&gt;.exe and you should see its main window (since I'm running Windows 7, your actual PerfMon window may look a little bit different&amp;nbsp;than mine).&lt;/p&gt;

&lt;p&gt;Next step, press &lt;b&gt;+&lt;/b&gt; button in the toolbar to select which counters you want to monitor; &lt;/p&gt;
&lt;a href="http://picasaweb.google.com.br/lh/photo/V8uW4GLqFjDgtvKI9UTa4g?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_JjJXM4oi98I/StCQdqL1UxI/AAAAAAAAA8g/PevkMDpPhHk/s400/PerfMonMainWindow.png"&gt;&lt;/a&gt; 
&lt;p&gt;&amp;nbsp;In the window that shows up (in Available Counters) locate and expand &lt;span style="font-weight:bold;"&gt;Db4o&lt;/span&gt; and then select the desired counters. Next, select the instances you want to monitor.&lt;/p&gt;
&lt;a href="http://picasaweb.google.com.br/lh/photo/rI-xRhWbXkS_4v6ujX74Tw?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_JjJXM4oi98I/StCUWjHr_nI/AAAAAAAAA8k/293ZeQnt59Q/s400/SelectingCounters.png"&gt;&lt;/a&gt; 

&lt;p&gt;&amp;nbsp;Each opened db4o database (or client) will be represented as an &lt;span style="font-weight:bold;"&gt;instance&lt;/span&gt; in the list "&lt;span style="font-weight:bold;"&gt;Instances of selected object&lt;/span&gt;". Local and server databases will display the database file name (in the sample above &lt;span style="font-style:italic;"&gt;mydb.db4o&lt;/span&gt;) and clients (in C/S mode) will be shown as &lt;span style="font-style:italic;"&gt;local port =&amp;gt; server ip:port&lt;/span&gt;). You may monitor as many instances as you want simultaneously. &lt;br&gt;&lt;/p&gt;

&lt;p&gt;That's it again ;)&lt;/p&gt;
&lt;a href="http://picasaweb.google.com.br/lh/photo/KP8UYGfeUUoXsk4qXvFP7Q?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_JjJXM4oi98I/StCZDCrpjQI/AAAAAAAAA8o/0b6FM4ol-lM/s400/CountersInAction.png"&gt;&lt;/a&gt; 


&lt;p&gt;Now that you already know how to monitor db4o performance counters it is time to learn how to consume them programmatically since this can be useful in some scenarios. Accessing db4o performance counters programmatically is just a matter of calling the&amp;nbsp;&lt;font face="Courrier New" size="3"&gt;Db4objects.Db4o.Monitoring.Db4oPerformanceCounters.CounterFor()&lt;/font&gt; method passing the counter and the object container you want to monitor as in the following &lt;a href="http://developer.db4o.com/blogs/product_news/attachment/57079.ashx" title="Download sample zip"&gt;sample&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PerformanceCounter bytesReadPerSec;&lt;br&gt;&lt;font&gt;&lt;font face="tahoma"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bytesReadPerSec&lt;/font&gt;&lt;/font&gt; = Db4oPerformanceCounters.CounterFor(PerformanceCounterSpec.QueriesPerSec, db);&lt;/p&gt;

&lt;p&gt;Now you can query &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx" title="PerformanceCounter class on MSDN" target="_blank"&gt;PerformanceCounter&lt;/a&gt;'s reference for any of it's properties / methods.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Have fun (and let us know what you think could be improved in this subject!)&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Db4o Team!&lt;br&gt;&lt;/p&gt;
&lt;/font&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=57079" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/db4o_product_news/~4/IIIzqCI4BqU" height="1" width="1"/&gt;</description><enclosure url="http://developer.db4o.com/blogs/product_news/attachment/57079.ashx" length="660124" type="application/x-zip-compressed" /><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/Monitoring/default.aspx">Monitoring</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Performance/default.aspx">Performance</category><feedburner:origLink>http://developer.db4o.com/blogs/product_news/archive/2009/10/13/watching-over-db4o-s-shoulders-the-net-way.aspx</feedburner:origLink></item><item><title>Watching over db4o's shoulders the Java way</title><link>http://feedproxy.google.com/~r/db4o_product_news/~3/WjFbBMvLlBo/watching-over-db4o-s-shoulders-the-java-way.aspx</link><pubDate>Tue, 13 Oct 2009 11:37:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:57078</guid><dc:creator>Carl Rosenberger</dc:creator><slash:comments>2</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/57078.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=57078</wfw:commentRss><description>&lt;P&gt;As described in &lt;A href="http://developer.db4o.com/blogs/product_news/archive/2009/10/12/db4o-runtime-statistics.aspx"&gt;this posting&lt;/A&gt;, db4o 7.12 comes with new monitoring support to collect runtime statistics about performance relevant behaviour and state.&lt;/P&gt;
&lt;P&gt;On the Java platform, statistics are published through &lt;A href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/"&gt;Java Management Extensions (JMX)&lt;/A&gt;. A variety of JMX clients is available. Many of them are linked from &lt;A href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/jmxperience.jsp"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;In this posting we will describe how to use the rather basic jconsole tool that comes with the Java JDK.&lt;/P&gt;
&lt;P&gt;For the purpose of providing sample readings we have written a simple program that exercises various db4o tasks in a long running process.&lt;/P&gt;
&lt;P&gt;It can be found in the 7.12 download in&lt;BR&gt;&lt;A href="http://source.db4o.com/db4o/trunk/db4oj.tests/src/com/db4o/db4ounit/optional/monitoring/samples/MonitoringDemo.java"&gt;/src/db4oj.tests/src/com/db4o/db4ounit/optional/monitoring/samples/MonitoringDemo.java&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;You also need &lt;BR&gt;&lt;A href="http://source.db4o.com/db4o/trunk/db4oj.tests/src/com/db4o/db4ounit/optional/monitoring/samples/AllMonitoringSupport.java"&gt;/src/db4oj.tests/src/com/db4o/db4ounit/optional/monitoring/samples/AllMonitoringSupport.java&lt;/A&gt;&lt;BR&gt;that bulk registers all the available monitoring ConfigurationItems.&lt;/P&gt;
&lt;P&gt;To view the generated statistics, run the MonitoringDemo application, then start jconsole from the command line.&lt;/P&gt;
&lt;P&gt;A general tutorial on how to use jconsole is provided &lt;A href="http://java.sun.com/javase/6/docs/technotes/guides/management/jconsole.html"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;First you need to connect to the MonitoringDemo process. Then you will find the db4o related readings on the "MBeans" tab. In the treeview on the left, you will see "com.db4o.monitoring".&lt;/P&gt;
&lt;P&gt;Below this tree node you will find all open ObjectContainers that have JMX monitoring enabled. For each of them the respective runtime statistics categories will be listed. If you select the "Attributes" node for any of them, the corresponding set of attribute values will be shown along with their most recent reading.&lt;/P&gt;
&lt;P&gt;By doubleclicking on the number value a graph will be displayed. (Admittedly not a very intuitive user interface, but that's jconsole.)&lt;/P&gt;
&lt;P&gt;Here is a screenshot how results for IO readings could look like:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://lh6.ggpht.com/_JjJXM4oi98I/StSJOtg_N3I/AAAAAAAAA8w/8XcqJoIlOZo/jconsole.png"&gt;&lt;/P&gt;
&lt;P&gt;For some "exceptional" events, we also provide the option to subscribe to notifications.&lt;/P&gt;
&lt;P&gt;In the categories where the "Notifications" node is visible, you can select it and click "Subscribe" on the bottom right. For example we provide notifications about unoptimized native queries and about class index scans.&lt;/P&gt;
&lt;P&gt;If you consider looking into other tools than jconsole to monitor JMX statistics, we recommend to take a look at &lt;A href="http://www.jmanage.org/"&gt;jManage&lt;/A&gt;. Here is a sample screenshot of how jManage nicely allows to combine multiple readings into one graph:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://lh3.ggpht.com/_JjJXM4oi98I/StSJOpDcsGI/AAAAAAAAA80/S-91Pg4q9sg/jmanage.png"&gt;&lt;/P&gt;
&lt;P&gt;If you want to test&amp;nbsp;whether your mail client gracefully handles full mailboxes: jManage also allows to send an email for every JMX notification received.&lt;/P&gt;
&lt;P&gt;Enjoy the new functionality!&lt;/P&gt;
&lt;P&gt;Your db4o team.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=57078" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/db4o_product_news/~4/WjFbBMvLlBo" height="1" width="1"/&gt;</description><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Java/default.aspx">Java</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/JMX/default.aspx">JMX</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Monitoring/default.aspx">Monitoring</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/runtime+statistics/default.aspx">runtime statistics</category><feedburner:origLink>http://developer.db4o.com/blogs/product_news/archive/2009/10/13/watching-over-db4o-s-shoulders-the-java-way.aspx</feedburner:origLink></item><item><title>db4o runtime statistics</title><link>http://feedproxy.google.com/~r/db4o_product_news/~3/4_u65H9eL_8/db4o-runtime-statistics.aspx</link><pubDate>Mon, 12 Oct 2009 17:31:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:57065</guid><dc:creator>Adriano Verona</dc:creator><slash:comments>2</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/57065.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=57065</wfw:commentRss><description>&lt;div&gt;Once a project hits production status and gets deployed it is in the wild (at least from the point of view of the development team) and it requires constant monitoring from IT. The more important the process, the more &amp;nbsp;important becomes the ability to monitor the application behavior so IT members can take proactive actions and avoid potential problems.&lt;/div&gt;
&lt;div&gt;&lt;br&gt;&lt;/div&gt;
&lt;div&gt;Also, monitoring support can be a life/time saver during development, allowing developers to spot performance issues, wrong assumptions and the like before the application reaches the magical production status. Traditional&amp;nbsp; enterprise applications (such RDBMS, application servers, EJB containers, etc) has been delivering such monitoring capabilities either through well established platform mechanisms (MBeans, Performance Counters) or custom approaches.&lt;/div&gt;
&lt;div&gt;&lt;br&gt;&lt;/div&gt;
&lt;div&gt;While db4o provides API hooks to add custom logging for performance relevant figures, until now there's been no out-of-the-box way to have an ad hoc look under the hood before getting into real coding, or a convenient, standardized mechanism to monitor and display these values for a long-running process over a period of time.&lt;/div&gt;
&lt;div&gt;&lt;br&gt;&lt;/div&gt;
&lt;div&gt;We are proud to announce that starting with version 7.12 various "&lt;i&gt;Runtime Statistics&lt;/i&gt;" will be exposed by db4o; we do believe that such statistics can provide useful information for developers and/or IT administrators who can consume this information either through the platform infrastructure (you can learn more details about &lt;a href="http://developer.db4o.com/blogs/product_news/archive/2009/10/13/watching-over-db4o-s-shoulders-the-net-way.aspx" id="r_96" title="DB4o Performance Counters" target="_blank"&gt;.Net&lt;/a&gt; and &lt;a href="http://developer.db4o.com/blogs/product_news/archive/2009/10/13/watching-over-db4o-s-shoulders-the-java-way.aspx" id="a-q." title="Watching over db4o's shoulders the Java way" target="_blank"&gt;Java&lt;/a&gt; specifics) or an API.&lt;/div&gt;
&lt;div&gt;&lt;br&gt;&lt;/div&gt;
&lt;div&gt;As of version 7.12 the following statistics will be made available:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Queries&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;# class scans / sec&lt;/b&gt;&lt;br&gt;A class scan means that db4o will need to read each object of a given class in order to figure out whether the object should be included in the&lt;br&gt;result set of a query. In this case indexing the parent referencing field would avoid this costly operation and improve query times.&lt;br&gt;&lt;br&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;# queries / sec&lt;/b&gt;&lt;br&gt;Number of SODA queries executed per second.&lt;br&gt;&lt;br&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;Average query execution time&lt;/b&gt;&lt;br&gt;The time to retrieve the list of ids for the matching objects (this doesn't take the time to activate the objects into account)&lt;br&gt;&lt;br&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;# unoptimized native queries / sec&lt;/b&gt;&lt;br&gt;Number of native queries (per second) that were not optimized. Developers should strive to run only optimized native queries in order to&lt;br&gt;get the best possible performance.&lt;br&gt;&lt;br&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;# native queries / sec&lt;/b&gt;&lt;br&gt;Total number of native queries (either optimized or not) executed per second.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;FreeSpaceManager&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;average slot size&lt;/b&gt;&lt;br&gt;The average size of free storage slots available.&lt;br&gt;Smaller slots are less likely to be reused.&lt;br&gt;&lt;br&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;# free slots&lt;/b&gt;&lt;br&gt;A high number of free slots indicates a high level of fragmentation.&lt;br&gt;&lt;br&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;# reused slots / sec&lt;/b&gt;&lt;br&gt;Number of reused free slots per second.&lt;br&gt;&lt;br&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;# bytes in free space management&lt;/b&gt;&lt;br&gt;A high value (with a high value of &lt;b&gt;#free slots&lt;/b&gt;) is a good indication that defragmenting the database may bring performance improvements.&lt;span style="font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;Reference System&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;# objects in reference system&lt;/b&gt;&lt;br&gt;Total number of objects in the db4o reference system.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;IO&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;# bytes read / sec&lt;/b&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;# bytes written / sec&lt;/b&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;# reads / sec&lt;/b&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;# writes / sec&lt;/b&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;# syncs / sec&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;Networking&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Bytes Sent/Received&lt;/b&gt;&lt;br&gt;Bytes sent/received from/to clients.&lt;br&gt;&lt;br&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;Connected Clients&lt;/b&gt;&lt;br&gt;Number of currently connected clients.&lt;br&gt;&lt;br&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;Messages sent&lt;/b&gt;&lt;br&gt;Number of messages sent from/to db4o clients and servers. Developers can use this statistic as an indicator whenever their object models are&lt;br&gt;driving db4o to exchange too many messages between clients / server. This statistic is also useful to help developers to tweak&lt;br&gt;&lt;a href="http://link%20to%20prefetch%20depth%20configuration%20docs/" id="z-.q" title="prefetchDepth"&gt;&lt;/a&gt;prefetchDepth/ &lt;a href="http://developer.db4o.com/Resources/view.aspx/Reference/Tuning/Performance_Hints/Prefetching_Objects_For_Query_Results" id="p6oh" title="Prefetch Object Count" target="_blank"&gt;prefetchObjectCount&lt;/a&gt; configuration in order to minimize messages exchange between client / servers. &amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;.Net Specific&lt;/b&gt;&amp;nbsp;(For more details about .Net specifics follow the link in the end of this post)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;div&gt;Note that since gathering these statistics does introduce some performance overhead (for most of then this overhead is so small that it is immeasurable) each set of runtime statistics (Queries, FreeSpaceManager, ReferenceSystem, etc.) must be configured independently (so you can decide which ones you want to track and pay the performance hit only for that ones).&lt;/div&gt;
&lt;div&gt;&lt;font face="tahoma"&gt;
&lt;p&gt;One selects the category(ies) he is interested in publishing statistics for by adding an object of the respective &lt;b&gt;xxxxxMonitoringSupport&lt;/b&gt;() class to db4o configuration as in the following sample: &lt;/p&gt;
&lt;p&gt;IEmbeddedConfiguration config = Db4oEmbedded.NewConfiguration(); &lt;br&gt;&lt;/p&gt;
&lt;p&gt;// Query&lt;br&gt;config.Common.Add(new QueryMonitoringSupport());&lt;br&gt;&lt;font&gt;&lt;font face="tahoma"&gt;config.Common.&lt;/font&gt;&lt;/font&gt;&lt;font size="+0"&gt;&lt;font face="tahoma"&gt;&lt;/font&gt;&lt;/font&gt;Add(new NativeQueryMonitoringSupport()); &lt;/p&gt;
&lt;p&gt;// Networking&lt;font size="+0"&gt;&lt;font face="tahoma"&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;font&gt;&lt;font face="tahoma"&gt;config.Common.Add(new NetworkingMonitoringSupport());&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;// IO&lt;br&gt;&lt;font&gt;&lt;font face="tahoma"&gt;config.Common.&lt;/font&gt;&lt;/font&gt;Add(new IOMonitoringSupport()); &lt;/p&gt;
&lt;p&gt;// Reference System: &lt;br&gt;&lt;font&gt;&lt;font face="tahoma"&gt;config.Common.&lt;/font&gt;&lt;/font&gt;&lt;font size="+0"&gt;&lt;font face="tahoma"&gt;&lt;/font&gt;&lt;/font&gt;Add(new ReferenceSystemMonitoringSupport()); &lt;br&gt;&lt;/p&gt;
&lt;p&gt;// FreeSpaceManager &lt;br&gt;config.Common.Add(new FreespaceMonitoringSupport()); &lt;br&gt;&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;Last, but not least, these statistics are per object container (database file) so you can monitor as many open databases as you want.&lt;/div&gt;
&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;If you can't wait for this functionality we invite you to go and download &lt;a href="http://developer.db4o.com/files/folders/db4o_xx/default.aspx" id="wsuz" title="Db4o continuous build." target="_blank"&gt;db4o continuous build version&lt;/a&gt; and give it a try, but please remember that it's a work in progress for while, so you may expect to see changes in the API and / or list of actual statistics supported.&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br&gt;&lt;/div&gt;
&lt;div&gt;For more details on how to consume these statistics, samples and more details, please, read the following blog posts:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;For .Net see &lt;a href="http://developer.db4o.com/blogs/product_news/archive/2009/10/13/watching-over-db4o-s-shoulders-the-net-way.aspx" title="Watching over db4o's shoulders the .Net way" target="_blank"&gt;Watching over db4o's shoulders the .Net way&lt;/a&gt;.&lt;br&gt;
&lt;/li&gt;&lt;li&gt;For Java see &lt;a href="http://developer.db4o.com/blogs/product_news/archive/2009/10/13/watching-over-db4o-s-shoulders-the-java-way.aspx" title="Watching over db4o's shoulders the Java way" target="_blank"&gt;Watching over db4o's shoulders the Java way&lt;/a&gt;.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;div&gt;&lt;br&gt;&lt;/div&gt;
&lt;div&gt;Have fun! (and provide feedback ;)&lt;/div&gt;
&lt;div&gt;&lt;br&gt;&lt;/div&gt;
&lt;div&gt;Db4o team!&lt;/div&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=57065" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/db4o_product_news/~4/4_u65H9eL_8" height="1" width="1"/&gt;</description><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/db4o/default.aspx">db4o</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Monitoring/default.aspx">Monitoring</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Performance/default.aspx">Performance</category><feedburner:origLink>http://developer.db4o.com/blogs/product_news/archive/2009/10/12/db4o-runtime-statistics.aspx</feedburner:origLink></item><item><title>New typehandler on the block: System.Guid</title><link>http://feedproxy.google.com/~r/db4o_product_news/~3/ycbZMaWnwwI/new-typehandler-in-the-block.aspx</link><pubDate>Tue, 06 Oct 2009 18:51:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:56975</guid><dc:creator>Adriano Verona</dc:creator><slash:comments>2</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/56975.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=56975</wfw:commentRss><description>&lt;font face="tahoma"&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="tahoma"&gt;&lt;font face="tahoma"&gt;Hi!&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="tahoma"&gt;&lt;font face="tahoma"&gt;If db4o cannot find a more specific &lt;a href="http://developer.db4o.com/Resources/view.aspx/Reference/Implementation_Strategies/TypeHandlers"&gt;typehandler&lt;/a&gt; for a type it will fall back to the StandardReferenceTypeHandler. That means the type will be handled as a complex&amp;nbsp;object. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="tahoma"&gt;&lt;font face="tahoma"&gt;Types handled by the StandardReferenceTypeHandler carry some interesting properties:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;ol&gt;&lt;font face="tahoma"&gt;
&lt;li&gt;
&lt;p&gt;&lt;font face="tahoma"&gt;Db4o will pretend that&amp;nbsp;objects of this type&amp;nbsp;have an identity&lt;/font&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;font face="tahoma"&gt;Indexing happens at id level&lt;/font&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;font face="tahoma"&gt;A class index entry will be created for every stored object&lt;/font&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/font&gt;&lt;/ol&gt;

&lt;p&gt;&lt;font face="tahoma"&gt;&lt;font face="tahoma"&gt;These three points have some interesting implications for value types on the .Net platform. By definition, &lt;i&gt;Value Types&lt;/i&gt; have no identity so it makes no sense to db4o to keep an &lt;b&gt;id&lt;/b&gt; for such types. Also, db4o handles types with no identity by embedding marshalled instances into their parent's slots, which in most cases will&amp;nbsp;induce less overhead (no need to keep track of ids), potentially resulting in better performance.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="tahoma"&gt;&lt;font face="tahoma"&gt;Since we didn't have a specific typehandler for &lt;b&gt;System.Guid&lt;/b&gt; this is the status quo for&amp;nbsp;this type in db4o in versions prior to 7.12. As we continue to improve db4o, we strive to make its usage as natural and its performance as high as possible on each platform it's designed to run on. We are proud to announce that based on the &lt;a href="http://developer.db4o.com/forums/thread/55779.aspx" title="Guid typehandler" target="_blank"&gt;contribution&lt;/a&gt; from &lt;/font&gt;&lt;/font&gt;Judah Himango, a&lt;font face="tahoma"&gt;&lt;font face="tahoma"&gt; community member, we are introducing a new typehandler&amp;nbsp;for the System.Guid, so starting with db4o 7.12, System.Guid has got it's own (deserved)&amp;nbsp;type handler with better indexing support, no more artificial ids and less overhead.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="tahoma"&gt;You may be wondering what will happen to old databases when they get updated to version 7.12. As always the database format update should be transparent and require no effort from developers; as objects holding guids get updated they will use the new typehandler.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="tahoma"&gt;&lt;font face="tahoma"&gt;You can use &lt;a href="http://developer.db4o.com/blogs/product_news/attachment/56975.ashx"&gt;Db4oTestRunner with GuidTypeHandlerTester&lt;/a&gt; to see it with your own eyes&amp;nbsp;(you can even try with different db4o versions ;)&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/p&gt;

&lt;font face="tahoma"&gt;
&lt;a href="http://picasaweb.google.com.br/lh/photo/HYY5XNOo6LYCQ7B_Jba3rw?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_JjJXM4oi98I/StyxKiNVkeI/AAAAAAAAA9U/Xw1MMJQ9agI/s800/blog.png" width="603" height="469"&gt;&lt;/a&gt;
&lt;/font&gt; 
&lt;p&gt;&lt;font face="tahoma"&gt;&lt;font face="tahoma"&gt;Alternativally you can grab&amp;nbsp;&lt;a href="https://source.db4o.com/db4o/trunk/sandbox/Adriano/Blogs/" title="Db4oTestRunner &amp;amp; co." target="_blank"&gt;Db4oTestRunner / GuidTypeHandlerTest&amp;nbsp;sources&amp;nbsp;from our SVN&lt;/a&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="tahoma"&gt;&lt;font face="tahoma"&gt;Have fun!&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="tahoma"&gt;&lt;font face="tahoma"&gt;Your db4o team.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;font face="tahoma"&gt;&lt;/font&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=56975" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/db4o_product_news/~4/ycbZMaWnwwI" height="1" width="1"/&gt;</description><enclosure url="http://developer.db4o.com/blogs/product_news/attachment/56975.ashx" length="2252420" type="application/x-zip-compressed" /><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><feedburner:origLink>http://developer.db4o.com/blogs/product_news/archive/2009/10/06/new-typehandler-in-the-block.aspx</feedburner:origLink></item><item><title>Rocks are still rolling on db4o Silverlight port</title><link>http://feedproxy.google.com/~r/db4o_product_news/~3/7i_d4ataZCk/rocks-are-still-rolling-on-db4o-silverlight-port.aspx</link><pubDate>Tue, 06 Oct 2009 17:09:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:56973</guid><dc:creator>Adriano Verona</dc:creator><slash:comments>2</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/56973.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=56973</wfw:commentRss><description>&lt;span class="Apple-style-span" style="word-spacing:0px;font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:medium;line-height:normal;text-transform:none;text-indent:0px;white-space:normal;letter-spacing:normal;border-collapse:separate;widows:2;font-size-adjust:none;font-stretch:normal;orphans:2;"&gt;
&lt;div style="padding:8px;font-size:10pt;font-family:Arial,Helvetica,sans-serif;"&gt;Some time &lt;a href="http://developer.db4o.com/blogs/product_news/archive/2009/06/10/in-the-search-of-silver.aspx" title="In the search of silver" target="_blank"&gt;ago&lt;/a&gt; we discussed the status of the db4o Silverlight port effort at that point in time.&lt;/div&gt;
&lt;div style="padding:8px;font-size:10pt;font-family:Arial,Helvetica,sans-serif;"&gt;Well, we are happy to let you know that since then we have been working on the issues presented and that we have made slow but steady progress towards a better developer experience. &lt;/div&gt;
&lt;div style="padding:8px;font-size:10pt;font-family:Arial,Helvetica,sans-serif;"&gt;Basically we have improvements in three areas: &lt;/div&gt;
&lt;div style="padding:8px;font-size:10pt;font-family:Arial,Helvetica,sans-serif;"&gt;- Tests ported to Silverlight&lt;br&gt;&lt;br&gt;- continuous build integration &lt;br&gt;&lt;br&gt;- assembly loading issues&lt;/div&gt;
&lt;div style="padding:8px;font-size:10pt;font-family:Arial,Helvetica,sans-serif;"&gt;When we announced that we were working on a db4o Silverlight port we had just a few tests of our test suite running and, worst, the Silverlight build was not integrated into our continuous build loop.&lt;/div&gt;
&lt;div style="padding:8px;font-size:10pt;font-family:Arial,Helvetica,sans-serif;"&gt;As of today we have fixed, to some extent, both issues; the major bulk of our test suite is already running under Silverlight (with the ones that don't make sense disabled or removed) and better, we are currently building and running the tests in our continuous build process! This ensures that we are not going to introduce regressions on the Silverlight port! The goal is to continue adding tests and eventually start to write specific tests for Silverlight.&lt;br&gt;&lt;/div&gt;
&lt;div style="padding:8px;font-size:10pt;font-family:Arial,Helvetica,sans-serif;"&gt;One of the most frustrating issues I've found while working on the db4o Silverlight port was related to assembly loading; for some reason we were misled to believe that we could not load assemblies in a Silverlight application and that led us to introduce a workaround that required users to write more code in order to be able to use db4o under Silverlight. Thanks to a Silverlight program manager and some extra research we figured out that actually it is possible to load assemblies and so we fixed our code rendering the proposed workaround unnecessary (the test application has been updated to reflect this change). For those who read the previous post, that means that you don't need to worry&amp;nbsp;about that scary, red warning message anymore :).&lt;/div&gt;&lt;div style="padding:8px;font-size:10pt;font-family:Arial,Helvetica,sans-serif;"&gt;In other words, there's &lt;b&gt;no more need&lt;/b&gt; for the following code:&lt;/div&gt;
&lt;div style="padding:8px;font-size:10pt;font-family:Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp; #region Assembly.Load() issue workaround&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private static readonly IDictionary&amp;lt;string, Assembly&amp;gt; _assemblyCache = new Dictionary&amp;lt;string, Assembly&amp;gt;();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; static App()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _assemblyCache[AssemblyNameFor(typeof(Person))] = typeof(Person).Assembly;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _assemblyCache[AssemblyNameFor(typeof(Db4oFactory))] = typeof(Db4oFactory).Assembly;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TypeReference.AssemblyResolve += (sender, args) =&amp;gt;&amp;nbsp; args.Assembly = _assemblyCache[args.Name];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion &lt;br&gt;&lt;/div&gt;
&lt;div style="padding:8px;font-size:10pt;font-family:Arial,Helvetica,sans-serif;"&gt;Actually if you try to run a Silverlight application that was written with this workaround you'll notice that it won't compile because the Event &lt;b&gt;AssemblyResolve&lt;/b&gt; on the&amp;nbsp;TypeReference class is no more; if you find yourself with such an error, just remove the offending line and related code!&lt;br&gt;&lt;/div&gt;
&lt;div style="padding:8px;font-size:10pt;font-family:Arial,Helvetica,sans-serif;"&gt;Cool!&lt;br&gt;&lt;/div&gt;
&lt;div style="padding:8px;font-size:10pt;font-family:Arial,Helvetica,sans-serif;"&gt;The message? We are still committed to provide a solid solution for object persistence on the Silverlight platform!&lt;/div&gt;
&lt;div style="padding:8px;font-size:10pt;font-family:Arial,Helvetica,sans-serif;"&gt;As always, feel free to comment.&lt;/div&gt;
&lt;div style="padding:8px;font-size:10pt;font-family:Arial,Helvetica,sans-serif;"&gt;Best&lt;br&gt;&lt;/div&gt;
&lt;div style="padding:8px;font-size:10pt;font-family:Arial,Helvetica,sans-serif;"&gt;Your db4o team.&lt;/div&gt;&lt;/span&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=56973" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/db4o_product_news/~4/7i_d4ataZCk" height="1" width="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/Silverlight/default.aspx">Silverlight</category><feedburner:origLink>http://developer.db4o.com/blogs/product_news/archive/2009/10/06/rocks-are-still-rolling-on-db4o-silverlight-port.aspx</feedburner:origLink></item><item><title>Networking C/S preloaded</title><link>http://feedproxy.google.com/~r/db4o_product_news/~3/JIXRqdo0t8Y/networking-c-s-preloaded.aspx</link><pubDate>Wed, 09 Sep 2009 14:19:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:56644</guid><dc:creator>Patrick Roemer</dc:creator><slash:comments>2</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/56644.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=56644</wfw:commentRss><description>&lt;p&gt;In a networking client/server environment, most of the cost is incurred by lots of small messages being interchanged between client and server. The classic cure is to apply some more or less sophisticated heuristics to batch or preload data, thus reducing the number of round trips in exchange for a bigger message size. Previous db4o versions already implemented some variants of this general approach, most notably:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ID prefetching: Clients have to request IDs for newly created objects from the server. Instead of requesting a single ID on demand, clients will rather acquire a full range of IDs to be used at their own discretion.&lt;/li&gt;
&lt;li&gt;Message batching: Whenever it is not required that a message reaches the server asap, it will be queued on the client side and be marshalled together with other accumulated messages when either the queue threshold is exceeded or an "urgent" messages (like a commit) enters the queue.&lt;/li&gt;
&lt;li&gt;Object prefetching: When the client receives a query result, it will only get the collection of IDs. Instead of requesting each single object on access, the client would prefetch a configured number of root objects from the result set upon first access and cache it internally.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As a next step, we have extended this tool box with deep prefetching, introducing general changes to object prefetching. "Root" objects in the above description means: Only the actual object (and its primitive members) is retrieved. However, it will be very likely in most scenarios that "child" objects will also be accessed. In order to improve round trip times in these scenarios, we introduced a prefetch depth strategy for query results that will push the object graph below the prefetched "root" objects up to a preconfigured depth to the client along with the ID set. You can think of object prefetching as "horizontal" pre-loading, while deep prefetching covers the "vertical" axis.&lt;/p&gt;
&lt;p&gt;Deviating from the existing object prefetching implementation that actually would transfer and cache "live", activated objects on the client (that may never be needed there), we transfer and cache the file level representation (i.e. byte arrays) only and let the client handle them just as it would actual file slots. Object prefetching has been merged into this deep prefetching mechanism, it uses the same approach now.&lt;/p&gt;&lt;p&gt;The following graph illustrates the effect of prefetch count and prefetch depth on a hypothetical result set. Prefetched objects/slots are marked green.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://developer.db4o.com/blogs/product_news/attachment/56644.ashx"&gt;&lt;/p&gt;
&lt;p&gt;Configuring deep prefetching is as simple as invoking&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ClientConfiguration clientConfig = Db4oClientServer.newClientConfiguration();&lt;br&gt;// ...&lt;br&gt;clientConfig.prefetchDepth(prefetchDepth);&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The default setting is 0, i.e. the feature is switched off. It can be re-configured arbitrarily at runtime without reopening the client.&lt;br&gt;&lt;/p&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=56644" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/db4o_product_news/~4/JIXRqdo0t8Y" height="1" width="1"/&gt;</description><enclosure url="http://developer.db4o.com/blogs/product_news/attachment/56644.ashx" length="14160" type="image/png" /><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/batch/default.aspx">batch</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/networking/default.aspx">networking</category><feedburner:origLink>http://developer.db4o.com/blogs/product_news/archive/2009/09/09/networking-c-s-preloaded.aspx</feedburner:origLink></item><item><title>Release Notes - 7.11 Development Release</title><link>http://feedproxy.google.com/~r/db4o_product_news/~3/LfH1LF-2wRM/release-notes-7-11-development-release.aspx</link><pubDate>Tue, 18 Aug 2009 14:58:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:56445</guid><dc:creator>Tetyana Loskutova</dc:creator><slash:comments>0</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/56445.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=56445</wfw:commentRss><description>&lt;p&gt;New release is out and here is the list of bug fixes and improvements that you will find in it:&lt;/p&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/OMN-177"&gt;OMN-177&lt;/a&gt; - OMNAddin.addin file location detection fails on non english language
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/OMN-176"&gt;OMN-176&lt;/a&gt; - ObjectManagerEnterprise fails to run on non english boxes
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/OMN-175"&gt;OMN-175&lt;/a&gt; - In Query result, Empty any cell displaying some primitive value. It throws NullReference Exception
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/OMN-174"&gt;OMN-174&lt;/a&gt; - exception occurs on dragging some fileds to attribute list and then running a query or click on view all objects. 
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/OMN-173"&gt;OMN-173&lt;/a&gt; - Queries not returning correct results for datetime field.
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/OMN-172"&gt;OMN-172&lt;/a&gt; - For Bool and datetime fields, query builder does not show dropdown for bool values and calender for datetime
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/OMN-171"&gt;OMN-171&lt;/a&gt; - If such a search string is added which has no matching class and we switch to assembly view then the db4o broweser has treeview with just assembly name
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/OMN-169"&gt;OMN-169&lt;/a&gt; - Recent queries remains for a db, if the db is deleted and created again with same name and location
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/OMJ-144"&gt;OMJ-144&lt;/a&gt; - Error by running a query
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/OMJ-142"&gt;OMJ-142&lt;/a&gt; - Query string doesn't appear in text field of Build query view
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/OMJ-128"&gt;OMJ-128&lt;/a&gt; - Unhandled event loop exception
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/DRS-103"&gt;DRS-103&lt;/a&gt; - Collection not replicating properly if configured with TransparentActivationSupport 
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1746"&gt;COR-1746&lt;/a&gt; - HybridDictionary can not be stored
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1744"&gt;COR-1744&lt;/a&gt; - Native Query optimizer accepts multi-statement predicates
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1743"&gt;COR-1743&lt;/a&gt; - ObjectContainer in member field causes NullPointerException during activation
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1741"&gt;COR-1741&lt;/a&gt; - Enable ObjectContainer#Store to be used inside Deleting callback (and event handler)
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1739"&gt;COR-1739&lt;/a&gt; - Db4oTool should support db4o performance counters installation
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1736"&gt;COR-1736&lt;/a&gt; - JMX/PerfMon: Query statistics
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1735"&gt;COR-1735&lt;/a&gt; - TransportObjectContainer should not create a WeakReferenceCollector
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1731"&gt;COR-1731&lt;/a&gt; - Skip nested activation calls in NQ optimization
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1729"&gt;COR-1729&lt;/a&gt; - update svnkit to 1.3
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1728"&gt;COR-1728&lt;/a&gt; - PerformanceCounter/JMX bean for IO Read and Write for Java and .NET
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1725"&gt;COR-1725&lt;/a&gt; - BLOAT cache fills up the heap
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1723"&gt;COR-1723&lt;/a&gt; - ClassHasNoFields diagnistic is not called on a class with no fields
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1721"&gt;COR-1721&lt;/a&gt; - After refactoring a field to transient/NonSerialized, field contents are still retrieved
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1718"&gt;COR-1718&lt;/a&gt; - DB4OTool.exe crashes on some class names
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1715"&gt;COR-1715&lt;/a&gt; - When #setSemaphore() waits for the semaphore to become available it blocks the server.
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1714"&gt;COR-1714&lt;/a&gt; - Batched messages hold on to the server container lock while they are processed
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1712"&gt;COR-1712&lt;/a&gt; - Reduce TransportObjectContainer code overhead
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1707"&gt;COR-1707&lt;/a&gt; - Consistent client/server exception (and shutdown) handling
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1706"&gt;COR-1706&lt;/a&gt; - Per class UUID config is overridden by global config
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1703"&gt;COR-1703&lt;/a&gt; - UniqueFieldValueConstraint should refuse to be configured on a client
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1701"&gt;COR-1701&lt;/a&gt; - com.db4o.foundation.ArgumentNullException about ActivatableHashMap
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1700"&gt;COR-1700&lt;/a&gt; - Allocate memory in the MemoryBin in byte[] pages
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1699"&gt;COR-1699&lt;/a&gt; - Consolidate type handler querying requirements into QueryableTypeHandler
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1687"&gt;COR-1687&lt;/a&gt; - Removing super class from hierarchy leads to ClassCastException
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1685"&gt;COR-1685&lt;/a&gt; - Deleting updated objects with TP configured has no effect
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1683"&gt;COR-1683&lt;/a&gt; - Updating objects that contain enums causes exceptions
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1682"&gt;COR-1682&lt;/a&gt; - DatabaseFileLockedException is no longer thrown when the file is locked by another process
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1681"&gt;COR-1681&lt;/a&gt; - [Silverlight] Introduce helper class for assembly resolution.
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1677"&gt;COR-1677&lt;/a&gt; - Simple boolean fields not supported
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1676"&gt;COR-1676&lt;/a&gt; - [Silverlight] Add CLI1 tests (adapting the ones not supported) to Silverlight test suite
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1675"&gt;COR-1675&lt;/a&gt; - review and update astoria demo
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1672"&gt;COR-1672&lt;/a&gt; - integrate Data.Services.Db4oDataContext tests into the continous build
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1671"&gt;COR-1671&lt;/a&gt; - test cases for Data.Services.Db4oDataContext in server mode with concurrent clients
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1670"&gt;COR-1670&lt;/a&gt; - Activation doesn't work properly when UniqueFieldValueConstraint is set
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1669"&gt;COR-1669&lt;/a&gt; - TA enhancement plugin for eclipse fails when the super class of a class that's being enhanced resides in a referenced project
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1667"&gt;COR-1667&lt;/a&gt; - Support simple method calls on LINQ queries
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1666"&gt;COR-1666&lt;/a&gt; - Support method/property chaining on LINQ queries
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1665"&gt;COR-1665&lt;/a&gt; - support ordering for value types that implement IComparable
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1664"&gt;COR-1664&lt;/a&gt; - NullPointerException  encountered in client server mode when multiple client connect to server simultaneously using Configuration along with openclient
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1662"&gt;COR-1662&lt;/a&gt; - On upgrading database to 7.10 NullReferenceException is thrown
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1661"&gt;COR-1661&lt;/a&gt; - Defrag fails with NullReferenceException
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1656"&gt;COR-1656&lt;/a&gt; - Support non generic types derived from generic collection types
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1652"&gt;COR-1652&lt;/a&gt; - DateTimeOffset field in ORDER By throws exception
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1651"&gt;COR-1651&lt;/a&gt; - LINQ 'Where Not' clause against boolean field throws exception when native query optimization is enabled
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1649"&gt;COR-1649&lt;/a&gt; - split embedded C/S from networking C/S and introduce API to open embedded clients against local ObjectContainer
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1648"&gt;COR-1648&lt;/a&gt; - During emergency shutdown, db4o should not write cached data to disk if cache could possibly be corrupted through causing exception
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1647"&gt;COR-1647&lt;/a&gt; - Exceptions during emergency shutdown should not shadow the causing exception
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1640"&gt;COR-1640&lt;/a&gt; - EventRegistry cleanup
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1635"&gt;COR-1635&lt;/a&gt; - Run db4o common tests on Silverlight
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1632"&gt;COR-1632&lt;/a&gt; - Deep Prefetching
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1134"&gt;COR-1134&lt;/a&gt; - Poleposition alerts when the performance decreases or increases by a specific threshold
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1054"&gt;COR-1054&lt;/a&gt; - Ensure Enums are handled correctly by Java TA instrumentation
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1046"&gt;COR-1046&lt;/a&gt; - updateDepth sets on configuration overrides updateDepth on ObjectClass
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-656"&gt;COR-656&lt;/a&gt; - SODA throws exception on identity constraint against "unknown" object
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-391"&gt;COR-391&lt;/a&gt; -  DateTime in dotnet looses "kind" member
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-192"&gt;COR-192&lt;/a&gt; - Pluggable ClientServer Communication
&lt;/li&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=56445" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/db4o_product_news/~4/LfH1LF-2wRM" height="1" width="1"/&gt;</description><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/7.11+Development+Release/default.aspx">7.11 Development Release</category><feedburner:origLink>http://developer.db4o.com/blogs/product_news/archive/2009/08/18/release-notes-7-11-development-release.aspx</feedburner:origLink></item><item><title>Improved Exception Handling</title><link>http://feedproxy.google.com/~r/db4o_product_news/~3/U9t4bS1KXSA/improved-exception-handling.aspx</link><pubDate>Fri, 14 Aug 2009 15:33:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:56421</guid><dc:creator>Carl Rosenberger</dc:creator><slash:comments>1</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/56421.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=56421</wfw:commentRss><description>&lt;P&gt;In the latest build we have introduced an even stricter Exception handling. The new strategy: If the exception occured is a Db4oRecoverableException we rethrow this exception to the user application. In all other cases we do an emergency shutdown of the ObjectContainer/ObjectServer without commit, without even writing FreeSpace information. This way we try to do our best to keep the database in the last committed state.&lt;/P&gt;
&lt;P&gt;The new behaviour is quite different to the previous behaviour where we did not catch VM errors. In Client/Server mode an OutOfMemoryError for a specific client would have only terminated the handling thread for the client that it serviced. The server would have continued to work. For this case there was a small risk that BTrees or cache pages ended up in an inconsistent state.&lt;/P&gt;
&lt;P&gt;The change of the Exception handling is also relevant for single user mode: If db4o would have been accessed by multiple threads, the one thread that experienced an OutOfMemoryException would have died. Other threads with references to the same ObjectContainer may have worked on, also against a possibly inconsistent state.&lt;/P&gt;
&lt;P&gt;Now we make sure the ObjectContainer becomes unusable as soon as any unexpected Exception occurs.&lt;/P&gt;
&lt;P&gt;We have also tried to improve against the possible risk of shadowed exceptions: In case exceptions occur during the emergency shutdown, we wrap all occurred exceptions in a CompositeDb4oException to make sure no exception information gets lost.&lt;/P&gt;
&lt;P&gt;For callbacks and events that call into user code we wrap possible exceptions into Db4oRecoverableException. That way we try to ensure that exceptions that occur outside of the db4o core do not shut down ObjectContainers. For these cases it is up to your application to decide what to do.&lt;/P&gt;
&lt;P&gt;We plan to continue improving local exception handling to catch even more cases where it is safe to keep an ObjectContainer alive.&lt;/P&gt;
&lt;P&gt;As always we rely on your feedback. Please tell us how you like the new Exception handling and how it works for you.&lt;/P&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=56421" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/db4o_product_news/~4/U9t4bS1KXSA" height="1" width="1"/&gt;</description><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Client_2F00_Server/default.aspx">Client/Server</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/exception/default.aspx">exception</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Exception+Handling/default.aspx">Exception Handling</category><feedburner:origLink>http://developer.db4o.com/blogs/product_news/archive/2009/08/14/improved-exception-handling.aspx</feedburner:origLink></item><item><title>Memories - Running db4o in-memory revisited</title><link>http://feedproxy.google.com/~r/db4o_product_news/~3/EhaV2iK_ioI/memories-running-db4o-in-memory-revisited.aspx</link><pubDate>Thu, 13 Aug 2009 12:23:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:56408</guid><dc:creator>Patrick Roemer</dc:creator><slash:comments>2</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/56408.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=56408</wfw:commentRss><description>&lt;p&gt;Running a db4o database completely in main memory certainly is not the most ubiquitous usage. Nevertheless there are quite some users out there who are using db4o that way - caching is one possible use case where this option may be helpful. db4o has supported in-memory use from the very beginning, but it has rather been considered a step child feature. For historical reasons, there have been two redundant, although semantically slightly different ways to start db4o in-memory: As an InMemoryObjectContainer (the legacy variant), or as a vanilla container configured to use MemoryStorage (the "proper" variant). Both options would not fully support all the features the file-based scenario would offer. Here's a brief summary of the current status of db4o in-memory usage.&lt;br&gt;&lt;/p&gt;
&lt;h4&gt;There can only be one&lt;/h4&gt;We eventually decided to deprecate the InMemoryObjectContainer variant. Although code using InMemoryObjectContainer will remain functional, we strongly encourage users to switch to PagingMemoryStorage.&lt;br&gt;&lt;h4&gt;Reduced memory consumption&lt;/h4&gt;Our original MemoryStorage (as well as the MemoryFile used by the InMemoryObjectContainer) would keep the raw database content in one single byte array that would grow when its capacity was exceeded - "growing" here means that a new, larger array would be allocated and the old content would be copied over, temporarily doubling memory consumption. Furthermore, huge objects are generally problematic with regards to heap compaction and specifically  troublesome for the .net runtime which allocates objects requiring 85000 bytes or more in what's called the &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc534993.aspx"&gt;Large Object Heap&lt;/a&gt; that is &lt;a href="http://www.simple-talk.com/dotnet/.net-framework/the-dangers-of-the-large-object-heap/"&gt;never defragmented&lt;/a&gt;. We recommend to use PagingMemoryStorage instead, which keeps the "file" in a list of small byte arrays, eliminating the need for copying and playing nicer with the heap overall. Configuration is as simple as:&lt;br&gt;
&lt;blockquote&gt;config.file().storage(new PagingMemoryStorage(pageSize));&lt;br&gt;&lt;/blockquote&gt;

&lt;p&gt;To better visualize the difference we have monitored a simple application that keeps on adding simple objects with a 60K byte array payload to an in-memory database. In the following graph we can see the behavior of both implementations with regards to overall memory consumption and Large Object Heap saturation in particular:&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://developer.db4o.com/blogs/product_news/attachment/56408.ashx"&gt;&lt;/p&gt;

&lt;p&gt;For MemoryStorage, Large Object Heap accounts for the bulk of total memory usage and as a result the application quickly crashes with an OutOfMemoryException around 80K objects with half of the physical memory still available. With PagingMemoryStorage on the other hand, available memory can be fully utilized and the application just gets slower as garbage collection takes more and more time.&lt;br&gt;&lt;/p&gt;
&lt;h4&gt;Defragment and Backup&lt;/h4&gt;Earlier this year we already made sure that defragmenting and online backup blends in well with in-memory usage. In order to provide more flexible support for these features, we extended the Storage interface to become kind of a minimalist file system rather than a mere Bin factory. As a result, you can specify the backup storage as well as the temporary storage used during defragmentation - e.g. to create a file based backup of your in-memory db:&lt;br&gt;
&lt;blockquote&gt;db.backup(new FileStorage(), "backup.db4o"); &lt;/blockquote&gt;&lt;p&gt;&lt;b&gt;Wrapping Up&lt;/b&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;
In memory usage of db4o is now more closely integrated with the storage API which removes redundancies while bringing better support for administrative features such as defragment and backup. The new PagingMemoryStorage implementation significantly reduces memory footprint.&lt;br&gt;&lt;/p&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=56408" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/db4o_product_news/~4/EhaV2iK_ioI" height="1" width="1"/&gt;</description><enclosure url="http://developer.db4o.com/blogs/product_news/attachment/56408.ashx" length="161191" type="image/png" /><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Memory/default.aspx">Memory</category><feedburner:origLink>http://developer.db4o.com/blogs/product_news/archive/2009/08/13/memories-running-db4o-in-memory-revisited.aspx</feedburner:origLink></item><item><title>LINQ improvements.</title><link>http://feedproxy.google.com/~r/db4o_product_news/~3/Tkbikn2kdEM/linq-improvements.aspx</link><pubDate>Thu, 18 Jun 2009 12:27:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:55774</guid><dc:creator>Adriano Verona</dc:creator><slash:comments>1</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/55774.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=55774</wfw:commentRss><description>&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;
&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;Hi,&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;I want to let you know that during the last few days we have made some enhancements and fixed some bugs / issues related to our LINQ implementation.&lt;br&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;Some of them were just annoyances that forced developers to use &lt;i&gt;"not so idiomatic"&lt;/i&gt; styles as workarounds, some of them either resulted in crashes or wrong results being returned or even bad performance. Just in case you are curious, here are the tickets to the related issues.&lt;/font&gt;&lt;/p&gt;


&lt;ul&gt;
&lt;font color="DarkRed" face="Verdana"&gt;&lt;li&gt;
&lt;p&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1651" title="COR-1651"&gt;COR-1651&lt;/a&gt;(bug): LINQ 'Where Not' clause against boolean field throws exception when native query optimization is enabled&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1652" title="COR-1652" target="_blank"&gt;COR-1652&lt;/a&gt; (bug):  DateTimeOffset field in ORDER By throws exception &lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1666" title="COR-1666" target="_blank"&gt;COR-1666&lt;/a&gt; (enhancement) : Support method/property chaining on LINQ queries&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;&lt;font color="DarkRed" face="Verdana"&gt;
&lt;p&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1667" title="COR-1667" target="_blank"&gt;COR-1667&lt;/a&gt;&lt;font&gt;&lt;font color="DarkRed" face="Verdana"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="DarkRed" face="Verdana"&gt;(enhancement) : &lt;/font&gt;&lt;/font&gt;Support simple method calls on LINQ queries&amp;nbsp;
&lt;br&gt;&lt;/p&gt;
&lt;/font&gt;&lt;/li&gt;
&lt;/font&gt;&lt;/ul&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&lt;font color="DarkRed" face="Verdana"&gt;
&lt;p&gt;I'll use the class definition bellow to discuss these issues (&lt;font&gt;&lt;font color="DarkRed" face="Verdana"&gt;Assume we have a bunch of objects of this class stored in the database&lt;/font&gt;&lt;/font&gt;):&lt;/p&gt;


&lt;p&gt;class Person&lt;br&gt;{&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public string Name { get; set; }&lt;br&gt;&lt;font&gt;&lt;font color="DarkRed" face="Verdana"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public bool IsMale { get; set; }&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public Guid Id { get; set; }&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public Person Parent { get; set; }&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int GetName()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Name;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public Person()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Id = Guid.NewGuid();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/p&gt;

&lt;p&gt;The first bug (not operator on simple boolean expressions) only manifests itself in its most basic form:&lt;/p&gt;

&lt;p&gt;from Person p in db&lt;br&gt;where&lt;span style="font-weight:bold;"&gt; !p.IsMale&lt;/span&gt;&lt;br&gt;select p;&lt;/p&gt;

&lt;p&gt;The result was a crash with a &lt;i&gt;InvalidOperationException&lt;/i&gt; inside Stack&amp;lt;T&amp;gt; class. The next issue was also related to simple boolean fields without a explicit constraint:&lt;br&gt;&lt;/p&gt;

&lt;p&gt;from Person p in db&lt;br&gt;where &lt;span style="font-weight:bold;"&gt;p.IsMale&lt;/span&gt; // no == true here.&lt;br&gt;select p;&lt;/p&gt;

&lt;p&gt;but instead of throwing an exception this version would silently ignore the &lt;i&gt;where&lt;/i&gt; clause effectively querying for all Person class objects as if the following query had been executed:&lt;/p&gt;

&lt;p&gt;from Person p in db&lt;br&gt;select p;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;(note the &lt;span style="font-style:italic;"&gt;where&lt;/span&gt; clause absence)&lt;/p&gt;

&lt;p&gt;The good news is that in latest db4o version they work as expected (revision &amp;gt; 13278). If you still needs to use this kind of expressions on previous versions, the workaround is to use the more verbose form:&lt;/p&gt;

&lt;p&gt;from Person p in db&lt;br&gt;where &lt;b&gt;p.IsMale == false&lt;/b&gt;&amp;nbsp; // instead of where &lt;b&gt;!p.IsMale&lt;/b&gt;&lt;br&gt;selec p;&lt;/p&gt;

&lt;p&gt;and &lt;br&gt;&lt;/p&gt;
&lt;/font&gt;&lt;font color="DarkRed" face="Verdana"&gt;
&lt;p&gt;from Person p in db&lt;br&gt;where &lt;span style="font-weight:bold;"&gt;p.IsMale == true&lt;/span&gt; // instead of where &lt;b&gt;p.IsMale&lt;/b&gt;&lt;br&gt;select p;&lt;br&gt;&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&lt;font color="DarkRed" face="Verdana"&gt;
&lt;p&gt;The next two issues were related to our Linq -&amp;gt; Soda translator. In both cases we (wrongly) concluded that the expressions were not &lt;span style="font-style:italic;"&gt;convertible&lt;/span&gt; to Soda falling back to LINQ for Objects. You would still get the right results but the performance could be seriously affected depending on the actual expression. The following sample shows the failing constructs:&lt;/p&gt;

&lt;p&gt;from Person p in db&lt;br&gt;where &lt;b&gt;p.GetName() == "John Doe"&lt;/b&gt;&lt;br&gt;selet p;&lt;br&gt;&lt;/p&gt;
&lt;/font&gt;&lt;font color="DarkRed" face="Verdana"&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&lt;font color="DarkRed" face="Verdana"&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&lt;font color="DarkRed" face="Verdana"&gt;from Perosn p in db&lt;br&gt;where &lt;b&gt;p.Parent.Name == "John Doe"&lt;/b&gt;&lt;br&gt;select p;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&lt;font color="DarkRed" face="Verdana"&gt;In the first one,&lt;i&gt; GetName()&lt;/i&gt; just returns the contents of a property (or a field).&lt;i&gt; &lt;/i&gt;The second example just happened to&lt;i&gt; &lt;/i&gt;have two indirections (p.Parent.Name).&amp;nbsp; In both cases we &lt;font&gt;&lt;font color="DarkRed" face="Verdana"&gt;used to fail to recognize these patterns as &lt;i&gt;"SODA compliant"&lt;/i&gt; and felt back to LINQ for Objects&lt;i&gt;. &lt;/i&gt;So, for instance, in the second sample, instead of getting something like:&lt;/font&gt;&lt;/font&gt;
&lt;br&gt;&lt;br&gt;IQuery q = db.Query();&lt;br&gt;q.Constrain(typeof(Person));&lt;br&gt;q.Descend("_parentBackingField").Descend("_nameBackingField").Constrain("John Doe");&lt;br&gt;&lt;br&gt;foreach(var p in q.Execute())&lt;br&gt;{&lt;br&gt;}&lt;br&gt;&lt;br&gt;
we would get something like:
&lt;br&gt;&lt;br&gt;IQuery q = db.Query();&lt;br&gt;q.Constrain(typeof(Person));&lt;br&gt;&lt;br&gt;foreach(var p in db.Execute()&lt;b&gt;&lt;i&gt;.Where(candidate =&amp;gt; candidate.Parent.Name == "John Doe")&lt;/i&gt;&lt;/b&gt;)&lt;br&gt;{&lt;br&gt;}&lt;br&gt;
&lt;/font&gt;
&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&lt;font color="DarkRed" face="Verdana"&gt;which is less efficient since all objects of type Person will be retrieved.&lt;br&gt;&lt;/font&gt; &lt;br&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&lt;font color="DarkRed" face="Verdana"&gt;The last issue was not directly related to LINQ; instead it was a Soda bug regarding ordering based on &lt;/font&gt;&lt;font color="DarkRed" face="Verdana"&gt;value types that implements IComparable / IComparable&amp;lt;T&amp;gt;. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&lt;font color="DarkRed" face="Verdana"&gt;So queries like (note that Id is a Guid, which implements these interfaces):&lt;br&gt;&lt;br&gt;from Person p in db&lt;br&gt;&lt;b&gt;orderby p.Id&lt;/b&gt;&lt;br&gt;select p;&lt;br&gt;&lt;br&gt;would result in an exception like:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;font color="DarkRed" face="Verdana"&gt;&lt;i&gt;&lt;font color="DarkRed"&gt;
&lt;/font&gt;&lt;/i&gt;
&lt;/font&gt;&lt;p style="text-align:left;"&gt;
&lt;font color="DarkRed" face="Verdana"&gt;&lt;i&gt;&lt;font color="DarkRed"&gt;&lt;font color="black" face="Currier New"&gt;Db4objects.Db4o.Internal.IllegalComparisonException: Exception of type 'Db4objects.Db4o.Internal.IllegalComparisonException' was thrown.&lt;br&gt;&amp;nbsp;&amp;nbsp; at Db4objects.Db4o.Internal.Handlers.StandardReferenceTypeHandler.PrepareComparison(IContext context, Object source)&lt;/font&gt;&lt;/font&gt;&lt;/i&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&lt;font color="DarkRed" face="Verdana"&gt;It was fixed by making StandardReferenceTypeHandler aware of these interfaces.&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&lt;font color="DarkRed" face="Verdana"&gt;Well, the good notice (as you already know :) is that all of them were fixed in revision 13278, so if you faced any of these issues you may wish to check it out again :)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&lt;font color="DarkRed" face="Verdana"&gt;As usual, you are invited to download a console application (&lt;a href="http://developer.db4o.com/blogs/product_news/attachment/55774.ashx" title="Test Application" target="_blank"&gt;attached to this post&lt;/a&gt;) that accepts a base folder as its argument and runs some tests against all db4o versions found as subdirectories under this base folder.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;

&lt;font color="DarkRed" face="Verdana"&gt;&lt;img src="http://farm4.static.flickr.com/3314/3638546986_6a81ebff93_o.png" style="width:668px;height:260px;"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;
&lt;img src="http://farm4.static.flickr.com/3413/3638547012_8f9870763a_o.png" style="width:675px;height:248px;"&gt;
&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&lt;font color="DarkRed" face="Verdana"&gt;We can identify all the issues discussed before in the following screen shot (run against version 7.10.&lt;b&gt;96&lt;/b&gt;)&amp;nbsp;&lt;/font&gt; &lt;br&gt;&lt;/font&gt;&lt;/p&gt;
&lt;font color="DarkRed" face="Verdana"&gt;&lt;img src="http://farm4.static.flickr.com/3619/3638547096_4320444169_o.png" style="width:671px;height:394px;" alt="Issues"&gt;&lt;br&gt;&lt;br&gt;&lt;font color="DarkRed" face="Verdana"&gt;And confirm that they were gone on version 7.10.&lt;b&gt;99&lt;/b&gt;! &lt;/font&gt;&lt;br&gt;&lt;br&gt;
&lt;img src="http://farm4.static.flickr.com/3578/3637731053_8af0fc420b_o.png" style="width:683px;height:282px;" alt="...and it is fixed in latest build"&gt;

&lt;/font&gt;&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&lt;font color="DarkRed" face="Verdana"&gt;I could not finish this post without saying that three of these issues were reported by community members. To you, our sincere thanks you!&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt;&lt;font color="DarkRed" face="Verdana"&gt;Best.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="DarkRed" face="Verdana"&gt; &lt;font color="DarkRed" face="Verdana"&gt;Adriano&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=55774" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/db4o_product_news/~4/Tkbikn2kdEM" height="1" width="1"/&gt;</description><enclosure url="http://developer.db4o.com/blogs/product_news/attachment/55774.ashx" length="1640542" type="application/zip" /><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/C_2300_/default.aspx">C#</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Linq/default.aspx">Linq</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Query/default.aspx">Query</category><feedburner:origLink>http://developer.db4o.com/blogs/product_news/archive/2009/06/18/linq-improvements.aspx</feedburner:origLink></item><item><title>Give your objects a REST (interface)</title><link>http://feedproxy.google.com/~r/db4o_product_news/~3/6sel7I20YGk/give-yours-objects-a-rest-interface.aspx</link><pubDate>Wed, 17 Jun 2009 16:35:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:55767</guid><dc:creator>Rodrigo B. de Oliveira</dc:creator><slash:comments>1</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/55767.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=55767</wfw:commentRss><description>ADO.NET Data Services Framework [1], codename Astoria, a framework released with the Service Pack 1 of the .Net framework 3.5 makes it very simple to create data services that are accessible by HTTP. &lt;br&gt;&lt;br&gt;Data services can be created from any data source that implements the IQueryable&amp;lt;&amp;gt; interface (such as db4o). For updates to work however the new IUpdatable interface must also be implemented. Db4o 7.10 ships with the new Db4objects.Db4o.Data.Services assembly to provide just such an implementation.&lt;br&gt;&lt;br&gt;Let's go for a step by step example on using it.&lt;br&gt;&lt;br&gt;Here's a simple object model that we want to make accessible by HTTP:&lt;br&gt;&lt;br&gt;&lt;pre&gt;        &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#0099ff"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt; Hacker&lt;br&gt;        &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#0099ff"&gt;&lt;b&gt;string&lt;/b&gt;&lt;/font&gt; Name &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt; get&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; set&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; Team Team &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt; get&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; set&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;        &lt;br&gt;        &lt;font color="#000000"&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt;&lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#0099ff"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt; Team&lt;br&gt;        &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#0099ff"&gt;&lt;b&gt;string&lt;/b&gt;&lt;/font&gt; Name &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt; get&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; set&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; List&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Hacker&lt;font color="#000000"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt; Hackers &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt; get&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; set&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;&lt;br&gt;The first step is to decorate the public types with the DataServiceKey attribute as required by Astoria:&lt;br&gt;&lt;br&gt;&lt;pre&gt;        &lt;font color="#000000"&gt;&lt;b&gt;[&lt;/b&gt;&lt;/font&gt;&lt;b&gt;&lt;font color="#9966ff"&gt;DataServiceKey&lt;/font&gt;&lt;/b&gt;(&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;Name&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;)&lt;font color="#000000"&gt;&lt;b&gt;]&lt;/b&gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#0099ff"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt; Hacker&lt;br&gt;        &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#0099ff"&gt;&lt;b&gt;string&lt;/b&gt;&lt;/font&gt; Name &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt; get&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; set&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; Team Team &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt; get&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; set&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;        &lt;br&gt;        &lt;font color="#000000"&gt;&lt;b&gt;[&lt;/b&gt;&lt;/font&gt;&lt;b&gt;&lt;font color="#9966ff"&gt;DataServiceKey&lt;/font&gt;&lt;/b&gt;(&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;Name&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;)&lt;font color="#000000"&gt;&lt;b&gt;]&lt;/b&gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#0099ff"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt; Team&lt;br&gt;        &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#0099ff"&gt;&lt;b&gt;string&lt;/b&gt;&lt;/font&gt; Name &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt; get&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; set&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; List&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Hacker&lt;font color="#000000"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt; Hackers &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt; get&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; set&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;&lt;br&gt;The next step is to create a «Data Context». A «Data Context» is a type that binds Astoria to a specific data source and exposes IQueryable&amp;lt;&amp;gt; entry points into the data model.&lt;br&gt;&lt;br&gt;For a db4o data source we need to subclass Db4objects.Db4o.Data.Services.Db4oDataContext:&lt;br&gt;&lt;br&gt;&lt;pre&gt;        &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#0099ff"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt; TeamDataContext &lt;font color="#000000"&gt;&lt;b&gt;:&lt;/b&gt;&lt;/font&gt; Db4oDataContext&lt;br&gt;        &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; IQueryable&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Hacker&lt;font color="#000000"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt; Hackers&lt;br&gt;            &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;                get &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt; &lt;font color="#006699"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; Container&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;AsQueryable&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Hacker&lt;font color="#000000"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;()&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;    &lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; IQueryable&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Team&lt;font color="#000000"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt; Teams&lt;br&gt;            &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;                get &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt; &lt;font color="#006699"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; Container&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;AsQueryable&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Team&lt;font color="#000000"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;()&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;    &lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;protected&lt;/b&gt;&lt;/font&gt; &lt;font color="#006699"&gt;&lt;b&gt;override&lt;/b&gt;&lt;/font&gt; IObjectContainer &lt;font color="#9966ff"&gt;OpenSession&lt;/font&gt;()&lt;br&gt;            &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;                &lt;font color="#ff8400"&gt;//&lt;/font&gt;&lt;font color="#ff8400"&gt; &lt;/font&gt;&lt;font color="#ff8400"&gt;...&lt;/font&gt;&lt;br&gt;            &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;br&gt;            &lt;font color="#ff8400"&gt;//&lt;/font&gt;&lt;font color="#ff8400"&gt; &lt;/font&gt;&lt;font color="#ff8400"&gt;...&lt;/font&gt;&lt;br&gt;        &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;TeamDataContext exposes the two entry points to the object model as IQueryable&amp;lt;&amp;gt; properties: Hackers and Teams.&lt;br&gt;&lt;br&gt;It also needs to provide an IObjectContainer to service each request, a good strategy is to keep an IEmbeddedObjectContainer open throughout and just delegate the OpenSession invocation:&lt;br&gt;&lt;br&gt;&lt;pre&gt;            &lt;font color="#006699"&gt;&lt;b&gt;protected&lt;/b&gt;&lt;/font&gt; &lt;font color="#006699"&gt;&lt;b&gt;override&lt;/b&gt;&lt;/font&gt; IObjectContainer &lt;font color="#9966ff"&gt;OpenSession&lt;/font&gt;()&lt;br&gt;            &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;                &lt;font color="#006699"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; EmbeddedObjectContainer&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#9966ff"&gt;OpenSession&lt;/font&gt;()&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;    &lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#006699"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt; IEmbeddedObjectContainer EmbeddedObjectContainer&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;&lt;br&gt;As a last step we have to write an ADO.NET Data Service and bind it to our custom data context:&lt;br&gt;&lt;br&gt;&lt;pre&gt;            &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#0099ff"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt; TeamDataService &lt;font color="#000000"&gt;&lt;b&gt;:&lt;/b&gt;&lt;/font&gt; DataService&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;TeamDataContext&lt;font color="#000000"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;                &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#006699"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt; &lt;font color="#0099ff"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;InitializeService&lt;/font&gt;(IDataServiceConfiguration config)&lt;br&gt;                &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;                    config&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#9966ff"&gt;SetEntitySetAccessRule&lt;/font&gt;(&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;*&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt; EntitySetRights&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;All)&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;                &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;&lt;br&gt;And that's all that is to the server part. After we have the service running (either as part of a web application or standalone as in the provided sample) Visual Studio can be used to create a service proxy which makes remotely consuming the data as convenient as:&lt;br&gt;&lt;br&gt;&lt;pre&gt;        var context &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; &lt;font color="#9966ff"&gt;TeamDataContext&lt;/font&gt;(&lt;font color="#006699"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;Uri&lt;/font&gt;(&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;http://uri.to/service.svc&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;))&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;        var hacker &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; (from hacker &lt;font color="#006699"&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt; context&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Hackers where hacker&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Name &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;Rodrigo&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;)&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#9966ff"&gt;Single&lt;/font&gt;()&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br&gt;You can find the complete sample code in the attachments.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Have fun!&lt;br&gt;&lt;br&gt;[1] http://en.wikipedia.org/wiki/ADO.NET_Data_Services&lt;/p&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=55767" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/db4o_product_news/~4/6sel7I20YGk" height="1" width="1"/&gt;</description><enclosure url="http://developer.db4o.com/blogs/product_news/attachment/55767.ashx" length="9420" type="binary/octet-stream" /><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/ado.net/default.aspx">ado.net</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Linq/default.aspx">Linq</category><feedburner:origLink>http://developer.db4o.com/blogs/product_news/archive/2009/06/17/give-yours-objects-a-rest-interface.aspx</feedburner:origLink></item><item><title>db4o goes Queryable</title><link>http://feedproxy.google.com/~r/db4o_product_news/~3/JT2voKEccbc/db4o-goes-queryable.aspx</link><pubDate>Wed, 17 Jun 2009 11:55:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:55760</guid><dc:creator>Rodrigo B. de Oliveira</dc:creator><slash:comments>3</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/55760.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=55760</wfw:commentRss><description>&lt;P&gt;The LINQ framework design guidelines [1] describes the "... three means by which a type can be designed to participate in LINQ queries: implementing IEnumerable&amp;lt;&amp;gt; ..., implementing IQueryable&amp;lt;&amp;gt;, or by defining the Query Pattern on the type".&lt;BR&gt;&lt;BR&gt;For db4o we chose the Query Pattern implementation because only a subset of the available LINQ operators could be reasonably supported. By implementing the pattern for the operators we support any code that references an unsupported operator automatically falls back to LINQ to Objects.&lt;BR&gt;&lt;BR&gt;Yes, implementing IQueryable&amp;lt;&amp;gt; [2] used to be that slightly more complicated approach recommended when most LINQ operators were supported by the provider. Things have changed and IQueryable&amp;lt;&amp;gt; is now being used by APIs everywhere as the lowest common denominator for optimizing LINQ providers.&lt;BR&gt;&lt;BR&gt;Which is why we decided to make LINQ to db4o support the IQueryable interface as well.&lt;BR&gt;&lt;BR&gt;Just as with LINQ to db4o, it's very easy to use and completely integrated:&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;&lt;PRE&gt;        &lt;FONT color=#009966&gt;&lt;B&gt;using&lt;/B&gt;&lt;/FONT&gt; Db4objects&lt;FONT color=#000000&gt;&lt;B&gt;.&lt;/B&gt;&lt;/FONT&gt;Db4o&lt;FONT color=#000000&gt;&lt;B&gt;.&lt;/B&gt;&lt;/FONT&gt;Linq&lt;FONT color=#000000&gt;&lt;B&gt;;&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt;        &lt;BR&gt;        &lt;FONT color=#ff8400&gt;//&lt;/FONT&gt;&lt;FONT color=#ff8400&gt; &lt;/FONT&gt;&lt;FONT color=#ff8400&gt;...&lt;/FONT&gt;&lt;BR&gt;        &lt;BR&gt;        IObjectContainer container &lt;FONT color=#000000&gt;&lt;B&gt;=&lt;/B&gt;&lt;/FONT&gt; Db4oEmbedded&lt;FONT color=#000000&gt;&lt;B&gt;.&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#9966ff&gt;OpenFile&lt;/FONT&gt;(&lt;FONT color=#ff00cc&gt;"&lt;/FONT&gt;&lt;FONT color=#ff00cc&gt;HR.db4o&lt;/FONT&gt;&lt;FONT color=#ff00cc&gt;"&lt;/FONT&gt;)&lt;FONT color=#000000&gt;&lt;B&gt;;&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt;        IQueryable&lt;FONT color=#000000&gt;&lt;B&gt;&amp;lt;&lt;/B&gt;&lt;/FONT&gt;Person&lt;FONT color=#000000&gt;&lt;B&gt;&amp;gt;&lt;/B&gt;&lt;/FONT&gt; query &lt;FONT color=#000000&gt;&lt;B&gt;=&lt;/B&gt;&lt;/FONT&gt; container&lt;FONT color=#000000&gt;&lt;B&gt;.&lt;/B&gt;&lt;/FONT&gt;&lt;B&gt;AsQueryable&lt;/B&gt;&lt;FONT color=#000000&gt;&lt;B&gt;&amp;lt;&lt;/B&gt;&lt;/FONT&gt;Person&lt;FONT color=#000000&gt;&lt;B&gt;&amp;gt;&lt;/B&gt;&lt;/FONT&gt;()&lt;FONT color=#000000&gt;&lt;B&gt;;&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/PRE&gt;&lt;BR&gt;&lt;BR&gt;Et voila, you can pass `query` around as an IQueryable/IQueryable&amp;lt;Person&amp;gt; reference to every API which is dynamically manipulating a LINQ query using the IQueryable interface or the Queryable extension methods.&lt;BR&gt;&lt;BR&gt;Shall a scalar method be called on this IQueryable or shall it be iterated over, the underlying implementation will rewrite the query expression tree into an optimized LINQ to db4o query. For the unsupported operators the query would still fallback to LINQ to Objects, meaning that all Queryable methods can be used without distinction.&lt;BR&gt;&lt;BR&gt;We'll see in a next post how we've leveraged our IQueryable implementation to support an API which actually demands it.&lt;BR&gt;&lt;BR&gt;[1] &lt;A href="http://blogs.msdn.com/mirceat/archive/2008/03/13/linq-framework-design-guidelines.aspx" target=_blank&gt;http://blogs.msdn.com/mirceat/archive/2008/03/13/linq-framework-design-guidelines.aspx&lt;/A&gt;&lt;BR&gt;[2] &lt;A href="http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx" target=_blank&gt;http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx&lt;/A&gt;&lt;BR&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note: if you want to check out a demos that use these new features see this page&lt;/P&gt;&lt;PRE&gt;        &lt;FONT color=#009966&gt;&lt;B&gt;using&lt;/B&gt;&lt;/FONT&gt; Db4objects&lt;FONT color=#000000&gt;&lt;B&gt;.&lt;/B&gt;&lt;/FONT&gt;Db4o&lt;FONT color=#000000&gt;&lt;B&gt;.&lt;/B&gt;&lt;/FONT&gt;Linq&lt;FONT color=#000000&gt;&lt;B&gt;;&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt;        &lt;BR&gt;        &lt;FONT color=#ff8400&gt;//&lt;/FONT&gt;&lt;FONT color=#ff8400&gt; &lt;/FONT&gt;&lt;FONT color=#ff8400&gt;...&lt;/FONT&gt;&lt;BR&gt;        &lt;BR&gt;        IObjectContainer container &lt;FONT color=#000000&gt;&lt;B&gt;=&lt;/B&gt;&lt;/FONT&gt; Db4oEmbedded&lt;FONT color=#000000&gt;&lt;B&gt;.&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#9966ff&gt;OpenFile&lt;/FONT&gt;(&lt;FONT color=#ff00cc&gt;"&lt;/FONT&gt;&lt;FONT color=#ff00cc&gt;HR.db4o&lt;/FONT&gt;&lt;FONT color=#ff00cc&gt;"&lt;/FONT&gt;)&lt;FONT color=#000000&gt;&lt;B&gt;;&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt;        IQueryable&lt;FONT color=#000000&gt;&lt;B&gt;&amp;lt;&lt;/B&gt;&lt;/FONT&gt;Person&lt;FONT color=#000000&gt;&lt;B&gt;&amp;gt;&lt;/B&gt;&lt;/FONT&gt; query &lt;FONT color=#000000&gt;&lt;B&gt;=&lt;/B&gt;&lt;/FONT&gt; container&lt;FONT color=#000000&gt;&lt;B&gt;.&lt;/B&gt;&lt;/FONT&gt;&lt;B&gt;AsQueryable&lt;/B&gt;&lt;FONT color=#000000&gt;&lt;B&gt;&amp;lt;&lt;/B&gt;&lt;/FONT&gt;Person&lt;FONT color=#000000&gt;&lt;B&gt;&amp;gt;&lt;/B&gt;&lt;/FONT&gt;()&lt;FONT color=#000000&gt;&lt;B&gt;;&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/PRE&gt;&lt;BR&gt;&lt;BR&gt;Et voila, you can pass `query` around as an IQueryable/IQueryable&amp;lt;Person&amp;gt; reference to every API which is dynamically manipulating a LINQ query using the IQueryable interface or the Queryable extension methods.&lt;BR&gt;&lt;BR&gt;Shall a scalar method be called on this IQueryable or shall it be iterated over, the underlying implementation will rewrite the query expression tree into an optimized LINQ to db4o query. For the unsupported operators the query would still fallback to LINQ to Objects, meaning that all Queryable methods can be used without distinction.&lt;BR&gt;&lt;BR&gt;We'll see in a next post how we've leveraged our IQueryable implementation to support an API which actually demands it.&lt;BR&gt;&lt;BR&gt;[1] &lt;A href="http://blogs.msdn.com/mirceat/archive/2008/03/13/linq-framework-design-guidelines.aspx" target=_blank&gt;http://blogs.msdn.com/mirceat/archive/2008/03/13/linq-framework-design-guidelines.aspx&lt;/A&gt;&lt;BR&gt;[2] &lt;A href="http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx" target=_blank&gt;http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Note&lt;/STRONG&gt;: if you want to&amp;nbsp;check out&amp;nbsp;a demo using this new feature see &lt;A href="http://developer.db4o.com/blogs/community/archive/2009/06/18/new-db4o-demo-for-ado-net-data-services-aka-astoria.aspx"&gt;this page&lt;/A&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=55760" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/db4o_product_news/~4/JT2voKEccbc" height="1" width="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/db4o/default.aspx">db4o</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/IQueryable/default.aspx">IQueryable</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Linq/default.aspx">Linq</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Query/default.aspx">Query</category><feedburner:origLink>http://developer.db4o.com/blogs/product_news/archive/2009/06/17/db4o-goes-queryable.aspx</feedburner:origLink></item><item><title>In the search of silver</title><link>http://feedproxy.google.com/~r/db4o_product_news/~3/mPC3pjrv2kw/in-the-search-of-silver.aspx</link><pubDate>Wed, 10 Jun 2009 12:00:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:55644</guid><dc:creator>Adriano Verona</dc:creator><slash:comments>5</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/55644.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=55644</wfw:commentRss><description>Hi! &lt;p&gt;If you develop for .Net (and even if you don't :) the odds are high that you've already heard about Microsoft Silverlight, a platform for developing RIA style applications.&lt;/p&gt;&lt;p&gt;In this post I'd like to share some of our experiences while working on adding support for this platform to db4o, but before we move on, I'd like to stress some points: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;The goal of this post is to describe the way we plan to add Silverlight support but we cant guarantee that we'll be able to stick to these plans. Also, we assume that readers have a good understanding of the related technologies (db4o, .Net, Silverlight)&lt;br&gt;&lt;/li&gt;&lt;li&gt;Even though&amp;nbsp;we're committed to this goal, as of today, Silverlight is not an officially supported platform.&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;All decisions are being taken based on the assumption that db4o most common usage scenario in this platform will be to store objects locally &lt;/div&gt;&lt;div&gt;(RIA) hence&amp;nbsp;we're focusing on embedded mode. Of course, we are a community driven project so this can change in the future.&lt;br&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Last but not least, current code assumes Silverlight Beta 3 (it might work on Silverlight 2 but that hasn't been checked).&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;That said, let's take a look on how the porting process looks like (strikethrough activities have been completed already):&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strike&gt;Feature set / limitations and possible fixes&lt;/strike&gt;&lt;/li&gt;&lt;li&gt;&lt;strike&gt;Understand the required changes / Port the selected projects&lt;/strike&gt;&lt;/li&gt;&lt;li&gt;&lt;strike&gt;Update/extend development tools like Sharpen&lt;/strike&gt;&lt;/li&gt;&lt;li&gt;Port the tests&lt;/li&gt;&lt;li&gt;Update documentation&lt;/li&gt;&lt;li&gt;Write samples&lt;/li&gt;&lt;li&gt;Integrate into the build&lt;/li&gt;&lt;li&gt;Publish Silverlight artifacts to web site&lt;/li&gt;&lt;/ol&gt;&lt;br&gt;&lt;div&gt;&lt;b&gt;Feature set / Limitations&lt;br&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;The first step was relatively simple: given the tight constrains imposed by Silverlight we just picked a doable set of features. For the initial support we decided &lt;/div&gt;&lt;div&gt;to concentrate our efforts in embedded mode, leaving some features out. &lt;br&gt;&lt;/div&gt;&lt;b&gt;&lt;/b&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Also, while working on porting db4o to run on Silverlight we assembled a list of limitations and possible improvements:&lt;br&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;By default &lt;span class="il"&gt;Silverlight&lt;/span&gt; apps have a quota of 1.0 Mb of disk space. Using the right &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragefile.increasequotato%28VS.96%29.aspx" title="Increasing Quota"&gt;APIs&lt;/a&gt; it's possible to ask for more (through a user consent dialog). It would be nice if db4o could use this API to increase its quota once it detects that it is running out of space.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Only public fields are allowed (AFAIK, &lt;span class="il"&gt;Silverlight&lt;/span&gt; doesn't support reflection over private fields). That means that fields need to be declared as public to be &lt;i&gt;"storable"&lt;/i&gt;. &lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;db4o requires some additional configuration&lt;span class="il"&gt;&lt;/span&gt; (this is the most severe limitation IMHO).&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Client / Server mode: Silverlight doesn't allow direct socket connections so, at least with db4o's current implementation, it's not possible to support CS mode. We could make the communication channel pluggable and, maybe, use "REST" instead of TCP/IP but this would require more investigation.&lt;br&gt;&lt;b&gt;[edited on Jun / 23]&lt;/b&gt; Some days ago, Ashish Shetty, a kind program manager at Silverlight team just alerted me that this sentence may be misleading and that actually Silverlight support client sockets (with some port restrictions). The main point is that, at least for now, we'll not pursue adding client / server support on Silverlight platform &lt;b&gt;[/edited]&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Native queries / Linq: Since both technologies rely on Mono.Cecil and friends and these assemblies were not ported to Silverlight it's not possible to support them for now (anyway, we&amp;nbsp;saw some good news regarding Mono.Cecil in this &lt;a href="http://go-mono.com/forums/#nabble-td22736226"&gt;forum thread&lt;/a&gt;). &lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;We are planing to investigate whether the&amp;nbsp;Db4oTool can be used to instrument Silverlight assemblies and optimize &lt;i&gt;native queries&lt;/i&gt; at compile time. If we manage to instrument Silverlight assemblies Db4oTool could be used to turn storable types into "self reflectors" through interface injection.&lt;br&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Understanding required changes &lt;/b&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Understanding the changes required to successfully compile for Silverlight consisted mainly in getting the list of unsupported interfaces/classes/methods and adapting the code accordingly. The biggest changes were due to the lack of some I/O classes as well non generic collections, restrictions on assembly loading and a tighter security model. These constraints were the cause of most of the compilation errors we found.&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;For the I/O classes db4o is using an implementation from &lt;a href="http://michaelsync.net/"&gt;Michael Sync&lt;/a&gt; (which, by the way, was really helpful in the porting process and is&amp;nbsp;the kind developer willing to&amp;nbsp;spend time&amp;nbsp;and help; hey guy, thank you very much!). Technically speaking, Michael wrote a &lt;a href="http://developer.db4o.com/Resources/view.aspx/Reference/Implementation_Strategies/Storage" title="Storage Model"&gt;db4o storage&lt;/a&gt; based on .Net &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage%28VS.96%29.aspx" title="IsolatedStorage" target="_blank"&gt;IsolatedStorage&lt;/a&gt; model.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;The lack of non generic classes was trickier to solve than we expected; since most of db4o C# code is converted from java (and from some historical reasons we convert from java 1.2 codebase which by the way is converted from java 1.5 code :) most of the collections used were the non-generic ones. This forced us to review the code and, when possible, use the generic version. In some cases the simplest solution was to introduce a non-generic collection (based on its generic counter-part) mimicking the native, non-generic, missing collection.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;The last restriction in this list was the most frustrating one. db4o relies heavily on being able to load assemblies referenced by persisted objects and Silverlight security model doesn't allow arbitrary assemblies to be loaded explicitly. Actually (AFAIK) it is possible to load assemblies only if you specify a fully qualified assembly name, including its version. The problem with this approach is that db4o&amp;nbsp;doesn't know about the assembly version (to be more precise db4o strips assembly versions away when storing objects). One possible solution would be to try to iterate over the already loaded assemblies and grab the reference from this list instead of trying to reload &lt;i&gt;"already loaded"&lt;/i&gt; assemblies, but this brought us another frustration: this same security model disallows iterating over this list also (the decision to always load assemblies instead of applying the process&amp;nbsp;described above&amp;nbsp;was taken based on the fact that the performance impact of calling &lt;i&gt;Assembly.Load()&lt;/i&gt; on &lt;i&gt;"already loaded" &lt;/i&gt;assemblies is barely perceptible).&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;The solution we found (at least for now)&amp;nbsp;relies on the fact that most applications know, at compile time, the assemblies declaring storable types. On Silverlight, every time db4o needs to get an assembly reference it'll raise a &lt;b&gt;TypeReference.AssemblyResolve&lt;/b&gt; (static) event and will&amp;nbsp;allow the application to resolve and return the required reference. The included sample shows a possible implementation for this. We are thinking on having a new class encapsulate the details of this pattern but we decided to postpone the introduction of this class until we better understand the restrictions and get some feedback on the design.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;b&gt;[edited on Jun / 23]&lt;/b&gt; Ashish Shetty, just pointed me to &lt;a href="http://msdn.microsoft.com/library/system.windows.assemblypart.load%28VS.95%29.aspx" target="_blank"&gt;this page&lt;/a&gt; and explained that using this API we could workaround the assembly loading issue. We are gonne to investigate it soon.&lt;b&gt;[/edited]&lt;/b&gt; &lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;div&gt;&lt;div&gt;&lt;b&gt;Current Status&lt;br&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;As of today the following projects compile successfully under the &lt;span class="il"&gt;Silverlight&lt;/span&gt; platform (see &lt;a href="https://source.db4o.com/db4o/trunk/db4o.net/Db4o-Silverlight-2008.sln" title="Db4o Silverlight solution"&gt;&lt;i&gt;Db4o-Silverlight-2008.sln&lt;/i&gt;&lt;/a&gt;): &lt;br&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Core (Db4objects.Db4o)&lt;/li&gt;&lt;li&gt;Tests (Db4objects.Db4o.Tests)&lt;/li&gt;&lt;ul&gt;&lt;li&gt;No CS tests&lt;/li&gt;&lt;li&gt;No Migration tests&lt;/li&gt;&lt;li&gt;No Interoperability tests&lt;/li&gt;&lt;li&gt;No Linq / NQ tests&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Optional (Db4objects.Db4o.Optional)&lt;/li&gt;&lt;li&gt;Db4oUnit&lt;/li&gt;&lt;li&gt;Db4oUnit.Extensions&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Unfortunately successful compilation has very little to do with a software&amp;nbsp;being usable / stable. Right now&amp;nbsp;we have a subset of a full db4o test suite running against this platform. As we manage to run more of these tests we are sure that new issues will be found (for instance &lt;a href="http://tracker.db4o.com/browse/COR-1656" title="Support generic collections non generic derived types"&gt;this one&lt;/a&gt; was caught when we started to run the first tests).&amp;nbsp; &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;Required changes to Applications&lt;br&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;In order to make the discussion more&amp;nbsp;practical I've written a very simple CRUD Silverlight application. Keep in mind that this is my first Silverlight application :), so please&amp;nbsp;give me some&amp;nbsp;feedback if you see that something smells bad :)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Before you continue reading I suggest you &lt;a href="https://source.db4o.com/db4o/trunk/sandbox/Adriano/Blogs/SilverlightSimpleCRUD/" title="Simple Silverlight CRUD application"&gt;download the application source code&lt;/a&gt; and take a look at it (bellow you can see a screenshot)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="https://source.db4o.com/db4o/trunk/sandbox/Adriano/Blogs/SilverlightSimpleCRUD/Screenshot.png"&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Through this really innovative user interface (seriously, it's a break through :) it's possible to add a new person by entering its first name/last name and then pressing the "add" button. To query, fill in the fields you want to query on (first name and/or last name) and press "query" button. To delete an object, select it in the listbox and press "delete". Thats it :)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;The most important aspect of this sample lies in the following lines:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #region Assembly.Load() issue workaround&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private static readonly IDictionary&amp;lt;string, Assembly&amp;gt; _assemblyCache = new Dictionary&amp;lt;string, Assembly&amp;gt;();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; static App()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //_assemblyCache[AssemblyNameFor(typeof(Queue&amp;lt;&amp;gt;))] = typeof(Queue&amp;lt;&amp;gt;).Assembly;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //_assemblyCache[AssemblyNameFor(typeof(List&amp;lt;&amp;gt;))] = typeof(List&amp;lt;&amp;gt;).Assembly;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _assemblyCache[AssemblyNameFor(typeof(Person))] = typeof(Person).Assembly;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _assemblyCache[AssemblyNameFor(typeof(Db4oFactory))] = typeof(Db4oFactory).Assembly;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TypeReference.AssemblyResolve += (sender, args) =&amp;gt;&amp;nbsp; args.Assembly = _assemblyCache[args.Name];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;and &lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; private static IEmbeddedConfiguration Config()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; IEmbeddedConfiguration config = Db4oEmbedded.NewConfiguration();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; config.File.Storage = new IsolatedStorageStorage();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return config;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;in app.xaml.cs file.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Basically it just populates a dictionary mapping from an assembly name to the respective assembly reference and registers for &lt;i&gt;TypeReference.AssemblyResolve&lt;/i&gt; events. Once this event gets raised we just look for the assembly name in our map. This is required&amp;nbsp;as a&amp;nbsp;workaround on assembly loading constraints. &lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;font color="red" face="verdana"&gt;Note that any type referenced by your model (stored objects)&amp;nbsp;should have its assembly listed in this map otherwise bad things will happen to you :) Jokes apart, if you fail to list an assembly in this map db4o will handle types defined in this assembly as generic classes, i.e, classes that don't have the original class definition, and this will not work as expected in most cases.&lt;/font&gt; Since this is hardly the desired behavior, a possible improvement would be to throw an exception (inside AssemblyResolve event if the requested assembly could not be found in the map) instead of returning null.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;Also note that we declared the Person's fields as public otherwise we'd get exceptions at runtime. We discussed these limitations on the&amp;nbsp;"&lt;b&gt;limitations&lt;/b&gt;" topic above.&lt;br&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Wrapping it up&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;In order to support Silverlight we're required to introduce changes into db4o (including some deprecated classes/methods that were wiped out). For developers, the most important&amp;nbsp;requirements&amp;nbsp;are&amp;nbsp;to register for &lt;b&gt;TypeReference.AssemblyResolve&lt;/b&gt; event in order to return assembly references and&amp;nbsp;to use &lt;b&gt;IsolatedStorageStorage&lt;/b&gt;, as shown in the sample. &lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Silverlight support is on the way, but even though&amp;nbsp;we had a&amp;nbsp;steady progress (it can be tracked through &lt;a href="http://tracker.db4o.com/browse/COR-1611" title="Main Silverlight Task"&gt;COR-1611&lt;/a&gt; issue) we do have some homework to do before we can declare it officially supported.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Based on our initial list of tasks we can see that currently we are working on porting / adapting the tests. As the next steps we're considering the following:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Integrate Silverlight into the build (mainly run the tests in our continuous build)&lt;/li&gt;&lt;li&gt;Finish porting tests&lt;/li&gt;&lt;li&gt;Investigate performance issues&lt;/li&gt;&lt;li&gt;Update documentation&lt;/li&gt;&lt;li&gt;Write samples&lt;/li&gt;&lt;li&gt;Publish Silverlight artifacts to the website&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;Of course, community involvement is a strong force&amp;nbsp;that'll help us decide&amp;nbsp;how much effort we shall put into this. So, if you are learning or already develop for the Silverlight platform we invite you to grab the db4o sources from our&amp;nbsp;&lt;a href="https://source.db4o.com/db4o/trunk/" title="Db4o SVN"&gt;svn&lt;/a&gt; repository, try it with your projects and provide as much feedback as possible (reporting any issues, questions, suggestions, ideas, etc).&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Finally, fell free to drop me a line at adriano at db4o dot com if you need any help to get started.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;b&gt;[edited on Jun / 23]&lt;/b&gt; As I said, some days after publishing this post, Ashish Shetty got in touch to alert me about some issues; I'd like to thank you for taking the time :)&lt;b&gt;[/edited]&lt;/b&gt; &lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Best.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Adriano&lt;/div&gt;&lt;/div&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=55644" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/db4o_product_news/~4/mPC3pjrv2kw" height="1" width="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/C_2300_/default.aspx">C#</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/db4o/default.aspx">db4o</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Development/default.aspx">Development</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Silverlight/default.aspx">Silverlight</category><feedburner:origLink>http://developer.db4o.com/blogs/product_news/archive/2009/06/10/in-the-search-of-silver.aspx</feedburner:origLink></item><item><title>Release Notes - 7.10 Development Release</title><link>http://feedproxy.google.com/~r/db4o_product_news/~3/OmvYYrtz0ww/release-notes-7-10-development-release.aspx</link><pubDate>Fri, 29 May 2009 13:10:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:55502</guid><dc:creator>Tetyana Loskutova</dc:creator><slash:comments>0</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/55502.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=55502</wfw:commentRss><description>&lt;p&gt;db4o version 7.10 is &lt;a href="http://developer.db4o.com/files/folders/db4o_710/default.aspx"&gt;out&lt;/a&gt; and here is the list of modifications, improvements and bug fixes that you will find in it:&lt;/p&gt;


&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1642"&gt;COR-1642&lt;/a&gt; - Ensure proper exception handling in Eclipse plugin
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1633"&gt;COR-1633&lt;/a&gt; - Blog about Silverlight
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1631"&gt;COR-1631&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-1630"&gt;COR-1630&lt;/a&gt; - Attributes are not being respected by the configuration
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1629"&gt;COR-1629&lt;/a&gt; - Class filter configuration UI for Eclipse instrumentation plugin
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1628"&gt;COR-1628&lt;/a&gt; - Get Db4objects.Db4o.Tests projects compiling under Silverlight
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1627"&gt;COR-1627&lt;/a&gt; - Provide instrumentation step in Eclipse plugin
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1626"&gt;COR-1626&lt;/a&gt; - Adding a new indexed value typed field to an existing persisted class triggers NPE
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1621"&gt;COR-1621&lt;/a&gt; - merge type handlers branch
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1620"&gt;COR-1620&lt;/a&gt; - PropertyChangedEventHandler causes InvalidSlotException when used with ArrayList4 
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1617"&gt;COR-1617&lt;/a&gt; - Add Db4o core Silverlight project to build
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1616"&gt;COR-1616&lt;/a&gt; - Extend Java HashSet for TA
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1615"&gt;COR-1615&lt;/a&gt; - Extend Java TreeSet for TA
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1613"&gt;COR-1613&lt;/a&gt; - remove ExtObjectContainer#collections and all related code
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1612"&gt;COR-1612&lt;/a&gt; - Bring trunk as close as possible to silverlight version
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1608"&gt;COR-1608&lt;/a&gt; - Review MsgD implementations to make sure exceptions are transmitted to the client
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1605"&gt;COR-1605&lt;/a&gt; - [Java] running TA instrumented AllTestsDb4ounitJdk5
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1604"&gt;COR-1604&lt;/a&gt; - Activation decision is being taken upon field type instead of actual type
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1603"&gt;COR-1603&lt;/a&gt; - Extend Java Stack for TA
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1602"&gt;COR-1602&lt;/a&gt; - Extend Java HashTable for TA
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1599"&gt;COR-1599&lt;/a&gt; - Synchronize KnownClassesRepository access in GenericReflector against database lock
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1598"&gt;COR-1598&lt;/a&gt; - Diagnostics warns about missing field indexes on class-only queries
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1597"&gt;COR-1597&lt;/a&gt; - db4o_osgi with rcp app problem
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1596"&gt;COR-1596&lt;/a&gt; - Allow to specify dedicated target storage for backup
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1591"&gt;COR-1591&lt;/a&gt; - migration support for TreeSet - from the old translator based format to the new type handler based one
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1590"&gt;COR-1590&lt;/a&gt; - define expected behavior for multiple TypeHandlers (including InstantiatingTypeHandlers) in a class hierarchy
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1588"&gt;COR-1588&lt;/a&gt; - Migration support for .net enums (broken after type handler api changes)
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1587"&gt;COR-1587&lt;/a&gt; - .net enums should be indexable
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1584"&gt;COR-1584&lt;/a&gt; - Remove dependency on Thread.SetData() / GetData() to enable progress on Silverlight support.
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1579"&gt;COR-1579&lt;/a&gt; - move from FirstClass/SecondClass terminology to ReferenceType/ValueType terminology
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1578"&gt;COR-1578&lt;/a&gt; - Detach FieldHandler from TypeHandler and ClassMetadata hierarchies and assign responsibilities
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1577"&gt;COR-1577&lt;/a&gt; - PlainObjectHandler should not be embedded and should not have to manage identity explicitly
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1576"&gt;COR-1576&lt;/a&gt; - Defragmenting an encrypted file throws OutOfMemoryException
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1573"&gt;COR-1573&lt;/a&gt; - Separate ClassMetadata from TypeHandler
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1572"&gt;COR-1572&lt;/a&gt; - Extend Java HashMap for TA
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1560"&gt;COR-1560&lt;/a&gt; - Db4oTool doesn't instrument constructors for transparent persistence
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1539"&gt;COR-1539&lt;/a&gt; - Readding a deleted object from a different client changes database ID in embedded mode
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1531"&gt;COR-1531&lt;/a&gt; - Enum upgrade from 7.7 to 7.8 causes loss of information
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1527"&gt;COR-1527&lt;/a&gt; - Type Handlers - Design discussion 
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1514"&gt;COR-1514&lt;/a&gt; - Implement/register TypeHandler for TreeSet
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1481"&gt;COR-1481&lt;/a&gt; - TypeReference class fails with 'open' generic types
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1357"&gt;COR-1357&lt;/a&gt; - Db4o-2008.sln does not compile in the distribution
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1336"&gt;COR-1336&lt;/a&gt; - Emmit a warning when instrumenting classes with non private fields.
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1136"&gt;COR-1136&lt;/a&gt; - Defrag an in-memory database
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-864"&gt;COR-864&lt;/a&gt; - When lockDatabaseFile() is configured to be false, database files should not be locked.
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-715"&gt;COR-715&lt;/a&gt; - DatabaseFileLockedException when database file folder doesn't exist
&lt;/li&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=55502" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/db4o_product_news/~4/OmvYYrtz0ww" height="1" width="1"/&gt;</description><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Release+Release_5F00_Notes+7.10/default.aspx">Release Release_Notes 7.10</category><feedburner:origLink>http://developer.db4o.com/blogs/product_news/archive/2009/05/29/release-notes-7-10-development-release.aspx</feedburner:origLink></item></channel></rss>
