tag:blogger.com,1999:blog-84998030418842457512024-03-05T06:44:46.541-08:00Gerd KlevesaatGerd Klevesaathttp://www.blogger.com/profile/09855182426659831922noreply@blogger.comBlogger5125tag:blogger.com,1999:blog-8499803041884245751.post-62321548153072258132008-06-15T08:45:00.000-07:002008-06-15T10:23:23.199-07:00Groovy and db4oIt's already a long time since my last post. Got caught in my current project.<br />However, recently I used some time to have a look at some topics of interest.<br />One of these points were Groovy. Currently, there is a lot of momentum in the area of dynamic languages. Groovy is part of it and it's really cool. I think it as a natural complementary fit to Java if used in the right way.<br />You can choose between dynamic and static typed programming. This freedom may be heaven and hell. However, it brings some useful and well though language constucts and features to ease programming. Just to mention a few: Closures, Everything is an object, Handling of list and maps, Proxying, Meta-class programming, construction of DSL.<br /><br />The latter one is based on a groovy's builder concept.<br />Since I wanted to check it out, I used my favourite object oriented database <a href="http://www.db4o.com/">db4o</a> and built a <a href="http://code.google.com/p/db4o-groovy/">db4o builder</a> on top of it. It is hosted on google. You can download it <a href="http://code.google.com/p/db4o-groovy/downloads/detail?name=db4o-groovy-0.6.zip&can=2&q=#makechanges">here</a> or browse the svn for the latest code.<br /><br />The Groovy builder pattern is a powerful concept to provide arbitrary nested trees of objects or events, providing a tree-like façade. Though the db4o API is already very simple to use on its own, the db4o builder provides another easy way of accessing db4o databases. A Groovy builder relies on closures to setup its tree-like structure based on nodes.<br /><p>Db4o has a very easy Java API that can be used in groovy as is. Open a database by and work on a Db4oContainer object to store and access objects by simply calling set and get or performing complex queries.<br /></p><pre><br />// Open the database<br />Db4oObjectContainer oc = Db4o.openFile(“d:/Db4oSampleDatabase.yap”);<br /><br />// Store an object<br />oc.set(new Person("Doe","John") );<br />// query data<br />Query q = oc.query();<br />q.constrain(Person.class);<br />ObjectSet objectSet = q.execute();<br />…<br />// close it again, database operations are committed automatically<br />oc.close();<br /></pre>Well, that is already really easy.<br /><p>However, in groovy you can leverage the builder concept to let it open and close the database automatically. Same when specifying a query the builder may execute the query automatically when the query has been set.</p>That is what the db4o builder is about.<br /><p>You can do the same as above using the following syntax.<br /></p><pre><br />Db4oBuilder builder = new Db4oBuilder();<br />builder.file('d:/Db4oSampleDatabase.yap') {<br />set(new Person("Doe","John") )<br />query(Person.class) {<br />}<br />// query executed, process result<br />}<br /></pre>As you see, there is nothing special in creating a db4o builder object. You create it like any other java or groovy object. A db4o database is opened and close by using the <span style="font-style: italic;">file </span> method (well to open a remote database server there is also a client method that takes the host, port, user name and password which should work but I haven't tested it yet).<br /><p>The db4o database is opened on entering the file node and closed on leaving it. The file method is equipped with a closure to take the custom action.<br /></p> <pre>Db4oBuilder builder = new Db4oBuilder();<br />builder.file('d:/Db4oSampleDatabase.yap') {<br />}<br /></pre>Within the closure, we now can use additional methods to store, update, delete or query objects. In order to store objects, you simply call the set method within the closure of the file method. The set method takes the object to store as argument. <br /><pre>Db4oBuilder builder = new Db4oBuilder();<br />builder.file('test.yap') {<br />set( new Person("Doe","John"))<br />}<br /></pre>If you need access to the opened db4o database, the db4o builder provides access to a variable called objectContainer which is of type com.db4o.ObjectContainer and represents the opened db4o database connection.<br /><pre>Db4oBuilder builder = new Db4oBuilder();<br />builder.file('test.yap') {<br />println objectContainer.ext().version()<br />}<br /></pre>That’s it basically. You can insert any code within the closure. For example, the following code stores 10 Person objects into the database.<br /><pre>Db4oBuilder builder2 = new Db4oBuilder();<br />builder2.file('test.yap') {<br />(1..10).each {<br /> def pers = new Person("Doe"+it,"John");<br /> set(pers)<br />}<br />}<br /></pre>Objects can be deleted by using the delete method.<br />Queries supported are based on SQL or the S.O.D.A. concept.<br />S.O.D.A. queries are built like a tree. A basic example<br /><pre>Db4oBuilder builder3 = new Db4oBuilder();<br />builder3.file('d:/Db4oSampleDatabase.yap') {<br />query() {<br /> constrain(Person.class) {<br /> }<br />}<br />}<br /></pre>The output of this query are all persons stored in the db4o database.<br />This query can also be simplified by using the person class as a parameter to the query node.<br /><br /><pre>Db4oBuilder builder3 = new Db4oBuilder();<br />builder3.file('d:/Db4oSampleDatabase.yap') {<br />query(Person.class) {<br />}<br />}<br /></pre>The result of the query can be evaluated or processed either within the builder or outside of it.<br /><pre>Db4oBuilder builder3 = new Db4oBuilder();<br />builder3.file('d:/Db4oSampleDatabase.yap') {<br />query(Person.class) {<br />}<br />if( objectSet ) {<br /> println ("${objectSet.size()}")<br /> objectSet.each() { p -><br /> println "Person: ${p.lastName},${p.firstName},${p.age}"<br /> }<br />}<br />}<br /></pre>Query results are automatically available in a variable called <span style="font-style: italic;">objectSet</span>. Here is more complex example using or operator to combine to subqueries.<br /><pre>import com.db4o.groovy.Db4oBuilder;<br />import gk.samples.db4o.domain.Person;<br /><br />Db4oBuilder builder3 = new Db4oBuilder();<br />builder3.file('d:/Db4oSampleDatabase.yap') {<br />query(Person.class) {<br /> descend("lastName") {<br /> constrain("KL") {<br /> startsWith() {<br /> or() {<br /> descend("age") {<br /> constrain(34) {<br /> greater() <br /> }<br /> }<br /> }<br /> }<br /> }<br /> }<br />}<br />if( objectSet ) {<br /> println "${objectSet.size()}"<br /> objectSet.each() { p -> println "Person: ${p.lastName},${p.firstName},${p.age}" } }<br />}<br /></pre>SQL Queries are done the same way by using a special node called sqlquery. In addition to query the results after the node and outside of the builder, the query result can be processed within the sqlquery node itself as well. An example:<br /><pre>Db4oBuilder builder = new Db4oBuilder();<br />builder.file('d:/Db4oSampleDatabase.yap') {<br />sqlquery("from gk.samples.db4o.domain.Person") {<br /> if( objectSet ) {<br /> println ("${objectSet.size()}")<br /> objectSet.each() { p -> println "Person: ${p.lastName},${p.firstName},${p.age}"}<br /> }<br />}<br />}<br /></pre>Db4o allows you to setup configuration parameters. Most of them have to be set before opening the database. That is supported by the db4oBuilder by using a special configuration node.<br /><pre>Db4oBuilder builder = new Db4oBuilder();<br />builder.configuration() {<br />}<br /></pre>The configuration node sets up a reference the db4o configuration object. This reference is available by using the <span style="font-style: italic;">config</span> variable can be use to set any db4o configuration parameter.<br /><pre>Db4oBuilder builder = new Db4oBuilder();<br />builder.configuration() {<br />config.activationDepth(5)<br />config.updateDepth(5)<br />config.freespace().discardSmallerThan(5)<br />}<br /></pre>Alternatively, you can pass a map of configuration parameters as argument to the configuration node. These will then be set by the db4o builder automatically.<br /><pre>def config = ["activationDepth" : 5, "updateDepth": 5]<br /><br />builder.configuration( config ) {<br />}<br /></pre>After setting the configuration the db4o database can be opened as seen before.<br /><pre>builder.configuration() {<br />config.activationDepth(5)<br /><br />file('d:/Db4oSampleDatabase.yap') {<br /> // store or query objects<br />}<br />}<br /></pre>I will continue looking at Groovy and check out more concepts provided by Groovy.Gerd Klevesaathttp://www.blogger.com/profile/09855182426659831922noreply@blogger.com1tag:blogger.com,1999:blog-8499803041884245751.post-81818266462901777092007-11-11T15:58:00.000-08:002007-11-11T16:11:32.517-08:00db4o-netbeans updates<span style="font-family:arial;"><span class="blsp-spelling-error" id="SPELLING_ERROR_0">db</span>4o-<span class="blsp-spelling-error" id="SPELLING_ERROR_1">netbeans</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_2">is</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_3">available</span> in 0.6.0 <span class="blsp-spelling-error" id="SPELLING_ERROR_4">now</span>.<br /><span class="blsp-spelling-error" id="SPELLING_ERROR_5">Since</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_6">my</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_7">time</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_8">is</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_9">very</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_10">limited</span>, I <span class="blsp-spelling-error" id="SPELLING_ERROR_11">moved</span> in <span class="blsp-spelling-error" id="SPELLING_ERROR_12">small</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_13">steps</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_14">with</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_15">the</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_16">plugin</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_17">only</span>.<span class="blsp-spelling-error" id="SPELLING_ERROR_18"> However</span>, <span class="blsp-spelling-error" id="SPELLING_ERROR_19">some</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_20">things</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_21">have</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_22">been</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_23">added</span>, <span class="blsp-spelling-error" id="SPELLING_ERROR_24">some</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_25">things</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_26">have</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_27">been</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_28">stabilized</span>.<br /><br /><a href="http://code.google.com/p/db4o-netbeans/downloads/detail?name=Db4o%20NetBeans%20Plugin_0.6.0.pdf&can=2&q=#makechanges"><span class="blsp-spelling-error" id="SPELLING_ERROR_29">Documentation</span></a> <span class="blsp-spelling-error" id="SPELLING_ERROR_30">has</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_31">been</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_32">updated</span>. <span class="blsp-spelling-error" id="SPELLING_ERROR_33">Go</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_34">to</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_35">the</span> <a href="http://code.google.com/p/db4o-netbeans/"><span class="blsp-spelling-error" id="SPELLING_ERROR_36">db</span>4o-<span class="blsp-spelling-error" id="SPELLING_ERROR_37">netbeans</span></a> <span class="blsp-spelling-error" id="SPELLING_ERROR_38">home</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_39">or</span> download <span class="blsp-spelling-error" id="SPELLING_ERROR_40">directly</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_41">from</span> <a href="http://code.google.com/p/db4o-netbeans/downloads/detail?name=db4o-netbeans_0.6.0.zip&can=2&q=#makechanges"><span class="blsp-spelling-error" id="SPELLING_ERROR_42">here</span></a>.<br /><span class="blsp-spelling-error" id="SPELLING_ERROR_43">Well</span>, <span class="blsp-spelling-error" id="SPELLING_ERROR_44">as</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_45">ever</span>, <span class="blsp-spelling-error" id="SPELLING_ERROR_46">any</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_47">feedback</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_48">is</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_49">appreciated</span>.<br /><br /><span class="blsp-spelling-error" id="SPELLING_ERROR_50">Soon</span>, <span class="blsp-spelling-error" id="SPELLING_ERROR_51">after</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_52">finishing</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_53">the</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_54">most</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_55">important</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_56">basic</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_57">features</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_58">to</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_59">the</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_60">plugin</span>, I will <span class="blsp-spelling-error" id="SPELLING_ERROR_61">have</span> a <span class="blsp-spelling-error" id="SPELLING_ERROR_62">look</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_63">on</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_64">how</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_65">to</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_66">add</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_67">support</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_68">to</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_69">the</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_70">Visual</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_71">Web</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_72">Pack</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_73">integrated</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_74">into</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_75">NetBeans</span>. <span class="blsp-spelling-error" id="SPELLING_ERROR_76">This</span> will <span class="blsp-spelling-error" id="SPELLING_ERROR_77">be</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_78">good</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_79">milestone</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_80">for</span> a <span class="blsp-spelling-error" id="SPELLING_ERROR_81">tight</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_82">integration</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_83">of</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_84">db</span>4o <span class="blsp-spelling-error" id="SPELLING_ERROR_85">database</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_86">into</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_87">NetBeans</span>. <span class="blsp-spelling-error" id="SPELLING_ERROR_88">If</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_89">only</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_90">time</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_91">wouldn</span>'t <span class="blsp-spelling-error" id="SPELLING_ERROR_92">be</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_93">such</span> a <span class="blsp-spelling-error" id="SPELLING_ERROR_94">problem</span>...<br /><br /><br /></span>Gerd Klevesaathttp://www.blogger.com/profile/09855182426659831922noreply@blogger.com2tag:blogger.com,1999:blog-8499803041884245751.post-75913119456576211092007-10-23T14:26:00.000-07:002007-10-23T17:22:57.333-07:00db4o-netbeans 0.3.0 with little changes<span style="font-family:arial;">Small changes have been added to the db4o-netbeans plug in.</span><br /><span style="font-family:arial;">However, I gave it the version number 0.3.0. </span><br /><span style="font-family:arial;">The most interesting changes are:</span><br /><ul><li><span style="font-weight: bold;font-family:arial;" >Creation of a new db4o database connection:</span><span style="font-family:arial;"> Entering the conection details are integrated into the new file wizard as its own wizard page. </span></li><li><span style="font-weight: bold;font-family:arial;" >Start As Server:</span><span style="font-family:arial;"> You can also start a db4o database file within an embedded server for testing purposes.</span></li><li><span style="font-weight: bold;font-family:arial;" >Auto-update capabilities:</span><span style="font-family:arial;"> A NetBeans Update Center has been added to get an updated plugin downloaded and installed automatically.</span></li></ul><span style="font-family:arial;">Documentation has been updated. Go to the <a href="http://code.google.com/p/db4o-netbeans/">db4o-netbeans</a> home or download directly from <a href="http://code.google.com/p/db4o-netbeans/downloads/list">here</a>.<br />Well, as ever, any feedback is appreciated.<br /></span>Gerd Klevesaathttp://www.blogger.com/profile/09855182426659831922noreply@blogger.com0tag:blogger.com,1999:blog-8499803041884245751.post-90721706002748664732007-10-15T15:35:00.000-07:002007-10-15T15:52:48.884-07:00db4o-netbeans 0.2.0 available<span style="font-family:arial;">I have improved the usability of the db4o-netbeans plug-in. It is now available as version 0.2.0.<br />You may <a href="http://code.google.com/p/db4o-netbeans/downloads/detail?name=db4o-netbeans_0.2.0.zip&can=2&q=">download</a> the new version from <a href="http://code.google.com/p/db4o-netbeans/downloads/detail?name=db4o-netbeans_0.2.0.zip&can=2&q=">here</a>.<br />In comparison to the version 0.1.0, there are some changes. A document describing the new version and the changes made may downloaded as a <a href="http://code.google.com/p/db4o-netbeans/downloads/detail?name=Db4o%20NetBeans%20Plugin_0.2.0.pdf&can=2&q=">pdf</a> from the same location.<br /><br />I think, it is a good base to improve it by adding more features.<br />Next steps are focused on improving the editor capabilities, exception handling and preparing the source code to add it to the download section as well.<br /><br />Check out the new version.<br />Any feedback or comments how to improve are welcome.<br /><br /> <br /></span>Gerd Klevesaathttp://www.blogger.com/profile/09855182426659831922noreply@blogger.com0tag:blogger.com,1999:blog-8499803041884245751.post-60647316103859928682007-09-09T15:33:00.000-07:002007-09-10T16:36:54.321-07:00db4o-netbeans project launchedI've just started a new project to build a netbeans plugin for the <a href="http://www.db4o.com/">db4o object database</a>. Keep a bookmark to <a href="http://code.google.com/p/db4o-netbeans/">http://code.google.com/p/db4o-netbeans/</a>. Soon, I will add artifacts there that you can download and use.<br /><br />As a preview, here are some of the first screen shots and some information about the initial version:<br /><br />db4o database are accessed by simply creating a custom file type choosing <span style="font-style: italic;">New File </span>on the <span style="font-style: italic;">File </span>menu and adding it to an opened java project.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQIy1HKGg3Mkv8Z-6XHxaVI2IboWsjlIJSg0SAPnnkBXw-SoH8Np9eT7BGlVubozbqOXx7E9twjv5rzRjBjo3XBf1hTxvfah7SYVsKSEI62nrXrRUNuvVd-f4vyeynJ4LwhPn3ZZIunRIS/s1600-h/Preview008.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQIy1HKGg3Mkv8Z-6XHxaVI2IboWsjlIJSg0SAPnnkBXw-SoH8Np9eT7BGlVubozbqOXx7E9twjv5rzRjBjo3XBf1hTxvfah7SYVsKSEI62nrXrRUNuvVd-f4vyeynJ4LwhPn3ZZIunRIS/s320/Preview008.jpg" alt="" id="BLOGGER_PHOTO_ID_5108339295301725330" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />After entering a name, a file of type db4o is added to the java project.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRTORj620G07Bwg5Gp_QJZqbRDpSeCTuXIIh-OZDAaqaw_IhItVGV9u18AYM7nUpJoz-gK7aKMuMkQkAW3LNCc-grBW3yFOtIDYbO7o-Uk4vbXrT1hxiqtCoZHdXgx2kP4iV-nE9xetpoT/s1600-h/Preview001.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRTORj620G07Bwg5Gp_QJZqbRDpSeCTuXIIh-OZDAaqaw_IhItVGV9u18AYM7nUpJoz-gK7aKMuMkQkAW3LNCc-grBW3yFOtIDYbO7o-Uk4vbXrT1hxiqtCoZHdXgx2kP4iV-nE9xetpoT/s320/Preview001.jpg" alt="" id="BLOGGER_PHOTO_ID_5108337950976961650" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Using the context menu item <span style="font-style: italic;">Open Db4o Editor</span> opens the editor to visualize the db4o database content. The editor may be used to navigate the database content, add or remove objects to or from the database or change values of stored objects.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVO8T3FRSjWVC8OJhQKDe0tQccpxVxWPhKgdHH2wwsByTOxy7NT_ahSopyUKjAUc4GtkXVXaClEQKQKKb1DfFqefvGjlyFcSfNyNeHoAjQ3wV3VQcWVA_ghSCy95CAyX_8nFlFOCwr0nJn/s1600-h/Preview003.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVO8T3FRSjWVC8OJhQKDe0tQccpxVxWPhKgdHH2wwsByTOxy7NT_ahSopyUKjAUc4GtkXVXaClEQKQKKb1DfFqefvGjlyFcSfNyNeHoAjQ3wV3VQcWVA_ghSCy95CAyX_8nFlFOCwr0nJn/s400/Preview003.jpg" alt="" id="BLOGGER_PHOTO_ID_5108340631036554402" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Values are edited and changed in the regular properties window provided by net beans.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs1kj3aN7ICgIP8H3NCf-ocw3-yoD5BJaj9xNkPBNYwgafw3iWMf-N5TT12qDDq3vALe5kzvYhApdUytAbxiU3lhNEr0o8iio5z8yJ8s_5Vj1EK22oBPlGl0PrKqmzmsrz655xB9kEB75U/s1600-h/Preview004.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs1kj3aN7ICgIP8H3NCf-ocw3-yoD5BJaj9xNkPBNYwgafw3iWMf-N5TT12qDDq3vALe5kzvYhApdUytAbxiU3lhNEr0o8iio5z8yJ8s_5Vj1EK22oBPlGl0PrKqmzmsrz655xB9kEB75U/s400/Preview004.jpg" alt="" id="BLOGGER_PHOTO_ID_5108341404130667698" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />A first simple approach to add support for db4o database is by constructing soda based queries. The elements of a query will be added as sub nodes to the db4o database node in the projects navigation view.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTevpoS2dPeZzYhFJ_lmLNSc7K43GUVOVSdr6vlxT54edBndeGFV0qtOnRsZXhbbxEV1959HU5p2YJUs5A7kTl0DnQeuzaddY91MecjfX_VD-_haZv6Vfqy5pSnQt_GXnMQnWYft2mT-bg/s1600-h/Preview005.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTevpoS2dPeZzYhFJ_lmLNSc7K43GUVOVSdr6vlxT54edBndeGFV0qtOnRsZXhbbxEV1959HU5p2YJUs5A7kTl0DnQeuzaddY91MecjfX_VD-_haZv6Vfqy5pSnQt_GXnMQnWYft2mT-bg/s400/Preview005.jpg" alt="" id="BLOGGER_PHOTO_ID_5108343014743403730" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />However, this approach has some limitations but is easy to implement.<br />Executing the query opens another editor window for the query results.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8_2Yh9aOstxsQbdHRXDEBmc-btrD5ikmdzUjHPm_uWEkEJus0bmYz6zCs3VC2uQpUL2Iv9aQ-ywTaBdtbteQWYjeproT65v5Mo8mCPpadLq8jNAfMXIDlrQ6qkacbMk2hjzdXL4yIu-0/s1600-h/Preview007.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU8_2Yh9aOstxsQbdHRXDEBmc-btrD5ikmdzUjHPm_uWEkEJus0bmYz6zCs3VC2uQpUL2Iv9aQ-ywTaBdtbteQWYjeproT65v5Mo8mCPpadLq8jNAfMXIDlrQ6qkacbMk2hjzdXL4yIu-0/s400/Preview007.jpg" alt="" id="BLOGGER_PHOTO_ID_5108343929571437794" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The count of objects affected by the query is additionally displayed in the title.<br /><br />Well, the project has just been started and there is quite a lot to do to make it smooth.<br />Especially, improving the query approach to the latest db4o features and editing capabilities are quite challenging.<br />Moreover, currently db4o 6.1 is used. I need to make sure that the plugin is independent on a certain db4o version. And last but not least, support for net beans 6.0 is on the list as well.<br /><br />If you are interested in the project and would like to know more about it, please post a comment here. Contributions are welcome.Gerd Klevesaathttp://www.blogger.com/profile/09855182426659831922noreply@blogger.com3