[quote=Hebert Coelho][quote=tveronezi]Criei um exemplo de uso de stateful beans especialmente pra vc. :O)
https://github.com/tveronezi/stateful-stateless-integration
Neste exemplo eu uso um stateful pra compartilhar valores entre dois stateless. Este é um caso perfeito de uso do stateful.
Caso o stateful não existisse, eu teria que salvar o valor de “counter” em outro lugar, como uma DB por exemplo. Não preciso nem comparar
a performance de um stateful e um acesso ao banco de dados, né? :O)
@Stateful
public class StatefulBean {
private int count = 0;
public int count() {
return count;
}
public int increment() {
return ++count;
}
}
@Stateless
public class StatelessBean {
@EJB
private StatefulBean counter;
public int getNext() {
return this.counter.increment();
}
public int getCurrent() {
return this.counter.count();
}
}
[code]
public class CounterTest extends TestCase {
public void test() throws Exception {
final Context context = EJBContainer.createEJBContainer().getContext();
StatelessBean beanA = (StatelessBean) context.lookup("java:global/stateful-stateless-integration/StatelessBean");
StatelessBean beanB = (StatelessBean) context.lookup("java:global/stateful-stateless-integration/StatelessBean");
assertEquals(0, beanA.getCurrent());
assertEquals(0, beanB.getCurrent());
assertEquals(1, beanA.getNext());
assertEquals(1, beanB.getCurrent());
assertEquals(2, beanB.getNext());
assertEquals(2, beanB.getCurrent());
}
}
[/code][/quote]Só tome cuidado. Nunca injete um Stateful dentro de um Stateless. Para cada Stateless criado, seria criado um Stateful mesmo que ñ fosse utilizado. E isso pode detonar a memória do servidor quanto maior fosse sua utilização.
É uma péssima prática que eu já vi descrita em quase (se não todos) os livros que já li.[/quote]
Concordo com voce Hebert. A criacao dos Statefuls seria involuntaria, e isso seria um problema !!!
Acabei de comprar o livro que me indicou Hebert ! Precisando me aprofundar mais em certos assuntos.