[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ClassLoader problem in Servlet environment (Tomcat)



If I use a LocalDatabase...
   LocalDatabase db = new LocalDatabase();
   db.open("/tmp/ozoneDB", 3);
   db.reloadClasses();

   News news = (News) db.createObject( NewsImpl.class.getName());

I get this exception in the servlet (trimmed)...
org.ozoneDB.ClassNotFoundExc: com.javawebguy.smg.db.ozone.NewsImpl
        at
org.ozoneDB.ExternalDatabase.sendCommand(ExternalDatabase.java:508)
        at
org.ozoneDB.ExternalDatabase.sendCommand(ExternalDatabase.java:476)
        at
org.ozoneDB.ExternalDatabase.createObject(ExternalDatabase.java:708)
        at
org.ozoneDB.ExternalDatabase.createObject(ExternalDatabase.java:697)
        at
com.javawebguy.smg.actions.OzoneNewsAction.perform(OzoneNewsAction.java:98)

        at
org.apache.struts.action.ActionServlet.processActionPerform(ActionServlet.java:1620)

        at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1430)
        at
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:464)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at
org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)
        at org.apache.tomcat.core.Handler.service(Handler.java:286)


If I use a RemoteDatabase...
   ExternalDatabase db = RemoteDatabase.openDatabase(
"ozonedb:remote://localhost:3333" );
   db.reloadClasses();

   News news = (News) db.createObject( NewsImpl.class.getName());

I get this exception in ozone (trimmed)...
org.ozoneDB.ClassNotFoundExc: com.javawebguy.smg.db.ozone.NewsImpl
        at
org.ozoneDB.core.ClassManager.classForName(ClassManager.java:69)
        at
org.ozoneDB.core.Transaction.createObject(Transaction.java:384)
        at
org.ozoneDB.core.DbRemote.DbCreateObj.perform(DbCreateObj.java:48)
        at
org.ozoneDB.core.Transaction.performCommand(Transaction.java:273)
        at
org.ozoneDB.core.TransactionManager.performCommand(TransactionManager.java:366)

        at
org.ozoneDB.core.TransactionManager.completeTransaction(TransactionManager.java:334)

        at
org.ozoneDB.core.TransactionManager.handleCommand(TransactionManager.java:249)

        at
org.ozoneDB.core.InvokeServer.handleClientEvent(InvokeServer.java:76)
        at
org.ozoneDB.DxLib.net.DxMultiServerClient.run(DxMultiServerClient.java:44)

        at java.lang.Thread.run(Thread.java:484)

I can make it work with RemoteDatabase by putting my WEB-INF/classes
directory in the classpath when I start ozone, but this is not a good
solution.

In fact, I need to be able to use only a LocalDatabase and no special
classpath treatments.  The app I'm developing will be deployed to a
third-party hosting provider where I will not have control over the
environment.  So, everything need to work from within the servlet
context.

Please help!

Thanks,
Nathan Probst