2011-05-15 43 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