Базовое приложение для чата с использованием Java и Atmosphere

Я пытаюсь получить простой пример чат-программы Atmosphere, работающей с Glassfish и Jersery.

Пока у меня есть базовый архетип веб-приложения maven со следующей структурой:

настройка проекта

Файл ресурсов чата — это простой сервис REST, использующий аннотации Atmosphere:

package core;

import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

import org.atmosphere.annotation.Broadcast;
import org.atmosphere.annotation.Suspend;

@Path("/")
public class ChatResource {

    @Suspend(contentType = "application/json")
    @GET
    public String suspend() {
        return "";
    }

    @Broadcast(writeEntity = false)
    @POST
    @Produces("application/json")
    public Response broadcast(Message message) {
        return new Response(message.author, message.message);
    }
}

Классы сообщений и ответов представляют собой простые оболочки POJO. Файлы index.jsp, application.js, jquery.atmosphere.js и jquery.js скопированы непосредственно из примера проекта (найденного здесь).

Мой web.xml настроен на следующее:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:j2ee="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Archetype Created Web Application</display-name>
    <servlet>
        <description>AtmosphereServlet</description>
        <servlet-name>AtmosphereServlet</servlet-name>
        <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>AtmosphereServlet</servlet-name>
        <url-pattern>/chat/*</url-pattern>
    </servlet-mapping>
</web-app>

При переходе на страницу получаю следующую ошибку:

Извините, но у вас проблемы с сокетом или сервер не работает

Если я перейду по пути, к которому пытается получить доступ страница (http://localhost:8080/.../chat), я получаю следующее сообщение:

org.atmosphere.cpr.AtmosphereMappingException: обработчик атмосферы не найден. Убедитесь, что вы определили его внутри META-INF/atmosphere.xml или аннотировали с помощью @AtmosphereHandlerService.

Мне, должно быть, не хватает файла или конфигурации установки, но я не могу найти, где (в приведенном выше сообщении говорится, что атмосфера.xml отсутствует, но в примере этого нет). Любая помощь будет оценена по достоинству.


person cardori    schedule 22.10.2012    source источник


Ответы (1)


По умолчанию протокол веб-сокетов не включен в Glassfish.

Вы можете включить его с помощью следующей команды:

asadmin set configs.config.server-config.network-config.protocols.protocol.http-listener-1.http.websockets-support-enabled=true

Это то, что мне нужно, чтобы мое соединение работало.

person cardori    schedule 24.10.2012
comment
Не могли бы вы опубликовать свой maven pom? У меня возникли трудности с компиляцией: stackoverflow.com/questions/17331792/ - person user193116; 29.06.2013