[Duvida] @Stateless @Stateful

1 resposta
GabrielCardelli

Opa galera, beleza? Estou lendo o livro EJB in Action e pelo que entendi o livro fala que @Stateful o Bean carrega seu estado por um tempo para um determinado cliente.
e o @Stateless é usado por todos.

Mais o que o meu teste traz são dados totalmente ao crontário.

Fiz 2 testes com essa classe:

public class HelloObject implements HelloInterface{

	private int count = 0;
	
	public String validation(String login, String pass) {
		count++;
		if(login.equals("GabrielCardelli") && pass.equalsIgnoreCase("123456")){
			return "logado" +  count;
		}
		return "vetado" + count;
	}

}
Teste com @Statefull

Cliente 1 (Browser do Eclipse)
23:13:49,498 INFO  [STDOUT] logado1
23:13:49,500 INFO  [STDOUT] logado2
23:13:49,502 INFO  [STDOUT] logado1
23:13:49,503 INFO  [STDOUT] logado2

Cliente 2 (Chrome)
23:13:57,433 INFO  [STDOUT] logado1
23:13:57,435 INFO  [STDOUT] logado2


Teste com @Stateless

Cliente 1 (Browser do Eclipse)
23:15:49,498 INFO  [STDOUT] logado1
23:15:49,500 INFO  [STDOUT] logado2
23:15:49,502 INFO  [STDOUT] logado3
23:15:49,503 INFO  [STDOUT] logado4

Cliente 2 (Chrome)
23:16:57,433 INFO  [STDOUT] logado1
23:16:57,435 INFO  [STDOUT] logado2

A Resposta não deveria ser algo do tipo:

Teste com @Statefull

Cliente 1 (Browser do Eclipse)
23:13:49,498 INFO  [STDOUT] logado1
23:13:49,500 INFO  [STDOUT] logado2
23:13:49,502 INFO  [STDOUT] logado3
23:13:49,503 INFO  [STDOUT] logado4

Cliente 2 (Chrome)
23:13:57,433 INFO  [STDOUT] logado1
23:13:57,435 INFO  [STDOUT] logado2


Teste com @Stateless

Cliente 1 (Browser do Eclipse)
23:15:49,498 INFO  [STDOUT] logado1
23:15:49,500 INFO  [STDOUT] logado2
23:15:49,502 INFO  [STDOUT] logado3
23:15:49,503 INFO  [STDOUT] logado4

Cliente 2 (Chrome)
23:16:57,433 INFO  [STDOUT] logado5
23:16:57,435 INFO  [STDOUT] logado6

Estou usado a seguinte classe para teste:

public class Validation {
	
	public void ValidarUsuario(String nome, String senha) {

		 HelloLocator hl = new HelloLocator();
		HelloInterface hi = null;
		try {
			hi = (HelloInterface) new InitialContext().lookup("HelloObject/local");
			
			String result = hi.validation("GabrielCardelli","123456");
			System.out.println(result);
			
			result = hi.validation("GabrielCardelli","123456");
			System.out.println(result);
			
			hi = (HelloInterface) new InitialContext().lookup("HelloObject/local");
			
			result = hi.validation("GabrielCardelli","123456");
			System.out.println(result);
			
			result = hi.validation("GabrielCardelli","123456");
			System.out.println(result);
			
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		

	}
	

}

Alguem poderia me explicar algo sobre isso?Fiquei confuso agora, me parece que o livro está explicando errado.

Abraço, Obrigado;.

1 Resposta

Alexandre_Saudate

O livro está certo sim. O mais provável é que seu AS tenha mantido as classes invertidas e, na hora de testar, deu a entender que seria o contrário. Tente fazer uma limpeza completa do seu AS antes de testar de novo, deve funcionar assim.

[]´s

Criado 30 de maio de 2010
Ultima resposta 31 de mai. de 2010
Respostas 1
Participantes 2