'. '

LiveDB

From APIDesign

(Difference between revisions)
Jump to: navigation, search
(Create a database)
(Get the sources)
Line 7: Line 7:
== Get the sources ==
== Get the sources ==
-
Right now I have [[sources]] in a branch, as not everything is automated (I don't know how to start Derby automatically yet):
+
The [[sources]] are now available and their execution is fully automated (even the [[Derby]] database is started automatically via the [[Ant]] build script). To get the [[sources]] follow these steps:
<source lang="bash">
<source lang="bash">
Line 13: Line 13:
$ cd apidesign
$ cd apidesign
$ hg pull
$ hg pull
-
$ hg update livedb
+
$ hg update
</source>
</source>

Revision as of 07:34, 17 July 2010

Another use of AnnotationProcessors (in addition to generate CompileTimeCaches) is to provide type-safe, compile-time view of a live database structure. Something that might be called JavaOnRails.

For a while languages like Ruby or Groovy has been blessed for being able to easily access structures in databases without all the hassle associated with traditional object relational mapping needed in Java. Maybe there was something more in the whole rails hype, but for me, rails mean exactly this. Be able to see content of LiveDB.

This page describes my first experiment showing how to do something similar in old good Java. Well, it is not old good Java, but Java6. That version of Java is still few years old, but good ideas take time. That is why we are only slowly recognizing how useful AnnotationProcessors can be.

Contents

Get the sources

The sources are now available and their execution is fully automated (even the Derby database is started automatically via the Ant build script). To get the sources follow these steps:

$ hg clone -r livedb http://source.apidesign.org/hg/apidesign/
$ cd apidesign
$ hg pull
$ hg update

The right project is located in samples/livedb directory.

Create a database

Start Derby database as explained for example at JavaDB tutorial. Create a table called AGE with two columns NAME and AGE:

Image:Livedb.png

Use Code Completion

Now open the samples/livedb project in NetBeans IDE 6.9. Version 6.9 is the necessary minimum, as it is the first version that provides superior support for AnnotationProcessors.

Open for example LiveDBTest.java. It uses class Age. That class is dynamically generated during compile time to reflect structure of the AGE table created before. But try for example code completion on:

age.<ctrl+space>

You will correctly see fields representing individual rows in the t able. Moreover these fields have proper types (e.g. NAME is String, AGE is BigInteger). All of this is a result of simple use of the @LiveDB annotation in the package-info.java file:

@LiveDB(
    classname="Age", password="j1", user="j1",
    query="select * from APP.AGE", 
    url="jdbc:derby://localhost:1527/livedb"
)
package org.apidesign.livedb.example;
 
import org.apidesign.livedb.LiveDB;

Modify the Table

Now add new column to the table. Use it in the code. See if code completion sees it (probably not). If everything compiles (probably yes).

tbd.

Personal tools
buy