powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Jax-ws & Xmpp
16 сообщений из 16, страница 1 из 1
Jax-ws & Xmpp
    #37876466
krn-prog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем! Мне нужно создать web сервис, который мог бы принимать, обрабатывать и отправлять XMPP сообщения. Как работать с XMPP я знаю. Я создал web приложение на базе JSF, в котором у меня есть ApplicationScoped бин, отвечающий за работу с XMPP. Мой пользователь постоянно онлайн и делает все, что нужно и все работает. Проблема в том, как к этому прикрутить web сервис? Т.е. основная задача в том, чтобы XMPP Connection сохранялось от вызова к вызову, чтобы каждый новый запрос не приводил к созданию нового коннекшена, а использовал ранее созданный. Немного погуглилв я нашел разные варианты:

1. Использовать WS-session и хранить connection в его сессии. Но, говорят, это не круто. Даже более того, что это из разряда "Как нельзя делать".
2. Создать собственный pool, который управлял бы XMPP соединением, но как это сделать я не знаю.

Какой из этих способов наиболее эффективен? Может быть есть еще какой-нибудь способ? Если есть варианты и предложения, то буду рад услышать. Спасибо.

P.S. Прошу не задавать ответных вопросов тип а зачем это нужно и т.п.
...
Рейтинг: 0 / 0
Jax-ws & Xmpp
    #37876479
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krn-progТ.е. основная задача в том, чтобы XMPP Connection сохранялось от вызова к вызову, чтобы каждый новый запрос не приводил к созданию нового коннекшена, а использовал ранее созданный. Немного погуглилв я нашел разные варианты:
Не очень понял о каком XMPP Connection речь. Если вы уже его поверх HTTP пускаете, то разве HTTP Keep-Alive не решает проблему?

krn-prog1. Использовать WS-session и хранить connection в его сессии. Но, говорят, это не круто. Даже более того, что это из разряда "Как нельзя делать".
2. Создать собственный pool, который управлял бы XMPP соединением, но как это сделать я не знаю.
Постоянное соединение это одно, а передача ID сессии это другое. Это две разных проблемы, или вы все же какую-то одну решаете?
...
Рейтинг: 0 / 0
Jax-ws & Xmpp
    #37876565
krn-prog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczkrn-progТ.е. основная задача в том, чтобы XMPP Connection сохранялось от вызова к вызову, чтобы каждый новый запрос не приводил к созданию нового коннекшена, а использовал ранее созданный. Немного погуглилв я нашел разные варианты:
Не очень понял о каком XMPP Connection речь. Если вы уже его поверх HTTP пускаете, то разве HTTP Keep-Alive не решает проблему?

krn-prog1. Использовать WS-session и хранить connection в его сессии. Но, говорят, это не круто. Даже более того, что это из разряда "Как нельзя делать".
2. Создать собственный pool, который управлял бы XMPP соединением, но как это сделать я не знаю.
Постоянное соединение это одно, а передача ID сессии это другое. Это две разных проблемы, или вы все же какую-то одну решаете?

Для отправки сообщений по чату я использую библиотеку smack API. Для того, чтобы подключиться к XMPP серверу используется класс XMPPConnection. Соответственно я создаю экземпляр класса, подключаюсь к серверу и могу оправлять и принимать сообщения. В моем web приложении используется CDI ApplicationScoped бин. Этот бин хранит свое состояние на протяжении жизни всего приложения. Т.е. вне зависимости от сессий пользователей там всегда хранится экземпляр класса XMPPConnection и я в любой момент времени могу взаимодействовать с сервером. Это то, что у меня сейчас есть.

То, что я хочу сделать - это web сервис, который позволял бы отправлять XMPP сообщения. Но при своем стандартном подходе web сервис не хранит состояния предыдущих запросов т.е. мне таком подходе нужно будет каждый раз создавать новый экземпляр класса XMPPConnection, соединяться с сервером, отправлять сообщение и отключаться. Помимо того, что сама эта операция ресурсоемкая, так еще и пропадает возможность получать ответные сообщения и их обрабатывать. Соответственно экземпляр этого класса (XMPPConnection) нужно где-то и как-то хранить, чтобы при каждом новом запросе не создавать его заново, а использовать уже существующий.
...
Рейтинг: 0 / 0
Jax-ws & Xmpp
    #37876575
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так на много понятнее. А ваш Web-Service кто использовать будет?
И ещё. У вас же уже есть какой-то механизм аутентификации. К ID юзера нельзя ли XMPPConnection привязать тогда?
...
Рейтинг: 0 / 0
Jax-ws & Xmpp
    #37876583
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krn-prog1. Использовать WS-session и хранить connection в его сессии. Но, говорят, это не круто. Даже более того, что это из разряда "Как нельзя делать".

Почему нельзя и почему не круто? Если уж на то пошло, то WS оно целиком и полностью не круто. Так что WS-Session это уже мелочи.
...
Рейтинг: 0 / 0
Jax-ws & Xmpp
    #37876613
krn-prog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczТак на много понятнее. А ваш Web-Service кто использовать будет?


Web сервис буду использовать все ИС, которым это необходимо. При наступлении определенных событий они должны иметь возможность отправки сообщений соответствующим пользователям.

BlazkowiczИ ещё. У вас же уже есть какой-то механизм аутентификации. К ID юзера нельзя ли XMPPConnection привязать тогда?

Аутентификация тут не нужна. Web сервис будет крутиться в закрытой сети и его должны использовать все ИС.
...
Рейтинг: 0 / 0
Jax-ws & Xmpp
    #37876624
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но сообщения они ведь приходят от имени какого-то отправителя? Тоесть одну ИС можно считать отдельным клиентом и выделить ей единственное соединение? Может по адресут тогда их ассоциировать?
...
Рейтинг: 0 / 0
Jax-ws & Xmpp
    #37876628
krn-prog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczНо сообщения они ведь приходят от имени какого-то отправителя? Тоесть одну ИС можно считать отдельным клиентом и выделить ей единственное соединение? Может по адресут тогда их ассоциировать?

Да, все сообщения должны отправлять от пользователя "Секретарь". И при создании XMPPConnection именно его учетные данные должны использоваться. При запросе на оправку сообщения экземпляр класса XMPPConnection должен откуда-то доставаться и отправлять полученное сообщение от имени пользователя "Секретарь".
...
Рейтинг: 0 / 0
Jax-ws & Xmpp
    #37876631
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krn-progДа, все сообщения должны отправлять от пользователя "Секретарь". И при создании XMPPConnection именно его учетные данные должны использоваться. При запросе на оправку сообщения экземпляр класса XMPPConnection должен откуда-то доставаться и отправлять полученное сообщение от имени пользователя "Секретарь".
Тогда какой смысл привязывать XMPPConnection к какой-то конкретной сессии? Если XMPPConnection потокобезопасный, то можно всех через единственный экземпляр отправлять. Если он не потокобезопасный, то, действительно, остаётся только пул.
http://commons.apache.org/pool/
...
Рейтинг: 0 / 0
Jax-ws & Xmpp
    #37876635
krn-prog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczkrn-progДа, все сообщения должны отправлять от пользователя "Секретарь". И при создании XMPPConnection именно его учетные данные должны использоваться. При запросе на оправку сообщения экземпляр класса XMPPConnection должен откуда-то доставаться и отправлять полученное сообщение от имени пользователя "Секретарь".
Тогда какой смысл привязывать XMPPConnection к какой-то конкретной сессии? Если XMPPConnection потокобезопасный, то можно всех через единственный экземпляр отправлять. Если он не потокобезопасный, то, действительно, остаётся только пул.
http://commons.apache.org/pool/

Я и не говорил про привязку к какой-либо сессии. Я как раз и спрашиваю где и как можно хранить экземпляр класса XMPPConnection, что бы не создавать его каждый раз заново, а использовать ранее созданный.
...
Рейтинг: 0 / 0
Jax-ws & Xmpp
    #37876680
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krn-progЯ как раз и спрашиваю где и как можно хранить экземпляр класса XMPPConnection, что бы не создавать его каждый раз заново, а использовать ранее созданный.
В ServletContext, в любом синглтоне. Всё зависит от структуры вашего приложения.
...
Рейтинг: 0 / 0
Jax-ws & Xmpp
    #37876696
krn-prog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczkrn-progЯ как раз и спрашиваю где и как можно хранить экземпляр класса XMPPConnection, что бы не создавать его каждый раз заново, а использовать ранее созданный.
В ServletContext, в любом синглтоне. Всё зависит от структуры вашего приложения.

А как к нему (ServletContext) добраться из JAX-WS?
...
Рейтинг: 0 / 0
Jax-ws & Xmpp
    #37876711
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например так.

Код: java
1.
2.
3.
4.
5.
@Resource
private WebServiceContext context;

ServletContext servletContext =
    (ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEX



MessageContext можно получить разными способами. А там внутри уже есть всё нужное от Servlet API.
...
Рейтинг: 0 / 0
Jax-ws & Xmpp
    #37876732
krn-prog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczНапример так.

Код: java
1.
2.
3.
4.
5.
@Resource
private WebServiceContext context;

ServletContext servletContext =
    (ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEX



MessageContext можно получить разными способами. А там внутри уже есть всё нужное от Servlet API.

Т.е. в этом случае мой объект по сути будет доступен всем приложениям web сервера?
...
Рейтинг: 0 / 0
Jax-ws & Xmpp
    #37876759
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krn-progТ.е. в этом случае мой объект по сути будет доступен всем приложениям web сервера?
Нет. ServletContext принадлежит одному конкретному приложению в сервере. Для того чтобы шарить объекты между приложениями их можно поместить в JNDI.
...
Рейтинг: 0 / 0
Jax-ws & Xmpp
    #37876770
krn-prog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Ясно. Большое спасибо!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Jax-ws & Xmpp
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]