Pessoal,

Peço a atenção de todos nesse momento e se possível gostaria da indicação 
de alguma solução ou até mesmo da indicação de algum consultor que possa 
sanar as seguintes dúvidas.

Estou desenvolvendo uma aplicação simples que será utilizada para testes 
baseada na tecnologia J2EE  e estou tendo alguns problemas de performance.

A aplicação possui apenas 04 EJBs, onde 01 deles é "Session Beans Stateful" 
e 03 deles são "Entity Beans" utilizando o conceito de persistência do EJB 
2.0 (CMP). Para não ficar muito confuso vamos dar nome aos "bois":

        - ClienteEJB  (Entity)
        - TipoClienteEJB  (Entity)
        - ClassificacaoEJB  (Entity)
        - FacadeEJB (Session - Stateful)
        
O relacionamento entre as entidades é feita através de CMR com a seguinte 
configuração de multiplicidade:

        TipoClienteEJB -> ClassificacaoEJB  (n:1)
        ClienteEJB     -> TipoClienteEJB    (n:1)
        

O Façade faz acesso a entidade ClienteEJB utilizando o método 
findTodosClientes() que retorna uma Collection contendo os "remotes" desssa 
entidade para o Façade.

O Façade por sua vez percorre essa Collection acessando elemento-a-elemento 
(EJBLocalObject -> ClienteEJB) e faz acesso aos "getters" dessa entidade, 
encapsulando os seus dados em instâncias de "Value Objects" que serão 
enviadas para o Client através de um ArrayList.

O servidor de aplicação que estamos utilizando é o próprio "EJB Server" que 
vem junto com o sdk1.3.1 do J2EE e o gerenciador de banco de dados utizado 
é o Cloudscape. Fiz isso porque a documentação da Javasoft/Sun diz que se a 
aplicação for executada nesses servidores indica que a mesma está dentro 
das especificações e, sendo assim, poderá ser executada em qualquer 
servidor de aplicação (container EJB) que atender às especificações da Sun.

Até aí tudo bem. Segui todas as recomendações dos livros "J2EE Tutorial", 
do "Mastering EJB II" e as recomendações da Sun, utilizando o mesmo padrão 
de codificação exposto pelo Blueprint "PetStore 1.3.1".

A máquina utilizada para testes não é muito "parruda", é um Pentium III com 
apenas 256Mb de RAM, mas mesmo assim acho que a performance não deveria ser 
tão lenta.

A aplicação funciona perfeitamente e sem problemas, a não ser o problema da 
performance.

Com apenas algumas entidades (05 entidades para cada EJB) a coisa flui 
normalmente, mas quando resolvi inserir 200 entidades para o EJB ClienteEJB 
a coisa ficou "insuportavelmente" mais lenta. A lentidão acontece quando o 
Client acessa o Façade e o mesmo pede para consultar todos os clientes. 

Acreditávamos que os Entities ficariam "levantados" na memória após o seu 
primeiro acesso, mas o que verificamos é que mesmo isso acontecendo o 
acesso a essas entidades é muito lenta.

Por exemplo:


Na primeira vez que faço a busca através do método findTodosClientes(), 
para cada entidade verificamos que o container faz o seguinte:

        - acessa o método setEntityContext()
        - acessa o método ejbActivate()
        - acessa os métodos ejbLoad() e ejbStore() sequencialmente (uma vez 
para cada "getter" que eu tenha em meu EJB)
        
Ou seja, se o meu EJB possui 08 "fields", o container EJB fará o acesso de 
18 métodos apenas para ler a entidade e deixá-la ativa em memória.

Nas próximas vezes que tento acessar o mesmo método, heis o que ele faz:

        - acessa os métodos ejbLoad() e ejbStore() (uma vez para 
cada "getter" que eu tenha em meu EJB)
        
Ou seja, é muita coisa!!!

O processo torna-se extremamente lento e dispendioso. Consome muito 
processamento e memória (Isso tudo no "olhômetro", não utilizei nenhuma 
ferramenta para medição, apenas o Task Manager do Win2K).

O trabalho que venho fazendo visa entender a tecnologia e saber se a mesma 
é ou não interessante para futuros projetos de desenvolvimento da empresa 
em que trabalho. Meus gerentes já estão ficando preocupados com os 
resultados apresentados e estamos começando a ter uma outra visão sobre a 
tecnologia.

Portanto deixo as seguintes perguntas e acho que seria interessante a todos 
da lista que conhecessem o cenário.


- Quando os campos CMP são carregados? Qual é o comportamento convencional?

- Alguém da lista desenvolveu ou conhece algum caso de sucesso de aplicação 
que utiliza EJB 2.0 (CMP) com alguns EJB que contenham algo em torno de 
10.000 ou mais entidades? Se sim, temos como vê-la funcionando? É 
performático? Funciona bem? Em que ambiente está funcionando 
(máquina/software/rede)? 

- Alguém já fez a migração de alguma aplicação feita em J2EE (utilizando 
CMP) para outros servidores comerciais?

  * Tentei fazer para o JBoss 3.0, mas o mesmo exige a criação de arquivos 
específicos de deploy (jboss.xml) e isso demandaria tempo para o 
aprendizado. Alguém conhece alguma ferramenta que ajude a fazer isso? 
Alguém trabalha especificamente com esse servidor?
  
  * Tentei fazer o deploy no Borland Enterprise Server e achei (IMHO) 
um "lixo". O suporte fugiu todas as vezes que precisei. Desisti dessa 
ferramenta, ao menos que alguém possa me dizer que a conhece e sabe quais 
os detalhes de como ela funciona.
  
  * Temos como alvo o server da WebLogic (BEA), mas ainda não fiz a 
tentativa por falta de tempo e por decisão da gerência. Mas temos em mente 
a contratação da consultoria de algum profissional que possa nos apresentar 
uma proposta de trabalho para:
     # Instalação do Servidor
     # Treinamento rápido
     # Documentação básica de configuração
     # Apresentação de algum caso de sucesso contemplando o quadro 
apresentado no 1o. item dessas questões.
  
  * Gostaríamos de utilizar o WebSphere (IBM), mas a versão atual ainda não 
contempla o CMP do EJB2.0. 
  
-  O problema de performance que estou tendo acontece apenas no "EJB 
Server" do sdk1.3.1 do J2EE? Com outros servidores comerciais esse problema 
estaria resolvido?


Tenho muito mais dúvidas, mas acho que se deixá-las todas aqui estarei 
cansando o leitor da lista com um amontoado de palavras que não levarão a 
nada.

Mas ajudaria muito se:

- pudéssemos discutir o assunto em grupo e deixar claro se a performance 
das aplicações geradas em J2EE são mesmo lentas;
- algum consultor pudesse entrar em contato através do meu e-mail 
particular ([EMAIL PROTECTED]) e enviasse alguma proposta de 
consultoria sobre o assunto;


Muito obrigado

Zanata


------------------------------ LISTA SOUJAVA ---------------------------- 
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP 
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED] 
-------------------------------------------------------------------------

Responder a