Derby can serve as an embedded relational database in Java applications. This may be a solution for use cases that need real-time access to relatively stable data, such as gene aliases and annotations. Getting Derby to work within a Cytoscape plugin was not trivial, so I wanted to share that experience.
Important Links
Offical [http://db.apache.org/derby/ Apache Derby] site
Useful [http://db.apache.org/derby/quick_start.html Quick Start] site for newbies
[http://db.apache.org/derby/derby_downloads.html#Software+required+to+build+Derby Reference] to OSGi (osgi.jar)
- Relevant discussion threads relating to OSGi wrt Derby
Getting It To Work
- Like other libraries to be included in a plugin, you have to unjar the classes and include them in your build folder.
- In order to get my application running, I needed to include both derby.jar and derbytools.jar. Leaving the other out helps keep the size down. These two jars add ~2.3MB.
One of the classes in derby.jar throws an exception while the plugin is being loaded by Cytoscape. EmbeddedActivator.class (org.apache.derby.osgi) implements BundleActivator.class which is not included in the Derby distribution.
- Turns out this class is part of an "optional" OSGi package which is under a proprietary license, not Apache!
Rather than going down that dark and treacherous road, I simply removed the osgi folder containing only the EmbeddedActivator class and jared the remaining classes along with my plugin. No problems.
Materials
attachment:derby-slim.jar Here is a sinlge jar file containing derby.jar plus derbytools.jar minus the offending class
And here is sample code for your build.xml to unjar and include the derby classes in your build file:
1 <unjar overwrite="Yes" dest="${build}">
2 <fileset dir="${lib.derby}">
3 <include name="lib/derby-slim.jar"/>
4 </fileset>
5 </unjar>
6