2011-05-15 132 views
2

我遇到了Channel API的问题 - 任何帮助将不胜感激。谷歌appengine频道API(Java)的问题

我对本地开发服务器上的API没有任何问题,但是当我把它放在appspot上时,我遇到了一个深奥的异常。全堆栈跟踪连接,但标题是:

com.google.appengine.api.channel.ChannelFailureException: An unexpected error occurred.  
Caused by: com.google.apphosting.api.ApiProxy$ApplicationException: ApplicationError: 2: Unknown 

我煮的应用到一个servlet和一个jsp(二者连接),以确保我没有做任何事情过于复杂。阅读这个论坛和其他人的一些消息,可能是我滥用了令牌和频道密钥,但我尝试了所有我能想到的组合,但没有成功!

片段的servlet:

ChannelService channelService = ChannelServiceFactory.getChannelService(); 
String channelKey = getChannelKey(userService.getCurrentUser().getUserId()); 
String token = channelService.createChannel(channelKey); 

ChannelService channelService = ChannelServiceFactory.getChannelService(); 
channelService.sendMessage(new ChannelMessage(channelKey, message)); 

片段的jsp:

channel = new goog.appengine.Channel(channelToken); 
socket = channel.open(); 

从堆栈跟踪,客户端被连接到所述信道确定,并成功地向上发送消息,但将消息写回到通道的servlet是失败的位。

非常感谢您的帮助!

代码:

ChannelTestController.java

ChannelTestPage.jsp

日志:

/ChannelTestMessage.do com.google.appengine.api.channel.ChannelFailureException: An unexpected error occurred. at com.google.appengine.api.channel.ChannelServiceImpl.getExceptionForError(ChannelServiceImpl.java:112) at com.google.appengine.api.channel.ChannelServiceImpl.sendMessage(ChannelServiceImpl.java:68) at com.webstersmalley.chessweb.web.ChannelTestController.sendMessage(ChannelTestController.java:74) at com.webstersmalley.chessweb.web.ChannelTestController.getChannelTestMessage(ChannelTestController.java:68) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:43) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:439) at com.google.net.rpc.impl.Server$RpcTask.runInContext(Server.java:573) at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:448) at com.google.tracing.TraceContext.runInContext(TraceContext.java:688) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:326) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:318) at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:446) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:636) Caused by: com.google.apphosting.api.ApiProxy$ApplicationException: ApplicationError: 2: Unknown at com.google.net.rpc.RpcStub$RpcCallbackDispatcher$1.runInContext(RpcStub.java:1050) at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:448) at com.google.tracing.TraceContext.runInContext(TraceContext.java:688) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:326) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:318) at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:446) at com.google.net.rpc.RpcStub$RpcCallbackDispatcher.rpcFinished(RpcStub.java:1071) at com.google.net.rpc.RPC.internalFinish(RPC.java:2184) at com.google.net.rpc.impl.RpcNetChannel.finishRpc(RpcNetChannel.java:2338) at com.google.net.rpc.impl.RpcNetChannel.messageReceived(RpcNetChannel.java:1267) at com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java:328) at com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java:299) at com.google.net.async.Connection.handleReadEvent(Connection.java:474) at com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java: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.async.GlobalEventRegistry$2.runLoop(GlobalEventRegistry.java:95) at com.google.net.async.LoopingEventDispatcher$EventDispatcherThread.run(LoopingEventDispatcher.java:385)

回答

2

I交叉张贴这对谷歌自己的论坛讨论的AppEngine上的Java API,它得到的回答有。

总结是,当打开高复制时(因为所有新应用程序现在默认为现在),并且正在使用非默认版本时会发生问题。

我的应用程序是最近的一个(因此很高的代表),并且我尝试了很多不同的方式来让通道工作,所以我没有使用我的应用程序的默认版本。切换默认指向最新版本并使用该URL导致问题消失!

+0

Thanks Matthew,我在这里张贴您在论坛中讨论的链接:http://groups.google.com/group/google-appengine-java/browse_thread/thread/6e7c051cea21d234/b702fd42f19d192b – 2011-05-19 16:22:02