我尝试按照本教程 - 实现基于 XMPP 的应用服务器 ,使用 Google App Engine 实现 google 的云连接服务器。我从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 开发人员指南以获取更多详细信息”,但找不到任何相关信息。你能帮我么 ?