sábado, 22 de junho de 2013

JSF 2.2

E aí pessoal..

Hoje estava em um cliente que tem uma aplicação com JSF 2.1 e EJB 3.1 rodando no JBoss AS 7.

Essa aplicação tem centenas de acessos simultâneos e estávamos com problemas de uso de memória e de performance.

Sei que JSF talvez não seja a tecnologia mais adequada para projetos como esse, mas não poderíamos mudar isso agora.

Nós migramos a aplicação de JSF 2.1 para JSF 2.2 e tivemos muitos ganhos! O consumo de memória diminuiu consideravelmente! O GC conseguiu rodar melhor e limpar o heap bem mais do que fazia no JSF 2.1! Não sei se foi apenas por consequência do melhor uso da memória, mas a performance aumentou muito também!

Tudo isso foi constatado pelos próprios usuários e também por testes com o JMeter e com análises utilizando o VisualVM.

Enfim, fica a dica pessoal, usem o JSF 2.2!

Para implantar ele no JBoss AS 7 foi bem tranquilo! Nós seguimos este tutorial: http://www.marcusschiesser.de/2013/01/how-to-use-jsf-2-2-with-jboss-7-1/

Só um porém.. alguns componentes na aplicação tinham update="@form" ou update="idDeUmForm" e isso parou de funcionar no JSF 2.2 :/

Não sei o motivo.. aqui eram poucos casos e resolvemos alterando o update para atualizar o componente que devia ser atualizado e não todo o form.

Ao invés de update="@form" usamos update="idDoComponenteDentroDoFormQueTinhaQueSerAtualizado" : )

Abraços!!
Adriano Schmidt

2 comentários:

  1. Fiz este processo mas comecei e ter problemas com o CDI, parece que o JSF 2.2 não roda totalmente compatível no jBoss AS 7. Tem alguma ideia sobre o que fazer?
    Eu poderia copiar algumas coisas do wildfly, mas daí viraria muita gambiarra.

    Erro:

    [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-7) Critical error during deployment: : org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.faces.flow.builder.FlowDefinition
    at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:586) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at com.sun.faces.application.ApplicationAssociate$PostConstructApplicationListener.loadFlows(ApplicationAssociate.java:323) [jsf-impl-2.2.0.jar:2.2.0]
    at com.sun.faces.application.ApplicationAssociate$PostConstructApplicationListener.processEvent(ApplicationAssociate.java:303) [jsf-impl-2.2.0.jar:2.2.0]
    at javax.faces.event.SystemEvent.processListener(SystemEvent.java:108) [jsf-api-2.2.0.jar:2.2]
    at com.sun.faces.application.ApplicationImpl.processListeners(ApplicationImpl.java:2187) [jsf-impl-2.2.0.jar:2.2.0]
    at com.sun.faces.application.ApplicationImpl.invokeListenersFor(ApplicationImpl.java:2163) [jsf-impl-2.2.0.jar:2.2.0]
    at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:296) [jsf-impl-2.2.0.jar:2.2.0]
    at org.jboss.as.weld.webtier.jsf.ForwardingApplication.publishEvent(ForwardingApplication.java:288) [jboss-as-weld-7.1.1.Final.jar:7.1.1.Final]
    at com.sun.faces.config.ConfigManager.publishPostConfigEvent(ConfigManager.java:691) [jsf-impl-2.2.0.jar:2.2.0]
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:253) [jsf-impl-2.2.0.jar:2.2.0]
    at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3392) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3850) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) [classes.jar:1.6.0_51]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) [classes.jar:1.6.0_51]
    at java.lang.Thread.run(Thread.java:680) [classes.jar:1.6.0_51]

    ResponderExcluir
    Respostas
    1. Oi kipple, caso você queira usar algumas funcionalidades novas do JSF 2.2 como o FlowScope você teria que usar o Jboss AS8/WildFly... ou fazer o que você falou: puxar o subsystem web do AS8 para o AS7 e fazer coisas assim..

      Mas avalie a necessidade de usar o FlowScope.. provavelmente tirando isso tudo vai funcionar perfeitamente!

      Excluir