PC/Aplicação lenta com JSF 2.0+PrimeFaces+EJB 3.1+PostgreSQL+GlassFish

20 respostas
M

Estou com problema em uma aplicação Web com JSF 2.0+PrimeFaces+EJB 3.1+PostgreSQL+GlassFish, enquanto estava desenvolvendo e testando em meu computador a aplicação estava rápida e o computador não apresentava lentidão, mas quando instalei no computador da empresa para utilizar na intranet, o resultado foi bem diferente, o computador fica lento e a aplicação não apresenta todo o desempenho esperado.

Agora, como não tenho como melhorar o Computador(servidor) na empresa, preciso fazer alterações na aplicação, o que vcs podem me sugerir?
… pensei em abandonar o EJB e trabalhar diretamente com JPA, ou até msm JDBC “puro”…

obs… o computador onde desenvolvi é um Turion X2 2.0GHz, 3GB memoria com Ubuntu 10.04, o da empresa é um Celeton 2.6 GHz, 1GB memoria com windows XP, onde ja existe uma aplicação com JSP+Servlets+JDBC+PostgreSQL+Tomcat funcionando “perfeitamente”.

20 Respostas

A

Olha, não vou falar pelo Glassfish, mas com o JBoss, nessa máquina da empresa que você falou, sem chance. Ainda mais usando JSF e EJB 3+. Acredito que, quando falamos em servidores de aplicação, precisamos usar uma máquina com um pouco mais de capacidade de processamento. Se você não tiver escolha e é obrigado a usar EJB com JSF, opte por algo mais simples do que o Glassfish, como o OpenEJB. Dependendo da sua arquitetura, a migração é bem tranquila de fazer. O JBoss, na minha máquina alcança os 400MB de uso. O OpenEJB não passa de 100.

Se você inicia o Glassfish fora dessa máquina, você pode ter se confundido no ciclo de vida do JSF. Já tive que encarar sistemas lentíssimos, e não por causa de ser EJB com JBoss, mas porque o JSF foi utilizado de forma errada (tipo cada renderização fazia uma request). Algumas dicas do que NÃO fazer com JSF (pelo menos na 1.2):
[list]Usar JSTL com JSF;[/list]
[list]Forçar a mudança de URL com ;[/list]
[list]Usar e manipular os parâmetros que vem nas requisições.[/list]

Se a parte de JSF fica bem leve, pode ser que você esteja se confundindo na hora de usar os EJBs. Tive um colega que desenvolveu um software que criava o context toda hora que ia fazer lookup. Além disso, não injetava o EntityManager, mas usava a Factory e, a cada request, criava a Factory. É complicado lidar num sistema desses.

Cabe a você determinar se a lentidão é na parte do JSF ou na parte do Glassfish. Pra determinar isso, existem algumas ferramentas que aixiliar a medir o uso de memória e processamento (se você usa Eclipse, procure por Eclipse Memory Analyzer. Eu não usei, mas vi pessoas falando muito bem dele). O JMeter também pode ser uma opção. Como você falou que é Windows XP, dá um Ctrl Alt Delete e monitora o processamento por ali. Outra forma de analisar é logar o tempo do envio e recebimento das requests (esse é um jeito arcaico, mas é muito mais simples e fácil de fazer se não é um sistema muito grande).

Editado daqui pra baixo
Você usa EJB pra que? A grande vantagem do EJB é usar ele em business apps grandes, que exijam bastante processamento no lado do servidor. Se você usa EJB só pra banco, use a JPA. Nesse caso, o EJB veio pra solucionar um problema que não existe. Além disso, você pode até mesmo abandonar o Glassfish e usar Tomcat com JSF. Hoje é necessário pensar muito bem antes de escolher EJB, ainda mais se você tem em suas mãos máquinas que não são servidores. Existem várias opções: Spring, VRaptor, Play, Rails.

I

Eu uso glassfish e postgresql, e são muito rápido. Servidor de produção tem que ser dimensionado de acordo com a carga que ele terá que suportar.
Sem falar em tuning de SO, glassfish, aplicação que faça uso de cache, hql bem escrito, etc.

A

Italivio:
Eu uso glassfish e postgresql, e são muito rápido. Servidor de produção tem que ser dimensionado de acordo com a carga que ele terá que suportar.
Sem falar em tuning de SO, glassfish, aplicação que faça uso de cache, hql bem escrito, etc.

Italivio, você usa GF e PostGreSQL em qual máquina?

M

A lentidão do computador acredito que possa ser o glassfish msm, mas tem uma coisa que acho estranha, é que no monitor de processos do windows aparecem vários processos do postgre…

Estava usando EJB somente por questão de aprendizado e Glassfish consequentemente por necessidade de um servidor de aplicação.
Por isso minha primeira ideia é abandonar o EJB para poder voltar ao “bom e velho” Tomcat, e com isso acredito que a lentidão do computador possa ser resolvida. Mas não sei se com essa alteração ja consiga melhorar o desempenho da aplicação.

Vou estudar melhor o ciclo de vida do JSF pra ver se estou fanzendo algo errado.

A

Masami:
Estava usando EJB somente por questão de aprendizado e Glassfish consequentemente por necessidade de um servidor de aplicação.
Por isso minha primeira ideia é abandonar o EJB para poder voltar ao “bom e velho” Tomcat, e com isso acredito que a lentidão do computador possa ser resolvida. Mas não sei se com essa alteração ja consiga melhorar o desempenho da aplicação.

Vou estudar melhor o ciclo de vida do JSF pra ver se estou fanzendo algo errado.


Todo estudo é válido.
Dê uma chance ao OpenEJB. O pessoal que escreve o código desse container escreve também o TomEE, que é o JEE 6 Web Profile da Apache. O suporte é bom (tem o Nabble pra devs e usuários e um canal no irc na quakenet - #openejb). Recomendo.

Além desses que falei, você pode tentar usar o MyContainer, da Dextra (esse é brasileiro). Eu tentei usar com o EclipseLink, mas não tive sucesso devido à uma incompatibilidade (o Paulo Murer, um dos commiters, já sabe e desde que falei com ele, estava averiguando o problema).

Abraço.

F

Bem vindo ao mundo real Java kkkkkkkkkkkkkk :smiley:

  1. Identifique o(s) motivo(s) do problema.
  2. Viabilize soluções sistemáticas para um deles.
  3. Escolha e implemente.

Vou dar minha pitada…
Vc tem certeza que vc precisa servidor como o Glasfish? Ele provavelmente deve estar subindo um bilhão de serviços e vc não ta usando nem 10%. kkkkkk
Vc sabe quais são todos estes serviços? Sabe quais vc ta usando? Quais vc não esta usando?

M

Andre Brito:
Dê uma chance ao OpenEJB. O pessoal que escreve o código desse container escreve também o TomEE, que é o JEE 6 Web Profile da Apache. O suporte é bom (tem o Nabble pra devs e usuários e um canal no irc na quakenet - #openejb). Recomendo.

Além desses que falei, você pode tentar usar o MyContainer, da Dextra (esse é brasileiro). Eu tentei usar com o EclipseLink, mas não tive sucesso devido à uma incompatibilidade (o Paulo Murer, um dos commiters, já sabe e desde que falei com ele, estava averiguando o problema).


Bom, então vou baixar o OpenEJB e ver se vai resolver meu problema.

FernandoFranzini:
Bem vindo ao mundo real Java kkkkkkkkkkkkkk :smiley:

  1. Identifique o(s) motivo(s) do problema.
  2. Viabilize soluções sistemáticas para um deles.
  3. Escolha e implemente.

…essa não é a primeira e acho q naum será a ultima vez que terei que fazer isso, … vida de programador não é facil…

FernandoFranzini:
Vou dar minha pitada…
Vc tem certeza que vc precisa servidor como o Glasfish?

preciso de um servidor de aplicação devido ao EJB, não necessariamento o Glassfish.

FernandoFranzini:
Ele provavelmente deve estar subindo um bilhão de serviços e vc não ta usando nem 10%. kkkkkk
Vc sabe quais são todos estes serviços? Sabe quais vc ta usando? Quais vc não esta usando?

sinceramente, não sei…
Vou verificar esses serviços, e ver o que não preciso e pode ser desabilitado
naum havia pensado nessa possibilidade…

I

O desempenho do Glassfish em Linux é bem melhor que no windows, então considere o uso do linux no servidor.

A

Massami,
O que o Fernando falou tem todo sentido. Como você usa EJB 3.1, pode escolher um profile diferente O Glassfish é o único (acredito eu) servidor de aplicação que tem todos os profiles. Um profile é um subconjunto de tecnologias JEE que você pode usar. Por exemplo, se você não quer EJB 3.1, você pode pegar o Web Profile (Servlet 3, JSF 2, JSP 2.2, EL 1.2, JSTL 1.2, JPA 2.0, enfim). Eu nunca lidei com isso, só li uma vez na Mundo Java. De qualquer forma, acho que vale a pena conferir.

M

Infelismente não posso fazer nada quanto a isso, politica da empresa… :frowning:

F

Oi Masami
Na maioria das empresas que eu chego como Consultor Java, 90% deles acabam usando EJB por “modismo” e não por necessidade. Este tipo de conversa é bem extensa e precisaríamos de uma thread.
Como vc justifica sua necessidade de EJB?

M

Fernando,
na verdade não existe uma real necessidade de EJB para a aplicação, estou utilizando somente para aprendizado da tecnologia…

Andre,
estou testando o Glassfish Web Profile, aparente ficou um pouco mais leve, vou fazer mais uns testes e assim que eu tiver tempo vou testar o OpenEJB.

F

Masami:
Fernando,
na verdade não existe uma real necessidade de EJB para a aplicação, estou utilizando somente para aprendizado da tecnologia…

Pois é…
Seria como vc tivesse reclamando que ta gastando muitos recursos para usar e manuziar um AVIÃO SUPER BOING, sendo que vc não precisava desse avião para viajar…quem sabe uma bicicleta ja resolvida seu problema :smiley:
t+

F

Postei errado…desculpe a todos.

M

FernandoFranzini:
Masami:
Fernando,
na verdade não existe uma real necessidade de EJB para a aplicação, estou utilizando somente para aprendizado da tecnologia…

Pois é…
Seria como vc tivesse reclamando que ta gastando muitos recursos para usar e manuziar um AVIÃO SUPER BOING, sendo que vc não precisava desse avião para viajar…quem sabe uma bicicleta ja resolvida seu problema :smiley:
t+


pois é, como disse, estou aprendendo… e as vezes a gente so consegue realmente aprender com os erros .

A

Não veja isso como um erro. Você aprendeu um pouco de EJB. Só aplicou ele num lugar (possivelmente) desnecessário.

E outra… Você pode usar o OpenEJB, como falei. Ele é BEM leve e fácil de usar. Tanto que hoje, se fosse pra fazer qualquer coisa cliente-servidor, eu não usaria RMI, que é Java Básico. Eu usuaria ou OpenEJB ou Spring. Apesar de serem mais apropriados pra sistemas ‘pesados’, facilitam muito a parte de comunicação. Além disso, ambos fornecem a possibilidade de usar Injeção de Dependências e Controle de Transações nativos do container.

F

Aproveitando o ótimo comentário do nosso amigo Andre Brito:
Eu uso JSF+Spring+JPA+SqlServer + Tomcat em 100% dos meus projetos…
O legal é que eu uso EJB, sem usar EJB!! kakak
Quero dizer, na minha arquitetura tenho uma camada facade sobre a domain model fazendo as mesmas coisas que o EJB faz, porem uso o Spring para adicionar os serviços(na medida que eu preciso).
Minha maior aplicações hoje conta com 5 mil clientes habilitados para usar o sistema hoje, com uma media de 1000 sessões por minuto, isso gastando 50% dos recursos do ambiente de produção - LINUX + Tomcatzinho com JVM devidamente configurada.
Muito simples, rápido, fácil e escalável.
Eu, como projetista de software gostaria muito de usar EJB…mas eu não realmente tive cenário para isso.
Eu admiro muito seu coragem de aprender e usar EJB Masami…muito bom mesmo…vc esta de parabéns!!!..
Mas MATAR FORMIGA COM CANHÃO resulta em muito mais problemas…
T+

M

falando em Spring, passei parte do fim de semana lendo sobre esse framework e estou com vontade de refazer/adaptar minha aplicação para usar ele.
Até encontrei alguns sistemas de exemplo (https://github.com/rponte/jsf-loja-project e https://github.com/lessandronp/AutoPecas) e um bom artigo na devmedia sobre o assunto para começar.
Assim, acho que paro de “MATAR FORMIGA COM CANHÃO”, como o fernando disse.

F

Seria uma boa Masami :smiley:
Mas eu te recomendo antes de tudo ler o Spring in Action e o POJO in Action. Ja tem ambos em português.
Tenha certeza que sua visão vai mudar…kkkkk
T+

R

Masami:
falando em Spring, passei parte do fim de semana lendo sobre esse framework e estou com vontade de refazer/adaptar minha aplicação para usar ele.
Até encontrei alguns sistemas de exemplo (https://github.com/rponte/jsf-loja-project e https://github.com/lessandronp/AutoPecas) e um bom artigo na devmedia sobre o assunto para começar.
Assim, acho que paro de “MATAR FORMIGA COM CANHÃO”, como o fernando disse.

De uma olhada nesse link,é bastante útil pra quem quer entender essa integração JSF+Spring+JPA:http://cagataycivici.wordpress.com/2007/09/10/using-spring-to-manage-jsf-beans/

E abandone EJB,OpenEJB.WhateverEJB, esse troço é uma solução procurando desesperadamente por um problema.

Criado 1 de junho de 2011
Ultima resposta 6 de jun. de 2011
Respostas 20
Participantes 5