У меня возникли проблемы с ограничением объема моих трансляций при использовании Atmosphere 0.7.2.
У меня есть POJO из Джерси с методом open, и я хочу передать вещательную компанию классу, не относящемуся к веб-сервису. Это позволяет разделить уровни WAR и EJB.
@Path("/")
public class MyJerseyPojo {
@Context
private Broadcaster broadcaster;
@GET
@Suspend
public String open() {
Manager.register(/* Session ID */, new NonWebservice(this.broadcaster));
return "";
}
}
public class NonWebService implements Sender {
private Broadcaster broadcaster;
public NonWebService(Broadcaster b) {
this.broadcaster = b;
}
@Override
public void send(String thing) {
this.broadcaster.broadcast(thing);
}
}
Идея состоит в том, что события обновления будут вызывать send, и это уведомит клиента о приостановленном ответе. Каждый клиент должен быть связан с отдельным вещателем.
Проблема в том, что это решение использует один и тот же вещатель для всех клиентов. Я попытался добавить @Suspend(scope = Suspend.SCOPE.REQUEST) к методу open, но это приводит к тому, что широковещательные сообщения не принимаются.
Я также попробовал следующее в методе open:
@GET
@Suspend
public String open() {
Broadcaster b = BroadcasterFactory.getDefault().get(JerseyBroadcaster.class, UUID.randomUUID());
b.setScope(Broadcaster.SCOPE.REQUEST);
Manager.register(/* Session ID */, new NonWebservice(b));
}
Это не сработало ни с использованием @Suspend, ни с @Suspend(scope = Suspend.SCOPE.REQUEST). В каждом случае клиент не получал широковещательных сообщений. Однажды я получил сообщение о том, что вещатель уничтожен и не может быть использован, но я не могу вспомнить, как я это сделал!
Я видел похожий вопрос, но не знаю, как перевести его на свой POJO, так как я не расширяю AtmosphereHandler.
Спасибо