Hello,
I have a problem with the callback of a RPC call. I have post in
appengine forum because i think it was a problem with the appengine
datastore, but Max Ross suggests me to post here :
http://groups.google.com/group/google-appengine-java/browse_thread/thread/75803bf6ae4eaeb7
In order to summarize :
I have two classes AudioFile and Genre. AudioFile as a field of type
Genre. Both are marked as detachable like Max says me. I add an
AudioFile in the datastore and then i do a RPC call in the client side
in order to retrieve the data :
this.gtunesService.getAudioFiles(new AsyncCallback<List<AudioFile>>()
{
public void onFailure(Throwable caught) {
SC.say(Gtunes.SERVER_ERROR);
}
public void onSuccess(List<AudioFile> result)
{
Gtunes.this.audioFiles = result;
String buf = "";
for (AudioFile af :
Gtunes.this.audioFiles) {
buf += "genre = " + af.getGenre
().getName() + " - "
+ af.getName()
+ "<br />";
}
SC.say(buf);
}
});
The problem is in the server side with the following code :
public List<AudioFile> getAudioFiles() {
List<AudioFile> audioFiles = null;
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
Query q = pm.newQuery(AudioFile.class);
q.setOrdering("name");
audioFiles = new ArrayList<AudioFile>((List<AudioFile>) q.execute
());
pm.detachCopyAll(audioFiles);
} finally {
pm.close();
}
System.out.println("list = " + audioFiles);
for (AudioFile audioFile : audioFiles) {
System.out.println("name = " + audioFile.getName() + "\n");
}
return audioFiles;
}
audioFiles contains my data. But the return has a problem because i
enter in the onFailure in the client side but without any error.
However, i see that if i change the line :
audioFiles = new ArrayList<AudioFile>((List<AudioFile>) q.execute());
for :
audioFiles = (List<AudioFile>) q.execute();
I have get the following error :
5 mai 2009 22:23:23
com.google.appengine.tools.development.ApiProxyLocalImpl log
SEVERE: [1241555003875000] javax.servlet.ServletContext log:
Exception
while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException: Type
'org.datanucleus.store.appengine.query.StreamingQueryResult' was not
included in the set of types which can be serialized by this
SerializationPolicy or its Class object could not be loaded. For
security purposes, this type will not be serialized.
at
com.google.gwt.user.server.rpc.impl.StandardSerializationPolicy.validateSer
ialize
(StandardSerializationPolicy.java:83)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.seriali
ze
(ServerSerializationStreamWriter.java:591)
at
com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.write
Object
(AbstractSerializationStreamWriter.java:129)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter
$ValueWriter$8.write(ServerSerializationStreamWriter.java:146)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.seriali
zeValue
(ServerSerializationStreamWriter.java:530)
at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:
573)
at
com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess
(RPC.java:441)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse
(RPC.java:529)
at
com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall
(RemoteServiceServlet.java:166)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost
(RemoteServiceServlet.java:86)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
713)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
806)
at org.mortbay.jetty.servlet.ServletHolder.handle
(ServletHolder.java:
487)
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 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:306)
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)
I don't know where to see in order to debug. Does someone has an
idea ?
Thanks.