このチュートリアルに従って、Google App Engine を使用して Google の Cloud Connection Server を実装しようとしています - XMPP ベースのアプリケーション サーバーの実装。http://www.igniterealtime.org/projects/smack/ (smack.jar および smackx.jar)から最新の smack jar をコピーし、それらを WEB-INF/lib に置き、クラスパスに追加しました (eclipse を使用しています)。
私が投稿した最初のリンクのコード サンプルでは、XMPPConnection は「メイン」メソッドで開始されます。これは GAE にはあまり適していないため、ServletContextListener を作成して web.xml に追加しました。
public class GCMContextListener implements ServletContextListener {
private static final String GCM_SENDER_ID = "*GCM_SENDER_ID*";
private static final String API_KEY = "*API_KEY*";
private SmackCcsClient ccsClient;
public GCMContextListener() {
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
final String userName = GCM_SENDER_ID + "@gcm.googleapis.com";
final String password = API_KEY;
ccsClient = new SmackCcsClient();
try {
ccsClient.connect(userName, password);
} catch (XMPPException e) {
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
try {
ccsClient.disconnect();
} catch (XMPPException e) {
e.printStackTrace();
}
}
}
web.xml
<web-app>
<listener>
<listener-class>com.myserver.bootstrap.GCMContextListener</listener-class>
</listener>
</web-app>
ここで、GAE サーバーを起動すると、次の例外が発生します。
java.lang.NoClassDefFoundError: javax.naming.directory.InitialDirContext は制限されたクラスです。詳細については、Google App Engine デベロッパー ガイドをご覧ください。
「詳細については、Google App Engine 開発者ガイド」を検索しましたが、これについては何も見つかりませんでした。手伝ってくれませんか ?