0

これは、Mac でローカルに実行されている SDK で発生しています。プレゼンス処理を確立しようとしています。ロギングのみを行う単純なサーブレットを作成しました。ただし、接続および切断イベントで次の例外が発生します(チャネルは別の方法で機能しているように見えますが)...

Mar 14, 2013 8:04:25 PM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: /_ah/channel/disconnected/: javax.servlet.UnavailableException: java.lang.InstantiationException
Mar 14, 2013 8:04:38 PM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: /_ah/channel/connected/: javax.servlet.UnavailableException: java.lang.InstantiationException

web.xmlでチャネルの接続と切断の両方のためにそのサーブレットを登録しました...

  <servlet>
    <servlet-name>ChannelPresence</servlet-name>
    <servlet-class>com.readyposition.gaetestbed.ChannelPresenceServlet          
    </servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>ChannelPresence</servlet-name>
    <url-pattern>/_ah/channel/connected/</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>ChannelPresence</servlet-name>
    <url-pattern>/_ah/channel/disconnected/</url-pattern>
  </servlet-mapping>                                                            

ハンドラー (サーブレット) 自体は非常に基本的なものです...

package com.readyposition.gaetestbed;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.appengine.api.channel.ChannelPresence;
import com.google.appengine.api.channel.ChannelService;
import com.google.appengine.api.channel.ChannelServiceFactory;

@SuppressWarnings("serial")
public abstract class ChannelPresenceServlet extends HttpServlet {
    final static Logger logger =
            LoggerFactory.getLogger(ChannelPresenceServlet.class);

    @Override
    public void doGet(final HttpServletRequest req,
            final HttpServletResponse resp)
                    throws IOException, ServletException
    {
        processCommand(req, resp);
    }

    @Override
    public void doPost(final HttpServletRequest req,
            final HttpServletResponse resp)
                    throws IOException, ServletException
    {
        processCommand(req, resp);
    }

    public void processCommand(final HttpServletRequest req,
            final HttpServletResponse resp)
                    throws IOException, ServletException
    {
        final ChannelService channelService =
                ChannelServiceFactory.getChannelService();
        final ChannelPresence presence = channelService.parsePresence(req);

        logger.info("Channel Presence - clientId={}, isConnected={}",
                presence.clientId(), presence.isConnected());
    }
}

どんな助けでも大歓迎です。

4

1 に答える 1

1

恥ずかしい。切り取りと貼り付けのエラー。私のサーブレットクラスは誤って抽象的でした。はぁ。修理済み。

他の何人かの人々が異なる状況下で同じ例外について不平を言っているのを見ました、そして少なくとも1人はチャンネルの存在に関係しています。他の1人が、サーブレットクラスを誤って抽象として残していることに気付いた場合、これは有益だったと思います。

ネズミの穴を追いかけてくれた人に感謝します。

于 2013-03-15T00:34:57.540 に答える