Kathey Marsden wrote:
Super neat!  To summarize:

I can keep other Derby versions loaded from interfering with my app  by
creating a  DerbyURLClassLoader that overrides the loadClass method to
filter out any Derby classes in the parent class loader.

I can prevent my app from interfering with other Derby versions  by
loading Derby in a separate DerbyURLClassLoader and creating a
DataSource from there that I use for all my connections as described in
my original mail.
I have a completely isolated environment with regard to Derby.  Because
JDBC provides a single entry point at the DataSource, I don't have to
understand the overall ClassLoader hierarchy or otherwise be a
ClassLoader expert. Does anyone see any holes here?

As long as the code you have using Derby is accessing Derby objects through the JDBC interfaces/classes, everything should be fine. If, however you have code explicitly referencing Derby class names (whether it is EmbedStatement, EmbeddedDataSource etc.), you should be aware that a class X loaded with class loader A is not the same class as a class X loaded with class loader B (class loaders are name spaces). Code which explicitly references Derby classes must be loaded with the same class loader as the Derby classes themselves, otherwise you'll get strange exceptions.

But as said, when your client code simply uses the JDBC interfaces/classes, there should be no problems.

--
Oyvind Bakksjo
Sun Microsystems, Database Technology Group
Trondheim, Norway
http://weblogs.java.net/blog/bakksjo/

Reply via email to