Stanley Bradbury wrote:
Paul J DeCoursey wrote:
Stanley Bradbury wrote:
Stanczak Group wrote:
How does one get Derby embedded in a servlet under Tomcat. In my
development environment I'm using Netbeans and Tomcat. Tomcat
install is under root so I can't write to is, just my web modules
directories. I can connect to a path with Netbeans's database tool,
but when I launch the app on Tomcat I get errors that it can't
create files like createDD.jdbc and derby.log. I'm guessing this is
because Derby is showing it's home as the root of the Tomcat
server. The question is why and how can I fix this? I have an
absolute path set, but it still does it. Shouldn't it write
everything to that path and not just start writing to where ever it
decides home is?
Hi -
For embedded Derby to work properly it needs to be loaded high in
the classloader hierarchy of the server. As far as I know this
cannot be done by an application, the application layer has too many
restrictions and Derby is designed to be a shared resource. Sharing
Derby is done by integrating Derby with Tomcat as described in the
JPetStore write-up at:
http://db.apache.org/derby/integrate/DerbyTomcat5512JPetStor.html
I believe that Derby in client/server architecture might be your
only choice if you cannot get Derby embedded as a global resource
at the Server level.
I've made it a staticly accessible resource. I use my own database
management container, the DataSource container for tomcat has been
too heavy for my needs. I've also set it up in Spring successfully.
Paul
Hi Paul -
Sounds like you have a lot of experience in the area. Your
architecture seems beyond my experience but I did notice something I
missed in my first read that might be of help. You wrote:
"..I have an absolute path set, but it still does it. Shouldn't it
write everything to that path and not just start writing to where ever
it decides home is? .."
Derby writes the logfile to derby.system.home (this also serves as the
ROOT directory for any relative path references). If this is not
explicitly set prior to loading the Derby driver the value defaults to
the default directory for the JVM. Derby's view of the world is from
the JVM perspective, not the server or application that starts it. I
assume the 'absolute path' you set is an application or server property?
Anyway, a possible solution for you might be to set derby.system.home
to an appropriate location (the absolute path?) prior to loading the
Derby driver.
HTH
HTH please reread the thread, I'm not the one with the issue. But that
is a good point to the originator of this thread. I did look at my
database manager and found that I do
System.setProperty("derby.system.home",home); if the driver is
org.apache.derby.jdbc.EmbeddedDriver.
Paul
- Re: Embedded in Servlet on Tomcat? Paul J DeCoursey
-