<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-31083728</id><updated>2011-08-02T19:01:23.225+02:00</updated><title type='text'>db4o - OO as it is meant to be</title><subtitle type='html'>think in objects, don't worry about persistence...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-31083728.post-5998063503962442202</id><published>2009-10-27T06:04:00.006+01:00</published><updated>2009-10-27T06:09:33.261+01:00</updated><title type='text'>Jease released - Java with Ease</title><content type='html'>It took its time, but finally I've done it... I've released &lt;a href="http://www.jease.org/"&gt;Jease&lt;/a&gt; - a Content-Management-Framework built on top of &lt;a href="http://www.db4o.com/"&gt;db4o&lt;/a&gt; as persistence engine and &lt;a href="http://www.zkoss.org/"&gt;ZK&lt;/a&gt; as web-interface.&lt;br /&gt;&lt;p&gt;Jease is an open-source framework to ease the widespread pains developing content- &amp;amp; database-driven web-applications with Java.&lt;/p&gt; &lt;p&gt;Out of the box Jease provides a fully &lt;strong&gt;Ajax-driven Content-Management-System&lt;/strong&gt; as a best-practice-showcase which can easily be tailored to your specific requirements.&lt;/p&gt;Check it out at: &lt;a href="http://www.jease.org/"&gt;http://www.jease.org/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-5998063503962442202?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/5998063503962442202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=5998063503962442202' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/5998063503962442202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/5998063503962442202'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2009/10/jease-released-java-with-ease.html' title='Jease released - Java with Ease'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-2237509379849637048</id><published>2008-10-28T18:13:00.006+01:00</published><updated>2008-10-28T18:55:41.680+01:00</updated><title type='text'>In-Memory Databases...</title><content type='html'>I've just read an announcement about "solidDB - an In-memory, relational database software for extreme speed"...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www-01.ibm.com/software/data/soliddb/"&gt;http://www-01.ibm.com/software/data/soliddb/&lt;/a&gt;&lt;cite&gt;&lt;br /&gt;&lt;/cite&gt;&lt;br /&gt;&lt;cite&gt;"As relational in-memory database software, solidDB performs up to ten times faster than conventional databases. Whether deployed as a cache for IBM DB2™ or IDS™, or standalone as the database of record, solidDB delivers performance-critical data with extreme speed.&lt;/cite&gt;"&lt;br /&gt;&lt;br /&gt;Put a relational in-memory database as cache in front of another relational database to speed up your architecture? What a brilliant idea...;-)&lt;br /&gt;&lt;br /&gt;Makes sence, because memory is so much faster than any harddisk... and holding all the semantic and structural business-data (I'm not talking about binary data like images or videos) in-memory of a standard server equipped with several tons of memory is absolutely no problem for the average business of today, because the real world (which our semantic and structural business-data reflects in some way or other) doesn't grow as fast as the memory-technology... most of the time it doesn't grow at all.&lt;br /&gt;&lt;br /&gt;But the big problem with the idea of soldDB is simply "the &lt;span style="font-weight: bold;"&gt;relational&lt;/span&gt; database in front of another &lt;span style="font-weight: bold;"&gt;relational&lt;/span&gt; database". Still to much indirection exposed by your database if you're going to work with objects in your application anyway...&lt;br /&gt;&lt;br /&gt;I'm running db4o as &lt;span style="font-weight: bold;"&gt;in-memory object-database&lt;/span&gt; for several years now to maintain mission critical data... and I'm a happy programmer with lots of freetime, because programming complex applications got so easy if you're doing things the right way: using db4o as the perfect &lt;a href="http://www.prevayler.org/wiki/"&gt;Prevalayer&lt;/a&gt;... more to come, stay tuned...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-2237509379849637048?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/2237509379849637048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=2237509379849637048' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/2237509379849637048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/2237509379849637048'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2008/10/in-memory-databases.html' title='In-Memory Databases...'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-5447625219844340675</id><published>2007-12-21T11:33:00.000+01:00</published><updated>2007-12-21T11:47:16.140+01:00</updated><title type='text'>Choose the right tools...</title><content type='html'>... and don't try to be smart and use one tool as universal solution for all problems. This won't work as expected...&lt;br /&gt;&lt;br /&gt;I'm usually wondering about people who are trying to store lots of lots of lots of lots of simple data items into an object-database like db4o and complaining about performance afterwards. &lt;br /&gt;&lt;br /&gt;Hello? &lt;br /&gt;&lt;br /&gt;Simple data? Even displayable in a single table? Did you hear of RDBMS lately? Nothing will beat an RDBMS in this discipline because over 30 years of investigation were spent into this technology. Just use an RDBMS and you're fine.&lt;br /&gt;&lt;br /&gt;db4o is an OBJECT database... sure, you can define a primitve class with 3 string values and one integer and declare it as object... but that's not the point about db4o. An OBJECT database is best suited for storing and querying an rich object model with lots of interrelations between the objects, so you can navigate your whole object graph easily along the defined paths. And as soon as you start to try to model this into a RDBMS, you'll wandering the JOIN-LOTS-OF-LOTS-OF-TABLES-HELL.&lt;br /&gt;&lt;br /&gt;So there is a simple rule of thumb:&lt;br /&gt;&lt;br /&gt;If you have lots of lots of simple data, use an RDBMS... but if you have a complex object model with lots of lots of complex relations between your objects, go with an object database.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-5447625219844340675?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/5447625219844340675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=5447625219844340675' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/5447625219844340675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/5447625219844340675'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2007/12/choose-right-tools.html' title='Choose the right tools...'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-4253104012952949875</id><published>2007-08-14T17:44:00.000+02:00</published><updated>2007-08-14T18:02:13.310+02:00</updated><title type='text'>Cayenne is hot (as hot as a ORM can be)</title><content type='html'>Today I had a look into another Object-Relational-Mapper: &lt;a href="http://cayenne.apache.org/"&gt;Apache Cayenne&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I must admit that it is a very nice product... if you're walking on the relational roads. Cayenne is a little bit different than Hibernate, because you're designing the database schema first and map classes afterwards. All can be done with a little GUI-tool which simply does the job.&lt;br /&gt;&lt;br /&gt;Cayenne uses a DataContext which is usually session-bound (whatever a session maybe, think of a web-session) and uses some caches to improve performance.&lt;br /&gt;&lt;br /&gt;But as usual with ORM: If you're building lots of relations (every additional cross-table makes you think: who shall understand &amp; maintain this mess in the future?) and query a whole graph of complex objects (e.g. for in memory processing), you're running into the object-relational impedance mismatch... build a prefech query via lots of inner and outer joins or run into the n+1-select-problem. Both solutions suck...&lt;br /&gt;&lt;br /&gt;But Cayenne has a very nice concept to solve the typical caching issue. All DataContexts are registered at a controller and are synchronized automagically. So if someone is going to change an object in DataContext A, DataContext B and C and D and so on will be notified of the changed object. This solves the typical refreshing-always-kills-the-cache-problem very nicely.&lt;br /&gt;&lt;br /&gt;I'll see if I can come up with something similar for db4o.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-4253104012952949875?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/4253104012952949875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=4253104012952949875' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/4253104012952949875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/4253104012952949875'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2007/08/cayenne-is-hot-as-hot-as-orm-can-be.html' title='Cayenne is hot (as hot as a ORM can be)'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-6391590429717247935</id><published>2007-08-13T00:17:00.000+02:00</published><updated>2007-08-13T00:51:01.132+02:00</updated><title type='text'>db4o.eases(persistence)</title><content type='html'>Today I've played once again with my favorite Object-Relational-Mapper... Hibernate. Maybe there's still something I could learn from Hibernate... maybe not. At least it helps a lot to understand people who are using Hibernate and want to switch to db4o. &lt;br /&gt;&lt;br /&gt;So I grabbed my copy of "Java Persistence with Hibernate" (this book is worth reading it if you're interested in persistence technologies), installed Oracle Express besides MySQL on my laptop and started to work...&lt;br /&gt;&lt;br /&gt;At the end of day I've learned this lesson: Viewing from a OO-perspective Hibernate "stores" objects just as db4o does. Both store just "data", not the methods of an object (here came the Zope Object Database (ZODB) to my mind which stores data and methods together). Hibernate uses a relational database as backend whereas db4o uses its own optimized file-format.&lt;br /&gt;&lt;br /&gt;But when Hibernate "stores" objects as db4o does, what is the reason to stick with db4o? Hibernate and RDBMS-technology is so mature compared to the newcomer db4o...&lt;br /&gt;&lt;br /&gt;The answer is simple: &lt;br /&gt;&lt;br /&gt; - If you have lots of spare time in your life which do you want to convert into working hours until midnight, go ahead with Hibernate and RDBMS.&lt;br /&gt;&lt;br /&gt; - If you're interested to get the job done in a fraction of time and ride your cyclocross-bike in the afternoon: use db4o.&lt;br /&gt;&lt;br /&gt;db4o is the ease of persistence for the programmer. db4o helps you NOT to think about persistence. db4o just works as you're expecting it. And that is what makes db4o different: It helps you to get things done in less time with less trouble. And because db4o is so simple to use it helps you to keep control over your work. Fewer lines of code, less complexity to manage.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;db4o.eases(persistence)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-6391590429717247935?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/6391590429717247935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=6391590429717247935' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/6391590429717247935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/6391590429717247935'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2007/08/db4oeasespersistence.html' title='db4o.eases(persistence)'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-9024342780381131966</id><published>2007-04-19T18:23:00.000+02:00</published><updated>2007-04-19T19:05:05.597+02:00</updated><title type='text'>Templating with Jamon - another piece of the puzzle...</title><content type='html'>Something I really enjoy about db4o is the promise of statically   type-checked code, because I don't want to worry about "refactorings" which get broken due to references of code in strings or strings referencing code.... a typical problem for SQL statements flying around in lots of XML-Mappings (or even more worse: Java code which builds SQL dynamically at runtime).&lt;br /&gt;&lt;br /&gt;For the development of web-applications I'm using Echo2, which is a Java-only web-application- framework modeled after Swing. No need to write lots of ugly HTML, CSS, Javascript etc.pp. Just Java and statically   type-checked code. What a fun to be a web-application-developer...&lt;br /&gt;&lt;br /&gt;But I didn't solve the problem of statically type-checked (and therefore refactorable) &lt;span style="font-weight: bold;"&gt;templates&lt;/span&gt; (e.g. for reports or emails)... until I found &lt;a href="http://www.jamon.org/"&gt;Jamon&lt;/a&gt;. Jamon is a templating language which gets compiled into statically   type-checked non-reflective Java code.&lt;br /&gt;&lt;br /&gt;Just a little example:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;%args&amp;gt;&lt;br /&gt; Person person;&lt;br /&gt; ShoppingCart items;&lt;br /&gt;&amp;lt;/%args&amp;gt;&lt;br /&gt;&lt;br /&gt;Hello &amp;lt;% person.getFullName() %&amp;gt;.&lt;br /&gt;&lt;br /&gt;We're glad to send you the following books for a special prize:&lt;br /&gt;&lt;br /&gt;&amp;lt;%for Item item : items %&amp;gt;&lt;br /&gt; &amp;lt;% item.getName() %&amp;gt; - &amp;lt;% item.getPrize() %&amp;gt;&lt;br /&gt;&amp;lt;/%for&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Save this file as ShoppingMailTemplate.jamon and it gets automatically compiled into a Java-class (via a Eclipse-plugin, Anttask is also possible).  Now you can use ShoppingMailTemplate-class like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;String result = new ShoppingMailTemplate().makeRenderer(yourCustomer, customerShoppingCart).asString()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That's so simple... and now you're safe to refactor your classes without breaking the templates.&lt;br /&gt;&lt;br /&gt;Jamon is a really wonderful piece of software for people who love statically type-checked Java...:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-9024342780381131966?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/9024342780381131966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/9024342780381131966'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2007/04/templating-with-jamon-another-piece-of.html' title='Templating with Jamon - another piece of the puzzle...'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-500806317024029363</id><published>2007-02-27T20:53:00.000+01:00</published><updated>2007-02-27T21:30:10.420+01:00</updated><title type='text'>Kiss Groovy...</title><content type='html'>I'm a big fan of solutions which try to keep technology simple as possible. So it is no wonder that I'm in love with db4o: No SQL, no XML, no ORM, just me and Java and Persistence which simply works. That's a deal.&lt;br /&gt;&lt;br /&gt;Another big simplification for me (mostly developing intranet web-applications) is using the wonderful component &amp; event-based &lt;a href="http://nextapp.com/"&gt;Echo2-Ajax-framework&lt;/a&gt; as presentation tier. No HTML, no CSS, no JavaScript, just me and Java and a rich &amp;amp; responsive GUI which simply works across browsers. That's a deal too.&lt;br /&gt;&lt;br /&gt;But the mess creeps slowly into your stack of libraries...&lt;br /&gt;&lt;br /&gt;I've used...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Velocity as simple templating framework for plain-text reports and mails (loaded from a db4o-database);&lt;/li&gt;&lt;li&gt;JSPs for simple HTML-based reports (loaded from file-system);&lt;/li&gt;&lt;li&gt;BeanShell as script-language for evaluating dynamic business rules stored in a database (db4o of course) and as ad-hoc query-processor for db4o.&lt;/li&gt;&lt;/ul&gt;Too many different technologies with a similar focus with different pros and cons... any chance to clean up the mess?&lt;br /&gt;&lt;br /&gt;I recently started to (re-)evaluate &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; and come to the conclusion: Groovy solves all my templating, runtime-scripting and ad-hoc-query problems with one integrated, well-balanced and very flexible technology. So I only need to know my Groovy to create complex but clean templates (text or html or whatever), dynamic evaluations of code-snippets and ad-hoc queries against my db4o-databases (and the Groovy-Syntax make these queries looking real cool).&lt;br /&gt;&lt;br /&gt;Groovy is just another cool KISS-technology besides db4o &amp;amp; Echo2. It's always nice to see when things become simpler... and to learn something new...:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-500806317024029363?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/500806317024029363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=500806317024029363' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/500806317024029363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/500806317024029363'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2007/02/kiss-groovy.html' title='Kiss Groovy...'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-1451282455509514535</id><published>2007-02-13T17:48:00.000+01:00</published><updated>2006-12-16T18:11:41.042+01:00</updated><title type='text'>No more fakes...</title><content type='html'>Something I really like about db4o is the "ease of deployment."&lt;br /&gt;&lt;br /&gt;Drop the db4o-jars to your project, define a suitable location for your database file and just start working...&lt;br /&gt;&lt;br /&gt;A very nice productivity factor comming along with db4o: It's so easy to work with a copy of the production database on your development machine. Just copy the original (or backuped) db4o-yap-file and start your application on the development-machine. That's it!&lt;br /&gt;&lt;br /&gt;Simply start working with lots of data which gives you a much better impression how your application feels &amp;amp; works in a production environment.&lt;br /&gt;&lt;br /&gt;This way you don't have to create amounts of sensible fake data which only partly mirrors the production data anyway.&lt;br /&gt;&lt;br /&gt;I know that you can export / import a dump of a RDBMS... but this is not as much as simply as simply copying a file.&lt;br /&gt;&lt;br /&gt;And that's what I really like about db4o in every aspect: It makes the life of a developer much more productive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-1451282455509514535?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/1451282455509514535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=1451282455509514535' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/1451282455509514535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/1451282455509514535'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2007/02/no-more-fakes.html' title='No more fakes...'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-2155980573980253326</id><published>2006-12-14T19:46:00.000+01:00</published><updated>2006-12-15T19:34:37.162+01:00</updated><title type='text'>Not so smooth update to 6.0...</title><content type='html'>Today I've switched from db4o 5.5 to 6.0 ("ready for production") in a ongoing project. I'm using db4o since 2004 and updating the db4o-jars didn't give me any surprise in the past... this changed today.&lt;br /&gt;&lt;br /&gt;I've put the db4o-6.0-jars into my project and called a little update-script:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Db4o.configure().allowVersionUpdates(true);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;com.db4o.defragment.Defragment.defrag("database.yap");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;1. BIG BANG...&lt;/span&gt; Ugly traceback poped up which told me that my database is corrupted. Corrupted? The database works fine with older versions, so corrupted is a harsh word which I really don't like to read when updating databases...&lt;br /&gt;&lt;br /&gt;So I told to myself: don't try to do much in one step... I fetched a fresh copy of my database (always work on backups if you're working with databases!!!!), did issue the #allowVersionUpdates(), opened and closed the database and tried defragmenting afterwards. This time all went well. Big Puuuuhhh...&lt;br /&gt;&lt;br /&gt;Now I started my application (at least tried of)...&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;2. BIG BANG...&lt;/span&gt; lots of ClassCastExceptions were thrown. ClassCastExceptions for ClassA in a query which was definitevly constrained on ClassB? What the heck is going on?&lt;br /&gt;&lt;br /&gt;I dived into my code. I'm using a common superclass for all my persisted classes which holds a "deleted"-attribute. I'm not deleting objects directly, I just mark them as deleted, so I can "undo" deletions if I want to. I'm using a simple "QueryWrapper" (which worked for ages without problems in 5.5 and before) which returns only undeleted objects.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;public List query() {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   Query query = objectContainer.query();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   query.constrain(this);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   // The complicated true-not is needed, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   // because 'deleted' is declared as Boolean in one application,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   // so the expression works regardless of Boolean or boolean&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   query.descend("deleted").constrain(true).not();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   return query.execute();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I did some tests and came up with the conclusion: If I constrain my query on an &lt;span style="font-weight: bold;"&gt;indexed field&lt;/span&gt; of a superclass, the constrain of the class itself was ignored. This &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;CRITICAL&lt;/span&gt; bug is already reported here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tracker.db4o.com/jira/browse/COR-34"&gt;http://tracker.db4o.com/jira/browse/COR-34&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But why the hell did my query work with 5.5?&lt;br /&gt;&lt;br /&gt;Because of another bug:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tracker.db4o.com/jira/browse/COR-57"&gt;http://tracker.db4o.com/jira/browse/COR-57&lt;/a&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;br /&gt;COR-34 is no problem if you &lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;don't use an index on the field of the superclass.&lt;/span&gt; COR-57 describes a problem that an index isn't used properly by older versions of db4o if the number of objects to examine by the query processor exceeds a certain level. Maybe the index on the field wasn't created for other reasons, don't know for sure... bad luck, but good to know what's going on.&lt;br /&gt;&lt;br /&gt;To sum up:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;My query did work with old versions of db4o, because the index on the field wasn't used properly.&lt;/li&gt;&lt;li&gt;My query was messed with db4o 6.0, because COR-57 hit me right into the face because of using the index.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I've now introduced the proposed instanceof-check (and additionally I'm checking even the status of the 'deleted'-field on my own now).&lt;br /&gt;&lt;br /&gt;Now one of my application works fine again... but my confidence in the db4o-query-mechanism is a little bit smaller than before.&lt;br /&gt;&lt;br /&gt;I'm already using lots of custom indices and caches for complicated comparisons to speed up queries which would take to much time for the db4o-query-processor. And now I'm using just another "workaround" for the db4o-query-processor for even a simple query. Maybe I'm going to use db4o as a "simple and reliable" persistence machinery in the future which gives me all instances of class with a query-by-example. For all the complicated evaluations I'm using my specialised data structures, which are fast and reliable.&lt;br /&gt;&lt;br /&gt;After this not-so-nice-experience, I started to migrate a second application from 5.2 to 6.0... remember what I've said about db4o as a "simple and reliable persistence machinery"?&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;3. BIG BANG...&lt;/span&gt; after migrating the database file, all my java.util.Date-fields which were formerly set to &lt;span style="font-weight: bold;"&gt;null &lt;/span&gt;(denoting that a workflow wasn't activated at all) ,&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;became suddenly &lt;span style="font-weight: bold;"&gt;Sun Aug 17 08:12:55 CET 292278994.&lt;/span&gt; I'll guess that java, db4o or my application won't run until this year, but who knows.&lt;br /&gt;&lt;br /&gt;There are good chances to run into real trouble if your application relies on checks like this (and my application does):&lt;br /&gt;&lt;br /&gt;if(workflowDate==null) {&lt;br /&gt;...doSomeSeriousWork...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;And to be honest: your Unit-Test won't catch this problem, because newly created java.util.Date-fields will be stored correct again in the database.&lt;br /&gt;&lt;br /&gt;Don't get me wrong: &lt;span style="font-weight: bold;"&gt;db4o rocks!&lt;/span&gt; And 6.0 is declared as "production", not as "stable", so its kind of my own fault to try to migrate applications at this "early" stage (for luck I'm only running in a sandbox).&lt;br /&gt;&lt;br /&gt;But my experience in other open-source-projects is: If you fall too far behind the current "production" builds, you'll run into even more trouble. And if noone is going to stress current builds with "production" data, some errors won't be detected.&lt;br /&gt;&lt;br /&gt;I'll know that the db4o-team is going to fix the issues soon... and I'll hope that "detecting critical errors" is helpful...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-2155980573980253326?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/2155980573980253326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=2155980573980253326' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/2155980573980253326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/2155980573980253326'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2006/12/not-so-smooth-update-to-60.html' title='Not so smooth update to 6.0...'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-116267406424596769</id><published>2006-11-04T21:07:00.000+01:00</published><updated>2006-11-05T21:04:04.030+01:00</updated><title type='text'>The Need for Speed - db4o tops my expectations again...</title><content type='html'>I'm currently migrating a web-application to manage internships of students at my university.  Each semester approximately 1000 students in different progammes of study need to be distributed over 600 schools in the area according to lots of complex criteria.&lt;br /&gt;&lt;br /&gt;The application was formerly build with &lt;a href="http://zope.org"&gt;Zope / Python&lt;/a&gt; using the builtin Zope Object Database (ZODB), but became a little bit slow (sort of "unusable" if you would ask the users) over the years because of lots of complex queries and calculations.&lt;br /&gt;&lt;br /&gt;The new web-application is completely build on top of Ajax with the wonderful &lt;a href="http://nextapp.com/"&gt;Echo2&lt;/a&gt;-framework, so responsiveness of the underlying database-layer was one of the first priorities to give my users the fastest possible graphical user interface delivered via the net.&lt;br /&gt;&lt;br /&gt;I choosed &lt;a href="http://db4o.com/"&gt;db4o&lt;/a&gt; as database-technology and this was the best choice (besides Echo2) I could have made for this project regarding the performance: my database-queries return in a few milliseconds, so updates of the GUI are almost instantly. Working with the application is now almost fun (besides the work to be done), because no-one has to wait for anything anymore... thanks to Echo2 and db4o.&lt;br /&gt;&lt;br /&gt;Additional to that: Coding an application completly in Java (no XHTML, CSS, JavaScript nor ANY SQL) makes me so productive that I'm wondering how people can still build &amp;amp; maintain complex applications with page-oriented frameworks like Struts and RDBMS-technology... maybe these people have to much time to loose.&lt;br /&gt;&lt;br /&gt;Of course I've taken some additional measures in this need for speed... I will write about them when I've finished the application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-116267406424596769?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/116267406424596769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=116267406424596769' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/116267406424596769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/116267406424596769'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2006/11/need-for-speed-db4o-tops-my.html' title='The Need for Speed - db4o tops my expectations again...'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-115929479300926421</id><published>2006-09-26T19:54:00.000+02:00</published><updated>2006-09-26T20:19:53.046+02:00</updated><title type='text'>db4o... a matter of trust!</title><content type='html'>Today several guests (dVPs) were allowed to join the first semi-public db4o-developer-skypecast... a very enlightening event for db4o-hard-core users like me and hopefully not the last one!&lt;br /&gt;&lt;br /&gt;It makes me feel good to listen to the people who are developing the database of my choice, because a database isn't just software, a database is trustware!&lt;br /&gt;&lt;br /&gt;And it needs a big amount of trust to drop data into such an "exotic" and "small" object-database like db4o (compared to mainstream RDBMS).&lt;br /&gt;&lt;br /&gt;But db4o seems to take the right approach (compared to other object-database-vendors): By open-sourcing their database and their development-model db4o gains lots of trust. And that's what really counts in database-driven business.&lt;br /&gt;&lt;br /&gt;db4o - your object-data-based on trust!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-115929479300926421?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/115929479300926421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=115929479300926421' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115929479300926421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115929479300926421'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2006/09/db4o-matter-of-trust.html' title='db4o... a matter of trust!'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-115616535830167862</id><published>2006-08-21T14:26:00.000+02:00</published><updated>2006-08-22T18:15:30.086+02:00</updated><title type='text'>Making the transition easier...</title><content type='html'>There are lots of people in the db4o-forums who are still thinking in the "relational paradigm" and who are trying to work with db4o. And they are constantly hitting the db4o-wall, because db4o is not another RDBMS-solution. db4o is a completely different persistence solution based on the notion of objects.&lt;br /&gt;&lt;br /&gt;There's an easy rule of thumb making the transition from RDBMS-world to db4o-OO-world lots of easier:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Forget anything you've learned about relational databases! &lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Forget about primary keys...&lt;/li&gt;&lt;li&gt;Forget about foreign keys...&lt;/li&gt;&lt;li&gt;Forget about joining tables...&lt;/li&gt;&lt;li&gt;Forget about SQL...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Forget about tables...&lt;/li&gt;&lt;li&gt;...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Best thing to do: Just start developing an OO-Application &lt;span style="font-weight: bold;"&gt;without&lt;/span&gt; persistence in mind!&lt;br /&gt;&lt;br /&gt;Develop your domain model along the domain with interrelated classes inheriting from base-classes and so on. Use all the features of your OO-language to create a rich domain model.  Think of the instantiated objects living in the memory of the virtual machine. Think of what happens if you'll create new objects or update/delete already existing ones.&lt;br /&gt;&lt;br /&gt;As an example for maintaining a consistent object-graph in the memory of the VM (often referred to as "referential integrity" in RDBMS-terms): As long as some objects refering another object, you cannot "delete" this object. You'll have to release all the references to this object first and then this object can be garbage collected by the VM. So your application needs to control or prepare the "deletion" of an object. If your applications is working properly this way, you'll can start to think about persistence.&lt;br /&gt;&lt;br /&gt;Persistence with db4o is something like "extending" the memory of your virtual machine to the size of your hard-disk.&lt;br /&gt;&lt;br /&gt;Think of db4o as an swap-partition for objects.&lt;br /&gt;&lt;br /&gt;If your application works properly without such a swap-space in mind, it will be easy to plug in db4o. db4o helps you to swap objects from memory to disk and back and gives you lots of handles to already stored objects via the different query-mechanisms. Think of db4o as a little helper who breathes live into objects by swapping them from disk to memory (and back) on the command of the programmer.&lt;br /&gt;&lt;br /&gt;db4o will be your best friend when you'll start to be a "real" friend of object-orientation...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-115616535830167862?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/115616535830167862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=115616535830167862' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115616535830167862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115616535830167862'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2006/08/making-transition-easier.html' title='Making the transition easier...'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-115401858908552623</id><published>2006-07-27T18:15:00.000+02:00</published><updated>2006-07-27T18:43:09.096+02:00</updated><title type='text'>db4o rocks!</title><content type='html'>Today I've halfway finished working on an web-application to create diplomas for Master-Of-Education-Students at my university. Depending on the varying programes of study taken by the students there are lots of lots of really weird business rules to calculate the different grades. And these weird business rules (invented by academic people who never thought or heard about a database at all) need to be maintained in a database via a web-application-interface. And I'm the guy who... you know the story.&lt;br /&gt;&lt;br /&gt;I'm so thrilled that I can use db4o on this project!!!&lt;br /&gt;&lt;br /&gt;If I had to use a RBDMS I would need to create approximately 100 tables, with db4o I just need to maintain 15 domain classes and that's it. And the domain classes are simply representing the domain as it is. No mismatch, just OO as it was meant to be with some proper philosophical abstraction.&lt;br /&gt;&lt;br /&gt;db4o really rocks. I'll never go back to the relational world... if there's any wall I'm going to hit with db4o in the future, I will do everything to tear down this wall...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-115401858908552623?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/115401858908552623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=115401858908552623' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115401858908552623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115401858908552623'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2006/07/db4o-rocks.html' title='db4o rocks!'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-115333711664877542</id><published>2006-07-19T20:45:00.000+02:00</published><updated>2006-07-19T21:27:58.146+02:00</updated><title type='text'>Why Cobol still matters... Viewing the World from an OO-Perspective.</title><content type='html'>Many people claim that data is the most valuable factor for any business today. That's right, no doubt. The same people argue that you have to go with a mature RDBMS like Oracle (or Postgres if you cannot pay Oracle) to store your valuable data. Maybe that's right, too...&lt;br /&gt;&lt;br /&gt;But: Why are there so many Cobol-applications running in the wild dating back to the 1970s?&lt;br /&gt;&lt;br /&gt;Simply because they are running for 30 years using a simple flat file storage...&lt;br /&gt;&lt;br /&gt;It is running and well tested code that matters besides data.&lt;br /&gt;&lt;br /&gt;Working code is a value for itself. Data without an business-application full of domain logic which creates, reads, updates, deletes the data according the constraints dictated by the domain is nearly worthless... give Joe User access to SQLPlus and see where your valuable data will go...&lt;br /&gt;&lt;br /&gt;If code matters as well (and who hasn't done a quick&amp;amp;dirty-project which is running for years because it just works), then I come to the conclusion:&lt;br /&gt;&lt;br /&gt;Data and Code are both valuable factors in any business today, they are different sides of the same medal: a working application which gets things done... and that's  the thing that matters.&lt;br /&gt;&lt;br /&gt;Of course, you often cannot recreate data which is lost, so a secured and backedup database is a must. But recreating whole applications with lots of grown and proven business logic isn't cheap... most times it is expensive, very expensive, so people are still running Cobol on outdated mainframes.&lt;br /&gt;&lt;br /&gt;But how does Cobol and a RDBMS relate to Object-Orientation?&lt;br /&gt;&lt;br /&gt;The central theme behind OO is bringing data and code together. Create classes which encapsulate data and are controlling access to this data via methods, which are refering to lots of other classes, build up on the same principles. If OO is done properly, you'll end up with a nice and well done domain model which speaks for itself and allows awesome productivity developing the application running your business.&lt;br /&gt;&lt;br /&gt;If you've ever seen a domain model which abstracted the main aspects of the real world to a programming language like Java, you'll end up and must say: Programming is so easy, just call some methods on my objects and things work out for itself. But this kind of abstraction is a philosophical task, so maybe we should have more philosophers among the senior-consultants...&lt;br /&gt;&lt;br /&gt;db4o is the vehicle for rethinking object-orientation. db4o brings life back to Plain old Java Objects. db4o allows you to think along the domain and you don't have to worry about persistence. db4o is the way to go in the future, because data and code matters. db4o is a database for objects. Thanks db4o!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-115333711664877542?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/115333711664877542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=115333711664877542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115333711664877542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115333711664877542'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2006/07/why-cobol-still-matters-viewing-world.html' title='Why Cobol still matters... Viewing the World from an OO-Perspective.'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-115323321111272887</id><published>2006-07-18T15:50:00.000+02:00</published><updated>2006-07-18T16:33:31.123+02:00</updated><title type='text'>SQL for an Object-Database?</title><content type='html'>The db4o-community sees a regular request in the forums: How can I use SQL with db4o?&lt;br /&gt;&lt;br /&gt;Hey, db4o is an Object-Database which is focused around the OO-programming language of your choice (Java / C#), so why do you constantly ask about a query language dating back to the 1970s?&lt;br /&gt;&lt;br /&gt;What might be the use-case for SQL in an OO-database?&lt;br /&gt;&lt;br /&gt;Forget about the argument that people are used to SQL and therefore wants to see it as a "must-have"-feature of a "real" database... best to choose an RDBMS if you'll lost in SQL.&lt;br /&gt;&lt;br /&gt;Another use-case might be ad-hoc-queries? Just use a simple &lt;a href="http://www.beanshell.org/"&gt;BeanShell&lt;/a&gt;-interpreter (or something similar) connected to your db4o and you can reuse all the features of your domain-model to construct queries in your native programming language (e.g. Java) at runtime of your application. What's the need of flattening your nice domain-model to an SQL-like expression which isn't real SQL anyway? Simply a waste of time...&lt;br /&gt;&lt;br /&gt;Reporting? Using Cry*Reports to get nice reports of your SQL-database? db4o has recently published the &lt;a href="http://www.db4o.com/about/productinformation/features/drs.aspx"&gt;Db4o Replication System (drs)&lt;/a&gt;, which allows you to replicate your data to an RDBMS via Hibernate. Just replicate and connect your reporting tool. So there's no more need for "more" SQL to create reports. Maybe we have to think about a possibility for "real-time"-replication. But maybe we are reporting against POJOs in the future anyway...&lt;br /&gt;&lt;br /&gt;Another use-case? Manipulating your objects via SQL (insert, update, delete)? Yeah... create an OO-model with nice encapsulation of private data and allow people to work around by firing misbehaving SQL against your objects... not me.&lt;br /&gt;&lt;br /&gt;One central vision of db4o: Avoid string-based queries by all means (e.g. the invention of Native Queries compared to former SODA-Queries). And that's one reason developers love db4o: No more strings which will break your nice compile-time-checks and refactoring-tools...&lt;br /&gt;&lt;br /&gt;So please, dear db4o-developers: Don't waste time on "integrating" SQL into db4o beyond the DRS. There's simply no use-case for it, it's just a bad marketing for db4o overall, because a possible "db4oSQL" isn't the Standard-SQL people are used to... claiming to support a standard like SQL which cannot be supported properly will result in bad reputation. So stay on the real standard: the programming language of your choice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-115323321111272887?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/115323321111272887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=115323321111272887' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115323321111272887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115323321111272887'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2006/07/sql-for-object-database.html' title='SQL for an Object-Database?'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-115304306213325139</id><published>2006-07-16T10:55:00.000+02:00</published><updated>2006-07-16T11:44:22.143+02:00</updated><title type='text'>From Python to Java</title><content type='html'>I did lots of web-application development with &lt;a href="http://www.zope.org/"&gt;Zope&lt;/a&gt; in the last years. Zope is an mature web-application-developing environment scripted in Python and backbased by an Object-Database called ZODB (Zope Object Database).&lt;br /&gt;&lt;br /&gt;At some point in time I came to the conclusion that scripting languages like Python are a nightmare to be used for developing and maintaining bigger applications over years. There's no useful IDE, no type-safety, no refactorability, lots of strings referencing lots of other strings  etc.pp.&lt;br /&gt;&lt;br /&gt;So I switched to Java, because Java promised all the things I've missed... cool IDEs, Refactorability without worries, Type-Safety, Compile-Time-checks, no more strings referencing code, etc.pp...&lt;br /&gt;&lt;br /&gt;But I was very disappointed about the "best practices" developing web-applications in Java: So much XML, so litte Java...&lt;br /&gt;&lt;br /&gt;Using view-technologies like Struts/JSP or JSF gives you lots of XML and templates, which are not aware of the Java-code and vice versa. Refactor a bit and it breaks down the whole thing...&lt;br /&gt;&lt;br /&gt;Using a RDBMS with an fullblown OR-Mapper like Hibernate or a lightweight SQL-externalizer like IBATIS gives you lots of XML-files for maintaining the mappings. You change A for B in Java and have to repeat this in the XML-mappings to keep things going...&lt;br /&gt;&lt;br /&gt;I felt, that Java (as language) was the right choice, but the stack of mainstream-technologies for developing web-applications was not. I wanted to think and model in objects along the domain and did not want to fight with technology stacks which enforced me to think in technological categories.&lt;br /&gt;&lt;br /&gt;I tried to remember what I really liked about Zope: awesome productivity and the object-database which allows you to express complicated "relations" between objects in a more natural way than joining 17 cross-tables in SQL...&lt;br /&gt;&lt;br /&gt;So I've searched and finally found two of the most promising technologies, which allow me to concentrate on the problems of the domain: &lt;a href="http://www.db4o.com"&gt;db4o&lt;/a&gt; as a real object-database which simply works and &lt;a href="http://nextapp.com/"&gt;Echo&lt;/a&gt; as component orientated view-technology modeled after Swing.&lt;br /&gt;&lt;br /&gt;Combining db4o and Echo gives me so more productivity than anything I've tried before (and I've even tried Ruby on Rails which falls far behind): Create a bunch of objects for a selection, feed it to the model of the view, get notified that the user selected an object, persist this object to the database and you're done. Just two lines of code. From now on I can concentrate on the domain and I don't have to worry about technologies...&lt;br /&gt;&lt;br /&gt;Thanks to Java, thanks to db4o, thanks to Echo...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-115304306213325139?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/115304306213325139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=115304306213325139' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115304306213325139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115304306213325139'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2006/07/from-python-to-java.html' title='From Python to Java'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-115282337703369195</id><published>2006-07-13T22:11:00.000+02:00</published><updated>2006-07-13T22:44:31.206+02:00</updated><title type='text'>Ted Neward at DUC 2006: "Objects, All the Way Down"</title><content type='html'>Ted Neward gave a nice talk at the DUC 2006. He made lots of good points, but I have to disagree at least on one.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Ted assumes that productivity is one of the most important factors in software development.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Yeah, that's so right!!!&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Scientific research has shown that a programmer can only write a certain amount of code-lines per day, mostly independent of the programming language.&lt;/li&gt;&lt;/ul&gt;Probably this is correct, too...&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;So a programming language which translates to more resulting assembly code per line of programming code is more productive. One line of Ruby-code translates to hundreds of lines of assembly code whereas one line of Java-code translates only up to ten. So using Ruby is far more productive than using Java.&lt;/li&gt;&lt;/ul&gt;This argument is completely nonsense! I can start a web-application server like Jetty in three lines of Java-Code which results in thousands of thousands lines of assembly code. Printing "Hello World" onto the screen in Ruby results in thousands of thousands lines of assembly code too, because the lines needs to be interpreted by the Ruby-Interpreter at runtime... So what does the argument show at all about productivity? Nothing...&lt;br /&gt;&lt;br /&gt;And I don't think that this kind of argument works for the "average line of code". Maybe you can do a list-comprehension in one line of Ruby-Code and you'll need two or three lines of Java-Code for this. Are you three times more productive with Ruby than with Java? Yeah... if your whole application consists of list-comprehensions, if you don't count the typos you've made and which bubble up at runtime, if you don't want to refactor your application, if you don't want to be supported by an IDE and so on.&lt;br /&gt;&lt;br /&gt;To make a long story short: I've used lots of Python for years (and used even some Ruby), but switching to statically-typed Java made me so more productive that I don't believe in the "scripting languages will save our ass"-refrain no more... more to come on this topic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-115282337703369195?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/115282337703369195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=115282337703369195' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115282337703369195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115282337703369195'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2006/07/ted-neward-at-duc-2006-objects-all-way.html' title='Ted Neward at DUC 2006: &quot;Objects, All the Way Down&quot;'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31083728.post-115281404307856429</id><published>2006-07-13T20:01:00.000+02:00</published><updated>2006-07-13T20:07:23.080+02:00</updated><title type='text'>db4o User Conference 2006</title><content type='html'>I just arrived back from the  DUC 2006.  It was a very, very nice event meeting lots of very nice people... thanks to the db4o-team (esp. Christof) for bringing the die-hard-db4o-users together in London.&lt;br /&gt;&lt;br /&gt;The biggest problem for me: Talking to so much people in English is hard if you're not used to it... Hopefully not too much people will think that I'm totally brain-dead. I'll promise: I'm not (at least most of the time).&lt;br /&gt;&lt;br /&gt;To be continued...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31083728-115281404307856429?l=db4o.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4o.blogspot.com/feeds/115281404307856429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31083728&amp;postID=115281404307856429' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115281404307856429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31083728/posts/default/115281404307856429'/><link rel='alternate' type='text/html' href='http://db4o.blogspot.com/2006/07/db4o-user-conference-2006.html' title='db4o User Conference 2006'/><author><name>Maik Jablonski</name><uri>http://www.blogger.com/profile/14125275811371442445</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp0.blogger.com/_DUI1sM8Lu4A/R_T6_lxM6cI/AAAAAAAAADk/NlkSvITBaSM/S220/Maik4.JPG'/></author><thr:total>2</thr:total></entry></feed>
