<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://developer.db4o.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Product News from the Core Team</title><link>http://developer.db4o.com/blogs/product_news/default.aspx</link><description>This blog features product news right from the core developer team, once new features and functions get checked into &lt;a href="http://docs.db4o.com/"&gt;Subversion&lt;/a&gt;, available as &lt;a href="http://developer.db4o.com/files/19/default.aspx"&gt;Continuous Build&lt;/a&gt; every 2 hours.</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Debug Build: 61019.2)</generator><item><title>Performance Contest - for one more month</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/07/17/performance-contest-for-one-more-month.aspx</link><pubDate>Thu, 17 Jul 2008 10:38:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:50178</guid><dc:creator>Carl Rosenberger</dc:creator><slash:comments>0</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/50178.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=50178</wfw:commentRss><description>&lt;P&gt;Do you like profiling? Do you like tuning code? If you do, how about taking part in the db4o performance contest? We offer USD 6000 in prizes for the best contributions to make db4o faster.&lt;/P&gt;
&lt;P&gt;We have made it very easy for you to get started by providing an Eclipse workspace set up with the db4o sources and the Poleposition benchmark.&lt;/P&gt;
&lt;P&gt;Links to get you started:&lt;BR&gt;&lt;a href="http://developer.db4o.com/ProjectSpaces/view.aspx/PerformanceContest"&gt;Performance Contest page&lt;/a&gt;&lt;BR&gt;&lt;a href="http://developer.db4o.com/blogs/paircasts/archive/2008/06/13/performance-contest.aspx"&gt;"Getting Started" video&lt;/a&gt;&lt;BR&gt;&lt;a href="http://developer.db4o.com/forums/159/ShowForum.aspx"&gt;Performance Contest Forum&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;The contest has been running for a month already and we are seeing first contributions coming in.&lt;/P&gt;
&lt;P&gt;Andrew has improved sorted queries and provides a UTF-8 string encoder.&lt;BR&gt;Erik is working on a query cache to make queries reusable.&lt;/P&gt;
&lt;P&gt;Can you beat their patches? I am sure you can.&lt;BR&gt;The contest is still open for contributions for one more month until August 15.&lt;/P&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=50178" width="1" height="1"&gt;</description></item><item><title>Implications of instrumenting assemblies for Transparent Activation / Persistence in db4o - Part I</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/07/14/implications-of-intrumenting-assemblies-for-transparent-activation-persistence-in-db4o-part-i.aspx</link><pubDate>Mon, 14 Jul 2008 14:28:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:50121</guid><dc:creator>Adriano Verona</dc:creator><slash:comments>0</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/50121.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=50121</wfw:commentRss><description>&lt;p&gt;As the popular saying&amp;nbsp; tell us, there's no such thing as free lunch. It is no different for work related subjects.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;When we introduced Transparent Activation (TA) concept we knew that it could make developer's life easier (by presenting a simpler model for object life cycle): developers would not be required to think about activation depths again; just let db4o activate your objects when it's need. &lt;/p&gt;

&lt;p&gt;IMHO, it was a great improvement since it not only simplifies developer's life as well brings some performance gains also (once objects get activated only when needed there's no wasted time activating objects not needed). But this was not without coasts: to benefit from this simpler model, developers were required to implement IActivatable interface for each object that they wanted to be TA. Also, once enabled, any non TA aware object will be fully activated at retrieval time.&lt;/p&gt;

&lt;p&gt;Time passed and we introduced&amp;nbsp; a way relieve developers from the need to implement Activatable interface, i.e, to make classes TA aware with no effort from developers. This is accomplished through a technique called instrumentation in which we dive into byte code level doing something like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find each type declared in a specific assembly (.net) / jar or class (java) &lt;br&gt;&lt;/li&gt;

&lt;li&gt;Analise each type found in step 1 to check whether it is a potential candidate for TA or not&lt;br&gt;&lt;/li&gt;

&lt;li&gt;If we found a potential candidate for TA&lt;br&gt;&lt;/li&gt;

&lt;ul&gt;
&lt;li&gt;Make the type to implement IActivatable interface&lt;/li&gt;

&lt;li&gt;Implement IActivatable methods&lt;br&gt;&lt;/li&gt;

&lt;li&gt;Ensure that the object will be activated prior to any field access by inspecting each field access in this type and inserting the required Activate() / activate() call prior to it. &lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;li&gt;Save the binary component&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A pretty straight approach, I'd say.&lt;/p&gt;

&lt;p&gt;But even when using instrumentation there are some implications that developers should be aware of. To illustrate, think about assembly signing; this is a process in which a developer "seals" an assembly contents by digitally signing it (the whole concept is beyond this post). &lt;/p&gt;

&lt;p&gt;Basically, by signing an assembly a developer is providing ways to administrators to selectively grant access to assemblies based on the private key (related to the public key) used to sign it; also, signed assemblies are tamper resistant which means that&lt;b&gt; changes (in byte code level) don't go unnoticed&lt;/b&gt;. &lt;br&gt;&lt;/p&gt;

&lt;p&gt;By the above description it's clear that instrumenting&amp;nbsp; &lt;b&gt;a&lt;/b&gt; &lt;b&gt;signed assembly turns it invalid afterward&lt;/b&gt;
(since its contents gets changed) and any tentative of loading it will fail with a invalid signature error.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;So, after instrumenting signed assemblies you will need to sign them
again but,&lt;b&gt; IMHO, you should never, ever, instrument assemblies that are
not under your control&lt;/b&gt;, so I'd suggest you to just change your build
scripts so instrumentation takes place prior to signing. &lt;br&gt;&lt;/p&gt;
To help developers detect this, starting from version &lt;b&gt;7.4.52&lt;/b&gt; Db4oTool will emit an warning when asked to instrument (whether for TA/TP or Native Queries optimizations) a signed/delay signed assembly.
&lt;p&gt;Just for the sake of completeness I've included the following walk through on how to create assemblies that are instrumented and signed (for a in depth discussion on signing assemblies please, read &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163583.aspx"&gt;this&lt;/a&gt;).&lt;/p&gt;


&lt;a href="http://www.flickr.com/photos/28625654@N07/2672448013/" title="VS Project Properties"&gt;&lt;img src="http://farm4.static.flickr.com/3148/2672448013_6ccc983f5f_m.jpg" alt="VS Project Properties" width="240" height="157"&gt;&lt;/a&gt;

&lt;a href="http://www.flickr.com/photos/28625654@N07/2673274596/" title="VS Project Properties 2 by vagaus, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3290/2673274596_d2f2ded9b7_m.jpg" alt="VS Project Properties 2" width="240" height="157"&gt;&lt;/a&gt;


&lt;ol&gt;
&lt;li&gt;In Visual Studio, open project properties window and select &lt;b&gt;signing&lt;/b&gt; tab.&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;Select &lt;i&gt;Sign the assembly&lt;/i&gt;;&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;Expand &lt;i&gt;Choose a strong name key file&lt;/i&gt; drop down listbox and either, select a previously created key or create a new one by selecting &lt;i&gt;&amp;lt;New...&amp;gt;&lt;/i&gt; option;&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;Select &lt;i&gt;Delay sign only&lt;/i&gt; checkbox;&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;Save your project and build&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;Instrument your assembly (either running Db4oTool or through Db4oToolEnhancerMSBuildTask)&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;After instrumentation, run sn tool as follows to finish the sign process:&lt;br&gt;&lt;br&gt;sn -Ra myassembly.dll mykey.snk&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
That's it! Your assembly is instrumented and signed.&lt;br&gt;&lt;br&gt;In the next post I'll address some other implications / pitfalls regarding instrumentation for TA/TP.&lt;br&gt;
&lt;p&gt;Thoughts?&lt;br&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;/ul&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=50121" width="1" height="1"&gt;</description><enclosure url="http://developer.db4o.com/blogs/product_news/attachment/50121.ashx" length="118358" type="image/jpeg" /><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/documentation/default.aspx">documentation</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/deployement/default.aspx">deployement</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Transparent+Activation/default.aspx">Transparent Activation</category></item><item><title>db4o-7.4 Development Release</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/06/25/db4o-7-4-development-release.aspx</link><pubDate>Tue, 24 Jun 2008 16:03:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:49805</guid><dc:creator>Tetyana Loskutova</dc:creator><slash:comments>1</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/49805.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=49805</wfw:commentRss><description>
&lt;p&gt;The following Jira tasks and bugs were resolved for db4o-7.4 development release:&lt;/p&gt;&lt;ul&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/DRS-98"&gt;DRS-98&lt;/a&gt; - NullPointerException in replicate method
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/DRS-97"&gt;DRS-97&lt;/a&gt; - Ensure dRS.NET can gracefully handle delegates in untyped fields and arrays
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/DRS-95"&gt;DRS-95&lt;/a&gt; - dRS.NET fails with arrays/untyped fields
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/DRS-94"&gt;DRS-94&lt;/a&gt; - Replication fails if the java platform doesn't support serializable constructor and the objects to be replicated don't have default constructors
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/DRS-93"&gt;DRS-93&lt;/a&gt; - Replication fails for arrays in untyped fields
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1297"&gt;COR-1297&lt;/a&gt; - Spike: Class derived from ArrayList using custom Typehandler
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1295"&gt;COR-1295&lt;/a&gt; - Convert ListTypeHandlerTestSuite to .NET
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1291"&gt;COR-1291&lt;/a&gt; - Backport "[Linq] Enum comparisons are not optimized"  to 7.2
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1289"&gt;COR-1289&lt;/a&gt; - Clean up db4obuild for opening to the public
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1284"&gt;COR-1284&lt;/a&gt; - Defragment against unknown classes runs into NPE on btree index lookup
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1283"&gt;COR-1283&lt;/a&gt; - Update old multidimensional arrays to null bitmap handling
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1282"&gt;COR-1282&lt;/a&gt; - [decaf] functional test for resolving db4oj/db4ojdk1.2 conversion issues
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1281"&gt;COR-1281&lt;/a&gt; - Running out of disk space causes unrecoverable data corruption
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1279"&gt;COR-1279&lt;/a&gt; - Delegate in untyped arrays cause ObjectNotStorableException
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1276"&gt;COR-1276&lt;/a&gt; - prepare Jprobe paircast and blog
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1275"&gt;COR-1275&lt;/a&gt; - Db4o should not wrap exceptions thrown during event handling
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1265"&gt;COR-1265&lt;/a&gt; - ArrayHandler: Defragment old databases
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1264"&gt;COR-1264&lt;/a&gt; - ArrayHandler: Updating from old databases to new format
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1263"&gt;COR-1263&lt;/a&gt; - ArrayHandler: Bitmap Marshalling Format
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1262"&gt;COR-1262&lt;/a&gt; - Pass configuration on to reflector on startup
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1261"&gt;COR-1261&lt;/a&gt; - Move constructor handling into reflector
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1255"&gt;COR-1255&lt;/a&gt; - Provide Feedback on latest OMG SBQL vs, LINQ comparison
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1254"&gt;COR-1254&lt;/a&gt; - _blob.ReadFrom() throws Object reference not set to an instance of an object. in C/S mode 
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1247"&gt;COR-1247&lt;/a&gt; - Create releae notes for production release 7.2
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1246"&gt;COR-1246&lt;/a&gt; - Create release notes for 6.4 stable release
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1227"&gt;COR-1227&lt;/a&gt; - Prepare 7.2 "Production" release (freeze trunk)
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1216"&gt;COR-1216&lt;/a&gt; - TracerBullet: Deletion for Java ArrayList using the new Typehandler
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1214"&gt;COR-1214&lt;/a&gt; - Db server closed when upgraded from 5.5 version to 6.4.14.8331 with btree based freespace management system
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1153"&gt;COR-1153&lt;/a&gt; - [Linq] Enum comparisons are not optimized
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-1129"&gt;COR-1129&lt;/a&gt; - TracerBullet: Special use cases for Java ArrayList using the new Typehandler
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-897"&gt;COR-897&lt;/a&gt; - Concurrency tests for close/timout scenarios
&lt;/li&gt;

&lt;/ul&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=49805" width="1" height="1"&gt;</description><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/7.4+Release/default.aspx">7.4 Release</category></item><item><title>flushFileBuffers(false) and the C in ACID</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/06/18/flushfilebuffers-false-and-the-c-in-acid.aspx</link><pubDate>Wed, 18 Jun 2008 15:24:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:49721</guid><dc:creator>Carl Rosenberger</dc:creator><slash:comments>2</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/49721.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=49721</wfw:commentRss><description>&lt;P&gt;The short story:&lt;BR&gt;Configuration.flushFileBuffers(false) is no more. If you still want to configure the behaviour that used to be available in db4o 6.1, you can do so by setting up IoAdapters as follows:&lt;/P&gt;&lt;PRE&gt;RandomAccessFileAdapter randomAccessFileAdapter = new RandomAccessFileAdapter();
NonFlushingIoAdapter nonFlushingIoAdapter = 
                                 new NonFlushingIoAdapter(randomAccessFileAdapter);
CachedIoAdapter cachedIoAdapter = new CachedIoAdapter(nonFlushingIoAdapter);
Configuration configuration = Db4o.newConfiguration();
configuration.io(cachedIoAdapter);
Db4o.openFile(configuration, PATH);
&lt;/PRE&gt;
&lt;P&gt;The long story:&lt;BR&gt;We do a lot of things for consistent transactions (for the C in ACID). A commit of a db4o transaction consists of 4 write phases:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Writing a commit log to the database file 
&lt;LI&gt;Switching the database file to commit mode 
&lt;LI&gt;Committing all slots 
&lt;LI&gt;Switching the database file to normal mode&amp;nbsp;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Because a cache at any level may turn around the write order of individual slots and because a failure may end up in a partial write, it is essential that all data is flushed to the device after each one of these 4 phases.&lt;/P&gt;
&lt;P&gt;This flush call takes a lot of time. It is the slowest part of the commit. On a system where you are sure enough (100% ? ) that the commit process always is successful, a tuning switch that skips flushing sounds like a smart way to improve performance.&lt;/P&gt;
&lt;P&gt;That's what we thought and why we added the #flushFileBuffers(false) configuration switch in the first place.&lt;/P&gt;
&lt;P&gt;Starting with db4o 6.4 we have added a new CachedIoAdapter to the IO layer as the default. This IoAdapter uses the #sync() calls as a signal to flush it's pages to the database file. What we did not think about well enough when we added this functionality: If users use the #flushFileBuffers(false) tuning switch, they also skip the flush of the CachedIoAdapter.&lt;/P&gt;
&lt;P&gt;This issue does not surface as long as the database file is always shut down correctly, so it took us a long time to realize how serious it can be. Since we have switched db4o 6.4 to "stable", there have been a couple of support discussions like this one:&lt;/P&gt;
&lt;P&gt;User: "We have switched to db4o 6.4. We are sometimes getting new exceptions like IncompatibleFileException."&lt;BR&gt;db4objects: "Uhoh. Are you maybe using #flushFileBuffers(false) in productive use? Please don't do that. Don't tell us that you are."&lt;BR&gt;User: "Yes we are."&lt;/P&gt;
&lt;P&gt;After investing some time and thought we have figured that the CachedIoAdapter makes it much much more likely that corruption can happen if a database file is not shut down correctly (with the #flushFileBuffers(false) configuration call). Because this is so serious (it leads to corrupted database files), we have decided to turn off this configuration switch completely.&lt;/P&gt;
&lt;P&gt;A similar functionality as in 6.1 is still available, if you really know what you are doing and if you know that you are taking the risc of corrupted database files if your system is halted because someone hits the power-off switch by accident in the middle of a commit. With the layer of IoAdapters, as outlined at the beginning of this posting, the risk of corruption is fairly small, just as it used to be in 6.1. Corruption will only happen if the OS cache or disc cache changes around the order of writes.&lt;/P&gt;
&lt;P&gt;The changes are effective and the new IoAdapter is available from iteration 48 and revision 10977 onwards, e.g. from db4o versions:&lt;BR&gt;6.4.48.10977&lt;BR&gt;7.2.48.10977&lt;BR&gt;7.4.48.10977&lt;/P&gt;
&lt;P&gt;For previous stable 6.4 versions we strongly recommend not to use the #flushFileBuffers(false) setting in production use.&lt;/P&gt;
&lt;P&gt;Many thanks to our users for reporting their problems!&lt;/P&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=49721" width="1" height="1"&gt;</description></item><item><title>Committed callbacks, pushed updates and read committed isolation revisited</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/06/18/committed-callbacks-pushed-updates-and-read-committed-isolation-revisited.aspx</link><pubDate>Tue, 17 Jun 2008 15:34:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:49719</guid><dc:creator>Patrick Roemer</dc:creator><slash:comments>1</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/49719.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=49719</wfw:commentRss><description>Some time ago we presented Pushed Updates as a sample application for Committed Callbacks &lt;a href="http://developer.db4o.com/blogs/product_news/archive/2007/04/23/committed-callbacks-and-pushed-updates.aspx"&gt;in this blog&lt;/a&gt;. Recently we put a similar mechanism in a slightly different context. Since we encountered some perceived ambiguity concerning db4o transaction semantics, and since we were in for a little surprise ourselves, I'd like to briefly rehash this topic.&lt;br&gt;&lt;br&gt;Pushed Updates basically are a mechanism to provide READ COMMITTED isolation from the point of view of your application. Wait - doesn't db4o provide that out of the box?!? Well, it does. Any query is guaranteed to return objects in their most recently committed state - unless they are still in memory on the requesting client, that is. db4o cannot change the state of of a live object that may be involved in application level processes at the same time. Only the application can judge whether it is safe to modify a given object, and Committed Callbacks are the way to transfer this responsibility.&lt;br&gt;&lt;br&gt;Note that "in memory" above does not mean "in use by the application", and not even necessarily "referenced by the application". An object may still survive in the reference system some time after it has been discarded by the application, until the GC eventually hits. There is no remotely performant way to check whether there exist hard references to a given object.&lt;br&gt;&lt;br&gt;So much for the theory, let's look at the code. The core of the Pushed Updates example looked like this:&lt;br&gt;&lt;blockquote&gt;private EventListener4 createCommittedEventListener(final ObjectContainer objectContainer){&lt;br&gt;&amp;nbsp; return new EventListener4() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onEvent(Event4 e, EventArgs args) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ObjectInfoCollection updated = ((CommitEventArgs)args).updated();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Iterator4 infos = updated.iterator();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(infos.moveNext()){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ObjectInfo info = (ObjectInfo) infos.current();&lt;br&gt;&lt;font color="#ff0000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#999999"&gt;&lt;b&gt;Object obj = info.getObject();&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objectContainer.ext().refresh(obj, 2);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp; };&lt;br&gt;}&lt;br&gt;&lt;/blockquote&gt;&lt;blockquote&gt;EventListener4 committedEventListener = createCommittedEventListener(client);&lt;br&gt;EventRegistry eventRegistry = EventRegistryFactory.forObjectContainer(client);&lt;br&gt;eventRegistry.committed().addListener(committedEventListener);&lt;br&gt;&lt;/blockquote&gt;This code registers a callback for committed events. When invoked, it will traverse all the objects that have been updated during this commit and refresh them. (The magic depth of two is a reverence to collections, forcing them to refresh their elements, too.)&lt;br&gt;&lt;br&gt;Now this works nicely - in networking C/S mode, where the communication layer between client and server takes care of the correct "translation" of object identities. In embedded C/S mode, however, there is no translation - clients run in the same "live object space" as the server, the only thing they don't share is the weak reference system that defines their notion of object identities. And so the ObjectInfo will contain the server's instance of this persisted object, while the client will have its own version that it won't be able to map to the "stranger".&lt;br&gt;&lt;br&gt;The fix is easy (and works for networking C/S, too, of course): We have to take care of the translation ourselves via ID lookup. In code:&lt;br&gt;&lt;blockquote&gt;public void onEvent(Event4 e, EventArgs args) {&lt;br&gt;&amp;nbsp; &lt;font color="#999999"&gt;&lt;b&gt;Transaction trans = ((InternalObjectContainer)client).transaction();&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp; ObjectInfoCollection updated = ((CommitEventArgs)args).updated();&lt;br&gt;&amp;nbsp; Iterator4 infos = updated.iterator();&lt;br&gt;&amp;nbsp; while(infos.moveNext()){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ObjectInfo info = (ObjectInfo) infos.current();&lt;br&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#999999"&gt;Object obj = trans.objectForIdFromCache((int)info.getInternalID());&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(obj == null) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; client.refresh(obj, 2);&lt;br&gt;&amp;nbsp; }&lt;br&gt;}&lt;br&gt;&lt;/blockquote&gt;Here we have to fall back on the InternalObjectContainer interface. Don't be too scared of this - it's not really under the hood stuff, but it's indeed intended to be used for 3rd party implementations of pluggable db4o features intended to be run inside the core, like type handlers, reflectors - and callbacks. Note that this variant also keeps the handler from further processing of objects that haven't been known to this client, anyway.&lt;br&gt;&lt;br&gt;Bottom line: Transaction semantics and live in-memory objects are not entirely trivial to align, object identities can be tricky, and this is the recommended generic way for doing Pushed Updates. For networking C/S, the original Pushed Updates example is fine as it was.&lt;br&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=49719" width="1" height="1"&gt;</description><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Callbacks/default.aspx">Callbacks</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Transaction+Isolation/default.aspx">Transaction Isolation</category></item><item><title>Sharpen your Java app now: Java to C# converter released as free software</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/05/21/sharpen-your-java-app-now-java-to-c-converter-released-as-free-software.aspx</link><pubDate>Tue, 20 May 2008 16:27:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:49154</guid><dc:creator>Patrick Roemer</dc:creator><slash:comments>7</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/49154.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=49154</wfw:commentRss><description>As of today, db4objects releases its Eclipse based Java to C# source code conversion tool "sharpen" as free software.&lt;br id="fu8l3"&gt;&lt;br id="fu8l4"&gt;sharpen
is the "secret sauce" that enables us to provide the [db4o object
database engine] in native versions for the Java and .NET platforms
from a single code base. &lt;br id="wvky0"&gt;&lt;br id="wvky1"&gt;Features include:&lt;br id="fu8l6"&gt;
&lt;ul&gt;
&lt;li&gt;mapping between Java and .NET native type systems&lt;/li&gt;
&lt;li&gt;compliance with C# coding conventions&lt;/li&gt;
&lt;li&gt;user defined namespace/class/method mappings&lt;/li&gt;
&lt;li&gt;method to property mappings&lt;/li&gt;
&lt;li&gt;Generics support&lt;/li&gt;
&lt;li&gt;partial conversions&lt;/li&gt;
&lt;li&gt;mixing native and converted C# sources&lt;/li&gt;
&lt;li&gt;VS solution file support&lt;/li&gt;
&lt;li&gt;Ant integration&lt;br id="fu8l15"&gt;&lt;/li&gt;
&lt;/ul&gt;
sharpen
is used extensively in the db4o build system, generating most of the
db4o engine core code and the unit test suites from the Java sources.&lt;br id="fu8l17"&gt;&lt;br id="fu8l18"&gt;Before
you start dreaming: sharpen is not a "magic wand". Don't expect to feed
it an arbitrary Java app and receive a running .NET version at the push
of a button. The translation process will require some design
compromises on the Java side, and parts of the .NET code still have to
be hand crafted and integrated into the converted sources. Still, we
believe sharpen provides an amazingly smooth way to bridge the gap
between Java and .NET and create real cross platform applications.&lt;br id="fu8l19"&gt;&lt;br id="fu8l20"&gt;We
are looking forward to see which sharpen propelled applications will
cross the language chasm, and we're hoping on your feedback and your
contributions that will help to cover automatic conversion of even more
Java constructs and idioms, moving Java/.NET cross platform integration
to a new level.&lt;br id="fu8l21"&gt;&lt;br id="fu8l22"&gt;sharpen is released
under the GPL. The &lt;a href="https://source.db4o.com/db4o/trunk/sharpen"&gt;svn repository&lt;/a&gt;, &lt;a href="http://developer.db4o.com/Resources/view.aspx/Reference/Sharpen"&gt;documentation&lt;/a&gt; and &lt;a href="http://tracker.db4o.com/browse/SHA"&gt;issue
tracker&lt;/a&gt; are online. All that's missing now is you bringing your Java
app to the .NET platform. To get you started, &lt;a href="http://developer.db4o.com/blogs/product_news/archive/2008/05/20/smart-java-to-c-conversion-for-the-masses-with-sharpen.aspx"&gt;here&lt;/a&gt; is the full
anatomy of a simplistic application developed with sharpen. Have fun!&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=49154" width="1" height="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/.NET/default.aspx">.NET</category><category domain="http://developer.db4o.com/blogs/product_news/archive/tags/Sharpen/default.aspx">Sharpen</category></item><item><title>Smart java to c# conversion for the masses with sharpen</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/05/20/smart-java-to-c-conversion-for-the-masses-with-sharpen.aspx</link><pubDate>Tue, 20 May 2008 15:49:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:49151</guid><dc:creator>Rodrigo B. de Oliveira</dc:creator><slash:comments>4</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/49151.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=49151</wfw:commentRss><description>&lt;p&gt;As of Today our so far internal java to c# conversion utility, sharpen, is being released as free software. &lt;/p&gt;

&lt;p&gt;As an example of its usage we're going to write a simple contact management application in java and convert it to c#. &lt;/p&gt;

&lt;p&gt;While it is possible to use sharpen to convert a complete application it is advisable to handle this as an iterative process: java a little, sharpen a little. The reason for this is that not all java constructs and idioms can be handled out of the box by sharpen, thus the translation might influence the design of the original java code. &lt;/p&gt;

&lt;p&gt;As a first step we'll come up with a minimum skeleton for our console application, ignoring any "business logic" for now: &lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#009966"&gt;&lt;b&gt;package&lt;/b&gt;&lt;/font&gt; contacts;&lt;br&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; Program &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; &lt;font color="#0099ff"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;main&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;String[] args&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="#0099ff"&gt;&lt;b&gt;boolean&lt;/b&gt;&lt;/font&gt; running &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; &lt;font color="#cc00cc"&gt;true&lt;/font&gt;;&lt;br&gt;        &lt;font color="#006699"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;running&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;            String option &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; Console.&lt;font color="#9966ff"&gt;prompt&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;(a)dd&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;new&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;entry,&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;(l)ist&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;entries,&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;(q)uit&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;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;option.&lt;font color="#9966ff"&gt;isEmpty&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;font color="#000000"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt; &lt;font color="#006699"&gt;&lt;b&gt;continue&lt;/b&gt;&lt;/font&gt;;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;switch&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;option.&lt;font color="#9966ff"&gt;charAt&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt;0&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;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;case&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff00cc"&gt;'&lt;/font&gt;&lt;font color="#ff00cc"&gt;q&lt;/font&gt;&lt;font color="#ff00cc"&gt;'&lt;/font&gt;:&lt;br&gt;                running &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; &lt;font color="#cc00cc"&gt;false&lt;/font&gt;;&lt;br&gt;                &lt;font color="#006699"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;default&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;:&lt;/b&gt;&lt;/font&gt;&lt;br&gt;                System.out.&lt;font color="#9966ff"&gt;println&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;'&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; option &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;'&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;DOES&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;NOT&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;COMPUTE!&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="#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;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#009966"&gt;&lt;b&gt;package&lt;/b&gt;&lt;/font&gt; contacts;&lt;br&gt;&lt;br&gt;&lt;font color="#009966"&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; java.io.*;&lt;br&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; Console &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; String &lt;font color="#9966ff"&gt;prompt&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;String prompt&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;        System.out.&lt;font color="#9966ff"&gt;println&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;prompt&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; &lt;font color="#9966ff"&gt;readLine&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;private&lt;/b&gt;&lt;/font&gt; &lt;font color="#006699"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt; String &lt;font color="#9966ff"&gt;readLine&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;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#006699"&gt;&lt;b&gt;try&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;return&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;BufferedReader&lt;/font&gt;&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;InputStreamReader&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;System.in&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="#9966ff"&gt;readLine&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;font color="#006699"&gt;&lt;b&gt;catch&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;IOException e&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;throw&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;RuntimeException&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;e&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;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Here we can already see the first design decision triggered by sharpen. The console APIs for java and .net are quite different and although sharpen can handle IO primitives gracefully, it doesn't support translating our specific use of "System.in". The obvious way of handling situations like this is to factor out the required functionality into a specialized class and provide dedicated implementations for java and .net. &lt;/p&gt;

&lt;p&gt;With the first java iteration complete let's get to sharpening it. &lt;/p&gt;

&lt;p&gt;Before we can get any conversion done, the sharpen.core plugin must be installed. From inside eclipse: 
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Checkout sharpen.core from db4o's subversion repository at https://source.db4o.com/db4o/trunk/sharpen/ &lt;/li&gt;

&lt;li&gt;Right click the freshly checked out project in the "Package Explorer" and choose "Export" from the context menu; &lt;/li&gt;

&lt;li&gt;Expand the "Plug-in Development" folder and select "Deployable plug-ins and fragments"; &lt;/li&gt;

&lt;li&gt;Set "Destination" to the root folder of your eclipse installation and click "Finish"; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We're ready to automate the conversion from java to c# with an ant script. In order to make this task easier, we will reuse a few sharpen related macros defined in &lt;a href="https://source.db4o.com/db4o/trunk/sandbox/blogs/SharpenExamples/ContactList/sharpen-common.xml"&gt;sharpen-common.xml&lt;/a&gt;. &lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;ContactList&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;default&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;build-dotnet&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;import&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;file&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;build-properties.xml&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;import&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;file&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;sharpen-common.xml&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;    &lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;build-dotnet&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;depends&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;sharpen&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;exec&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;executable&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;${nant.exe}&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;exec&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;        &lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;sharpen&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;depends&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;init&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;        &lt;br&gt;        &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;prepare-sharpen-workspace&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;ContactList&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;dir&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;${sharpen.workspace.dir}&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;        &lt;br&gt;        &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;sharpen&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;workspace&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;${sharpen.workspace.dir}&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;resource&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;ContactList/src&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;sharpen&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;        &lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;    &lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;init&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;        &lt;br&gt;        &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;reset-dir&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;dir&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;${sharpen.workspace.dir}&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;        &lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;    &lt;br&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Here we are using the common strategy of externalizing environment specific properties to a dedicated file (build-properties.xml): &lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;build&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;properties&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;property&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;sharpen.workspace.dir&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;build&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;property&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;eclipse.home&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;c:/java/eclipse&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;property&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;nant.exe&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;c:/dotnet/nant-0.85/bin/NAnt.exe&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;We're not using a plain java properties file because the &lt;a href="http://nant.sourceforge.net/"&gt;nant&lt;/a&gt; script which is used for compiling the converted sources also needs some of these definitions: &lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#0099ff"&gt;&lt;b&gt;&amp;lt;?&lt;/b&gt;&lt;/font&gt;&lt;font color="#0099ff"&gt;&lt;b&gt;xml&lt;/b&gt;&lt;/font&gt;&lt;font color="#0099ff"&gt;&lt;b&gt; &lt;/b&gt;&lt;/font&gt;&lt;font color="#0099ff"&gt;&lt;b&gt;version="1.0"?&lt;/b&gt;&lt;/font&gt;&lt;font color="#0099ff"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;ContactList&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;default&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;build&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;include&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;buildfile&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;build-properties.xml&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;    &lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;property&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;src.dir&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;${sharpen.workspace.dir}/ContactList.net&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;property&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;bin.dir&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;${src.dir}/bin&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;build&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;csc&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;exe&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;output&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;${bin.dir}/ContactList.exe&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;sources&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;basedir&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;${src.dir}&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;                &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;include&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;**/*.cs&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;sources&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;csc&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;    &lt;br&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Running ant we get good news and bad news. The good news are sharpening went fine: 
&lt;/p&gt;&lt;blockquote&gt;
&lt;pre&gt;sharpen:&lt;br&gt;[mkdir] Created dir: build\ContactList&lt;br&gt; [copy] Copying 2 files to build\ContactList&lt;br&gt; [echo] org.eclipse.core.launcher.Main -data build -application sharpen.core.application ContactList/src&lt;br&gt; [java] project: ContactList&lt;br&gt; [java] source folder: src&lt;br&gt; [java] Pascal case mode: None&lt;br&gt; [java] Console.java&lt;br&gt; [java] Program.java&lt;br&gt; [java] Conversion finished in 3110ms.&lt;br&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;C# compilation didn't go so well: 
&lt;/p&gt;&lt;blockquote&gt;
&lt;pre&gt;[exec] [csc] Compiling 2 files to 'ContactList.net\bin\ContactList.exe'.&lt;br&gt;[exec] [csc] ContactList.net\src\contacts\Console.cs(15,16): error CS0246: The type or namespace name 'java' could not be found (are you missing a using directive or an assembly reference?)&lt;br&gt;&lt;br&gt;...&lt;br&gt;&lt;br&gt;[exec] [csc] ContactList.net\src\contacts\Program.cs(12,16): error CS0117: 'string' does not contain a definition for 'isEmpty'&lt;br&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Before we fix those errors let's take a look at how Program.java got translated to c#: &lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#009966"&gt;&lt;b&gt;namespace&lt;/b&gt;&lt;/font&gt; contacts&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;class&lt;/b&gt;&lt;/font&gt; Program&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;Main&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;&lt;font color="#0099ff"&gt;&lt;b&gt;string&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; args&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="#0099ff"&gt;&lt;b&gt;bool&lt;/b&gt;&lt;/font&gt; running &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; &lt;font color="#cc00cc"&gt;true&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;while&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;running&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="#0099ff"&gt;&lt;b&gt;string&lt;/b&gt;&lt;/font&gt; option &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; contacts&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Console&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#9966ff"&gt;prompt&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;(a)dd&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;new&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;entry,&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;(l)ist&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;entries,&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;(q)uit&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;br&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="#006699"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;option&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#9966ff"&gt;isEmpty&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;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="#006699"&gt;&lt;b&gt;continue&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;font color="#006699"&gt;&lt;b&gt;switch&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;option&lt;font color="#000000"&gt;&lt;b&gt;[&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt;0&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;font color="#006699"&gt;&lt;b&gt;case&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff00cc"&gt;'&lt;/font&gt;&lt;font color="#ff00cc"&gt;q&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="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;                        running &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; &lt;font color="#cc00cc"&gt;false&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;break&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;default&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;                        System&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Console&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Out&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#9966ff"&gt;WriteLine&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;'&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; option &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;'&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;DOES&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;NOT&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;COMPUTE!&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="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;                        &lt;font color="#006699"&gt;&lt;b&gt;break&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;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;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;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;It looks good except for javaisms like the lower case namespace and method names which can be fixed with the introduction of the "pascalCase+" sharpen command line option. &lt;/p&gt;

&lt;p&gt;To get rid of the c# compilation errors we must provide a platform specific version of the Console class and tell sharpen to ignore its java counterpart using the @sharpen.ignore javadoc annotation. 
&lt;/p&gt;&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#6600cc"&gt;/**&lt;/font&gt;&lt;br&gt;&lt;font color="#6600cc"&gt; &lt;/font&gt;&lt;font color="#6600cc"&gt;*&lt;/font&gt;&lt;font color="#6600cc"&gt; &lt;/font&gt;&lt;font color="#6600cc"&gt;@sharpen&lt;/font&gt;&lt;font color="#6600cc"&gt;.&lt;/font&gt;&lt;font color="#6600cc"&gt;ignore&lt;/font&gt;&lt;br&gt;&lt;font color="#6600cc"&gt; &lt;/font&gt;&lt;font color="#6600cc"&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; Console &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;    &lt;br&gt;    ...&lt;br&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;As a very useful convention we like to keep native and converted c# sources separate from each other by introducing a subfolder named "native". &lt;/p&gt;

&lt;p&gt;Here's our native c# Console implementation: 
&lt;/p&gt;&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#009966"&gt;&lt;b&gt;namespace&lt;/b&gt;&lt;/font&gt; Contacts&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;class&lt;/b&gt;&lt;/font&gt; Console&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;string&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;Prompt&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;&lt;font color="#0099ff"&gt;&lt;b&gt;string&lt;/b&gt;&lt;/font&gt; message&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;            System&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Console&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#9966ff"&gt;WriteLine&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;message&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;return&lt;/b&gt;&lt;/font&gt; System&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Console&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#9966ff"&gt;ReadLine&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;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;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;The remaining compiler error is caused by calling the String.isEmpty which has no equivalent on the .net side. We'll sneak around this issue for the time being by rewriting the java side condition in terms of String.length: 
&lt;/p&gt;&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;            &lt;font color="#006699"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;option.&lt;font color="#9966ff"&gt;length&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;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="#ff0000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt; &lt;font color="#006699"&gt;&lt;b&gt;continue&lt;/b&gt;&lt;/font&gt;;&lt;br&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Our build runs green now and the .net application is functional. We're ready to move on to the business logic. &lt;/p&gt;

&lt;p&gt;We'll start with a collection based implementation to be enhanced with persistence later in the process. 
&lt;/p&gt;&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#009966"&gt;&lt;b&gt;package&lt;/b&gt;&lt;/font&gt; contacts;&lt;br&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; Contact &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;private&lt;/b&gt;&lt;/font&gt; String _name;&lt;br&gt;    &lt;font color="#006699"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt; String _email;&lt;br&gt;&lt;br&gt;    &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;Contact&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;String name, String email&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;        _name &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; name;&lt;br&gt;        _email &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; email;&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; String &lt;font color="#9966ff"&gt;name&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;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; _name;&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; String &lt;font color="#9966ff"&gt;email&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;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; _email;&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;/font&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#009966"&gt;&lt;b&gt;package&lt;/b&gt;&lt;/font&gt; contacts;&lt;br&gt;&lt;br&gt;&lt;font color="#009966"&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; java.util.*;&lt;br&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; ContactList &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;private&lt;/b&gt;&lt;/font&gt; List&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Contact&lt;font color="#000000"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt; _entries &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; ArrayList&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Contact&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;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;void&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;add&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;Contact contact&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;        _entries.&lt;font color="#9966ff"&gt;add&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;contact&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; Iterable&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Contact&lt;font color="#000000"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;entries&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;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; _entries;&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;/font&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#009966"&gt;&lt;b&gt;package&lt;/b&gt;&lt;/font&gt; contacts;&lt;br&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; Program &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;private&lt;/b&gt;&lt;/font&gt; ContactList _contacts &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;ContactList&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;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;void&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;readEvalLoop&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;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#0099ff"&gt;&lt;b&gt;boolean&lt;/b&gt;&lt;/font&gt; running &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; &lt;font color="#cc00cc"&gt;true&lt;/font&gt;;&lt;br&gt;        &lt;font color="#006699"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;running&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;            String option &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;prompt&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;(a)dd&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;new&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;entry,&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;(l)ist&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;entries,&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;(q)uit:&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;;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;option.&lt;font color="#9966ff"&gt;length&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;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="#ff0000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt; &lt;font color="#006699"&gt;&lt;b&gt;continue&lt;/b&gt;&lt;/font&gt;;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;switch&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;option.&lt;font color="#9966ff"&gt;charAt&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt;0&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;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;case&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff00cc"&gt;'&lt;/font&gt;&lt;font color="#ff00cc"&gt;a&lt;/font&gt;&lt;font color="#ff00cc"&gt;'&lt;/font&gt;:&lt;br&gt;                &lt;font color="#9966ff"&gt;addEntry&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="#006699"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br&gt;                &lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;case&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff00cc"&gt;'&lt;/font&gt;&lt;font color="#ff00cc"&gt;l&lt;/font&gt;&lt;font color="#ff00cc"&gt;'&lt;/font&gt;:&lt;br&gt;                &lt;font color="#9966ff"&gt;listEntries&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="#006699"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br&gt;                &lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;case&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff00cc"&gt;'&lt;/font&gt;&lt;font color="#ff00cc"&gt;q&lt;/font&gt;&lt;font color="#ff00cc"&gt;'&lt;/font&gt;:&lt;br&gt;                running &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; &lt;font color="#cc00cc"&gt;false&lt;/font&gt;;&lt;br&gt;                &lt;font color="#006699"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br&gt;            &lt;font color="#006699"&gt;&lt;b&gt;default&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;:&lt;/b&gt;&lt;/font&gt;&lt;br&gt;                System.out.&lt;font color="#9966ff"&gt;println&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;'&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; option &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;'&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;DOES&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;NOT&lt;/font&gt;&lt;font color="#ff00cc"&gt; &lt;/font&gt;&lt;font color="#ff00cc"&gt;COMPUTE!&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="#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;br&gt;    &lt;font color="#006699"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt; String &lt;font color="#9966ff"&gt;prompt&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;String message&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;return&lt;/b&gt;&lt;/font&gt; Console.&lt;font color="#9966ff"&gt;prompt&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;message&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;private&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;listEntries&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;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#006699"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;Contact c : _contacts.&lt;font color="#9966ff"&gt;entries&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;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;            System.out.&lt;font color="#9966ff"&gt;println&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;c.&lt;font color="#9966ff"&gt;name&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;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; &lt;/font&gt;&lt;font color="#ff00cc"&gt;&amp;lt;&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; c.&lt;font color="#9966ff"&gt;email&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;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;&amp;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;;&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;br&gt;    &lt;font color="#006699"&gt;&lt;b&gt;private&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;addEntry&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;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;        String name &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;prompt&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;Name:&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;;&lt;br&gt;        String email &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;prompt&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;Email:&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;;&lt;br&gt;        _contacts.&lt;font color="#9966ff"&gt;add&lt;/font&gt;&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;Contact&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;name, email&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; &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;main&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;String[] args&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;new&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;Program&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;font color="#9966ff"&gt;readEvalLoop&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;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;A quick look at the converted object model shows that although correct the code still looks a bit alien to .net: 
&lt;/p&gt;&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#009966"&gt;&lt;b&gt;namespace&lt;/b&gt;&lt;/font&gt; Contacts&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;class&lt;/b&gt;&lt;/font&gt; Contact&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;private&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;&lt;br&gt;&lt;br&gt;        &lt;font color="#006699"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt; &lt;font color="#0099ff"&gt;&lt;b&gt;string&lt;/b&gt;&lt;/font&gt; _email&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="#9966ff"&gt;Contact&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&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; &lt;font color="#0099ff"&gt;&lt;b&gt;string&lt;/b&gt;&lt;/font&gt; email&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;            _name &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;br&gt;            _email &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; email&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;virtual&lt;/b&gt;&lt;/font&gt; &lt;font color="#0099ff"&gt;&lt;b&gt;string&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;Name&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;font color="#006699"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; _name&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;virtual&lt;/b&gt;&lt;/font&gt; &lt;font color="#0099ff"&gt;&lt;b&gt;string&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;Email&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;font color="#006699"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; _email&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;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#009966"&gt;&lt;b&gt;namespace&lt;/b&gt;&lt;/font&gt; Contacts&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;class&lt;/b&gt;&lt;/font&gt; ContactList&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;private&lt;/b&gt;&lt;/font&gt; System&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Collections&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Generic&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;IList&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Contacts&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Contact&lt;font color="#000000"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt; _entries &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; System&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Collections&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Generic&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;List&lt;br&gt;            &lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Contacts&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Contact&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;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;virtual&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;Add&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;Contacts&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Contact contact&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;            _entries&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#9966ff"&gt;Add&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;contact&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; &lt;font color="#006699"&gt;&lt;b&gt;virtual&lt;/b&gt;&lt;/font&gt; System&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Collections&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Generic&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;IEnumerable&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Contacts&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Contact&lt;font color="#000000"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;Entries&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;font color="#006699"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; _entries&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;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Contact.Name, Contact.Email and ContactList.Entries would look better as properties and the qualified names used everywhere look rather untidy. &lt;/p&gt;

&lt;p&gt;We can solve the first issue using the @sharpen.property javadoc annotation: 
&lt;/p&gt;&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;    &lt;font color="#6600cc"&gt;/**&lt;/font&gt;&lt;br&gt;&lt;font color="#6600cc"&gt;    &lt;/font&gt;&lt;font color="#6600cc"&gt; &lt;/font&gt;&lt;font color="#6600cc"&gt;*&lt;/font&gt;&lt;font color="#6600cc"&gt; &lt;/font&gt;&lt;font color="#6600cc"&gt;@sharpen&lt;/font&gt;&lt;font color="#6600cc"&gt;.&lt;/font&gt;&lt;font color="#6600cc"&gt;property&lt;/font&gt;&lt;br&gt;&lt;font color="#6600cc"&gt;    &lt;/font&gt;&lt;font color="#6600cc"&gt; &lt;/font&gt;&lt;font color="#6600cc"&gt;*/&lt;/font&gt;&lt;br&gt;    &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; Iterable&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Contact&lt;font color="#000000"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;entries&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;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; _entries;&lt;br&gt;    &lt;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;
Proper "using" directives can be enforced with the "-organizeUsings" command line option: 
&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;        &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;sharpen&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;workspace&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;${sharpen.workspace.dir}&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;resource&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;ContactList/src&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;args&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;                &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;arg&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;-pascalCase+&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;                &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;arg&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;-organizeUsings&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;args&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;sharpen&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;
The c# version of ContactList is now indistinguishable from hand crafted code: 
&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#009966"&gt;&lt;b&gt;using&lt;/b&gt;&lt;/font&gt; System&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Collections&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;Generic&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#009966"&gt;&lt;b&gt;using&lt;/b&gt;&lt;/font&gt; Contacts&lt;font color="#000000"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="#009966"&gt;&lt;b&gt;namespace&lt;/b&gt;&lt;/font&gt; Contacts&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;class&lt;/b&gt;&lt;/font&gt; ContactList&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;private&lt;/b&gt;&lt;/font&gt; IList&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Contact&lt;font color="#000000"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt; _entries &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; List&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Contact&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;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;virtual&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;Add&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;Contact contact&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;            _entries&lt;font color="#000000"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#9966ff"&gt;Add&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;contact&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; &lt;font color="#006699"&gt;&lt;b&gt;virtual&lt;/b&gt;&lt;/font&gt; IEnumerable&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Contact&lt;font color="#000000"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt; Entries&lt;br&gt;        &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            get&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; _entries&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;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;/font&gt;&lt;/pre&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;

&lt;p&gt;We now have a complete cross platform contact management application. The only feature missing for the huge marketing success it deserves is persistence which can be easily implemented with db4o. &lt;/p&gt;

&lt;p&gt;We downloaded the db4o production packages for both java and .net 2.0 from &lt;a href="http://developer.db4o.com/files/default.aspx"&gt;here&lt;/a&gt; and added the corresponding paths to our build-properties.xml file: 
&lt;/p&gt;&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;property&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;db4o.jar&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;c:/java/db4o-7.2/lib/db4o-7.2.39.10644-java5.jar&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;property&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;db4o.dll&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;c:/dotnet/db4o-7.2/bin/net-2.0/Db4objects.Db4o.dll&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;property&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;eclipse.home&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;c:/java/eclipse&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;All we have to do now is to change ContactList to use a db4o ObjectContainer instead of an ArrayList as its storage backend: 
&lt;/p&gt;&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#009966"&gt;&lt;b&gt;package&lt;/b&gt;&lt;/font&gt; contacts;&lt;br&gt;&lt;br&gt;&lt;font color="#009966"&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; com.db4o.*;&lt;br&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; ContactList &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;private&lt;/b&gt;&lt;/font&gt; ObjectContainer _container &lt;font color="#000000"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt; Db4o.&lt;font color="#9966ff"&gt;openFile&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;contacts.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;    &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;void&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;add&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;Contact contact&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;        _container.&lt;font color="#9966ff"&gt;store&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;contact&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="#6600cc"&gt;/**&lt;/font&gt;&lt;br&gt;&lt;font color="#6600cc"&gt;    &lt;/font&gt;&lt;font color="#6600cc"&gt; &lt;/font&gt;&lt;font color="#6600cc"&gt;*&lt;/font&gt;&lt;font color="#6600cc"&gt; &lt;/font&gt;&lt;font color="#6600cc"&gt;@sharpen&lt;/font&gt;&lt;font color="#6600cc"&gt;.&lt;/font&gt;&lt;font color="#6600cc"&gt;property&lt;/font&gt;&lt;br&gt;&lt;font color="#6600cc"&gt;    &lt;/font&gt;&lt;font color="#6600cc"&gt; &lt;/font&gt;&lt;font color="#6600cc"&gt;*/&lt;/font&gt;&lt;br&gt;    &lt;font color="#006699"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; Iterable&lt;font color="#000000"&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/font&gt;Contact&lt;font color="#000000"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;entries&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;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; _container.&lt;font color="#9966ff"&gt;query&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;Contact.&lt;font color="#0099ff"&gt;&lt;b&gt;class&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; &lt;font color="#0099ff"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; &lt;font color="#9966ff"&gt;close&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;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;        _container.&lt;font color="#9966ff"&gt;close&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;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;We also have to make sure that the ObjectContainer is shutdown cleanly on application exit, for that purpose we introduced the ContactList.close method above which must be called from the main application class: 
&lt;/p&gt;&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&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;main&lt;/font&gt;&lt;font color="#000000"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;String[] args&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;        Program program &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;Program&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="#006699"&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            program.&lt;font color="#9966ff"&gt;readEvalLoop&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;font color="#006699"&gt;&lt;b&gt;finally&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/font&gt;&lt;br&gt;            program.&lt;font color="#9966ff"&gt;close&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;font color="#000000"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;
Getting the c# version to work requires additional configuration switches for the sharpen task. First the java code now depends on the db4o jar which must be known at translation time. Second, the .net db4o interface operates against the native .net type system (this is a great candidate for a default setting) and uses namespace and interface names more inline with the .net design guidelines: 
&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#000000"&gt;        &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;sharpen&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;workspace&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;${sharpen.workspace.dir}&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;resource&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;ContactList/src&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;args&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;                &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;arg&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;-pascalCase+&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;                &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;arg&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;-organizeUsings&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;                &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;arg&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;-cp&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;                &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;arg&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;file&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;${db4o.jar}&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;                &lt;br&gt;                &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;arg&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;-nativeTypeSystem&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;                &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;arg&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;-nativeInterfaces&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;                &lt;br&gt;                &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;arg&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;-typeMapping&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;                &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;arg&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;com.db4o.Db4o&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;                &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;arg&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;Db4objects.Db4o.Db4oFactory&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;                &lt;br&gt;                &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;arg&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;-namespaceMapping&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;                &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;arg&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;com.db4o&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;                &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;arg&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#ff00cc"&gt;Db4objects.Db4o&lt;/font&gt;&lt;font color="#ff00cc"&gt;"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;            &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;args&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;        &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;&lt;font color="#0000ff"&gt;sharpen&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Here's an screenshot of both versions of the application running side by side:&lt;/p&gt;

&lt;p&gt;&lt;img src="/blogs/product_news/attachment/49151.ashx" alt="Attachment: sharpen.demo.gif (36912 bytes)" border="0" /&gt;&lt;/p&gt;

&lt;p&gt;This was a minimalist example of converting a java application to c# using the &lt;b&gt;open source&lt;/b&gt; sharpen tool. Our intention was to show how sharpen can be used in a realistic setting requiring some manual intervention of the developer during all phases of the process. For a more complex cross-platform project based on sharpen take a look at the db4o source code repository :). &lt;/p&gt;

&lt;p&gt;The complete source code for this application together with build scripts can be found &lt;a href="https://source.db4o.com/db4o/trunk/sandbox/blogs/SharpenExamples/ContactList"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Sharpen documentation can be found &lt;a href="http://developer.db4o.com/Resources/view.aspx/Reference/Sharpen"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The issue tracker is &lt;a href="http://tracker.db4o.com/browse/SHA"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;We are looking forward to see which projects will make use of sharpen in the future now that it is out in the wild. &lt;/p&gt;&lt;img src="http://developer.db4o.com/aggbug.aspx?PostID=49151" width="1" height="1"&gt;</description><enclosure url="http://developer.db4o.com/blogs/product_news/attachment/49151.ashx" length="36912" type="image/gif" /><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/.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/Sharpen/default.aspx">Sharpen</category></item><item><title>6.4 Stable - Release Notes</title><link>http://developer.db4o.com/blogs/product_news/archive/2008/04/23/6-4-stable-release-notes.aspx</link><pubDate>Tue, 22 Apr 2008 18:00:00 GMT</pubDate><guid isPermaLink="false">573d810b-5d25-4172-b278-595dd24a71a5:48597</guid><dc:creator>Tetyana Loskutova</dc:creator><slash:comments>0</slash:comments><comments>http://developer.db4o.com/blogs/product_news/comments/48597.aspx</comments><wfw:commentRss>http://developer.db4o.com/blogs/product_news/commentrss.aspx?PostID=48597</wfw:commentRss><description>
&lt;p&gt;The full list of issues resolved for 6.4 Stable Release is presented below.&lt;/p&gt;&lt;ul&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-878"&gt;COR-878&lt;/a&gt; - Simplify Typehandler4, remove readQuery(), readSubCandidate()
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-873"&gt;COR-873&lt;/a&gt; - Simplify Typehandler4, remove classReflector(), getID(), linkLength()
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-871"&gt;COR-871&lt;/a&gt; - .net packages should include the full version name (e.g.: db4o-net2-6.4.8.2078.msi, db4o-net2-6.4.8.2078.zip)
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-870"&gt;COR-870&lt;/a&gt; - add svn.revision to Db4oVersion 
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-860"&gt;COR-860&lt;/a&gt; - NewTypehandler: Database file creation for upgrade tests
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-859"&gt;COR-859&lt;/a&gt; - TypeHandler upgrade tests for short long float
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-856"&gt;COR-856&lt;/a&gt; - TypeHandler upgrade tests for int
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-855"&gt;COR-855&lt;/a&gt; - TypeHandler Version sets to replace MarshallerFamily
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-854"&gt;COR-854&lt;/a&gt; - drs.dll product version is 1.0.0.0 
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-853"&gt;COR-853&lt;/a&gt; - dRS .net file size is not correct in the download center
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-852"&gt;COR-852&lt;/a&gt; - .net document problems in 6.3 release 
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-851"&gt;COR-851&lt;/a&gt; - some tutorial problems in 6.3 release
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-850"&gt;COR-850&lt;/a&gt; - Db4oService java doc: bad format 
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-849"&gt;COR-849&lt;/a&gt; - Javadoc problems in 6.3 release
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-847"&gt;COR-847&lt;/a&gt; - No copyright in api document (html)
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-846"&gt;COR-846&lt;/a&gt; - File size is not correct in the download center
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-845"&gt;COR-845&lt;/a&gt; - .NET: svn revision should be last part of the assembly name
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-844"&gt;COR-844&lt;/a&gt; - Report blocking compiler bugs to the mono team
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-843"&gt;COR-843&lt;/a&gt; - Complete new TypeHandler reading for all Types
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-838"&gt;COR-838&lt;/a&gt; - Factor out common Bloat bytecode abstraction library from NQ, TA, CLDC,...
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-832"&gt;COR-832&lt;/a&gt; - 6.3 Production release check
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-829"&gt;COR-829&lt;/a&gt; - .NET: Support for multiple assemblies
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-827"&gt;COR-827&lt;/a&gt; - .NET: Change instrumentation from method to field access (self encapsulate field)
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-826"&gt;COR-826&lt;/a&gt; - Java: Change instrumentation from method to field access (self encapsulate field)
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-823"&gt;COR-823&lt;/a&gt; - .NET: add TA test suite to cruise control
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-795"&gt;COR-795&lt;/a&gt; - dont instrument compiler generated classes
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-794"&gt;COR-794&lt;/a&gt; - Test fails for db40 6.3 net 2.0(production version) Db4objects.Db4o.Tests-CF-2005 solution
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-792"&gt;COR-792&lt;/a&gt; - Compilation fails for 6.3 production release net 1.1 Db4objects.Db4o.Tests-CF-2003 solution
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-781"&gt;COR-781&lt;/a&gt; - FastCollections: New TypeHandler4 writing for .NET types
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-780"&gt;COR-780&lt;/a&gt; - FastCollections: New TypeHandler reading primitive types Java
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-778"&gt;COR-778&lt;/a&gt; - Create a 5-week plan for TP
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-776"&gt;COR-776&lt;/a&gt; - Client/Server performance problem when operating on complex object
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-772"&gt;COR-772&lt;/a&gt; - FastCollections: Simple TypeHandler4 writing for all types
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-762"&gt;COR-762&lt;/a&gt; - Critical Performance Loss with higher BlockSize
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tracker.db4o.com/browse/COR-760"&gt;COR-760&lt;/a&gt; - No Native Query optimization for equals() comparisons on java.util.Date fields
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://