Zanata,
J� usei bastante o Websphere utilizando BMP 1.1 e obtive
performance bem satisfat�ria.
Tenho o J2EESDK em casa e o Jboss...
Voc� est� fazendo o acesso entre os EntityBeans atrav�s de
intefaces locais ou remotas? Isto poderia ser um ponto chave para a
melhoria de desempenho.
Outra coisa: Os EntityBeans devem ser usados para entidades que
realmente se deseja manipular. Por exemplo: Para ler as op��es para um
combo (que poderia ler muitas entradas no banco de dados) voc� deve
fazer acesso direto ao objeto de acesso a dados, sem passar pelo
EntityBean - Veja java.sun.com/blueprints e cheque o pattern FastLane e
Data Access Objects para a descri��o deste modelo.
Me d� um feedback sobre este modelo. Se precisar de consultoria t�cnica
posso ajudar tamb�m.
Um abra�o,
Marcelo Alcantara
Senior Java/Web Developer
------------------------
[EMAIL PROTECTED]
+55-11-9133-5094
S�o Paulo - Brasil
-----Original Message-----
From: j2ee [mailto:[EMAIL PROTECTED]]
Sent: quinta-feira, 18 de julho de 2002 18:23
To: [EMAIL PROTECTED]
Cc: [EMAIL PROTECTED]
Subject: [enterprise-list] EJB 2.0 CMP -> Performance Lenta / Deploy /
Application Servers
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
---------------------------------------------------------------------
Para cancelar a subscri��o, envie mensagem para:
[EMAIL PROTECTED]
Para comandos adicionais, envie mensagem para:
[EMAIL PROTECTED]
---------------------------------------------------------------------
Para cancelar a subscri��o, envie mensagem para:
[EMAIL PROTECTED]
Para comandos adicionais, envie mensagem para: [EMAIL PROTECTED]