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] -------------------------------------------------------------------------