Well, problem solved. GAE just does not like when you leave too much magic on Spring. I wanted to setup everything using Spring instead of the PMF.java file described in GAE docs. So now I use the PMF.java instead and retrieve the PM from it using Spring and the error is gone.
This is the non-working PMF.java replacement, in case anyone cares: <bean id="persistenceManagerFactory" class="javax.jdo.JDOHelper" factory-method="getPersistenceManagerFactory" lazy-init="true"> <constructor-arg value="transactions-optional" /> </bean> <bean id="persistenceManager" factory- bean="persistenceManagerFactory" factory-method="getPersistenceManager" scope="request" destroy- method="close"> <aop:scoped-proxy /> </bean> This is good, because you don't have to have a single line of Java code to produce a PM. Daniel On May 21, 5:59 pm, "Daniel Kvasnicka jr." <daniel.kvasnicka...@gmail.com> wrote: > Dear all, > > I'm working on an app (JSF 2.0, Spring 3.0.2) and when I deploy it to > GAE, it dies on first request with this: > > java.lang.IllegalArgumentException: Cannot find class > [javax.naming.Context] > at > org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java: > 294) > at org.springframework.core.LocalVariableTableParameterNameDiscoverer > $LocalVariableTableVisitor.resolveMember(LocalVariableTableParameterNameDis > coverer.java: > 229) > at org.springframework.core.LocalVariableTableParameterNameDiscoverer > $LocalVariableTableVisitor.visitEnd(LocalVariableTableParameterNameDiscover > er.java: > 219) > at org.springframework.asm.ClassReader.accept(Unknown Source) > at org.springframework.asm.ClassReader.accept(Unknown Source) > at > org.springframework.core.LocalVariableTableParameterNameDiscoverer.inspectC > lass(LocalVariableTableParameterNameDiscoverer.java: > 114) > at > org.springframework.core.LocalVariableTableParameterNameDiscoverer.getParam > eterNames(LocalVariableTableParameterNameDiscoverer.java: > 71) > at > org.springframework.beans.factory.support.ConstructorResolver.instantiateUs > ingFactoryMethod(ConstructorResolver.java: > 447) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactor > y.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java: > 973) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactor > y.createBeanInstance(AbstractAutowireCapableBeanFactory.java: > 879) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactor > y.doCreateBean(AbstractAutowireCapableBeanFactory.java: > 485) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactor > y.createBean(AbstractAutowireCapableBeanFactory.java: > 456) > at org.springframework.beans.factory.support.AbstractBeanFactory > $1.getObject(AbstractBeanFactory.java:291) > at > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getS > ingleton(DefaultSingletonBeanRegistry.java: > 222) > at > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(Abs > tractBeanFactory.java: > 288) > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Abstr > actBeanFactory.java: > 190) > at > org.springframework.beans.factory.support.DefaultListableBeanFactory.preIns > tantiateSingletons(DefaultListableBeanFactory.java: > 563) > at > org.springframework.context.support.AbstractApplicationContext.finishBeanFa > ctoryInitialization(AbstractApplicationContext.java: > 872) > at > org.springframework.context.support.AbstractApplicationContext.refresh(Abst > ractApplicationContext.java: > 423) > at > org.springframework.web.context.ContextLoader.createWebApplicationContext(C > ontextLoader.java: > 276) > at > org.springframework.web.context.ContextLoader.initWebApplicationContext(Con > textLoader.java: > 197) > at > org.springframework.web.context.ContextLoaderListener.contextInitialized(Co > ntextLoaderListener.java: > 47) > at > org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java: > 548) > at org.mortbay.jetty.servlet.Context.startContext(Context.java:136) > at > org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java: > 1250) > at > org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java: > 517) > at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java: > 467) > at > org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java: > 50) > at > com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppV > ersionHandlerMap.java: > 191) > at > com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVers > ionHandlerMap.java: > 168) > at > com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceReques > t(JettyServletEngineAdapter.java: > 123) > at > com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java: > 250) > at com.google.apphosting.base.RuntimePb$EvaluationRuntime > $6.handleBlockingRequest(RuntimePb.java:5838) > at com.google.apphosting.base.RuntimePb$EvaluationRuntime > $6.handleBlockingRequest(RuntimePb.java:5836) > at > com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingAp > plicationHandler.java: > 24) > at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java: > 398) > at com.google.net.rpc.impl.Server$2.run(Server.java:852) > at > com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java: > 56) > at > com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpa > nBuilder.java: > 576) > at com.google.net.rpc.impl.Server.startRpc(Server.java:807) > at com.google.net.rpc.impl.Server.processRequest(Server.java:369) > at > com.google.net.rpc.impl.ServerConnection.messageReceived(ServerConnection.j > ava: > 442) > at > com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java: > 319) > at > com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java: > 290) > at com.google.net.async.Connection.handleReadEvent(Connection.java: > 474) > at > com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.j > ava: > 831) > at > com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java: > 207) > at com.google.net.async.EventDispatcher.loop(EventDispatcher.java: > 103) > at > com.google.net.rpc.RpcService.runUntilServerShutdown(RpcService.java: > 251) > at com.google.apphosting.runtime.JavaRuntime > $RpcRunnable.run(JavaRuntime.java:413) > at java.lang.Thread.run(Unknown Source) > Caused by: java.lang.ClassNotFoundException: javax.naming.Context > at > com.google.apphosting.runtime.security.UserClassLoader.loadClass(UserClassL > oader.java: > 445) > at java.lang.ClassLoader.loadClass(Unknown Source) > at org.springframework.util.ClassUtils.forName(ClassUtils.java:258) > at > org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java: > 291) > ... 50 more > > Anybody has encountered this already? I know JNDI is not allowed on > GAE, but can Spring be made to not to use it? > > -- > 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 google-appengine-j...@googlegroups.com. > To unsubscribe from this group, send email to > google-appengine-java+unsubscr...@googlegroups.com. > For more options, visit this group > athttp://groups.google.com/group/google-appengine-java?hl=en. -- 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 google-appengine-j...@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.