LiveDB
From APIDesign
(→Create a database) |
(→Create a database) |
||
Line 23: | Line 23: | ||
[[Image:Livedb.png]] | [[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 [[AnnotationProcessor]]s. | ||
+ | |||
+ | 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: | ||
+ | |||
+ | <source lang="java"> | ||
+ | age.<ctrl+space> | ||
+ | </source> | ||
+ | |||
+ | 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: | ||
+ | |||
+ | <source lang="java"> | ||
+ | @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; | ||
+ | </source> | ||
+ | |||
+ | == 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. |
Revision as of 21:16, 14 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
Right now I have sources in a branch, as not everything is automated (I don't know how to start Derby automatically yet):
$ hg clone -r livedb http://source.apidesign.org/hg/apidesign/ $ cd apidesign $ hg pull $ hg update livedb
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:
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.