[OFF-TOPIC] conceito Stateless x Statefull

2,720 views
Skip to first unread message

Rafael Neves

unread,
Feb 2, 2012, 12:54:08 PM2/2/12
to jav...@googlegroups.com
Pessoal,

já li em alguns artigos sobre esses conceitos, mas ainda não consegui aximilar esses dois conceitos direito, alguém poderia falar sobre a diferença entre cada um servidor e fazer relação com o @Stateles e @Statefull do Seam?

--
Att,
Rafael Neves
Formando em Análise e Desenvolvimento de Sistemas
Cursando pós em Engenharia de Software
Analista Júnior!!!

Contato: Ranev...@gmail.com

Tiago Augusto Nogueira Coelho

unread,
Feb 3, 2012, 7:53:41 AM2/3/12
to jav...@googlegroups.com
Basicamente o stateless não tem estado e statefull tem. Mas o que seria o estado.

Quando vc tem uma referencia para um EJB stateless e faz 4 invocações de métodos nesta referência, cada invocação pode estar sendo realizada por instâncias diferentes, ou seja não garante o estado armazenado no seu EJB. Se você tivesse alguma variável de instância, você não poderia contar com ela. Pois a instância pode mudar.

Já o statefull ele mantem esse estado, se vc tem uma referência para um EJB statefull vc pode realizar quantas invocações quizer que será a mesma instância, o seu estado será mantido.

Até onde eu sei é isso, mas alguem com mais experiencia em EJB poderia contribuir só para eu não falar bobeira.

Douglas Ramiro

unread,
Feb 2, 2012, 1:01:34 PM2/2/12
to jav...@googlegroups.com
Vamos lá:

Stateless: Significa sem estado
Statefull: Significa com estado

Sendo mais claro agora, ter estado significa que existe uma ligação direta entre o cliente e o servidor por um determinado tempo. Seria algo bem parecido com o conceito de uma Sessão Web. Se o seu componente for statefull, cada atributo dele irá sobreviver enquanto o cliente estiver ativo com o servidor.

O stateless é exatamente o contrário. Nada me garante que em uma próxima requisição ainda existirá os meus dados anteriores. 

Tome bastante cuidado quando for escolher um ou o outro. As vezes ficamos bem tentados a trabalhar sempre com statefull, porém não é recomendável pois ele não é nada escalável (Afinal, cada requisição de cliente será obrigatoriamente um novo objeto na memória)

espero que tenha ficado claro.

att

--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil



--
Douglas Ramiro
_____________________________________
Java Developer
Sun Certified Java Associate (SCJA)
Sun Certified Java Programmer (SCJP)
JBoss Certified Application Administrator (JBCAA)

MarceloMF

unread,
Feb 2, 2012, 1:25:10 PM2/2/12
to jav...@googlegroups.com
Stateless = Não tem controle de estado.
Statefull = Tem controle de estado.

O que é um estado ?

Em uma aplicação web:
1 - Não logado.
2 - Logado.
3 - Lead.
4 - Comprando.
5 - Faturado.
6 - Inativo.
7 - Não logado.
8 - ? (apenas login/logout já seria suficiente, mas nada impede também de pensar em BPM)
...

Em um IM:
1 - Disponível.
2 - Não disponível.
3 - Invisível.
4 - Ausente.
5 - ?
...

Em uma conexão tcp/ip:
1 - Nova conexão.
2 - Conexão estalecida.
3 - Conexão em espera.
4 - Conexão sendo finalizada.

Ou seja, se você gerencia um estado diferente do original é statefull, se não é stateless(udp por exemplo).

[]s

Em 2 de fevereiro de 2012 15:54, Rafael Neves <ranev...@gmail.com> escreveu:
--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil



--
Att, Marcelo M. Fleury
Blog - http://marcelomf.blogspot.com/
Slides - http://www.slideshare.net/marcelomf/

"O primeiro dever da inteligência é desconfiar dela mesma." By Einstein

MarceloMF

unread,
Feb 2, 2012, 1:39:28 PM2/2/12
to jav...@googlegroups.com
Faz tempo que brinquei com o Seam, mas se um objeto é statefull, quer dizer que você quer manter o estado do objeto para próximas requisições, é interessante também observar os escopos. Leia-se estado = alterações nos atributos com setters por exemplo, ou mesmo alguma regra de negocio.

Exemplo:
1 bean de pesquisa dividido em 5 paginas/requisições.

O estado desse bean tem que ser statefull, porque você quer ter as alterações realizadas nele em todas as requisições/paginas, até poder persistir no banco. Cabe a você utilizar o escopo que melhor te atende, sem gerar overhead e com os devidos tratamentos.

"
When no scope is explicitly specified, the default depends upon the component type. For stateless session beans, the default is STATELESS. For entity beans and stateful session beans, the default is CONVERSATION. For JavaBeans, the default is EVENT.
"

http://docs.jboss.org/seam/1.2.1.GA/reference/en/html/annotations.html antigo mas da para entender.

Everton Fujimoto

unread,
Feb 3, 2012, 8:05:55 AM2/3/12
to jav...@googlegroups.com
O exemplo de ser a mesma instância você confundiu um pouco os conceitos, nesse caso o ponto de ser a mesma instância é o conceito singleton. Stateless é como você disse, ele "perde o estado" entre as requisições, ou seja, em cada requisição é uma instância nova do bean. Já o Statefull possui a mesma instância nas diferentes requisições do mesmo cliente (é armazenado na sessão do usuário)

O EJB possui uma mesma instância para todas as requisições de qualquer usuário, é um singleton que gerencia determinada parte de toda aplicação.


Att.
Everton William Fujimoto
Hecate Systems
CIO
(47)3394-5516
(47)9947-5481




--

MarceloMF

unread,
Feb 3, 2012, 9:41:05 AM2/3/12
to jav...@googlegroups.com
Oi Tiago,

Isso mesmo, talvez você tenha sido mais didático.

[]s

Rafael Neves

unread,
Feb 5, 2012, 8:53:50 PM2/5/12
to jav...@googlegroups.com
pessoal,

muito obrigado a todos, deu pra captar a diferença.

--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil
Reply all
Reply to author
Forward
0 new messages