Chat com jsf e primefaces

492 views
Skip to first unread message

Valeria Silva

unread,
Jun 26, 2015, 10:07:26 AM6/26/15
to jav...@googlegroups.com
Olá a todos!! Tenho uma aplicação JSF 2.2, primefaces, hibernate e Spring Security. Estou desenvolvendo um chat dentro desta aplicação e gostaria de iniciar uma discussão sobre o modo como estou implementando este chat. Se os colegas puderem apontar os gargalos, problemas, boas práticas, erros, etc, eu agradeço muito.

O chat está funcionando da seguinte forma: Tenho duas classes, Usuario, Conversa e Mensagem. A classe Usuario se relaciona com a classe Conversa de modo ManyToMany. Já a classe Conversa se relaciona com a classe Mensagem de modo OneToMany. E por fim, a classe Mensagem se relaciona com Usuario de modo ManyToOne.

Esses dados são persistidos no banco e a forma que encontrei de simular um chat "Real-Time" foi usando a tag <p:poll > do primefaces, que chama o método de retorno das mensagens à cada segundo.
Quando o usuário envia uma mensagem para outro, invoca-se o método no Controller para persistir a mensagem no banco. Está funcionando, no entanto, por exemplo, se 10000 usuários chamarem este método ao mesmo tempo, penso que pode haver problemas de concorrência (o que acham??).
Outro problema que estou tendo é na forma como vou tratar o Status de cada usuário (Online, Offline, Ausente, etc). Isto ainda não está pronto, mas estou pensando em persistir estes  status no banco, e, quando o usuário fizer logoff no sistema este status é mudado para Offilne (no banco).

Conseguem entender? Eu temo que este chat tenha muitos problemas futuramente quando houverem muitos usuários. Eu gostaria de usar a session de cada usuário (provido pelo Spring Security) mas não sei se é possível.

Bom, caso possam me ajudar com criticas, sugestões e 'whatever', eu agradeço!!!!

Denis Silveira

unread,
Jun 26, 2015, 10:12:11 AM6/26/15
to jav...@googlegroups.com
Bom dia Valeria, não seria melhor manter algumas coisas na Sessão?
Principalmente a parte de Status, não tem necessidade de salvar na base o Status, até porque o mesmo será alterado constantemente.

A parte da conversa não sei se ficaria interessante também já salvar diretamente na base, ainda mais você pensando nesse volume de dados.

Em relação a coerência, tudo vai depender do seu chaveamento. =)

E boa sorte...



--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/javasf.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/javasf/d8303c0c-899f-4b6a-bf43-aeda6d43b542%40googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Atenciosamente,

Denis Silveira
Fone: (11) 95285-0724
Analista de Java/SOA

"Um homem é um sucesso se pula da cama pela manhã, vai dormir à noite e, nesse meio tempo, faz o que gosta."



Arthur Gregório

unread,
Jun 26, 2015, 10:18:42 AM6/26/15
to jav...@googlegroups.com
Chegou a ver algo relacionado a JMS?

Arthur P. Gregório
+55 45 9958-0302
@gregorioarthur
www.arthurgregorio.eti.br

Rafael Ponte

unread,
Jun 26, 2015, 10:32:22 AM6/26/15
to jav...@googlegroups.com
Olá,

A funcionalidade de push-notifications do Primefaces não pode ajudar nesse caso? http://www.primefaces.org:8080/showcase/push/chat.xhtml





Para mais opções, acesse https://groups.google.com/d/optout.
--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

Maicon

unread,
Jun 26, 2015, 10:38:51 AM6/26/15
to jav...@googlegroups.com
Eu também ia comentar algo com push, pois isso vai evitar uma carga no servidor. Vamos imaginar 10000 usuários perguntando pro servidor a cada segundo se existe mensagem e o server retorna somente 1000 mensagens, seria uma desperdício...

Ou outra possibilidade seria usando websocket.

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/async-servlet/async-servlets.html

http://www.infoq.com/br/articles/websocket-java-javaee


Para mais opções, acesse https://groups.google.com/d/optout.



--
Att.
Maicon
Fone: 92690976
Skype: pnpinfo...@gmail.com

João Rodrigo da Silva

unread,
Jun 29, 2015, 10:52:29 AM6/29/15
to jav...@googlegroups.com
Ao invés de fazer pool você pode utilizar websocket.
Reply all
Reply to author
Forward
0 new messages