2011-05-15 6 views
2

채널 API에 문제가 있습니다. 도움을 주시면 감사하겠습니다.Google appengine 채널 API (Java)의 문제점

로컬 dev 서버의 API에는 문제가 없지만 appspot에 올려 놓으면 난해한 예외가 발생합니다. 전체 스택 추적 연결되어 있지만 제목은 다음과 같습니다

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

나는 아래 서블릿과 복잡 이상-I는 아무것도 아니에요 있는지 확인하기 위해 JSP (모두 첨부)에 응용 프로그램을 삶은했습니다. 이 포럼과 다른 사람들의 메시지 중 일부를 토큰과 채널 키의 오용이라고 생각하지만 다른 조합을 시도해 보았습니다. 서블릿의

발췌문 : JSP의

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)); 

발췌문 : 스택 추적에서

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

, 클라이언트는 채널 확인에 연결, 성공적한다 메시지를 보내지 만 메시지를 채널에 다시 쓰는 서블릿은 실패한 비트입니다.

도움을 주셔서 대단히 감사드립니다!

코드 :

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

나는 AppEngine에 자바 API에 대한 구글의 자신의 토론 포럼에이-게시 교차하고,이 대답했다 .

요약하면 높은 복제 기능을 사용하도록 설정하면 (기본적으로 모든 새 응용 프로그램이 기본적으로 사용되므로) 문제가 발생하고 기본이 아닌 버전이 사용됩니다.

내 앱이 최근 앱 이었으므로 (높은 담당자가 켜져 있음) 채널을 작동시키는 다양한 방법을 시도하고 있었기 때문에 기본 앱 버전을 사용하지 않았습니다. 최신 버전을 가리 키도록 기본값을 전환하고 해당 URL을 사용하면 문제가 사라졌습니다!

+0

감사합니다. Matthew, 여기 포럼의 토론 링크를 게시합니다. http://groups.google.com/group/google-appengine-java/browse_thread/thread/6e7c051cea21d234/b702fd42f19d192b –