Consulta a EJB

8 respostas
C

Olá a todos,

Bem minha dúvida é a seguinte. Tenho um EJB onde nele possuo todas regras de negócio, entidades e facades. Até ai tudo certo, porém na camada de visão estou utilizando JSF com RichFaces no qual utilizo o padrão ServiceLocator juntamente com Singleton para chamar meus EJB’s e é justamente aí que ocorre a dúvida.
Tenho uma consulta que o seu retorno está acima de 6500 registros e, para exibi-los utilizei uma paginação que está incluso como propriedade do RichFace, o DataScroller. Porém quando clico entre as páginas o tempo de retorno é bastante alto, foi quando percebi que no carregamento de cada página, ou seja durante a navegação, é sempre feito uma nova consulta aos EJB’s. :cry:
Então fica a pergunta: Como faço para armazenar estes dados na camada de visão realizando apenas uma consulta ao EJB e lógico não colocando estes dados em uma sessão pois pesaria muito para o servidor???

Desde já agradeço os posts

8 Respostas

C

Os seus sessions beans é stateful ou stateless?

C

São Stateless

P

cara…eu não conheço JSF, portanto não conheço esse componente de paginação…porém, existe basicamente duas formas de se fazer paginação…

vc faz a consulta e joga o resultado todo na sessão, e vai puxando os registros conforme a necessidade…ou então, pra cada pagina vc vai ao banco, porém na query, vc faz com q venha somente os registros desejados…

aparentemente no seu caso, vai ser mais facil vc usar a paginação no banco, nao sei exatamente de q forma, mas vc vai ter q atraves do seu componente de paginação, informar para a query quais os registros vc quer…eu ja fiz isso usando displaytag…

espero ter ajudado…

flw

C

Tente utilizar Stateful para manter o estado. Você também pode guardar esse objeto na sessão para poder utilizá-lo na paginação.

C

Eu também imaginei dessa forma, porém pensei que pudesse existir outra forma “menos tarabalhosa” para realizar isso

Carneiro,
Com Stateful acho que ainda passarei pelo mesmo problema ja que na camada de visão este EJB sempre será chamado, porém não testei
E quanto a sessão gostaria de evitar pois se a aplicação tiver muitos acessos ficaria pesado para o servidor controlar todos estes dados em várias sessões…entendeu? Valeu pelas dicas…vou testar com stateful e caso continuar o problema eu tento com as consultas

C

Então nesse caso é melhor seguir o conselho do Pedro, utilizar as buscas da persistência. Se você tiver utilizando JPA dá pra fazer isso rapidinho.

C

Justamente…Testei com Stateful e deu na mesma. Vou partir para as consultas mesmo com JPA.

Valeu pelas dicas :wink:

C

Só adiantando: utilize os métodos setFirstResult(int arg) e setMaxResults(int arg) do objeto javax.persistence.Query.

Criado 18 de julho de 2007
Ultima resposta 18 de jul. de 2007
Respostas 8
Participantes 3