Qual implementação JSF você usa?

Essa é uma frequente pergunta que venho recebendo de amigos e lendo na lista de discussão do JavaSF, eu a ouço (leio) de várias formas, porém a mais comum é algo do tipo:

“Qual a implementação JSF você usa? Richfaces? Tomahawk? MyFaces? IceFaces? Qual?”

É notório que entre iniciantes há uma confusão entre o que é uma implementação JSF e um conjunto de componentes JSF. Quando se começa a ler sobre JavaServer Faces você se perde pela enorme quantidade de componentes espalhados pela web, e logo confunde-se em achar que todos são implementações JSF, é aí que está o engano!

O que é necessário entender é que JSF é uma especificação criada pelo pessoal da JCP e que existem várias implementações da mesma.
Em contra partida um conjunto de componentes é um pacote com diversos componentes visuais ou não, que em sua maioria são componentes mais complexos e ricos, visualmente falando, que rodam em cima de alguma implementação JSF, estes componentes são desenvolvidos por várias empresas, existem de vários tipos e sabores, de utilidade especifica e outros de utilidade gerais, alguns são open source e outros são proprietários.

Implementações JSF

Assim como qualquer outra especificação como JPA, EJB3, JSP etc, é de se esperar que cada fabricante ou big player tenha a sua própria implementação da especificação JSF, cada fabricante implementa como bem quiser, alguns fabricantes afirmam que sua versão possui menos bugs, ou é mais rápida, ou possui menos dependências, entre outros detalhes.. no final sabemos que podemos trocar de fabricante (implementação) que nossa aplicação deverá rodar do mesmo jeito (ao menos em teoria, rss). Hoje já encontramos várias implementações do JSF, entre elas nós podemos destacar:

  • Mojarra que é a implementação da SUN (GlassFish), também (mais) conhecida como JSF RI.
  • Myfaces como a implementação open source da Apache
  • ADF Faces da Oracle
  • A implementação da BEA (já vem embutido WebLogic)
  • A implementação da IBM (já vem embutido WebSphere)
  • Backbase
  • NetAdvantage

Como podem ver existem várias implementações e com certeza devem existir ainda mais, porém a implementação mais utilizada hoje em dia para JSF 1.2 é sem dúvida a Mojarra. Para se ter idéia o pessoal da JBoss por exemplo que não possui sua própria implementação JSF 1.2 utilizam a versão Mojarra no seu servidor de aplicações.

É interessante notar que alguns fabricantes além de lançarem sua própria implementação JSF eles também desenvolvem o seu próprio conjunto de componentes para distribuírem ou venderem juntamente com a implementação, um exemplo disso é o ADF Faces, o Backbase e o NetAdvantage. Se não me engano a IBM e a BEA também possuem seus próprios conjuntos de componentes.

Conjuntos de componentes JSF

As implementações JSF por si só nos fornecem apenas componentes básicos e simples, que para a maioria dos sistemas corporativos não são suficientes. Logo sempre há a necessidade de inserirmos algum conjunto de componentes em nossos projetos, seja pela quantidade e/ou qualidade dos componentes, por serem 100% AJAX, ou simplesmente para não perdermos tempo reinventando a roda e implementando componentes já existentes e testados.

Estes conjuntos de componentes são essenciais para o desenvolvimento dos sistemas, sem eles seria muito mais difícil desenvolver aplicações com uma interface rica para o usuário. Depois do lançamento do JSF 1.2 juntamente com a especificação JEE 5.0, o número de componentes e conjuntos de componentes cresceram absurdamente, você se perde e entra em dúvidas ao tentar decidir qual conjunto de componentes utilizar no seu novo projeto.

A quantidade de componentes é tão grande e tão rica que sempre acabamos fazendo um “mix” destes componentes para obtermos uma GUI mais rica. Como todos estes componentes seguem a especificação JSF é de se esperar -ao menos em teoria- que eles funcionem juntos sem maiores problemas.

Listar todos os conjuntos de componentes JSF e falar um pouco de cada aqui seria complicado, este post iria ficar maior do que o necessário, então para quem deseja conhecer a maioria dos componentes pode ir em JSF Matrix , lá vocês encontraram uma lista (matriz) com os conjuntos de componentes mais conhecidos, com detalhes de cada um e um link para a homepage de cada.

Respondendo a pergunta..

Depende. Cada projeto necessita de certos componentes, algumas vezes um único conjunto de componentes resolve, outras vezes é necessário fazer um “mix” para obter a GUI desejada.

Mas assim como a maioria dos desenvolvedores eu tenho as minhas preferências, e sempre que posso tento usá-las. Minhas preferências são:

Mojarra + JBoss Richfaces + MyFaces Tomahawk/SandBox

Acredito que com este “mix” eu consiga desenvolver uma excelente GUI na maioria dos casos. Caso necessite de mais algum componente que não seja fornecido por este “combo” acima eu vou em busca desse bendito componente e insiro no projeto.

Enfim, o importante é desenvolver a GUI desejada e que certamente agrade ao cliente, não importando qual conjunto de componentes e/ou implementação JSF você necessite utilizar.

That’s all folks!

24 thoughts on “Qual implementação JSF você usa?

  1. Meus parabéns Rafael, mais um post de qualidade, valeu… A propósito eu uso: JBoss Richfaces(Ajax4J) + MyFaces Tomahawk/SandBox vc já sabia.

  2. Ponte se eu tivesse lido um texto como esse quando iniciei meus estudos JSF teria me livrado de grandes dores de cabeça…. até começar a entender tantos nomes especificações e componentes srsrs….

    Quanto aos componentes, bom eu estou estudando JBoss Seam, e confesso que estou entusiasmado com o framework

    Meu conjunto eh Mojara (enquanto não sai o WebBeans)+ JBoss Richfaces – Ajax4jsf – Seam e se precisar o chartCreator.

    Parabéns pelo excelente post!

    Abraço!

  3. Nossa! Eu, como iniciante no mundo JSF, não poderia ter encontrado melhor lugar pra começar! Perfeito! Se o mundo do desenvolvimento fosse uma composição de posts desse tipo ninguém iria perder tanto tempo pesquisando!

  4. Parabéns brother mais um post com muitissíma qualidade como todos os outros. Estou aprendendo cada vez mais com seus post…valew…

  5. Uma sugestão para um outro post seria fazer uma apanhado de componentes interessantes, com screenshot e descrição, talvez deixando aberto para contribuições das pessoas.

  6. Rafael, parabéns pelo ótimo post.

    Estou começando a estudar JSF e fiquei apenas com uma dúvida neste teu post.

    O JBoss RichFaces não é uma implementação da especificação do JSF?

    Se for, então eu não entendi o que vc quis dizer no trecho abaixo:

    “…Para se ter idéia o pessoal da JBoss por exemplo que não possui sua própria implementação JSF 1.2 …”

    Valeu e parabéns pelo blog

  7. Oi Marcos,

    Obrigado!

    Sim, Richfaces não é uma implementação da especificação. A JBoss não possui sua própria implementação, ela se utiliza do Mojarra (implementação RI da Sun), contudo a JBoss tem seu próprio conjunto de componentes, no caso é o Richfaces.

    Lendo o restante do paragrafo eu comentei isso:
    “Para se ter idéia o pessoal da JBoss por exemplo que não possui sua própria implementação JSF 1.2 utilizam a versão Mojarra no seu servidor de aplicações.”

    Valeu.

  8. Rafel,
    Parabéns por esse post e por todo seu trabalho.
    Até hoje não encontrei nenhuma informação tão rica e completa como as postadas por você. Seus post´s tem me ajudado muito. Obrigado!

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>