On Wed, Dec 30, 2009 at 5:15 PM, Nathan Parry <[email protected]> wrote:
> Searching turned up a few older threads similar to the problem I'm > seeing, but I couldn't find any solution. > > Using just the skeleton project created by lift-archetype-basic, I'm > getting these exceptions out of jetty: > > org.h2.jdbc.JdbcSQLException: Database may be already in use: Locked > by another process. Possible solutions: close all other connection(s); > use the server mode [90020-121] > > ERROR - Failed to Boot > java.lang.NullPointerException: Looking for Connection Identifier > ConnectionIdentifier(lift) but failed to find either a JNDI data > source with the name lift or a lift connection manager with the > correct name > > Once this happens, the app is non-functional. This occurs whenever > jetty restarts due to updated code. I can trigger the issue by: > > 1. Running mvn jetty:run in one console > 2. Running mvn scala:cc in another console > 3. Running touch src/main/scala/bootstrap/liftweb/Boot.scala in a 3rd > console > > Thanks for the repro case. I've opened a ticket on the issue: http://github.com/dpp/liftweb/issues/#issue/266 > This causes a recompilation, which causes a jetty restart, which blows > up with the exceptions. > > Has anybody else seen or fixed this issue? Should it be useful, I've > stashed the project at > http://nparry.com/posted_files/jetty_lift_issues/lifttest.tgz > including a jetty.log of the output with the full stack traces. > > > Wandering into wild-speculation territory (AKA speak and remove all > doubt) ... > > Based on the jdbc exception, I poked around in the DB code - looking > at ProtoDBVendor I couldn't see how connections in 'pool' would ever > be released. Thus I tried a quick hack in my project to force the > pool to be empty... > > DB.defineConnectionManager(DefaultConnectionIdentifier, > new StandardDBVendor( > Props.get("db.driver") openOr > "org.h2.Driver", > Props.get("db.url") openOr > "jdbc:h2:lift_proto.db", > Props.get("db.user"), > Props.get("db.password")) { > override def maxPoolSize = 0 > }) > > This obviously is not a good solution, but it does seem to clear up > the exceptions when jetty restarts - the theory being that during > shutdown the old connections are not closed, leading to errors during > restart since the new connection can't be created. Forcing an empty > pool means there is no old connection around to trigger the problem. > > I guess the question out of all that would be - do we need (or is > there already) a shutdown hook to correspond to the boot hook? This > would allow for cleanup in this sort of situation (ie, close any > connections left in the pool). > > -- > Nathan > > -- > > You received this message because you are subscribed to the Google Groups > "Lift" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<liftweb%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/liftweb?hl=en. > > > -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
