Actually I think I have simplified this further. The basic issue seems
to be referencing anything to do with the datastore from an ordinary
servlet. So if I have a servlet

import java.io.IOException;

import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManagerFactory;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UploadFileServlet extends HttpServlet {
        @Override
        protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
        }

        private static final PersistenceManagerFactory PMF =
                JDOHelper.getPersistenceManagerFactory("transactions-optional");

}

and  I send it a request I get the following exception

WARNING: Nested in javax.servlet.ServletException: init:
java.lang.NoClassDefFoundError: javax/jdo/JDOHelper
        at
com.cloudscapesolutions.wavacalculator.server.UploadFileServlet.<clinit>
(UploadFileServlet.java:18)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance
(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance
(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)
        at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
        at org.mortbay.jetty.servlet.ServletHolder.getServlet
(ServletHolder.java:339)
        at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
463)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1093)
        at
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter
(TransactionCleanupFilter.java:43)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
        at com.google.appengine.tools.development.StaticFileFilter.doFilter
(StaticFileFilter.java:121)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
        at org.mortbay.jetty.servlet.ServletHandler.handle
(ServletHandler.java:360)
        at org.mortbay.jetty.security.SecurityHandler.handle
(SecurityHandler.java:216)
        at org.mortbay.jetty.servlet.SessionHandler.handle
(SessionHandler.java:181)
        at org.mortbay.jetty.handler.ContextHandler.handle
(ContextHandler.java:712)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
405)
        at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle
(DevAppEngineWebAppContext.java:54)
        at org.mortbay.jetty.handler.HandlerWrapper.handle
(HandlerWrapper.java:139)
        at com.google.appengine.tools.development.JettyContainerService
$ApiProxyHandler.handle(JettyContainerService.java:313)
        at org.mortbay.jetty.handler.HandlerWrapper.handle
(HandlerWrapper.java:139)
        at org.mortbay.jetty.Server.handle(Server.java:313)
        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
506)
        at org.mortbay.jetty.HttpConnection$RequestHandler.content
(HttpConnection.java:844)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
        at org.mortbay.io.nio.SelectChannelEndPoint.run
(SelectChannelEndPoint.java:396)
        at org.mortbay.thread.BoundedThreadPool$PoolThread.run
(BoundedThreadPool.java:442)
Caused by: java.lang.ClassNotFoundException: javax.jdo.JDOHelper
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at
com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass
(IsolatedAppClassLoader.java:142)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        ... 32 more
15-Sep-2009 22:11:21 com.google.apphosting.utils.jetty.JettyLogger
warn
WARNING: /wavacalculator/fileupload
java.lang.NoClassDefFoundError: javax/jdo/JDOHelper
        at
com.cloudscapesolutions.wavacalculator.server.UploadFileServlet.<clinit>
(UploadFileServlet.java:18)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance
(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance
(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)
        at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
        at org.mortbay.jetty.servlet.ServletHolder.getServlet
(ServletHolder.java:339)
        at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
463)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1093)
        at
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter
(TransactionCleanupFilter.java:43)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
        at com.google.appengine.tools.development.StaticFileFilter.doFilter
(StaticFileFilter.java:121)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
        at org.mortbay.jetty.servlet.ServletHandler.handle
(ServletHandler.java:360)
        at org.mortbay.jetty.security.SecurityHandler.handle
(SecurityHandler.java:216)
        at org.mortbay.jetty.servlet.SessionHandler.handle
(SessionHandler.java:181)
        at org.mortbay.jetty.handler.ContextHandler.handle
(ContextHandler.java:712)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
405)
        at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle
(DevAppEngineWebAppContext.java:54)
        at org.mortbay.jetty.handler.HandlerWrapper.handle
(HandlerWrapper.java:139)
        at com.google.appengine.tools.development.JettyContainerService
$ApiProxyHandler.handle(JettyContainerService.java:313)
        at org.mortbay.jetty.handler.HandlerWrapper.handle
(HandlerWrapper.java:139)
        at org.mortbay.jetty.Server.handle(Server.java:313)
        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
506)
        at org.mortbay.jetty.HttpConnection$RequestHandler.content
(HttpConnection.java:844)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
        at org.mortbay.io.nio.SelectChannelEndPoint.run
(SelectChannelEndPoint.java:396)
        at org.mortbay.thread.BoundedThreadPool$PoolThread.run
(BoundedThreadPool.java:442)
Caused by: java.lang.ClassNotFoundException: javax.jdo.JDOHelper
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at
com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass
(IsolatedAppClassLoader.java:142)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        ... 32 more

I am sure I must have missed some discussion on how to set up servlets
to get them working in GAE. Help appreciated, been banging my head
against this all day!!

Cheers, J



On Sep 15, 10:58 pm, John <[email protected]> wrote:
> In an attempt to load data into a fledgling GAE Java application I am
> using XStream (xstream-gae.jar a patched version that others have
> developed to get a working version with GAE) coupled with a
> FileUploadServlet that upload an XML file description of some initial
> application to prime the application datastore.
>
> The problem I am encountering is that the Objects being created from
> XStream have been annotated with persistence annotations
> (@PersistenceCapable(identityType=IdentityType.APPLICATION) ...) to
> make them usable with the data store.
>
> When the servlet is executed to process the uploaded file stream I get
> a ClassCastExceptions for some of the app engines persistence related
> files, e.g
>
> WARNING: Error for /wavacalculator/fileupload
> java.lang.NoClassDefFoundError: javax/jdo/JDOHelper
>
> I am assuming that I am missing something important about the GAE
> model in terms of ClassLoaders or configuration. It seems that the
> Servlet is attempting to resolve fundemental classes (from its own
> classloader??) and failing to find them, and whats more is not able to
> find them in a parent/containing loader.
>
> Is there something special that I need to do to have a non GWT RPC
> servlet with GAE? My UploadFileServlet extends HttpServlet and does
> not special initialization.
>
> Out of interest I placed a number of the core jars such as
> jdo2-api-2.3-eb.jar
> datanucleus-jpa-1.1.5.jar
> datanucleus-core-1.1.5.jar
>
> into the war/WEB-INF/lib area and the initial class loading problems
> stopped, but other issues popped up elsewhere, also it feels wrong to
> be duplicating framework jar files in the war lib.
>
> Any suggestions or pointers gratefully accepted. If I can get past
> these problems I hope to post a tutorial on migrating data from
> hibernate to app engine using a combination of tools with XStream as
> the transition medium.
>
> Regards,
>
> John
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" 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/google-appengine-java?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to