[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