|
|
|
Jax-ws & Xmpp
|
|||
|---|---|---|---|
|
#18+
Привет всем! Мне нужно создать web сервис, который мог бы принимать, обрабатывать и отправлять XMPP сообщения. Как работать с XMPP я знаю. Я создал web приложение на базе JSF, в котором у меня есть ApplicationScoped бин, отвечающий за работу с XMPP. Мой пользователь постоянно онлайн и делает все, что нужно и все работает. Проблема в том, как к этому прикрутить web сервис? Т.е. основная задача в том, чтобы XMPP Connection сохранялось от вызова к вызову, чтобы каждый новый запрос не приводил к созданию нового коннекшена, а использовал ранее созданный. Немного погуглилв я нашел разные варианты: 1. Использовать WS-session и хранить connection в его сессии. Но, говорят, это не круто. Даже более того, что это из разряда "Как нельзя делать". 2. Создать собственный pool, который управлял бы XMPP соединением, но как это сделать я не знаю. Какой из этих способов наиболее эффективен? Может быть есть еще какой-нибудь способ? Если есть варианты и предложения, то буду рад услышать. Спасибо. P.S. Прошу не задавать ответных вопросов тип а зачем это нужно и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 13:14:10 |
|
||
|
Jax-ws & Xmpp
|
|||
|---|---|---|---|
|
#18+
krn-progТ.е. основная задача в том, чтобы XMPP Connection сохранялось от вызова к вызову, чтобы каждый новый запрос не приводил к созданию нового коннекшена, а использовал ранее созданный. Немного погуглилв я нашел разные варианты: Не очень понял о каком XMPP Connection речь. Если вы уже его поверх HTTP пускаете, то разве HTTP Keep-Alive не решает проблему? krn-prog1. Использовать WS-session и хранить connection в его сессии. Но, говорят, это не круто. Даже более того, что это из разряда "Как нельзя делать". 2. Создать собственный pool, который управлял бы XMPP соединением, но как это сделать я не знаю. Постоянное соединение это одно, а передача ID сессии это другое. Это две разных проблемы, или вы все же какую-то одну решаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 13:20:50 |
|
||
|
Jax-ws & Xmpp
|
|||
|---|---|---|---|
|
#18+
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) нужно где-то и как-то хранить, чтобы при каждом новом запросе не создавать его заново, а использовать уже существующий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 14:06:06 |
|
||
|
Jax-ws & Xmpp
|
|||
|---|---|---|---|
|
#18+
Так на много понятнее. А ваш Web-Service кто использовать будет? И ещё. У вас же уже есть какой-то механизм аутентификации. К ID юзера нельзя ли XMPPConnection привязать тогда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 14:09:03 |
|
||
|
Jax-ws & Xmpp
|
|||
|---|---|---|---|
|
#18+
krn-prog1. Использовать WS-session и хранить connection в его сессии. Но, говорят, это не круто. Даже более того, что это из разряда "Как нельзя делать". Почему нельзя и почему не круто? Если уж на то пошло, то WS оно целиком и полностью не круто. Так что WS-Session это уже мелочи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 14:10:02 |
|
||
|
Jax-ws & Xmpp
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТак на много понятнее. А ваш Web-Service кто использовать будет? Web сервис буду использовать все ИС, которым это необходимо. При наступлении определенных событий они должны иметь возможность отправки сообщений соответствующим пользователям. BlazkowiczИ ещё. У вас же уже есть какой-то механизм аутентификации. К ID юзера нельзя ли XMPPConnection привязать тогда? Аутентификация тут не нужна. Web сервис будет крутиться в закрытой сети и его должны использовать все ИС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 14:21:15 |
|
||
|
Jax-ws & Xmpp
|
|||
|---|---|---|---|
|
#18+
Но сообщения они ведь приходят от имени какого-то отправителя? Тоесть одну ИС можно считать отдельным клиентом и выделить ей единственное соединение? Может по адресут тогда их ассоциировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 14:25:17 |
|
||
|
Jax-ws & Xmpp
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНо сообщения они ведь приходят от имени какого-то отправителя? Тоесть одну ИС можно считать отдельным клиентом и выделить ей единственное соединение? Может по адресут тогда их ассоциировать? Да, все сообщения должны отправлять от пользователя "Секретарь". И при создании XMPPConnection именно его учетные данные должны использоваться. При запросе на оправку сообщения экземпляр класса XMPPConnection должен откуда-то доставаться и отправлять полученное сообщение от имени пользователя "Секретарь". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 14:28:20 |
|
||
|
Jax-ws & Xmpp
|
|||
|---|---|---|---|
|
#18+
krn-progДа, все сообщения должны отправлять от пользователя "Секретарь". И при создании XMPPConnection именно его учетные данные должны использоваться. При запросе на оправку сообщения экземпляр класса XMPPConnection должен откуда-то доставаться и отправлять полученное сообщение от имени пользователя "Секретарь". Тогда какой смысл привязывать XMPPConnection к какой-то конкретной сессии? Если XMPPConnection потокобезопасный, то можно всех через единственный экземпляр отправлять. Если он не потокобезопасный, то, действительно, остаётся только пул. http://commons.apache.org/pool/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 14:31:17 |
|
||
|
Jax-ws & Xmpp
|
|||
|---|---|---|---|
|
#18+
Blazkowiczkrn-progДа, все сообщения должны отправлять от пользователя "Секретарь". И при создании XMPPConnection именно его учетные данные должны использоваться. При запросе на оправку сообщения экземпляр класса XMPPConnection должен откуда-то доставаться и отправлять полученное сообщение от имени пользователя "Секретарь". Тогда какой смысл привязывать XMPPConnection к какой-то конкретной сессии? Если XMPPConnection потокобезопасный, то можно всех через единственный экземпляр отправлять. Если он не потокобезопасный, то, действительно, остаётся только пул. http://commons.apache.org/pool/ Я и не говорил про привязку к какой-либо сессии. Я как раз и спрашиваю где и как можно хранить экземпляр класса XMPPConnection, что бы не создавать его каждый раз заново, а использовать ранее созданный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 14:34:43 |
|
||
|
Jax-ws & Xmpp
|
|||
|---|---|---|---|
|
#18+
krn-progЯ как раз и спрашиваю где и как можно хранить экземпляр класса XMPPConnection, что бы не создавать его каждый раз заново, а использовать ранее созданный. В ServletContext, в любом синглтоне. Всё зависит от структуры вашего приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 14:53:03 |
|
||
|
Jax-ws & Xmpp
|
|||
|---|---|---|---|
|
#18+
Blazkowiczkrn-progЯ как раз и спрашиваю где и как можно хранить экземпляр класса XMPPConnection, что бы не создавать его каждый раз заново, а использовать ранее созданный. В ServletContext, в любом синглтоне. Всё зависит от структуры вашего приложения. А как к нему (ServletContext) добраться из JAX-WS? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 14:59:46 |
|
||
|
Jax-ws & Xmpp
|
|||
|---|---|---|---|
|
#18+
Например так. Код: java 1. 2. 3. 4. 5. MessageContext можно получить разными способами. А там внутри уже есть всё нужное от Servlet API. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 15:03:50 |
|
||
|
Jax-ws & Xmpp
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНапример так. Код: java 1. 2. 3. 4. 5. MessageContext можно получить разными способами. А там внутри уже есть всё нужное от Servlet API. Т.е. в этом случае мой объект по сути будет доступен всем приложениям web сервера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 15:11:45 |
|
||
|
Jax-ws & Xmpp
|
|||
|---|---|---|---|
|
#18+
krn-progТ.е. в этом случае мой объект по сути будет доступен всем приложениям web сервера? Нет. ServletContext принадлежит одному конкретному приложению в сервере. Для того чтобы шарить объекты между приложениями их можно поместить в JNDI. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 15:19:41 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37876680&tid=2131375]: |
0ms |
get settings: |
21ms |
get forum list: |
31ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
73ms |
get topic data: |
26ms |
get forum data: |
7ms |
get page messages: |
115ms |
get tp. blocked users: |
3ms |
| others: | 356ms |
| total: | 648ms |

| 0 / 0 |
