Bom dia Pessoal.
Tenho um Session Bean que é Stateless e a natureza do mesmo realmente é Stateless, pois fornece APENAS UM método publico.
Acontece que este metodo publico recebe um objeto (Nota) e entao realizo inumeras operações com esta nota, para isso faço chamadas a vários outros métodos privados.
Exemplificando:
@Stateless(mappedName = "ejb/WSNFP")
public class EmissorNota implements EmissorNotaLocal {
public void importaNota(Nota nota) {
this.fazOperacao1(nota);
}
private void fazOperacao1(Nota nota) {
//faz algumas operacoes
OutroObj outroObj = nota.getOutroObj();
this.fazOperacao2(nota, outroObj);
}
private void fazOperacao2(Nota nota, OutroObj outroObj) {
//faz algumas operacoes
}
}
observem que por se tratar de um Session Bean Stateless preciso ficar passando os parametros necessarios de metodo a metodo (aqui estou passando apenas nota, mas existem outros metodos privados que passam mais parametros).
Ao meu ver alem de dificultar e muito a programação, passar esses parametros deixa o codigo menos OO.
minha solução para o problema foi colocar a Nota e os outros objetos que são parametros de varios outros metodos como atributo do Session Bean e “mata-los” no final do metodo publico. Como sabemos se deixarmos esses objetos como atributos do Session Bean outro cliente pode usa-los, porem como Session bean tem apenas um metodo publico sempre que o cliente fizer uma chamada estara passando o objeto em que ele quer que seja realizado o processamento.
Assim nao sera necessario ficar passando um monte de parametros, ja que estes serão atributos do Session bean. E nem terei problemas de outra pessoa acessar estes atributos com valores incorretos.
Exemplificando:
@Stateless(mappedName = "ejb/WSNFP")
public class EmissorNota implements EmissorNotaLocal {
private Nota nota;
private OutroObj outroObj
public void importaNota(Nota nota) {
this.fazOperacao1();
this.nota = null;
}
private void fazOperacao1() {
// faz algo, com THIS.NOTA
//faz algumas operacoes
this.fazOperacao2();
}
private void fazOperacao2() {
// faz algo, com THIS.NOTA
// faz algo, com THIS.OutroObj
//faz algumas operacoes
}
}
Alguem consegue enxergar problemas nessa abordagem ou sugerir algo melhor ?
obrigado
grande abrassss