Проблема с Google Appengine Channel API (Java)

У меня проблемы с Channel API - любая помощь будет принята с благодарностью.

У меня нет проблем с API на локальном сервере разработки, но когда я помещаю его в appspot, я получаю эзотерическое исключение. Полная трассировка стека прилагается, но заголовок:

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

Я свел приложение к сервлету и 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)); 

Фрагмент JSP:

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

Из трассировки стека клиент подключается к каналу OK и успешно отправляет сообщение, но сервлет, записывающий сообщение обратно в канал, является ошибочным битом.

Заранее большое спасибо за любую помощь!

Код:

ChannelTestController.java

ChannelTestPage.jsp

Журналы:

/ChannelTestMessage.do com.google.appengine.api.channel.ChannelFailureException: произошла непредвиденная ошибка. на com.google.appengine.api.channel.ChannelServiceImpl.getExceptionForError(ChannelServiceImpl.java:112) на com.google.appengine.api.channel.ChannelServiceImpl.sendMessage(ChannelServiceImpl.java:68) на com.wess.ChannelTestController.sendMessage(ChannelTestController.java:74) в com.webstersmalley.chessweb.web.ChannelTestController.getChannelTestMessage(ChannelTestController.java:68) в sun.reflect.NativeMethol (NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method.java:43) в org.sing.nb.support.HandlerMethodInvoker. примечание по адресу org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) по адресу org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) по адресу javax.servlet.perv.serv.pv.tv.java:637) на javax.servlet.http.HttpServlet.service(HttpServlet.java:717) на org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) на org.mortbay.jetty.let. СервлетХандлер Java:1157) в org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) в org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) в org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) в org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) в org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) в org.mortbay.jetty.webapp.WebAppContext.handle(WebAppCon418).) в org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) в org.mortbay.jetty.Server.handle(Server.java:326) в org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection. Java:542) на org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) на org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) на com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:439) на com.google.net.rpc.impl.Server$RpcTask.runInContext(Server.java:573) на com.google.tracing.TraceContext$TraceContextRunnable$1.run. Java:448) на com.google.tracing.TraceContext.runInContext(TraceContext.java:688) в com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:326) в com.google.tracing.TraceContexttetetexttetexttetexttetexttetexttext 318) в com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:446) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) в java.util.concurr. (ThreadPoolExecutor.java:603) на java.lang.Thread.run(Thread.java:636). Вызывается: com.google.apphosting.api.ApiProxy$ApplicationException: ApplicationError: 2: неизвестно на com.google.net.rpc.RpcStub$RpcCallbackDispatcher$1.runInContext(RpcStub.java:1050) в com.google.tracing.TraceContext $ TraceContextRunnable $ 1.Run(TraceContext.java:448) в com.google.tracing.TraceContext.runInContext (TraceContext.java:688) на com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContextN oUnref (TraceContext.java:326) на com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:318) на com.google.tracing.TraceContext $ TraceContextRunnable.run (TraceCon44) на TraceContext.net.rpc.RpcStub$RpcCallbackDispatcher.rpcFinished(RpcStub.java:1071) на com.google.net.rpc.RPC.internalFinish(RPC.java:2184) на com.google.net.rpc.impl.RpcNetChannel.finishRpc(RpcNetChannel.java:2338) на com.google.net.rpc.impl.RpcNetChannel.messageReceived(RpcNetChannel.java:1267) на com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java:328) com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java:299) на com.google.net.async.Connection.handleReadEvent(Connection.java:474) на com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java:831) в com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java:207) в com.google.net.async.EventDispatcher.loop(EventDispatcher.java:103) в com.google..net.async.GlobalEventRegistry$2.runLoop(GlobalEventRegistry.java:95) на com.google.net.async.LoopingEventDispatcher$EventDispatcherThread.run(LoopingEventDispatcher.java:385)

1 ответ

Решение

Я сделал кросс-пост на собственном дискуссионном форуме Google для API Java Appengine, и там мне ответили.

Таким образом, проблема возникает, когда включена высокая репликация (как все новые приложения, по умолчанию, сейчас), и используется версия не по умолчанию.

Мое приложение было недавним (следовательно, было много повторений), и я пробовал несколько разных способов заставить каналы работать, поэтому я не использовал версию своего приложения по умолчанию. Переключение по умолчанию на последнюю версию и использование этого URL привело к исчезновению проблемы!

Другие вопросы по тегам